Skip to content

feat(smartlog): Support for rendering a sparse smartlog #619

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Nov 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions git-branchless-lib/src/core/dag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ pub struct Dag {
visible_heads: OnceCell<CommitSet>,
visible_commits: OnceCell<CommitSet>,
draft_commits: OnceCell<CommitSet>,
default_smartlog_commits: OnceCell<CommitSet>,
}

impl Dag {
Expand Down Expand Up @@ -198,7 +197,6 @@ impl Dag {
visible_heads: Default::default(),
visible_commits: Default::default(),
draft_commits: Default::default(),
default_smartlog_commits: Default::default(),
})
}

Expand Down Expand Up @@ -434,24 +432,6 @@ impl Dag {
})
}

/// Determine the default set of commits that is shown in the smartlog when
/// no revset is passed.
pub fn query_default_smartlog_commits(&self) -> eyre::Result<&CommitSet> {
self.default_smartlog_commits.get_or_try_init(|| {
let public_commits = self.query_public_commits_slow()?;
let active_commits = self.observed_commits.clone();
let active_heads = self.query().heads(active_commits)?;
let active_heads = active_heads.difference(public_commits);

let active_heads = active_heads
.union(&self.head_commit)
.union(&self.branch_commits)
.union(&self.main_branch_commit);

Ok(active_heads)
})
}

/// Given a CommitSet, return a list of CommitSets, each representing a
/// connected component of the set.
///
Expand Down
17 changes: 6 additions & 11 deletions git-branchless/src/commands/bug_report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use lib::core::repo_ext::{RepoExt, RepoReferencesSnapshot};
use lib::util::ExitCode;

use crate::commands::smartlog::{make_smartlog_graph, render_graph};
use crate::revset::resolve_default_smartlog_commits;
use lib::core::dag::Dag;
use lib::core::effects::Effects;
use lib::core::eventlog::{Event, EventCursor, EventLogDb, EventReplayer};
Expand Down Expand Up @@ -95,7 +96,7 @@ fn describe_event_cursor(
repo: &Repo,
event_log_db: &EventLogDb,
event_replayer: &EventReplayer,
dag: &Dag,
dag: &mut Dag,
head_info: &ResolvedReferenceInfo,
references_snapshot: &RepoReferencesSnapshot,
redactor: &Redactor,
Expand Down Expand Up @@ -130,14 +131,8 @@ fn describe_event_cursor(

let glyphs = Glyphs::text();
let effects = Effects::new(glyphs.clone());
let graph = make_smartlog_graph(
&effects,
repo,
dag,
event_replayer,
event_cursor,
dag.query_default_smartlog_commits()?,
)?;
let commits = resolve_default_smartlog_commits(&effects, repo, dag)?;
let graph = make_smartlog_graph(&effects, repo, dag, event_replayer, event_cursor, &commits)?;
let graph_lines = render_graph(
&effects,
repo,
Expand Down Expand Up @@ -176,7 +171,7 @@ fn collect_events(effects: &Effects, git_run_info: &GitRunInfo) -> eyre::Result<
let event_log_db = EventLogDb::new(&conn)?;
let event_replayer = EventReplayer::from_event_log_db(effects, &repo, &event_log_db)?;
let event_cursor = event_replayer.make_default_cursor();
let dag = Dag::open_and_sync(
let mut dag = Dag::open_and_sync(
effects,
&repo,
&event_replayer,
Expand All @@ -199,7 +194,7 @@ fn collect_events(effects: &Effects, git_run_info: &GitRunInfo) -> eyre::Result<
&repo,
&event_log_db,
&event_replayer,
&dag,
&mut dag,
&head_info,
&references_snapshot,
&redactor,
Expand Down
3 changes: 2 additions & 1 deletion git-branchless/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ use tracing_subscriber::EnvFilter;
use crate::opts::Command;
use crate::opts::Opts;
use crate::opts::ResolveRevsetOptions;
use crate::opts::Revset;
use crate::opts::SnapshotSubcommand;
use crate::opts::WrappedCommand;
use crate::opts::{ColorSetting, TestSubcommand};
Expand Down Expand Up @@ -340,7 +341,7 @@ fn do_main_and_drop_locals() -> eyre::Result<i32> {
&git_run_info,
&SmartlogOptions {
event_id,
revset,
revset: revset.unwrap_or_else(Revset::default_smartlog_revset),
resolve_revset_options,
},
)?,
Expand Down
6 changes: 4 additions & 2 deletions git-branchless/src/commands/navigation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use tracing::{instrument, warn};

use crate::commands::smartlog::make_smartlog_graph;
use crate::opts::{SwitchOptions, TraverseCommitsOptions};
use crate::revset::resolve_default_smartlog_commits;
use crate::tui::prompt_select_commit;
use lib::core::config::get_next_interactive;
use lib::core::dag::{sorted_commit_set, CommitSet, Dag};
Expand Down Expand Up @@ -542,21 +543,22 @@ pub fn switch(
let event_tx_id = event_log_db.make_transaction_id(now, "checkout")?;
let event_replayer = EventReplayer::from_event_log_db(effects, &repo, &event_log_db)?;
let event_cursor = event_replayer.make_default_cursor();
let dag = Dag::open_and_sync(
let mut dag = Dag::open_and_sync(
effects,
&repo,
&event_replayer,
event_cursor,
&references_snapshot,
)?;

let commits = resolve_default_smartlog_commits(effects, &repo, &mut dag)?;
let graph = make_smartlog_graph(
effects,
&repo,
&dag,
&event_replayer,
event_cursor,
dag.query_default_smartlog_commits()?,
&commits,
)?;

let initial_query = get_initial_query(switch_options);
Expand Down
Loading