cli: indicate each workspace's checkout in log (#13)

It seems helpful to show in the log output which commit is checked out
in which workspace, so let's try that. I made it only show the
information if there are multiple checkouts for now.
This commit is contained in:
Martin von Zweigbergk 2022-02-02 17:00:05 -08:00
parent 5da9d600fd
commit bcece02084
4 changed files with 31 additions and 4 deletions

View File

@ -2549,6 +2549,7 @@ fn log_template(settings: &UserSettings) -> String {
" " label("timestamp", author.timestamp())
" " branches
" " tags
" " checkouts
if(is_git_head, label("git_head", " HEAD@git"))
if(divergent, label("divergent", " divergent"))
if(conflict, label("conflict", " conflict"))

View File

@ -88,6 +88,7 @@ fn config_colors(user_settings: &UserSettings) -> HashMap<String, String> {
result.insert(String::from("author timestamp"), String::from("cyan"));
result.insert(String::from("committer"), String::from("yellow"));
result.insert(String::from("committer timestamp"), String::from("cyan"));
result.insert(String::from("checkouts"), String::from("magenta"));
result.insert(String::from("branch"), String::from("magenta"));
result.insert(String::from("branches"), String::from("magenta"));
result.insert(String::from("tags"), String::from("magenta"));
@ -128,6 +129,10 @@ fn config_colors(user_settings: &UserSettings) -> HashMap<String, String> {
String::from("checkout committer timestamp"),
String::from("bright cyan"),
);
result.insert(
String::from("checkout checkouts"),
String::from("bright magenta"),
);
result.insert(
String::from("checkout branch"),
String::from("bright magenta"),

View File

@ -24,10 +24,10 @@ use pest::Parser;
use crate::formatter::PlainTextFormatter;
use crate::templater::{
AuthorProperty, BranchProperty, ChangeIdProperty, CommitIdKeyword, CommitterProperty,
ConditionalTemplate, ConflictProperty, ConstantTemplateProperty, CurrentCheckoutProperty,
DescriptionProperty, DivergentProperty, DynamicLabelTemplate, GitRefsProperty,
IsGitHeadProperty, LabelTemplate, ListTemplate, LiteralTemplate, OpenProperty,
AuthorProperty, BranchProperty, ChangeIdProperty, CheckoutsProperty, CommitIdKeyword,
CommitterProperty, ConditionalTemplate, ConflictProperty, ConstantTemplateProperty,
CurrentCheckoutProperty, DescriptionProperty, DivergentProperty, DynamicLabelTemplate,
GitRefsProperty, IsGitHeadProperty, LabelTemplate, ListTemplate, LiteralTemplate, OpenProperty,
StringPropertyTemplate, TagProperty, Template, TemplateFunction, TemplateProperty,
};
@ -243,6 +243,7 @@ fn parse_commit_keyword<'a>(
"author" => Property::Signature(Box::new(AuthorProperty)),
"committer" => Property::Signature(Box::new(CommitterProperty)),
"open" => Property::Boolean(Box::new(OpenProperty)),
"checkouts" => Property::String(Box::new(CheckoutsProperty { repo })),
"current_checkout" => Property::Boolean(Box::new(CurrentCheckoutProperty {
repo,
workspace_id: workspace_id.clone(),

View File

@ -205,6 +205,26 @@ impl<'r> TemplateProperty<Commit, bool> for OpenProperty {
}
}
pub struct CheckoutsProperty<'a> {
pub repo: RepoRef<'a>,
}
impl TemplateProperty<Commit, String> for CheckoutsProperty<'_> {
fn extract(&self, context: &Commit) -> String {
let checkouts = self.repo.view().checkouts();
if checkouts.len() <= 1 {
return "".to_string();
}
let mut names = vec![];
for (workspace_id, checkout_id) in checkouts.iter().sorted() {
if checkout_id == context.id() {
names.push(format!("{}@", workspace_id.as_str()));
}
}
names.join(" ")
}
}
pub struct CurrentCheckoutProperty<'a> {
pub repo: RepoRef<'a>,
pub workspace_id: WorkspaceId,