Merge branch 'jc/sha1-name-object-peeler'
There was no good way to ask "I have a random string that came from
outside world. I want to turn it into a 40-hex object name while
making sure such an object exists".  A new peeling suffix ^{object}
can be used for that purpose, together with "rev-parse --verify".
* jc/sha1-name-object-peeler:
  peel_onion(): teach $foo^{object} peeler
  peel_onion: disambiguate to favor tree-ish when we know we want a tree-ish
			
			
				maint
			
			
		
						commit
						1b7b22bfd0
					
				|  | @ -116,6 +116,11 @@ some output processing may assume ref names in UTF-8. | |||
|   object of that type is found or the object cannot be | ||||
|   dereferenced anymore (in which case, barf).  '<rev>{caret}0' | ||||
|   is a short-hand for '<rev>{caret}\{commit\}'. | ||||
| + | ||||
| 'rev{caret}\{object\}' can be used to make sure 'rev' names an | ||||
| object that exists, without requiring 'rev' to be a tag, and | ||||
| without dereferencing 'rev'; because a tag is already an object, | ||||
| it does not have to be dereferenced even once to get to an object. | ||||
|  | ||||
| '<rev>{caret}\{\}', e.g. 'v0.99.8{caret}\{\}':: | ||||
|   A suffix '{caret}' followed by an empty brace pair | ||||
|  |  | |||
|  | @ -594,7 +594,7 @@ struct object *peel_to_type(const char *name, int namelen, | |||
| 	while (1) { | ||||
| 		if (!o || (!o->parsed && !parse_object(o->sha1))) | ||||
| 			return NULL; | ||||
| 		if (o->type == expected_type) | ||||
| 		if (expected_type == OBJ_ANY || o->type == expected_type) | ||||
| 			return o; | ||||
| 		if (o->type == OBJ_TAG) | ||||
| 			o = ((struct tag*) o)->tagged; | ||||
|  | @ -645,6 +645,8 @@ static int peel_onion(const char *name, int len, unsigned char *sha1) | |||
| 		expected_type = OBJ_TREE; | ||||
| 	else if (!strncmp(blob_type, sp, 4) && sp[4] == '}') | ||||
| 		expected_type = OBJ_BLOB; | ||||
| 	else if (!prefixcmp(sp, "object}")) | ||||
| 		expected_type = OBJ_ANY; | ||||
| 	else if (sp[0] == '}') | ||||
| 		expected_type = OBJ_NONE; | ||||
| 	else if (sp[0] == '/') | ||||
|  | @ -654,6 +656,8 @@ static int peel_onion(const char *name, int len, unsigned char *sha1) | |||
|  | ||||
| 	if (expected_type == OBJ_COMMIT) | ||||
| 		lookup_flags = GET_SHA1_COMMITTISH; | ||||
| 	else if (expected_type == OBJ_TREE) | ||||
| 		lookup_flags = GET_SHA1_TREEISH; | ||||
|  | ||||
| 	if (get_sha1_1(name, sp - name - 2, outer, lookup_flags)) | ||||
| 		return -1; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano