git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / 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

  List information: http://vger.kernel.org/majordomo-info.html

* 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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).