[PATCH v7 0/5] git bisect old/new

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I fixed a few minor issues in v6. Patch between my version and v6 is
below. I also pushed my branch here:

  https://github.com/moy/git/tree/bisect-terms

Not visible in the patch below: I squashed PATCH 5 into PATCH 3 to
avoid the pattern "break stuff and then repair it".

The first two patches seem ready.

PATCH 4 (add old/new) is still buggy. When starting a bisection with

  git bisect start $old $new

the command "git bisect visualize" does not work (it shows no commit).

I consider PATCH 5 as WIP, I think it would need a lot of polishing
and testing to be mergeable. I think a reasonable objective for now it
to get old/new working in the user-interface, and drop PATCH 5 from
the series when it gets merged. The existance of PATCH 5 is a very
good thing even if it doesn't get merged:

* The fact that it's possible to do it on top of the series shows that
  we make the code more generic. I think it's important that
  regardless of features, the code moves in the right direction.

* The patch can be taken over later by someone else.

diff --git a/bisect.c b/bisect.c
index 7492fdc..ab09650 100644
--- a/bisect.c
+++ b/bisect.c
@@ -921,7 +921,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good)
 	FILE *fp = fopen(filename, "r");
 
 	if (!fp) {
-		if (errno==2) {
+		if (errno == ENOENT) {
 			*read_bad = "bad";
 			*read_good = "good";
 			return;
diff --git a/git-bisect.sh b/git-bisect.sh
index 7da22b1..8ef2b94 100644
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -541,7 +541,7 @@ get_terms () {
 		{
 		read NAME_BAD
 		read NAME_GOOD
-		}<"$GIT_DIR/BISECT_TERMS"	
+		} <"$GIT_DIR/BISECT_TERMS"
 	fi
 }
 
@@ -605,8 +605,8 @@ bisect_terms () {
 			echo "1" >"$GIT_DIR/TERMS_DEFINED"
 			echo "git bisect terms $NAME_BAD $NAME_GOOD" >>"$GIT_DIR/BISECT_LOG" || exit
 		else
-			die "$(gettext "A bisection has already started, and you can't change terms in the middle of it. 
-Use 'git bisect terms' to see the current terms. 
+			die "$(gettext "A bisection has already started, and you can't change terms in the middle of it.
+Use 'git bisect terms' to see the current terms.
 Otherwise, to start a new bisection with new terms, please use 'git bisect reset' and set the terms before the start")"
 		fi ;;
 	*)
diff --git a/revision.c b/revision.c
index 27750ac..f22923f 100644
--- a/revision.c
+++ b/revision.c
@@ -2083,18 +2083,28 @@ extern void read_bisect_terms(const char **bad, const char **good);
 
 static int for_each_bad_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
 {
-	char bisect_refs_path[256];
-	strcpy(bisect_refs_path, "refs/bisect/");
-	strcat(bisect_refs_path, name_bad);
-	return for_each_ref_in_submodule(submodule, bisect_refs_path, fn, cb_data);
+	struct strbuf bisect_refs_buf = STRBUF_INIT;
+	const char *bisect_refs_str;
+	int status;
+	strbuf_addstr(&bisect_refs_buf, "refs/bisect/");
+	strbuf_addstr(&bisect_refs_buf, name_bad);
+	bisect_refs_str = strbuf_detach(&bisect_refs_buf, NULL);
+	status = for_each_ref_in_submodule(submodule, bisect_refs_str, fn, cb_data);
+	free((char *)bisect_refs_str);
+	return status;
 }
 
 static int for_each_good_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
 {
-	char bisect_refs_path[256];
-	strcpy(bisect_refs_path, "refs/bisect/");
-	strcat(bisect_refs_path, name_good);
-	return for_each_ref_in_submodule(submodule, bisect_refs_path, fn, cb_data);
+	struct strbuf bisect_refs_buf = STRBUF_INIT;
+	const char *bisect_refs_str;
+	int status;
+	strbuf_addstr(&bisect_refs_buf, "refs/bisect/");
+	strbuf_addstr(&bisect_refs_buf, name_bad);
+	bisect_refs_str = strbuf_detach(&bisect_refs_buf, NULL);
+	status = for_each_ref_in_submodule(submodule, bisect_refs_str, fn, cb_data);
+	free((char *)bisect_refs_str);
+	return status;
 }
 
 static int handle_revision_pseudo_opt(const char *submodule,
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index d91116e..289dbb0 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -781,12 +781,12 @@ test_expect_success 'bisect start with one new and old' '
 	git bisect new &&
 	git bisect new >bisect_result &&
 	grep "$HASH2 is the first new commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 
 test_expect_success 'bisect replay with old and new' '
-	git bisect replay log_to_replay.txt > bisect_result &&
+	git bisect replay log_to_replay.txt >bisect_result &&
 	grep "$HASH2 is the first new commit" bisect_result &&
 	git bisect reset
 '
@@ -806,12 +806,12 @@ test_expect_success 'bisect start with one term1 and term2' '
 	git bisect term1 &&
 	git bisect term1 >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 
 test_expect_success 'bisect replay with term1 and term2' '
-	git bisect replay log_to_replay.txt > bisect_result &&
+	git bisect replay log_to_replay.txt >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
 	git bisect reset
 '
@@ -823,7 +823,7 @@ test_expect_success 'bisect start term1 term2' '
 	git bisect term1 &&
 	git bisect term1 >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 

Subject: [PATCH v7 0/5] git bisect old/new

Hi,

I fixed a few minor issues in v6. Patch between my version and v6 is
below. I also pushed my branch here:

  https://github.com/moy/git/tree/bisect-terms

diff --git a/bisect.c b/bisect.c
index 7492fdc..ab09650 100644
--- a/bisect.c
+++ b/bisect.c
@@ -921,7 +921,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good)
 	FILE *fp = fopen(filename, "r");
 
 	if (!fp) {
-		if (errno==2) {
+		if (errno == ENOENT) {
 			*read_bad = "bad";
 			*read_good = "good";
 			return;
diff --git a/git-bisect.sh b/git-bisect.sh
index 7da22b1..8ef2b94 100644
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -541,7 +541,7 @@ get_terms () {
 		{
 		read NAME_BAD
 		read NAME_GOOD
-		}<"$GIT_DIR/BISECT_TERMS"	
+		} <"$GIT_DIR/BISECT_TERMS"
 	fi
 }
 
@@ -605,8 +605,8 @@ bisect_terms () {
 			echo "1" >"$GIT_DIR/TERMS_DEFINED"
 			echo "git bisect terms $NAME_BAD $NAME_GOOD" >>"$GIT_DIR/BISECT_LOG" || exit
 		else
-			die "$(gettext "A bisection has already started, and you can't change terms in the middle of it. 
-Use 'git bisect terms' to see the current terms. 
+			die "$(gettext "A bisection has already started, and you can't change terms in the middle of it.
+Use 'git bisect terms' to see the current terms.
 Otherwise, to start a new bisection with new terms, please use 'git bisect reset' and set the terms before the start")"
 		fi ;;
 	*)
diff --git a/revision.c b/revision.c
index 27750ac..f22923f 100644
--- a/revision.c
+++ b/revision.c
@@ -2083,18 +2083,28 @@ extern void read_bisect_terms(const char **bad, const char **good);
 
 static int for_each_bad_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
 {
-	char bisect_refs_path[256];
-	strcpy(bisect_refs_path, "refs/bisect/");
-	strcat(bisect_refs_path, name_bad);
-	return for_each_ref_in_submodule(submodule, bisect_refs_path, fn, cb_data);
+	struct strbuf bisect_refs_buf = STRBUF_INIT;
+	const char *bisect_refs_str;
+	int status;
+	strbuf_addstr(&bisect_refs_buf, "refs/bisect/");
+	strbuf_addstr(&bisect_refs_buf, name_bad);
+	bisect_refs_str = strbuf_detach(&bisect_refs_buf, NULL);
+	status = for_each_ref_in_submodule(submodule, bisect_refs_str, fn, cb_data);
+	free((char *)bisect_refs_str);
+	return status;
 }
 
 static int for_each_good_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
 {
-	char bisect_refs_path[256];
-	strcpy(bisect_refs_path, "refs/bisect/");
-	strcat(bisect_refs_path, name_good);
-	return for_each_ref_in_submodule(submodule, bisect_refs_path, fn, cb_data);
+	struct strbuf bisect_refs_buf = STRBUF_INIT;
+	const char *bisect_refs_str;
+	int status;
+	strbuf_addstr(&bisect_refs_buf, "refs/bisect/");
+	strbuf_addstr(&bisect_refs_buf, name_bad);
+	bisect_refs_str = strbuf_detach(&bisect_refs_buf, NULL);
+	status = for_each_ref_in_submodule(submodule, bisect_refs_str, fn, cb_data);
+	free((char *)bisect_refs_str);
+	return status;
 }
 
 static int handle_revision_pseudo_opt(const char *submodule,
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index d91116e..289dbb0 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -781,12 +781,12 @@ test_expect_success 'bisect start with one new and old' '
 	git bisect new &&
 	git bisect new >bisect_result &&
 	grep "$HASH2 is the first new commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 
 test_expect_success 'bisect replay with old and new' '
-	git bisect replay log_to_replay.txt > bisect_result &&
+	git bisect replay log_to_replay.txt >bisect_result &&
 	grep "$HASH2 is the first new commit" bisect_result &&
 	git bisect reset
 '
@@ -806,12 +806,12 @@ test_expect_success 'bisect start with one term1 and term2' '
 	git bisect term1 &&
 	git bisect term1 >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 
 test_expect_success 'bisect replay with term1 and term2' '
-	git bisect replay log_to_replay.txt > bisect_result &&
+	git bisect replay log_to_replay.txt >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
 	git bisect reset
 '
@@ -823,7 +823,7 @@ test_expect_success 'bisect start term1 term2' '
 	git bisect term1 &&
 	git bisect term1 >bisect_result &&
 	grep "$HASH2 is the first term1 commit" bisect_result &&
-	git bisect log > log_to_replay.txt &&
+	git bisect log >log_to_replay.txt &&
 	git bisect reset
 '
 
Antoine Delaite (5):
  bisect: correction of typo
  bisect: replace hardcoded "bad|good" by variables
  bisect: simplify the addition of new bisect terms
  bisect: add the terms old/new
  bisect: allows any terms set by user

 Documentation/git-bisect.txt |  67 +++++++++++++-
 bisect.c                     |  94 +++++++++++++++-----
 git-bisect.sh                | 207 +++++++++++++++++++++++++++++++++++--------
 revision.c                   |  26 +++++-
 t/t6030-bisect-porcelain.sh  |  83 ++++++++++++++++-
 5 files changed, 413 insertions(+), 64 deletions(-)
 mode change 100755 => 100644 git-bisect.sh

-- 
2.4.4.414.ge37915c

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]