@@ -199,7 +199,12 @@ fn fn_heads(ctx: &mut Context, name: &str, args: &[Expr], _: &Option<&CommitSet>
199199}
200200
201201#[ instrument]
202- fn fn_branches ( ctx : & mut Context , name : & str , args : & [ Expr ] , _: & Option < & CommitSet > ) -> EvalResult {
202+ fn fn_branches (
203+ ctx : & mut Context ,
204+ name : & str ,
205+ args : & [ Expr ] ,
206+ commitset_hint : & Option < & CommitSet > ,
207+ ) -> EvalResult {
203208 let pattern = match eval0_or_1_pattern ( ctx, name, args) ? {
204209 Some ( pattern) => pattern,
205210 None => return Ok ( ctx. dag . branch_commits . clone ( ) ) ,
@@ -212,7 +217,10 @@ fn fn_branches(ctx: &mut Context, name: &str, args: &[Expr], _: &Option<&CommitS
212217 . map_err ( EvalError :: OtherError ) ?
213218 . branch_oid_to_names ;
214219
215- let commitset_hint = ctx. dag . branch_commits . clone ( ) ;
220+ let commitset_hint = match commitset_hint {
221+ Some ( hint) => hint. intersection ( & ctx. dag . branch_commits ) ,
222+ None => ctx. dag . branch_commits . clone ( ) ,
223+ } ;
216224 let branch_commits = make_pattern_matcher (
217225 ctx,
218226 name,
@@ -362,7 +370,12 @@ fn make_pattern_matcher(
362370}
363371
364372#[ instrument]
365- fn fn_message ( ctx : & mut Context , name : & str , args : & [ Expr ] , _: & Option < & CommitSet > ) -> EvalResult {
373+ fn fn_message (
374+ ctx : & mut Context ,
375+ name : & str ,
376+ args : & [ Expr ] ,
377+ commits_to_match : & Option < & CommitSet > ,
378+ ) -> EvalResult {
366379 let pattern = eval1_pattern ( ctx, name, args) ?;
367380 make_pattern_matcher (
368381 ctx,
@@ -384,7 +397,7 @@ fn fn_message(ctx: &mut Context, name: &str, args: &[Expr], _: &Option<&CommitSe
384397 } ;
385398 Ok ( pattern. matches_text ( message) )
386399 } ) ,
387- & None ,
400+ commits_to_match ,
388401 )
389402}
390403
@@ -393,7 +406,7 @@ fn fn_path_changed(
393406 ctx : & mut Context ,
394407 name : & str ,
395408 args : & [ Expr ] ,
396- _ : & Option < & CommitSet > ,
409+ commits_to_match : & Option < & CommitSet > ,
397410) -> EvalResult {
398411 let pattern = eval1_pattern ( ctx, name, args) ?;
399412 make_pattern_matcher (
@@ -420,7 +433,7 @@ fn fn_path_changed(
420433 } ) ;
421434 Ok ( result)
422435 } ) ,
423- & None ,
436+ commits_to_match ,
424437 )
425438}
426439
@@ -429,7 +442,7 @@ fn fn_author_name(
429442 ctx : & mut Context ,
430443 name : & str ,
431444 args : & [ Expr ] ,
432- _ : & Option < & CommitSet > ,
445+ commits_to_match : & Option < & CommitSet > ,
433446) -> EvalResult {
434447 let pattern = eval1_pattern ( ctx, name, args) ?;
435448 make_pattern_matcher (
@@ -442,7 +455,7 @@ fn fn_author_name(
442455 None => Ok ( false ) ,
443456 } ,
444457 ) ,
445- & None ,
458+ commits_to_match ,
446459 )
447460}
448461
@@ -451,7 +464,7 @@ fn fn_author_email(
451464 ctx : & mut Context ,
452465 name : & str ,
453466 args : & [ Expr ] ,
454- _ : & Option < & CommitSet > ,
467+ commits_to_match : & Option < & CommitSet > ,
455468) -> EvalResult {
456469 let pattern = eval1_pattern ( ctx, name, args) ?;
457470 make_pattern_matcher (
@@ -464,7 +477,7 @@ fn fn_author_email(
464477 None => Ok ( false ) ,
465478 } ,
466479 ) ,
467- & None ,
480+ commits_to_match ,
468481 )
469482}
470483
@@ -473,7 +486,7 @@ fn fn_author_date(
473486 ctx : & mut Context ,
474487 name : & str ,
475488 args : & [ Expr ] ,
476- _ : & Option < & CommitSet > ,
489+ commits_to_match : & Option < & CommitSet > ,
477490) -> EvalResult {
478491 let pattern = eval1_pattern ( ctx, name, args) ?;
479492 make_pattern_matcher (
@@ -484,7 +497,7 @@ fn fn_author_date(
484497 let time = commit. get_author ( ) . get_time ( ) ;
485498 Ok ( pattern. matches_date ( & time) )
486499 } ) ,
487- & None ,
500+ commits_to_match ,
488501 )
489502}
490503
@@ -493,7 +506,7 @@ fn fn_committer_name(
493506 ctx : & mut Context ,
494507 name : & str ,
495508 args : & [ Expr ] ,
496- _ : & Option < & CommitSet > ,
509+ commits_to_match : & Option < & CommitSet > ,
497510) -> EvalResult {
498511 let pattern = eval1_pattern ( ctx, name, args) ?;
499512 make_pattern_matcher (
@@ -506,7 +519,7 @@ fn fn_committer_name(
506519 None => Ok ( false ) ,
507520 } ,
508521 ) ,
509- & None ,
522+ commits_to_match ,
510523 )
511524}
512525
@@ -515,7 +528,7 @@ fn fn_committer_email(
515528 ctx : & mut Context ,
516529 name : & str ,
517530 args : & [ Expr ] ,
518- _ : & Option < & CommitSet > ,
531+ commits_to_match : & Option < & CommitSet > ,
519532) -> EvalResult {
520533 let pattern = eval1_pattern ( ctx, name, args) ?;
521534 make_pattern_matcher (
@@ -528,7 +541,7 @@ fn fn_committer_email(
528541 None => Ok ( false ) ,
529542 } ,
530543 ) ,
531- & None ,
544+ commits_to_match ,
532545 )
533546}
534547
@@ -537,7 +550,7 @@ fn fn_committer_date(
537550 ctx : & mut Context ,
538551 name : & str ,
539552 args : & [ Expr ] ,
540- _ : & Option < & CommitSet > ,
553+ commits_to_match : & Option < & CommitSet > ,
541554) -> EvalResult {
542555 let pattern = eval1_pattern ( ctx, name, args) ?;
543556 make_pattern_matcher (
@@ -548,7 +561,7 @@ fn fn_committer_date(
548561 let time = commit. get_committer ( ) . get_time ( ) ;
549562 Ok ( pattern. matches_date ( & time) )
550563 } ) ,
551- & None ,
564+ commits_to_match ,
552565 )
553566}
554567
0 commit comments