Skip to content

Commit

Permalink
perf(dag): add #[instrument] to various revset evaluation functions
Browse files Browse the repository at this point in the history
  • Loading branch information
arxanas committed Nov 9, 2022
1 parent fbe7766 commit 6351be8
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
2 changes: 2 additions & 0 deletions git-branchless-lib/src/core/dag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,12 +397,14 @@ impl Dag {

/// Determine the set of obsolete commits. These commits have been rewritten
/// or explicitly hidden by the user.
#[instrument]
pub fn query_obsolete_commits(&self) -> CommitSet {
self.obsolete_commits.clone()
}

/// Determine the set of "draft" commits. The draft commits are all visible
/// commits which aren't public.
#[instrument]
pub fn query_draft_commits(&self) -> eyre::Result<&CommitSet> {
self.draft_commits.get_or_try_init(|| {
let visible_commits = self.query_visible_commits()?;
Expand Down
34 changes: 33 additions & 1 deletion git-branchless/src/revset/builtins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use lib::git::{Commit, MaybeZeroOid, NonZeroOid, Repo};
use std::borrow::Cow;
use std::collections::HashMap;
use std::convert::TryFrom;
use tracing::warn;
use tracing::{instrument, warn};

use eyre::Context as EyreContext;
use lazy_static::lazy_static;
Expand Down Expand Up @@ -60,6 +60,7 @@ lazy_static! {
};
}

#[instrument]
fn fn_all(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
Ok(ctx
Expand All @@ -69,36 +70,43 @@ fn fn_all(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
.clone())
}

#[instrument]
fn fn_none(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
Ok(CommitSet::empty())
}

#[instrument]
fn fn_union(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, rhs) = eval2(ctx, name, args)?;
Ok(lhs.union(&rhs))
}

#[instrument]
fn fn_intersection(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, rhs) = eval2(ctx, name, args)?;
Ok(lhs.intersection(&rhs))
}

#[instrument]
fn fn_difference(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, rhs) = eval2(ctx, name, args)?;
Ok(lhs.difference(&rhs))
}

#[instrument]
fn fn_only(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, rhs) = eval2(ctx, name, args)?;
Ok(ctx.dag.query().only(lhs, rhs)?)
}

#[instrument]
fn fn_range(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, rhs) = eval2(ctx, name, args)?;
Ok(ctx.dag.query().range(lhs, rhs)?)
}

#[instrument]
fn fn_not(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
let active_commits = ctx
Expand All @@ -108,41 +116,49 @@ fn fn_not(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
Ok(active_commits.difference(&expr))
}

#[instrument]
fn fn_ancestors(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().ancestors(expr)?)
}

#[instrument]
fn fn_descendants(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().descendants(expr)?)
}

#[instrument]
fn fn_parents(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().parents(expr)?)
}

#[instrument]
fn fn_children(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().children(expr)?)
}

#[instrument]
fn fn_roots(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().roots(expr)?)
}

#[instrument]
fn fn_heads(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let expr = eval1(ctx, name, args)?;
Ok(ctx.dag.query().heads(expr)?)
}

#[instrument]
fn fn_branches(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
Ok(ctx.dag.branch_commits.clone())
}

#[instrument]
fn fn_parents_nth(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, n) = eval_number_rhs(ctx, name, args)?;
let mut result = Vec::new();
Expand All @@ -164,6 +180,7 @@ fn fn_parents_nth(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
Ok(CommitSet::from_iter(result.into_iter()))
}

#[instrument]
fn fn_nthancestor(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, n) = eval_number_rhs(ctx, name, args)?;
let n: u64 = u64::try_from(n).unwrap();
Expand All @@ -184,11 +201,13 @@ fn fn_nthancestor(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
Ok(CommitSet::from_iter(result.into_iter()))
}

#[instrument]
fn fn_main(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
Ok(ctx.dag.main_branch_commit.clone())
}

#[instrument]
fn fn_public(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
let public_commits = ctx
Expand All @@ -198,6 +217,7 @@ fn fn_public(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
Ok(public_commits.clone())
}

#[instrument]
fn fn_draft(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
eval0(ctx, name, args)?;
let draft_commits = ctx
Expand All @@ -207,6 +227,7 @@ fn fn_draft(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
Ok(draft_commits.clone())
}

#[instrument]
fn fn_stack(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let arg = eval0_or_1(ctx, name, args)?.unwrap_or_else(|| ctx.dag.head_commit.clone());
let draft_commits = ctx
Expand Down Expand Up @@ -236,6 +257,7 @@ fn fn_stack(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {

type MatcherFn = dyn Fn(&Repo, &Commit) -> Result<bool, PatternError> + Sync + Send;

#[instrument(skip(f))]
fn make_pattern_matcher(
ctx: &mut Context,
name: &str,
Expand Down Expand Up @@ -265,6 +287,7 @@ fn make_pattern_matcher(
Ok(matcher)
}

#[instrument]
fn fn_message(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -290,6 +313,7 @@ fn fn_message(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
)
}

#[instrument]
fn fn_path_changed(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand Down Expand Up @@ -327,6 +351,7 @@ fn fn_path_changed(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
)
}

#[instrument]
fn fn_author_name(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -342,6 +367,7 @@ fn fn_author_name(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
)
}

#[instrument]
fn fn_author_email(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -357,6 +383,7 @@ fn fn_author_email(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
)
}

#[instrument]
fn fn_author_date(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -370,6 +397,7 @@ fn fn_author_date(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
)
}

#[instrument]
fn fn_committer_name(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -385,6 +413,7 @@ fn fn_committer_name(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult
)
}

#[instrument]
fn fn_committer_email(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -400,6 +429,7 @@ fn fn_committer_email(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResul
)
}

#[instrument]
fn fn_committer_date(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let pattern = eval1_pattern(ctx, name, args)?;
make_pattern_matcher(
Expand All @@ -413,6 +443,7 @@ fn fn_committer_date(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult
)
}

#[instrument]
fn fn_exactly(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let (lhs, expected_len) = eval_number_rhs(ctx, name, args)?;
let actual_len: usize = lhs
Expand All @@ -431,6 +462,7 @@ fn fn_exactly(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
}
}

#[instrument]
fn fn_current(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
let mut ctx = Context {
effects: ctx.effects,
Expand Down
4 changes: 4 additions & 0 deletions git-branchless/src/revset/eval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ fn eval_inner(ctx: &mut Context, expr: &Expr) -> EvalResult {
}
}

#[instrument]
pub(super) fn eval_name(ctx: &mut Context, name: &str) -> EvalResult {
if name == "." || name == "@" {
let head_info = ctx.repo.get_head_info()?;
Expand Down Expand Up @@ -187,6 +188,7 @@ pub(super) fn eval_name(ctx: &mut Context, name: &str) -> EvalResult {
Ok(commit_set)
}

#[instrument]
pub(super) fn eval_fn(ctx: &mut Context, name: &str, args: &[Expr]) -> EvalResult {
if let Some(function) = FUNCTIONS.get(name) {
return function(ctx, name, args);
Expand Down Expand Up @@ -273,6 +275,7 @@ pub(super) fn eval1(ctx: &mut Context, function_name: &str, args: &[Expr]) -> Ev
}
}

#[instrument]
pub(super) fn eval1_pattern(
_ctx: &mut Context,
function_name: &str,
Expand Down Expand Up @@ -314,6 +317,7 @@ pub(super) fn eval2(
}
}

#[instrument]
pub(super) fn eval_number_rhs(
ctx: &mut Context,
function_name: &str,
Expand Down

0 comments on commit 6351be8

Please sign in to comment.