blob: ec24ac2d7ee9d18fa6a9188534040602fd728e38 [file] [log] [blame]
Christian Coudera2ad79c2009-03-26 05:55:24 +01001#ifndef BISECT_H
2#define BISECT_H
3
Elijah Newrenef3ca952018-08-15 10:54:05 -07004struct commit_list;
Nguyễn Thái Ngọc Duy69d2cfe2018-11-10 06:48:59 +01005struct repository;
Elijah Newrenef3ca952018-08-15 10:54:05 -07006
Martin Ågren24d707f2017-11-05 21:24:28 +01007/*
8 * Find bisection. If something is found, `reaches` will be the number of
9 * commits that the best commit reaches. `all` will be the count of
10 * non-SAMETREE commits. If nothing is found, `list` will be NULL.
11 * Otherwise, it will be either all non-SAMETREE commits or the single
12 * best commit, as chosen by `find_all`.
13 */
Denton Liu55454422019-04-29 04:28:14 -040014void find_bisection(struct commit_list **list, int *reaches, int *all,
Aaron Lipmanad464a42020-08-07 17:58:38 -040015 unsigned bisect_flags);
Christian Coudera2ad79c2009-03-26 05:55:24 +010016
Denton Liu55454422019-04-29 04:28:14 -040017struct commit_list *filter_skipped(struct commit_list *list,
Denton Liuad6dad02019-04-29 04:28:23 -040018 struct commit_list **tried,
19 int show_all,
20 int *count,
21 int *skipped_first);
Christian Couder95188642009-03-26 05:55:49 +010022
Christian Couder37c4c382009-03-29 11:55:43 +020023#define BISECT_SHOW_ALL (1<<0)
Nguyễn Thái Ngọc Duy98993722012-02-28 21:00:00 +070024#define REV_LIST_QUIET (1<<1)
Christian Couder37c4c382009-03-29 11:55:43 +020025
Aaron Lipmanad464a42020-08-07 17:58:38 -040026#define FIND_BISECTION_ALL (1u<<0)
27#define FIND_BISECTION_FIRST_PARENT_ONLY (1u<<1)
28
Christian Couderd7972572009-04-06 22:28:00 +020029struct rev_list_info {
30 struct rev_info *revs;
Nguyễn Thái Ngọc Duy98993722012-02-28 21:00:00 +070031 int flags;
Christian Couderd7972572009-04-06 22:28:00 +020032 int show_timestamp;
33 int hdr_termination;
34 const char *header_prefix;
35};
36
Miriam Rubio680e8a02020-02-17 09:40:32 +010037/*
38 * enum bisect_error represents the following return codes:
39 * BISECT_OK: success code. Internally, it means that next
40 * commit has been found (and possibly checked out) and it
41 * should be tested.
42 * BISECT_FAILED error code: default error code.
Pranit Bauvace58b5d2020-02-17 09:40:34 +010043 * BISECT_ONLY_SKIPPED_LEFT error code: only skipped
44 * commits left to be tested.
Pranit Bauva6c69f222020-02-17 09:40:39 +010045 * BISECT_MERGE_BASE_CHECK error code: merge base check failed.
46 * BISECT_NO_TESTABLE_COMMIT error code: no testable commit found.
47 * BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND early success code:
48 * first term_bad commit found.
Pranit Bauvacdd4dc22020-02-17 09:40:36 +010049 * BISECT_INTERNAL_SUCCESS_MERGE_BASE early success
50 * code: found merge base that should be tested.
Pranit Bauva6c69f222020-02-17 09:40:39 +010051 * Early success codes BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND and
52 * BISECT_INTERNAL_SUCCESS_MERGE_BASE should be only internal codes.
Miriam Rubio680e8a02020-02-17 09:40:32 +010053 */
54enum bisect_error {
55 BISECT_OK = 0,
Pranit Bauvace58b5d2020-02-17 09:40:34 +010056 BISECT_FAILED = -1,
Pranit Bauvacdd4dc22020-02-17 09:40:36 +010057 BISECT_ONLY_SKIPPED_LEFT = -2,
Pranit Bauva9ec598e2020-02-17 09:40:38 +010058 BISECT_MERGE_BASE_CHECK = -3,
Pranit Bauva6c69f222020-02-17 09:40:39 +010059 BISECT_NO_TESTABLE_COMMIT = -4,
60 BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND = -10,
Pranit Bauvacdd4dc22020-02-17 09:40:36 +010061 BISECT_INTERNAL_SUCCESS_MERGE_BASE = -11
Miriam Rubio680e8a02020-02-17 09:40:32 +010062};
63
Aaron Lipmanbe5fe202020-08-07 17:58:36 -040064enum bisect_error bisect_next_all(struct repository *r, const char *prefix);
Christian Couder1bf072e2009-03-26 05:55:54 +010065
Denton Liu55454422019-04-29 04:28:14 -040066int estimate_bisect_steps(int all);
Christian Couder1c876542009-04-19 11:55:38 +020067
Denton Liu55454422019-04-29 04:28:14 -040068void read_bisect_terms(const char **bad, const char **good);
Antoine Delaitecb46d632015-06-29 17:40:30 +020069
Denton Liu55454422019-04-29 04:28:14 -040070int bisect_clean_state(void);
Pranit Bauvafb71a322017-09-29 06:49:39 +000071
Christian Coudera2ad79c2009-03-26 05:55:24 +010072#endif