mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-24 17:28:40 +00:00
Got Zed compiling again 🥰
This commit is contained in:
parent
d419f27d75
commit
6b214acbc4
6 changed files with 64 additions and 70 deletions
|
@ -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();
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use std::{
|
||||
ffi::{CString, OsStr},
|
||||
ffi::OsStr,
|
||||
os::unix::prelude::OsStrExt,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue