@@ -57,13 +57,17 @@ static void name_rev(struct commit *commit,
5757 parents ;
5858 parents = parents -> next , parent_number ++ ) {
5959 if (parent_number > 1 ) {
60- char * new_name = xmalloc (strlen (tip_name )+ 8 );
60+ int len = strlen (tip_name );
61+ char * new_name = xmalloc (len + 8 );
6162
63+ if (len > 2 && !strcmp (tip_name + len - 2 , "^0" ))
64+ len -= 2 ;
6265 if (generation > 0 )
63- sprintf (new_name , "%s~%d^%d" , tip_name ,
66+ sprintf (new_name , "%.* s~%d^%d" , len , tip_name ,
6467 generation , parent_number );
6568 else
66- sprintf (new_name , "%s^%d" , tip_name , parent_number );
69+ sprintf (new_name , "%.*s^%d" , len , tip_name ,
70+ parent_number );
6771
6872 name_rev (parents -> item , new_name ,
6973 merge_traversals + 1 , 0 , 0 );
@@ -127,10 +131,15 @@ static const char* get_rev_name(struct object *o)
127131
128132 if (!n -> generation )
129133 return n -> tip_name ;
130-
131- snprintf (buffer , sizeof (buffer ), "%s~%d" , n -> tip_name , n -> generation );
132-
133- return buffer ;
134+ else {
135+ int len = strlen (n -> tip_name );
136+ if (len > 2 && !strcmp (n -> tip_name + len - 2 , "^0" ))
137+ len -= 2 ;
138+ snprintf (buffer , sizeof (buffer ), "%.*s~%d" , len , n -> tip_name ,
139+ n -> generation );
140+
141+ return buffer ;
142+ }
134143}
135144
136145int cmd_name_rev (int argc , const char * * argv , const char * prefix )
0 commit comments