Skip to content
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

RFC: remove SmartlogVariant #25

Closed
Closed
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
68 changes: 0 additions & 68 deletions git-branchless-lib/src/core/dag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ pub struct Dag {
public_commits: OnceCell<CommitSet>,
visible_commits: OnceCell<CommitSet>,
draft_commits: OnceCell<CommitSet>,
default_smartlog_commits: OnceCell<CommitSet>,
}

impl Dag {
Expand Down Expand Up @@ -196,7 +195,6 @@ impl Dag {
public_commits: Default::default(),
visible_commits: Default::default(),
draft_commits: Default::default(),
default_smartlog_commits: Default::default(),
})
}

Expand Down Expand Up @@ -296,28 +294,6 @@ impl Dag {
Ok(dag)
}

/// Get one of the merge-base OIDs for the given pair of OIDs. If there are
/// multiple possible merge-bases, one is arbitrarily returned.
#[instrument]
pub fn get_one_merge_base_oid(
&self,
effects: &Effects,
repo: &Repo,
lhs_oid: NonZeroOid,
rhs_oid: NonZeroOid,
) -> eyre::Result<Option<NonZeroOid>> {
let set = vec![CommitVertex::from(lhs_oid), CommitVertex::from(rhs_oid)];
let set = self
.inner
.sort(&CommitSet::from_static_names(set))
.wrap_err("Sorting DAG vertex set")?;
let vertex = self.inner.gca_one(set).wrap_err("Computing merge-base")?;
match vertex {
None => Ok(None),
Some(vertex) => Ok(Some(vertex.to_hex().parse()?)),
}
}

/// Get the parent OID for the given OID. Returns an error if the given OID
/// does not have exactly 1 parent.
#[instrument]
Expand Down Expand Up @@ -411,50 +387,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()?;
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)
})
}

/// Find a path from the provided head to its merge-base with the main
/// branch.
#[instrument]
pub fn find_path_to_main_branch(
&self,
effects: &Effects,
head: CommitSet,
) -> eyre::Result<Option<CommitSet>> {
// FIXME: this assumes that there is only one merge-base with the main branch.
let merge_base = {
let (_effects, _progress) = effects.start_operation(OperationType::GetMergeBase);
self.query().gca_one(self.main_branch_commit.union(&head))?
};
let merge_base = match merge_base {
Some(merge_base) => merge_base,
None => return Ok(None),
};

// FIXME: this assumes that there is only one path to the merge-base.
let path = {
let (_effects, _progress) = effects.start_operation(OperationType::FindPathToMergeBase);
self.query().range(CommitSet::from(merge_base), head)?
};
Ok(Some(path))
}

/// 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
8 changes: 5 additions & 3 deletions git-branchless/src/commands/move.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::convert::TryFrom;
use std::fmt::Write;
use std::time::SystemTime;

use eden_dag::DagAlgorithm;
use eden_dag::{DagAlgorithm, VertexName};
use lib::core::repo_ext::RepoExt;
use lib::util::ExitCode;
use rayon::ThreadPoolBuilder;
Expand All @@ -32,7 +32,7 @@ use lib::git::{GitRunInfo, NonZeroOid, Repo};
#[instrument]
fn resolve_base_commit(
dag: &Dag,
merge_base_oid: Option<NonZeroOid>,
merge_base_oid: Option<VertexName>,
oid: NonZeroOid,
) -> eyre::Result<NonZeroOid> {
let bases = match merge_base_oid {
Expand Down Expand Up @@ -207,7 +207,9 @@ pub fn r#move(
let base_oids = {
let mut result = Vec::new();
for base_oid in commit_set_to_vec(&base_oids)? {
let merge_base_oid = dag.get_one_merge_base_oid(effects, &repo, base_oid, dest_oid)?;
let merge_base_oid = dag
.query()
.gca_one(vec![base_oid, dest_oid].into_iter().collect::<CommitSet>())?;
let base_commit_oid = resolve_base_commit(&dag, merge_base_oid, base_oid)?;
result.push(CommitSet::from(base_commit_oid))
}
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 @@ -544,21 +545,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