All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthieu Moy <Matthieu.Moy@imag.fr>
To: gitster@pobox.com
Cc: git@vger.kernel.org, antoine.delaite@ensimag.grenoble-inp.fr,
	louis--alexandre.stuber@ensimag.grenoble-inp.fr,
	chriscool@tuxfamily.org, thomasxnguy@gmail.com,
	valentinduperray@gmail.com, Matthieu Moy <Matthieu.Moy@imag.fr>
Subject: [PATCH v7 0/5] git bisect old/new
Date: Tue, 23 Jun 2015 14:54:39 +0200	[thread overview]
Message-ID: <1435064084-5554-1-git-send-email-Matthieu.Moy@imag.fr> (raw)
In-Reply-To: <1435006836-18182-1-git-send-email-antoine.delaite@ensimag.grenoble-inp.fr>

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

  parent reply	other threads:[~2015-06-23 17:29 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-22 21:00 [PATCH v3 1/6] bisect: correction of typo Antoine Delaite
2015-06-22 21:00 ` [PATCH v3 2/6] bisect: replace hardcoded "bad|good" by variables Antoine Delaite
2015-06-22 21:00 ` [PATCH v3 3/6] bisect: simplify the addition of new bisect terms Antoine Delaite
2015-06-22 21:00 ` [PATCH v3 4/6] bisect: add the terms old/new Antoine Delaite
2015-06-22 21:00 ` [PATCH v3 5/6] revision: fix rev-list --bisect in old/new mode Antoine Delaite
2015-06-22 21:00 ` [PATCH v3 6/6] bisect: allows any terms set by user Antoine Delaite
2015-06-23 12:54 ` Matthieu Moy [this message]
2015-06-23 12:54   ` [PATCH v7 1/5] bisect: correction of typo Matthieu Moy
2015-06-23 12:54   ` [PATCH v7 2/5] bisect: replace hardcoded "bad|good" by variables Matthieu Moy
2015-06-23 12:54   ` [PATCH v7 3/5] bisect: simplify the addition of new bisect terms Matthieu Moy
2015-06-23 17:49     ` Eric Sunshine
2015-06-23 18:18       ` Matthieu Moy
2015-06-23 12:54   ` [PATCH v7 4/5] bisect: add the terms old/new Matthieu Moy
2015-06-23 19:27     ` Remi Galan Alfonso
2015-06-23 20:26       ` Matthieu Moy
2015-06-23 12:54   ` [PATCH v7 5/5] bisect: allows any terms set by user Matthieu Moy
2015-06-23 18:48     ` Junio C Hamano
2015-06-23 19:04   ` [PATCH v7 0/5] git bisect old/new Junio C Hamano
2015-06-23 20:16     ` Matthieu Moy
2015-06-23 20:34       ` Junio C Hamano
2015-06-24 15:17   ` [PATCH v8 0/5] Bisect terms Matthieu Moy
2015-06-24 15:17     ` [PATCH v8 1/5] bisect: correction of typo Matthieu Moy
2015-06-24 15:17     ` [PATCH v8 2/5] bisect: replace hardcoded "bad|good" by variables Matthieu Moy
2015-06-24 15:17     ` [PATCH v8 3/5] bisect: simplify the addition of new bisect terms Matthieu Moy
2015-06-24 17:29       ` Junio C Hamano
2015-06-24 21:26         ` Matthieu Moy
2015-06-24 15:17     ` [PATCH v8 4/5] bisect: add the terms old/new Matthieu Moy
2015-06-24 15:17     ` [PATCH v8 5/5] bisect: allow any terms set by user Matthieu Moy
2015-06-24 17:46       ` Junio C Hamano
2015-06-24 21:23         ` Matthieu Moy
2015-06-24 17:27     ` [PATCH v8 0/5] Bisect terms Junio C Hamano
2015-06-24 19:41     ` Junio C Hamano
2015-06-25 18:50   ` [PATCH v9 0/5] bisect terms Matthieu Moy
2015-06-25 18:50     ` [PATCH v9 1/5] bisect: correction of typo Matthieu Moy
2015-06-25 18:50     ` [PATCH v9 2/5] bisect: replace hardcoded "bad|good" by variables Matthieu Moy
2015-06-25 18:50     ` [PATCH v9 3/5] bisect: simplify the addition of new bisect terms Matthieu Moy
2015-06-25 18:50     ` [PATCH v9 4/5] bisect: add the terms old/new Matthieu Moy
2015-06-26  4:11       ` Christian Couder
2015-06-26  7:00         ` Matthieu Moy
2015-06-25 18:50     ` [PATCH v9 5/5] bisect: allow any terms set by user Matthieu Moy
2015-06-25 21:41       ` Junio C Hamano
2015-06-25 22:10         ` Junio C Hamano
2015-06-26  8:20           ` Matthieu Moy
2015-06-26 16:48             ` Junio C Hamano
2015-06-26 17:08               ` Matthieu Moy
2015-06-26 18:08                 ` Junio C Hamano
2015-06-26 20:18                   ` Matthieu Moy
2015-06-26  6:59         ` Matthieu Moy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1435064084-5554-1-git-send-email-Matthieu.Moy@imag.fr \
    --to=matthieu.moy@imag.fr \
    --cc=antoine.delaite@ensimag.grenoble-inp.fr \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=louis--alexandre.stuber@ensimag.grenoble-inp.fr \
    --cc=thomasxnguy@gmail.com \
    --cc=valentinduperray@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.