@@ -19,7 +19,6 @@ static struct object_id *current_bad_oid;
19
19
20
20
static const char * argv_checkout [] = {"checkout" , "-q" , NULL , "--" , NULL };
21
21
static const char * argv_show_branch [] = {"show-branch" , NULL , NULL };
22
- static const char * argv_update_ref [] = {"update-ref" , "--no-deref" , "BISECT_HEAD" , NULL , NULL };
23
22
24
23
/* Remember to update object flag allocation in object.h */
25
24
#define COUNTED (1u<<16)
@@ -666,34 +665,16 @@ static int is_expected_rev(const struct object_id *oid)
666
665
return res ;
667
666
}
668
667
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 )
687
669
{
670
+ char bisect_rev_hex [GIT_SHA1_HEXSZ + 1 ];
688
671
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 );
690
674
691
675
argv_checkout [2 ] = bisect_rev_hex ;
692
676
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 );
697
678
} else {
698
679
int res ;
699
680
res = run_command_v_opt (argv_checkout , RUN_GIT_CMD );
@@ -789,7 +770,7 @@ static void check_merge_bases(int no_checkout)
789
770
handle_skipped_merge_base (mb );
790
771
} else {
791
772
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 ));
793
774
}
794
775
}
795
776
@@ -903,7 +884,6 @@ int bisect_next_all(const char *prefix, int no_checkout)
903
884
struct commit_list * tried ;
904
885
int reaches = 0 , all = 0 , nr , steps ;
905
886
const unsigned char * bisect_rev ;
906
- char bisect_rev_hex [GIT_SHA1_HEXSZ + 1 ];
907
887
908
888
if (read_bisect_refs ())
909
889
die ("reading bisect refs failed" );
@@ -938,11 +918,10 @@ int bisect_next_all(const char *prefix, int no_checkout)
938
918
}
939
919
940
920
bisect_rev = revs .commits -> item -> object .sha1 ;
941
- memcpy (bisect_rev_hex , sha1_to_hex (bisect_rev ), GIT_SHA1_HEXSZ + 1 );
942
921
943
922
if (!hashcmp (bisect_rev , current_bad_oid -> hash )) {
944
923
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 ) );
946
925
show_diff_tree (prefix , revs .commits -> item );
947
926
/* This means the bisection process succeeded. */
948
927
exit (10 );
@@ -954,7 +933,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
954
933
"(roughly %d step%s)\n" , nr , (nr == 1 ? "" : "s" ),
955
934
steps , (steps == 1 ? "" : "s" ));
956
935
957
- return bisect_checkout (bisect_rev_hex , no_checkout );
936
+ return bisect_checkout (bisect_rev , no_checkout );
958
937
}
959
938
960
939
static inline int log2i (int n )
0 commit comments