Got Zed compiling again 🥰

This commit is contained in:
Mikayla Maki 2022-11-04 10:34:28 -07:00
parent d419f27d75
commit 6b214acbc4
6 changed files with 64 additions and 70 deletions

View file

@ -1,7 +1,5 @@
use std::{fs::File, path::Path};
use db::{pane::SerializedDockPane, DockAnchor};
const TEST_FILE: &'static str = "test-db.db";
fn main() -> anyhow::Result<()> {
@ -14,31 +12,31 @@ fn main() -> anyhow::Result<()> {
let f = File::create(file)?;
drop(f);
let workspace_1 = db.workspace_for_roots(&["/tmp"]);
let workspace_2 = db.workspace_for_roots(&["/tmp", "/tmp2"]);
let workspace_3 = db.workspace_for_roots(&["/tmp3", "/tmp2"]);
// let workspace_1 = db.workspace_for_roots(&["/tmp"]);
// let workspace_2 = db.workspace_for_roots(&["/tmp", "/tmp2"]);
// let workspace_3 = db.workspace_for_roots(&["/tmp3", "/tmp2"]);
db.save_dock_pane(
&workspace_1.workspace_id,
&SerializedDockPane {
anchor_position: DockAnchor::Expanded,
visible: true,
},
);
db.save_dock_pane(
&workspace_2.workspace_id,
&SerializedDockPane {
anchor_position: DockAnchor::Bottom,
visible: true,
},
);
db.save_dock_pane(
&workspace_3.workspace_id,
&SerializedDockPane {
anchor_position: DockAnchor::Right,
visible: false,
},
);
// db.save_dock_pane(
// &workspace_1.workspace_id,
// &SerializedDockPane {
// anchor_position: DockAnchor::Expanded,
// visible: true,
// },
// );
// db.save_dock_pane(
// &workspace_2.workspace_id,
// &SerializedDockPane {
// anchor_position: DockAnchor::Bottom,
// visible: true,
// },
// );
// db.save_dock_pane(
// &workspace_3.workspace_id,
// &SerializedDockPane {
// anchor_position: DockAnchor::Right,
// visible: false,
// },
// );
db.write_to(file).ok();

View file

@ -2,7 +2,7 @@ mod items;
pub mod model;
pub(crate) mod pane;
use anyhow::{Context, Result};
use anyhow::Context;
use util::{iife, ResultExt};
use std::path::{Path, PathBuf};
@ -10,9 +10,6 @@ use std::path::{Path, PathBuf};
use indoc::indoc;
use sqlez::migrations::Migration;
// If you need to debug the worktree root code, change 'BLOB' here to 'TEXT' for easier debugging
// you might want to update some of the parsing code as well, I've left the variations in but commented
// out. This will panic if run on an existing db that has already been migrated
pub(crate) const WORKSPACES_MIGRATION: Migration = Migration::new(
"workspace",
&[indoc! {"
@ -39,7 +36,9 @@ impl Db {
) -> Option<SerializedWorkspace> {
let workspace_id: WorkspaceId = worktree_roots.into();
let (_, dock_anchor, dock_visible) = iife!({
// Note that we re-assign the workspace_id here in case it's empty
// and we've grabbed the most recent workspace
let (workspace_id, dock_anchor, dock_visible) = iife!({
if worktree_roots.len() == 0 {
self.prepare(indoc! {"
SELECT workspace_id, dock_anchor, dock_visible
@ -51,7 +50,7 @@ impl Db {
SELECT workspace_id, dock_anchor, dock_visible
FROM workspaces
WHERE workspace_id = ?"})?
.with_bindings(workspace_id)?
.with_bindings(&workspace_id)?
.maybe_row::<WorkspaceRow>()
}
})
@ -59,8 +58,8 @@ impl Db {
.flatten()?;
Some(SerializedWorkspace {
dock_pane: self.get_dock_pane(workspace_id)?,
center_group: self.get_center_group(workspace_id),
dock_pane: self.get_dock_pane(&workspace_id)?,
center_group: self.get_center_group(&workspace_id),
dock_anchor,
dock_visible,
})
@ -82,12 +81,12 @@ impl Db {
self.prepare(indoc!{"
DELETE FROM workspaces WHERE workspace_id = ?1;
INSERT INTO workspaces(workspace_id, dock_anchor, dock_visible) VALUES (?1, ?, ?)"})?
.with_bindings((workspace_id, workspace.dock_anchor, workspace.dock_visible))?
.with_bindings((&workspace_id, workspace.dock_anchor, workspace.dock_visible))?
.exec()?;
// Save center pane group and dock pane
Self::save_center_group(workspace_id, &workspace.center_group, conn)?;
Self::save_dock_pane(workspace_id, &workspace.dock_pane, conn)?;
Self::save_center_group(&workspace_id, &workspace.center_group, conn)?;
Self::save_dock_pane(&workspace_id, &workspace.dock_pane, conn)?;
Ok(())
})
@ -98,11 +97,12 @@ impl Db {
/// Returns the previous workspace ids sorted by last modified along with their opened worktree roots
pub fn recent_workspaces(&self, limit: usize) -> Vec<Vec<PathBuf>> {
iife!({
self.prepare("SELECT workspace_id FROM workspaces ORDER BY timestamp DESC LIMIT ?")?
Ok::<_, anyhow::Error>(self.prepare("SELECT workspace_id FROM workspaces ORDER BY timestamp DESC LIMIT ?")?
.with_bindings(limit)?
.rows::<WorkspaceId>()?
.into_iter().map(|id| id.0)
.collect()
.collect::<Vec<Vec<PathBuf>>>())
}).log_err().unwrap_or_default()
}
}

View file

@ -9,7 +9,7 @@ use sqlez::{
};
#[derive(Debug, PartialEq, Eq, Clone)]
pub(crate) struct WorkspaceId(Vec<PathBuf>);
pub(crate) struct WorkspaceId(pub(crate) Vec<PathBuf>);
impl<P: AsRef<Path>, T: IntoIterator<Item = P>> From<T> for WorkspaceId {
fn from(iterator: T) -> Self {
@ -22,7 +22,7 @@ impl<P: AsRef<Path>, T: IntoIterator<Item = P>> From<T> for WorkspaceId {
}
}
impl Bind for WorkspaceId {
impl Bind for &WorkspaceId {
fn bind(&self, statement: &Statement, start_index: i32) -> Result<i32> {
bincode::serialize(&self.0)
.expect("Bincode serialization of paths should not fail")
@ -85,13 +85,16 @@ pub struct SerializedWorkspace {
#[derive(Debug, PartialEq, Eq)]
pub struct SerializedPaneGroup {
axis: Axis,
children: Vec<PaneGroupChild>,
children: Vec<SerializedPaneGroup>,
}
#[derive(Debug)]
pub struct SerializedPane {
children: Vec<SerializedItem>,
_children: Vec<SerializedItem>,
}
#[derive(Debug)]
pub enum SerializedItemKind {}
#[derive(Debug)]
pub enum SerializedItem {}

View file

@ -1,10 +1,11 @@
use gpui::Axis;
use anyhow::Result;
use indoc::indoc;
use sqlez::{connection::Connection, migrations::Migration};
use util::{iife, ResultExt};
use crate::model::SerializedPane;
use super::{
model::{PaneGroupId, PaneId, SerializedDockPane, SerializedPaneGroup, WorkspaceId},
model::{SerializedPaneGroup, WorkspaceId},
Db,
};
@ -44,11 +45,11 @@ pub(crate) const PANE_MIGRATIONS: Migration = Migration::new(
);
impl Db {
pub(crate) fn get_center_group(&self, _workspace: WorkspaceId) -> SerializedPaneGroup {
pub(crate) fn get_center_group(&self, _workspace: &WorkspaceId) -> SerializedPaneGroup {
unimplemented!()
}
pub fn get_pane_group(&self, _pane_group_id: PaneGroupId) -> SerializedPaneGroup {
pub(crate) fn _get_pane_group(&self, _workspace: &WorkspaceId) -> SerializedPaneGroup {
unimplemented!()
// let axis = self.get_pane_group_axis(pane_group_id);
// let mut children: Vec<(usize, PaneGroupChild)> = Vec::new();
@ -91,31 +92,22 @@ impl Db {
_workspace: &WorkspaceId,
_center_pane_group: &SerializedPaneGroup,
_connection: &Connection,
) {
) -> Result<()> {
// Delete the center pane group for this workspace and any of its children
// Generate new pane group IDs as we go through
// insert them
Ok(())
}
pub fn _get_pane(&self, _pane_id: PaneId) -> SerializedPane {
unimplemented!();
}
pub(crate) fn get_dock_pane(&self, workspace: WorkspaceId) -> Option<SerializedDockPane> {
iife!({
self.prepare("SELECT anchor_position, visible FROM dock_panes WHERE workspace_id = ?")?
.with_bindings(workspace)?
.maybe_row::<SerializedDockPane>()
})
.log_err()
.flatten()
pub(crate) fn get_dock_pane(&self, _workspace: &WorkspaceId) -> Option<SerializedPane> {
unimplemented!()
}
pub(crate) fn save_dock_pane(
workspace: &WorkspaceId,
dock_pane: &SerializedDockPane,
connection: &Connection,
) {
_workspace: &WorkspaceId,
_dock_pane: &SerializedPane,
_connection: &Connection,
) -> Result<()> {
// iife!({
// self.prepare(
// "INSERT INTO dock_panes (workspace_id, anchor_position, visible) VALUES (?, ?, ?);",
@ -124,6 +116,7 @@ impl Db {
// .insert()
// })
// .log_err();
Ok(())
}
}

View file

@ -1,5 +1,5 @@
use std::{
ffi::{CString, OsStr},
ffi::OsStr,
os::unix::prelude::OsStrExt,
path::{Path, PathBuf},
};

View file

@ -15,7 +15,7 @@ use anyhow::{anyhow, Context, Result};
use call::ActiveCall;
use client::{proto, Client, PeerId, TypedEnvelope, UserStore};
use collections::{hash_map, HashMap, HashSet};
use db::{Db, SerializedWorkspace, WorkspaceId};
use db::{model::SerializedWorkspace, Db};
use dock::{DefaultItemFactory, Dock, ToggleDockButton};
use drag_and_drop::DragAndDrop;
use fs::{self, Fs};
@ -1073,7 +1073,7 @@ pub enum Event {
pub struct Workspace {
weak_self: WeakViewHandle<Self>,
_db_id: WorkspaceId,
// _db_id: WorkspaceId,
client: Arc<Client>,
user_store: ModelHandle<client::UserStore>,
remote_entity_subscription: Option<client::Subscription>,
@ -1120,7 +1120,7 @@ enum FollowerItem {
impl Workspace {
pub fn new(
serialized_workspace: SerializedWorkspace,
_serialized_workspace: Option<SerializedWorkspace>,
project: ModelHandle<Project>,
dock_default_factory: DefaultItemFactory,
cx: &mut ViewContext<Self>,
@ -1217,7 +1217,7 @@ impl Workspace {
let mut this = Workspace {
modal: None,
weak_self: weak_handle,
_db_id: serialized_workspace.workspace_id,
// _db_id: serialized_workspace.workspace_id,
center: PaneGroup::new(center_pane.clone()),
dock,
// When removing an item, the last element remaining in this array