Git fork
at reftables-rust 77 lines 2.4 kB view raw
1#ifndef BISECT_H 2#define BISECT_H 3 4struct commit_list; 5struct repository; 6struct object_id; 7 8/* 9 * Find bisection. If something is found, `reaches` will be the number of 10 * commits that the best commit reaches. `all` will be the count of 11 * non-SAMETREE commits. If nothing is found, `list` will be NULL. 12 * Otherwise, it will be either all non-SAMETREE commits or the single 13 * best commit, as chosen by `find_all`. 14 */ 15void find_bisection(struct commit_list **list, int *reaches, int *all, 16 unsigned bisect_flags); 17 18struct commit_list *filter_skipped(struct commit_list *list, 19 struct commit_list **tried, 20 int show_all, 21 int *count, 22 int *skipped_first); 23 24#define BISECT_SHOW_ALL (1<<0) 25#define REV_LIST_QUIET (1<<1) 26 27#define FIND_BISECTION_ALL (1u<<0) 28#define FIND_BISECTION_FIRST_PARENT_ONLY (1u<<1) 29 30/* 31 * enum bisect_error represents the following return codes: 32 * BISECT_OK: success code. Internally, it means that next 33 * commit has been found (and possibly checked out) and it 34 * should be tested. 35 * BISECT_FAILED error code: default error code. 36 * BISECT_ONLY_SKIPPED_LEFT error code: only skipped 37 * commits left to be tested. 38 * BISECT_MERGE_BASE_CHECK error code: merge base check failed. 39 * BISECT_NO_TESTABLE_COMMIT error code: no testable commit found. 40 * BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND early success code: 41 * first term_bad commit found. 42 * BISECT_INTERNAL_SUCCESS_MERGE_BASE early success 43 * code: found merge base that should be tested. 44 * Early success codes BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND and 45 * BISECT_INTERNAL_SUCCESS_MERGE_BASE should be only internal codes. 46 */ 47enum bisect_error { 48 BISECT_OK = 0, 49 BISECT_FAILED = -1, 50 BISECT_ONLY_SKIPPED_LEFT = -2, 51 BISECT_MERGE_BASE_CHECK = -3, 52 BISECT_NO_TESTABLE_COMMIT = -4, 53 BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND = -10, 54 BISECT_INTERNAL_SUCCESS_MERGE_BASE = -11 55}; 56 57/* 58 * Stores how many good/bad commits we have stored for a bisect. nr_bad can 59 * only be 0 or 1. 60 */ 61struct bisect_state { 62 unsigned int nr_good; 63 unsigned int nr_bad; 64}; 65 66enum bisect_error bisect_next_all(struct repository *r, const char *prefix); 67 68int estimate_bisect_steps(int all); 69 70void read_bisect_terms(char **bad, char **good); 71 72int bisect_clean_state(void); 73 74enum bisect_error bisect_checkout(const struct object_id *bisect_rev, 75 int no_checkout); 76 77#endif