@@ -221,8 +221,8 @@ fn lazy_refs2(op: &Op) -> Vec<String> {
221221 }
222222 Op :: Rev ( filters) => {
223223 let mut lr = lazy_refs2 ( & Op :: Compose ( filters. iter ( ) . map ( |( _, _, f) | * f) . collect ( ) ) ) ;
224- lr. extend ( filters. iter ( ) . filter_map ( |( _, x , _) | {
225- if let LazyRef :: Lazy ( s) = x {
224+ lr. extend ( filters. iter ( ) . filter_map ( |( _, nested , _) | {
225+ if let LazyRef :: Lazy ( s) = nested {
226226 Some ( s. to_owned ( ) )
227227 } else {
228228 None
@@ -234,8 +234,8 @@ fn lazy_refs2(op: &Op) -> Vec<String> {
234234 }
235235 Op :: Squash ( Some ( revs) ) => {
236236 let mut lr = vec ! [ ] ;
237- lr. extend ( revs. keys ( ) . filter_map ( |x | {
238- if let LazyRef :: Lazy ( s) = x {
237+ lr. extend ( revs. keys ( ) . filter_map ( |nested | {
238+ if let LazyRef :: Lazy ( s) = nested {
239239 Some ( s. to_owned ( ) )
240240 } else {
241241 None
@@ -466,55 +466,30 @@ fn get_rev_filter(
466466
467467 // First match wins - iterate in order
468468 for ( match_op, filter_tip_ref, startfilter) in filters. iter ( ) {
469+ let filter_tip = if let LazyRef :: Resolved ( filter_tip) = filter_tip_ref {
470+ filter_tip
471+ } else {
472+ return Err ( josh_error ( "unresolved lazy ref" ) ) ;
473+ } ;
474+ if match_op != & RevMatch :: Default && !transaction. repo ( ) . odb ( ) ?. exists ( * filter_tip) {
475+ return Err ( josh_error ( & format ! (
476+ "`:rev(...)` with nonexistent OID: {}" ,
477+ filter_tip
478+ ) ) ) ;
479+ }
469480 let matches = match match_op {
470481 RevMatch :: AncestorStrict => {
471482 // `<` - matches if commit is ancestor of tip AND commit != tip (strict)
472- let filter_tip = if let LazyRef :: Resolved ( filter_tip) = filter_tip_ref {
473- filter_tip
474- } else {
475- return Err ( josh_error ( "unresolved lazy ref" ) ) ;
476- } ;
477-
478- if !transaction. repo ( ) . odb ( ) ?. exists ( * filter_tip) {
479- return Err ( josh_error ( & format ! (
480- "`:rev(...)` with nonexistent OID: {}" ,
481- filter_tip
482- ) ) ) ;
483- }
484483
485484 is_ancestor_of ( transaction, commit_id, * filter_tip) ? && commit_id != * filter_tip
486485 }
487486 RevMatch :: AncestorInclusive => {
488487 // `<=` - matches if commit is ancestor of tip OR commit == tip (inclusive)
489- let filter_tip = if let LazyRef :: Resolved ( filter_tip) = filter_tip_ref {
490- filter_tip
491- } else {
492- return Err ( josh_error ( "unresolved lazy ref" ) ) ;
493- } ;
494-
495- if !transaction. repo ( ) . odb ( ) ?. exists ( * filter_tip) {
496- return Err ( josh_error ( & format ! (
497- "`:rev(...)` with nonexistent OID: {}" ,
498- filter_tip
499- ) ) ) ;
500- }
501488
502489 is_ancestor_of ( transaction, commit_id, * filter_tip) ?
503490 }
504491 RevMatch :: Equal => {
505492 // `==` - matches if commit == tip
506- let filter_tip = if let LazyRef :: Resolved ( filter_tip) = filter_tip_ref {
507- filter_tip
508- } else {
509- return Err ( josh_error ( "unresolved lazy ref" ) ) ;
510- } ;
511-
512- if !transaction. repo ( ) . odb ( ) ?. exists ( * filter_tip) {
513- return Err ( josh_error ( & format ! (
514- "`:rev(...)` with nonexistent OID: {}" ,
515- filter_tip
516- ) ) ) ;
517- }
518493
519494 commit_id == * filter_tip
520495 }
0 commit comments