From: Harald Nordgren <haraldnordgren@gmail.com>
To: git@vger.kernel.org, Johannes.Schindelin@gmx.de,
tiago@gitlab.com, christian.couder@gmail.com, sbeller@google.com
Cc: Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v4] bisect: create 'bisect_flags' parameter in find_bisection()
Date: Wed, 18 Apr 2018 23:05:35 +0200 [thread overview]
Message-ID: <20180418210535.1862-1-haraldnordgren@gmail.com> (raw)
In-Reply-To: <20180415085841.1269-1-haraldnordgren@gmail.com>
Make it possible to implement bisecting only on first parents or on
merge commits by passing flags to find_bisection(), instead of just
a 'find_all' boolean.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
Notes:
Use unsigned type and cache flag value
bisect.c | 15 ++++++++++-----
bisect.h | 6 ++++--
builtin/rev-list.c | 6 +++---
3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/bisect.c b/bisect.c
index a579b50884..4eafc8262b 100644
--- a/bisect.c
+++ b/bisect.c
@@ -254,9 +254,10 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n
*/
static struct commit_list *do_find_bisection(struct commit_list *list,
int nr, int *weights,
- int find_all)
+ unsigned bisect_flags)
{
int n, counted;
+ unsigned find_all = bisect_flags & BISECT_FIND_ALL;
struct commit_list *p;
counted = 0;
@@ -365,7 +366,7 @@ static struct commit_list *do_find_bisection(struct commit_list *list,
}
void find_bisection(struct commit_list **commit_list, int *reaches,
- int *all, int find_all)
+ int *all, unsigned bisect_flags)
{
int nr, on_list;
struct commit_list *list, *p, *best, *next, *last;
@@ -400,9 +401,9 @@ void find_bisection(struct commit_list **commit_list, int *reaches,
weights = xcalloc(on_list, sizeof(*weights));
/* Do the real work of finding bisection commit. */
- best = do_find_bisection(list, nr, weights, find_all);
+ best = do_find_bisection(list, nr, weights, bisect_flags);
if (best) {
- if (!find_all) {
+ if (!(bisect_flags & BISECT_FIND_ALL)) {
list->item = best->item;
free_commit_list(list->next);
best = list;
@@ -943,6 +944,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
struct rev_info revs;
struct commit_list *tried;
int reaches = 0, all = 0, nr, steps;
+ unsigned bisect_flags = 0;
struct object_id *bisect_rev;
char *steps_msg;
@@ -957,7 +959,10 @@ int bisect_next_all(const char *prefix, int no_checkout)
bisect_common(&revs);
- find_bisection(&revs.commits, &reaches, &all, !!skipped_revs.nr);
+ if (skipped_revs.nr)
+ bisect_flags |= BISECT_FIND_ALL;
+
+ find_bisection(&revs.commits, &reaches, &all, bisect_flags);
revs.commits = managed_skipped(revs.commits, &tried);
if (!revs.commits) {
diff --git a/bisect.h b/bisect.h
index a5d9248a47..1d40a33ad2 100644
--- a/bisect.h
+++ b/bisect.h
@@ -1,15 +1,17 @@
#ifndef BISECT_H
#define BISECT_H
+#define BISECT_FIND_ALL (1u<<0)
+
/*
* Find bisection. If something is found, `reaches` will be the number of
* commits that the best commit reaches. `all` will be the count of
* non-SAMETREE commits. If nothing is found, `list` will be NULL.
* Otherwise, it will be either all non-SAMETREE commits or the single
- * best commit, as chosen by `find_all`.
+ * best commit, as chosen by flag `BISECT_FIND_ALL`.
*/
extern void find_bisection(struct commit_list **list, int *reaches, int *all,
- int find_all);
+ unsigned bisect_flags);
extern struct commit_list *filter_skipped(struct commit_list *list,
struct commit_list **tried,
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index fadd3ec14c..8752f5bbed 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -360,8 +360,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
int i;
int bisect_list = 0;
int bisect_show_vars = 0;
- int bisect_find_all = 0;
int use_bitmap_index = 0;
+ unsigned bisect_flags = 0;
const char *show_progress = NULL;
if (argc == 2 && !strcmp(argv[1], "-h"))
@@ -426,7 +426,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
}
if (!strcmp(arg, "--bisect-all")) {
bisect_list = 1;
- bisect_find_all = 1;
+ bisect_flags |= BISECT_FIND_ALL;
info.flags |= BISECT_SHOW_ALL;
revs.show_decorations = 1;
continue;
@@ -538,7 +538,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
if (bisect_list) {
int reaches, all;
- find_bisection(&revs.commits, &reaches, &all, bisect_find_all);
+ find_bisection(&revs.commits, &reaches, &all, bisect_flags);
if (bisect_show_vars)
return show_bisect_vars(&info, reaches, all);
--
2.14.3 (Apple Git-98)
next prev parent reply other threads:[~2018-04-18 21:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-15 8:58 [PATCH] Create 'bisect_flags' parameter in find_bisection() in preparation of passing multiple options Harald Nordgren
2018-04-15 9:55 ` Christian Couder
2018-04-15 10:44 ` [PATCH v2] Make it possible to implement bisecting only on first parents or on merge commits by passing flags to find_bisection(), instead of just a find_all boolean Harald Nordgren
2018-04-15 13:35 ` Christian Couder
2018-04-15 13:49 ` [PATCH v3] bisect: create 'bisect_flags' parameter in find_bisection() Harald Nordgren
2018-04-17 2:15 ` Junio C Hamano
2018-04-18 20:31 ` Johannes Schindelin
2018-04-18 21:05 ` Harald Nordgren [this message]
2018-04-20 12:23 ` [PATCH v4] " Johannes Schindelin
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=20180418210535.1862-1-haraldnordgren@gmail.com \
--to=haraldnordgren@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=sbeller@google.com \
--cc=tiago@gitlab.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).