[PATCH 09/10] bisect: implement "read_bisect_paths" to read paths in "$GIT_DIR/BISECT_NAMES"

Subsystems: the rest

STALE3735d

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH 09/10] bisect: implement "read_bisect_paths" to read paths in "$GIT_DIR/BISECT_NAMES"

From: Christian Couder <hidden>
Date: 2016-06-15 22:46:28

This is needed because  "git bisect--helper" must read bisect paths
in "$GIT_DIR/BISECT_NAMES", so that a bisection can be performed only
on commits that touches paths in this file.

Signed-off-by: Christian Couder <redacted>
---
 bisect.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 9 deletions(-)
diff --git a/bisect.c b/bisect.c
index ce62696..a6fd826 100644
--- a/bisect.c
+++ b/bisect.c
@@ -4,6 +4,7 @@
 #include "revision.h"
 #include "refs.h"
 #include "list-objects.h"
+#include "quote.h"
 #include "bisect.h"
 
 
@@ -424,6 +425,33 @@ static int read_bisect_refs(void)
 	return for_each_bisect_ref(register_ref, NULL);
 }
 
+void read_bisect_paths()
+{
+	struct strbuf str = STRBUF_INIT;
+	const char *filename = git_path("BISECT_NAMES");
+	FILE *fp = fp = fopen(filename, "r");
+
+	if (!fp)
+		die("Could not open file '%s': %s", filename, strerror(errno));
+
+	while (strbuf_getline(&str, fp, '\n') != EOF) {
+		char *quoted, *dequoted;
+		strbuf_trim(&str);
+		quoted = strbuf_detach(&str, NULL);
+		if (!*quoted)
+			continue;
+		dequoted = sq_dequote(quoted);
+		if (!dequoted)
+			die("Badly quoted content in file '%s': %s",
+			    filename, quoted);
+		ALLOC_GROW(rev_argv, rev_argv_nr + 1, rev_argv_alloc);
+		rev_argv[rev_argv_nr++] = dequoted;
+	}
+
+	strbuf_release(&str);
+	fclose(fp);
+}
+
 static int skipcmp(const void *a, const void *b)
 {
 	return hashcmp(a, b);
@@ -485,14 +513,11 @@ struct commit_list *filter_skipped(struct commit_list *list,
 	return filtered;
 }
 
-int bisect_next_vars(const char *prefix)
+static void bisect_rev_setup(struct rev_info *revs, const char *prefix)
 {
-	struct rev_info revs;
-	int reaches = 0, all = 0;
-
-	init_revisions(&revs, prefix);
-	revs.abbrev = 0;
-	revs.commit_format = CMIT_FMT_UNSPECIFIED;
+	init_revisions(revs, prefix);
+	revs->abbrev = 0;
+	revs->commit_format = CMIT_FMT_UNSPECIFIED;
 
 	/* argv[0] will be ignored by setup_revisions */
 	ALLOC_GROW(rev_argv, rev_argv_nr + 1, rev_argv_alloc);
@@ -504,9 +529,22 @@ int bisect_next_vars(const char *prefix)
 	ALLOC_GROW(rev_argv, rev_argv_nr + 1, rev_argv_alloc);
 	rev_argv[rev_argv_nr++] = xstrdup("--");
 
-	setup_revisions(rev_argv_nr, rev_argv, &revs, NULL);
+	read_bisect_paths();
+
+	ALLOC_GROW(rev_argv, rev_argv_nr + 1, rev_argv_alloc);
+	rev_argv[rev_argv_nr++] = NULL;
+
+	setup_revisions(rev_argv_nr, rev_argv, revs, NULL);
+
+	revs->limited = 1;
+}
+
+int bisect_next_vars(const char *prefix)
+{
+	struct rev_info revs;
+	int reaches = 0, all = 0;
 
-	revs.limited = 1;
+	bisect_rev_setup(&revs, prefix);
 
 	if (prepare_revision_walk(&revs))
 		die("revision walk setup failed");
-- 
1.6.2.1.317.g3d804

Re: [PATCH 09/10] bisect: implement "read_bisect_paths" to read paths in "$GIT_DIR/BISECT_NAMES"

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:28

Christian Couder [off-list ref] writes:
This is needed because  "git bisect--helper" must read bisect paths
in "$GIT_DIR/BISECT_NAMES", so that a bisection can be performed only
on commits that touches paths in this file.

Signed-off-by: Christian Couder <redacted>
Again, very nice.
quoted hunk
 bisect.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 9 deletions(-)
diff --git a/bisect.c b/bisect.c
index ce62696..a6fd826 100644
--- a/bisect.c
+++ b/bisect.c
@@ -4,6 +4,7 @@
 #include "revision.h"
 #include "refs.h"
 #include "list-objects.h"
+#include "quote.h"
 #include "bisect.h"
 
 
@@ -424,6 +425,33 @@ static int read_bisect_refs(void)
 	return for_each_bisect_ref(register_ref, NULL);
 }
 
+void read_bisect_paths()
+{
+	struct strbuf str = STRBUF_INIT;
+	const char *filename = git_path("BISECT_NAMES");
+	FILE *fp = fp = fopen(filename, "r");
s/= fp //;

Re: [PATCH 09/10] bisect: implement "read_bisect_paths" to read paths in "$GIT_DIR/BISECT_NAMES"

From: Christian Couder <hidden>
Date: 2016-06-15 22:46:29

Le jeudi 26 mars 2009, Junio C Hamano a écrit :
Christian Couder [off-list ref] writes:
quoted
This is needed because  "git bisect--helper" must read bisect paths
in "$GIT_DIR/BISECT_NAMES", so that a bisection can be performed only
on commits that touches paths in this file.

Signed-off-by: Christian Couder <redacted>
Again, very nice.
Thanks, but I found a big bug in this patch.
It doesn't work when there is more than one path in "$GIT_DIR/BISECT_NAMES"
because they are all on the same line, not on different lines.
I will try to fix it soon and provide some test cases.

Best regards,
Christian.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help