File tree Expand file tree Collapse file tree 7 files changed +30
-4
lines changed
gix/revision/spec/from_bytes Expand file tree Collapse file tree 7 files changed +30
-4
lines changed Original file line number Diff line number Diff line change @@ -25,7 +25,13 @@ impl delegate::Navigate for Delegate<'_> {
2525
2626 let mut replacements = Replacements :: default ( ) ;
2727 let mut errors = Vec :: new ( ) ;
28- let objs = self . objs [ self . idx ] . as_mut ( ) ?;
28+ let objs = match self . objs [ self . idx ] . as_mut ( ) {
29+ Some ( objs) => objs,
30+ None => {
31+ self . err . push ( Error :: TraversalWithoutStartObject ) ;
32+ return None ;
33+ }
34+ } ;
2935 let repo = self . repo ;
3036
3137 for obj in objs. iter ( ) {
Original file line number Diff line number Diff line change @@ -105,7 +105,6 @@ impl Error {
105105 }
106106
107107 pub ( crate ) fn from_errors ( errors : Vec < Self > ) -> Self {
108- assert ! ( !errors. is_empty( ) ) ;
109108 match errors. len ( ) {
110109 0 => unreachable ! (
111110 "BUG: cannot create something from nothing, must have recorded some errors to call from_errors()"
Original file line number Diff line number Diff line change @@ -188,6 +188,8 @@ pub enum Error {
188188 } ,
189189 #[ error( transparent) ]
190190 Traverse ( #[ from] crate :: revision:: walk:: iter:: Error ) ,
191+ #[ error( "Tried to navigate the commit-graph without providing an anchor first" ) ]
192+ TraversalWithoutStartObject ,
191193 #[ error( transparent) ]
192194 Walk ( #[ from] crate :: revision:: walk:: Error ) ,
193195 #[ error( "Spec does not contain a single object id" ) ]
Original file line number Diff line number Diff line change 356356 baseline "@^{/!-B}" # negation from branch
357357 baseline ":file" # index lookup, default stage 0
358358 baseline ":1:file" # stage 1
359+ baseline ":5:file" # invalid stage
359360 baseline ":foo" # not found
360361 # parents
361362 baseline "a"
381382 baseline "b^3^2"
382383 baseline "a^^3^2"
383384
385+ # invalid
386+ baseline "^^"
387+ baseline "^^HEAD"
388+
384389 baseline "@{-1}"
385390 baseline "@{-2}"
386391 baseline "@{-3}"
Original file line number Diff line number Diff line change @@ -64,6 +64,12 @@ mod index {
6464 "Path \" file\" did not exist in index at stage 1. It does exist at stage 0. It exists on disk" ,
6565 ) ;
6666
67+ assert_eq ! (
68+ parse_spec( ":5:file" , & repo) . unwrap_err( ) . to_string( ) ,
69+ "Path \" 5:file\" did not exist in index at stage 0. It does not exist on disk" ,
70+ "invalid stage ids are interpreted as part of the filename"
71+ ) ;
72+
6773 assert_eq ! (
6874 parse_spec( ":foo" , & repo) . unwrap_err( ) . to_string( ) ,
6975 "Path \" foo\" did not exist in index at stage 0. It does not exist on disk" ,
Original file line number Diff line number Diff line change @@ -24,8 +24,16 @@ fn complex() -> crate::Result {
2424#[ test]
2525fn freestanding_negation_yields_descriptive_error ( ) -> crate :: Result {
2626 let repo = repo ( "complex_graph" ) ?;
27- let expected = "The rev-spec is malformed and misses a ref name" ;
28- assert_eq ! ( parse_spec( "^" , & repo) . unwrap_err( ) . to_string( ) , expected) ;
27+ for revspec in [ "^^" , "^^HEAD" ] {
28+ assert_eq ! (
29+ parse_spec( revspec, & repo) . unwrap_err( ) . to_string( ) ,
30+ "Tried to navigate the commit-graph without providing an anchor first"
31+ ) ;
32+ }
33+ assert_eq ! (
34+ parse_spec( "^" , & repo) . unwrap_err( ) . to_string( ) ,
35+ "The rev-spec is malformed and misses a ref name"
36+ ) ;
2937 assert_eq ! (
3038 parse_spec( "^!" , & repo) . unwrap_err( ) . to_string( ) ,
3139 "The ref partially named \" !\" could not be found"
You can’t perform that action at this time.
0 commit comments