@@ -19,7 +19,6 @@ static struct object_id *current_bad_oid;
1919
2020static const char * argv_checkout [] = {"checkout" , "-q" , NULL , "--" , NULL };
2121static const char * argv_show_branch [] = {"show-branch" , NULL , NULL };
22- static const char * argv_update_ref [] = {"update-ref" , "--no-deref" , "BISECT_HEAD" , NULL , NULL };
2322
2423/* Remember to update object flag allocation in object.h */
2524#define COUNTED (1u<<16)
@@ -666,34 +665,16 @@ static int is_expected_rev(const struct object_id *oid)
666665 return res ;
667666}
668667
669- static void mark_expected_rev (char * bisect_rev_hex )
670- {
671- int len = strlen (bisect_rev_hex );
672- const char * filename = git_path ("BISECT_EXPECTED_REV" );
673- int fd = open (filename , O_CREAT | O_TRUNC | O_WRONLY , 0600 );
674-
675- if (fd < 0 )
676- die_errno ("could not create file '%s'" , filename );
677-
678- bisect_rev_hex [len ] = '\n' ;
679- write_or_die (fd , bisect_rev_hex , len + 1 );
680- bisect_rev_hex [len ] = '\0' ;
681-
682- if (close (fd ) < 0 )
683- die ("closing file %s: %s" , filename , strerror (errno ));
684- }
685-
686- static int bisect_checkout (char * bisect_rev_hex , int no_checkout )
668+ static int bisect_checkout (const unsigned char * bisect_rev , int no_checkout )
687669{
670+ char bisect_rev_hex [GIT_SHA1_HEXSZ + 1 ];
688671
689- mark_expected_rev (bisect_rev_hex );
672+ memcpy (bisect_rev_hex , sha1_to_hex (bisect_rev ), GIT_SHA1_HEXSZ + 1 );
673+ update_ref (NULL , "BISECT_EXPECTED_REV" , bisect_rev , NULL , 0 , UPDATE_REFS_DIE_ON_ERR );
690674
691675 argv_checkout [2 ] = bisect_rev_hex ;
692676 if (no_checkout ) {
693- argv_update_ref [3 ] = bisect_rev_hex ;
694- if (run_command_v_opt (argv_update_ref , RUN_GIT_CMD ))
695- die ("update-ref --no-deref HEAD failed on %s" ,
696- bisect_rev_hex );
677+ update_ref (NULL , "BISECT_HEAD" , bisect_rev , NULL , 0 , UPDATE_REFS_DIE_ON_ERR );
697678 } else {
698679 int res ;
699680 res = run_command_v_opt (argv_checkout , RUN_GIT_CMD );
@@ -789,7 +770,7 @@ static void check_merge_bases(int no_checkout)
789770 handle_skipped_merge_base (mb );
790771 } else {
791772 printf ("Bisecting: a merge base must be tested\n" );
792- exit (bisect_checkout (sha1_to_hex ( mb ) , no_checkout ));
773+ exit (bisect_checkout (mb , no_checkout ));
793774 }
794775 }
795776
@@ -903,7 +884,6 @@ int bisect_next_all(const char *prefix, int no_checkout)
903884 struct commit_list * tried ;
904885 int reaches = 0 , all = 0 , nr , steps ;
905886 const unsigned char * bisect_rev ;
906- char bisect_rev_hex [GIT_SHA1_HEXSZ + 1 ];
907887
908888 if (read_bisect_refs ())
909889 die ("reading bisect refs failed" );
@@ -938,11 +918,10 @@ int bisect_next_all(const char *prefix, int no_checkout)
938918 }
939919
940920 bisect_rev = revs .commits -> item -> object .sha1 ;
941- memcpy (bisect_rev_hex , sha1_to_hex (bisect_rev ), GIT_SHA1_HEXSZ + 1 );
942921
943922 if (!hashcmp (bisect_rev , current_bad_oid -> hash )) {
944923 exit_if_skipped_commits (tried , current_bad_oid );
945- printf ("%s is the first bad commit\n" , bisect_rev_hex );
924+ printf ("%s is the first bad commit\n" , sha1_to_hex ( bisect_rev ) );
946925 show_diff_tree (prefix , revs .commits -> item );
947926 /* This means the bisection process succeeded. */
948927 exit (10 );
@@ -954,7 +933,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
954933 "(roughly %d step%s)\n" , nr , (nr == 1 ? "" : "s" ),
955934 steps , (steps == 1 ? "" : "s" ));
956935
957- return bisect_checkout (bisect_rev_hex , no_checkout );
936+ return bisect_checkout (bisect_rev , no_checkout );
958937}
959938
960939static inline int log2i (int n )
0 commit comments