
- [x] Rewrite worktree git handling - [x] Fix tests - [x] Fix `test_propagate_statuses_for_repos_under_project` - [x] Replace `WorkDirectoryEntry` with `WorkDirectory` in `RepositoryEntry` - [x] Add a worktree event for capturing git status changes - [x] Confirm that the local repositories are correctly updating the new WorkDirectory field - [x] Implement the git statuses query as a join when pulling entries out of worktree - [x] Use this new join to implement the project panel and outline panel. - [x] Synchronize git statuses over the wire for collab and remote dev (use the existing `worktree_repository_statuses` table, adjust as needed) - [x] Only send changed statuses to collab Release Notes: - N/A --------- Co-authored-by: Cole Miller <cole@zed.dev> Co-authored-by: Mikayla <mikayla@zed.com> Co-authored-by: Nathan <nathan@zed.dev>
56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
use ::settings::Settings;
|
|
use git::repository::GitFileStatus;
|
|
use gpui::{actions, AppContext, Hsla};
|
|
use settings::GitPanelSettings;
|
|
use ui::{Color, Icon, IconName, IntoElement};
|
|
|
|
pub mod git_panel;
|
|
mod settings;
|
|
|
|
actions!(
|
|
git_ui,
|
|
[
|
|
StageAll,
|
|
UnstageAll,
|
|
DiscardAll,
|
|
CommitStagedChanges,
|
|
CommitAllChanges
|
|
]
|
|
);
|
|
|
|
pub fn init(cx: &mut AppContext) {
|
|
GitPanelSettings::register(cx);
|
|
}
|
|
|
|
const ADDED_COLOR: Hsla = Hsla {
|
|
h: 142. / 360.,
|
|
s: 0.68,
|
|
l: 0.45,
|
|
a: 1.0,
|
|
};
|
|
const MODIFIED_COLOR: Hsla = Hsla {
|
|
h: 48. / 360.,
|
|
s: 0.76,
|
|
l: 0.47,
|
|
a: 1.0,
|
|
};
|
|
const REMOVED_COLOR: Hsla = Hsla {
|
|
h: 355. / 360.,
|
|
s: 0.65,
|
|
l: 0.65,
|
|
a: 1.0,
|
|
};
|
|
|
|
// TODO: Add updated status colors to theme
|
|
pub fn git_status_icon(status: GitFileStatus) -> impl IntoElement {
|
|
match status {
|
|
GitFileStatus::Added | GitFileStatus::Untracked => {
|
|
Icon::new(IconName::SquarePlus).color(Color::Custom(ADDED_COLOR))
|
|
}
|
|
GitFileStatus::Modified => {
|
|
Icon::new(IconName::SquareDot).color(Color::Custom(MODIFIED_COLOR))
|
|
}
|
|
GitFileStatus::Conflict => Icon::new(IconName::Warning).color(Color::Custom(REMOVED_COLOR)),
|
|
GitFileStatus::Deleted => Icon::new(IconName::Warning).color(Color::Custom(REMOVED_COLOR)),
|
|
}
|
|
}
|