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