Lines Matching refs:revs

43 static inline int want_ancestry(const struct rev_info *revs);
307 static void add_pending_object_with_path(struct rev_info *revs, in add_pending_object_with_path() argument
315 if (revs->no_walk && (obj->flags & UNINTERESTING)) in add_pending_object_with_path()
316 revs->no_walk = 0; in add_pending_object_with_path()
317 if (revs->reflog_info && obj->type == OBJ_COMMIT) { in add_pending_object_with_path()
324 add_reflog_for_walk(revs->reflog_info, in add_pending_object_with_path()
330 add_object_array_with_path(obj, name, &revs->pending, mode, path); in add_pending_object_with_path()
333 static void add_pending_object_with_mode(struct rev_info *revs, in add_pending_object_with_mode() argument
337 add_pending_object_with_path(revs, obj, name, mode, NULL); in add_pending_object_with_mode()
340 void add_pending_object(struct rev_info *revs, in add_pending_object() argument
343 add_pending_object_with_mode(revs, obj, name, S_IFINVALID); in add_pending_object()
346 void add_head_to_pending(struct rev_info *revs) in add_head_to_pending() argument
352 obj = parse_object(revs->repo, &oid); in add_head_to_pending()
355 add_pending_object(revs, obj, "HEAD"); in add_head_to_pending()
358 static struct object *get_reference(struct rev_info *revs, const char *name, in get_reference() argument
370 commit = lookup_commit_in_graph(revs->repo, oid); in get_reference()
374 object = parse_object(revs->repo, oid); in get_reference()
377 if (revs->ignore_missing) in get_reference()
379 if (revs->exclude_promisor_objects && is_promisor_object(oid)) in get_reference()
387 void add_pending_oid(struct rev_info *revs, const char *name, in add_pending_oid() argument
390 struct object *object = get_reference(revs, name, oid, flags); in add_pending_oid()
391 add_pending_object(revs, object, name); in add_pending_oid()
394 static struct commit *handle_commit(struct rev_info *revs, in handle_commit() argument
408 if (revs->tag_objects && !(flags & UNINTERESTING)) in handle_commit()
409 add_pending_object(revs, object, tag->tag); in handle_commit()
410 object = parse_object(revs->repo, get_tagged_oid(tag)); in handle_commit()
412 if (revs->ignore_missing_links || (flags & UNINTERESTING)) in handle_commit()
414 if (revs->exclude_promisor_objects && in handle_commit()
436 if (repo_parse_commit(revs->repo, commit) < 0) in handle_commit()
441 if (!revs->topo_order || !generation_numbers_enabled(the_repository)) in handle_commit()
442 revs->limited = 1; in handle_commit()
444 if (revs->sources) { in handle_commit()
445 char **slot = revision_sources_at(revs->sources, commit); in handle_commit()
459 if (!revs->tree_objects) in handle_commit()
462 mark_tree_contents_uninteresting(revs->repo, tree); in handle_commit()
465 add_pending_object_with_path(revs, object, name, mode, path); in handle_commit()
473 if (!revs->blob_objects) in handle_commit()
477 add_pending_object_with_path(revs, object, name, mode, path); in handle_commit()
542 static struct commit *one_relevant_parent(const struct rev_info *revs, in one_relevant_parent() argument
556 if (revs->first_parent_only || !orig->next) in one_relevant_parent()
606 struct rev_info *revs = options->change_fn_data; in file_add_remove() local
609 if (!revs->remove_empty_trees || tree_difference != REV_TREE_NEW) in file_add_remove()
661 static void prepare_to_use_bloom_filter(struct rev_info *revs) in prepare_to_use_bloom_filter() argument
669 if (!revs->commits) in prepare_to_use_bloom_filter()
672 if (forbid_bloom_filters(&revs->prune_data)) in prepare_to_use_bloom_filter()
675 repo_parse_commit(revs->repo, revs->commits->item); in prepare_to_use_bloom_filter()
677 revs->bloom_filter_settings = get_bloom_filter_settings(revs->repo); in prepare_to_use_bloom_filter()
678 if (!revs->bloom_filter_settings) in prepare_to_use_bloom_filter()
681 if (!revs->pruning.pathspec.nr) in prepare_to_use_bloom_filter()
684 pi = &revs->pruning.pathspec.items[0]; in prepare_to_use_bloom_filter()
695 revs->bloom_filter_settings = NULL; in prepare_to_use_bloom_filter()
712 revs->bloom_keys_nr = path_component_nr; in prepare_to_use_bloom_filter()
713 ALLOC_ARRAY(revs->bloom_keys, revs->bloom_keys_nr); in prepare_to_use_bloom_filter()
715 fill_bloom_key(path, len, &revs->bloom_keys[0], in prepare_to_use_bloom_filter()
716 revs->bloom_filter_settings); in prepare_to_use_bloom_filter()
723 &revs->bloom_keys[path_component_nr++], in prepare_to_use_bloom_filter()
724 revs->bloom_filter_settings); in prepare_to_use_bloom_filter()
736 static int check_maybe_different_in_bloom_filter(struct rev_info *revs, in check_maybe_different_in_bloom_filter() argument
742 if (!revs->repo->objects->commit_graph) in check_maybe_different_in_bloom_filter()
748 filter = get_bloom_filter(revs->repo, commit); in check_maybe_different_in_bloom_filter()
755 for (j = 0; result && j < revs->bloom_keys_nr; j++) { in check_maybe_different_in_bloom_filter()
757 &revs->bloom_keys[j], in check_maybe_different_in_bloom_filter()
758 revs->bloom_filter_settings); in check_maybe_different_in_bloom_filter()
769 static int rev_compare_tree(struct rev_info *revs, in rev_compare_tree() argument
781 if (revs->simplify_by_decoration) { in rev_compare_tree()
795 if (!revs->prune_data.nr) in rev_compare_tree()
799 if (revs->bloom_keys_nr && !nth_parent) { in rev_compare_tree()
800 bloom_ret = check_maybe_different_in_bloom_filter(revs, commit); in rev_compare_tree()
807 revs->pruning.flags.has_changes = 0; in rev_compare_tree()
808 diff_tree_oid(&t1->object.oid, &t2->object.oid, "", &revs->pruning); in rev_compare_tree()
817 static int rev_same_tree_as_empty(struct rev_info *revs, struct commit *commit) in rev_same_tree_as_empty() argument
825 revs->pruning.flags.has_changes = 0; in rev_same_tree_as_empty()
826 diff_tree_oid(NULL, &t1->object.oid, "", &revs->pruning); in rev_same_tree_as_empty()
836 static struct treesame_state *initialise_treesame(struct rev_info *revs, struct commit *commit) in initialise_treesame() argument
841 add_decoration(&revs->treesame, &commit->object, st); in initialise_treesame()
852 static int compact_treesame(struct rev_info *revs, struct commit *commit, unsigned nth_parent) in compact_treesame() argument
865 if (rev_same_tree_as_empty(revs, commit)) in compact_treesame()
872 st = lookup_decoration(&revs->treesame, &commit->object); in compact_treesame()
889 if (st->treesame[0] && revs->dense) in compact_treesame()
893 free(add_decoration(&revs->treesame, &commit->object, NULL)); in compact_treesame()
899 static unsigned update_treesame(struct rev_info *revs, struct commit *commit) in update_treesame() argument
908 st = lookup_decoration(&revs->treesame, &commit->object); in update_treesame()
929 static inline int limiting_can_increase_treesame(const struct rev_info *revs) in limiting_can_increase_treesame() argument
939 return revs->prune && revs->dense && in limiting_can_increase_treesame()
940 !revs->simplify_history && in limiting_can_increase_treesame()
941 !revs->first_parent_only; in limiting_can_increase_treesame()
944 static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) in try_to_simplify_commit() argument
954 if (!revs->prune) in try_to_simplify_commit()
961 if (rev_same_tree_as_empty(revs, commit)) in try_to_simplify_commit()
970 if (!revs->dense && !commit->parents->next) in try_to_simplify_commit()
990 if (revs->first_parent_only) in try_to_simplify_commit()
998 if (revs->treesame.name && in try_to_simplify_commit()
999 !revs->simplify_history && in try_to_simplify_commit()
1001 ts = initialise_treesame(revs, commit); in try_to_simplify_commit()
1006 if (repo_parse_commit(revs->repo, p) < 0) in try_to_simplify_commit()
1010 switch (rev_compare_tree(revs, p, commit, nth_parent)) { in try_to_simplify_commit()
1012 if (!revs->simplify_history || !relevant_commit(p)) { in try_to_simplify_commit()
1035 if (!revs->show_pulls || !nth_parent) in try_to_simplify_commit()
1041 if (revs->remove_empty_trees && in try_to_simplify_commit()
1042 rev_same_tree_as_empty(revs, p)) { in try_to_simplify_commit()
1051 if (repo_parse_commit(revs->repo, p) < 0) in try_to_simplify_commit()
1087 static int process_parents(struct rev_info *revs, struct commit *commit, in process_parents() argument
1097 if (revs->include_check && in process_parents()
1098 !revs->include_check(commit, revs->include_check_data)) in process_parents()
1119 if (repo_parse_commit_gently(revs->repo, p, 1) < 0) in process_parents()
1139 try_to_simplify_commit(revs, commit); in process_parents()
1141 if (revs->no_walk) in process_parents()
1148 int gently = revs->ignore_missing_links || in process_parents()
1149 revs->exclude_promisor_objects; in process_parents()
1150 if (repo_parse_commit_gently(revs->repo, p, gently) < 0) { in process_parents()
1151 if (revs->exclude_promisor_objects && in process_parents()
1153 if (revs->first_parent_only) in process_parents()
1159 if (revs->sources) { in process_parents()
1160 char **slot = revision_sources_at(revs->sources, p); in process_parents()
1163 *slot = *revision_sources_at(revs->sources, commit); in process_parents()
1173 if (revs->first_parent_only) in process_parents()
1179 static void cherry_pick_list(struct commit_list *list, struct rev_info *revs) in cherry_pick_list() argument
1203 init_patch_ids(revs->repo, &ids); in cherry_pick_list()
1204 ids.diffopts.pathspec = revs->diffopt.pathspec; in cherry_pick_list()
1224 cherry_flag = revs->cherry_mark ? PATCHSAME : SHOWN; in cherry_pick_list()
1375 static void limit_left_right(struct commit_list *list, struct rev_info *revs) in limit_left_right() argument
1382 if (revs->right_only) { in limit_left_right()
1391 static int limit_list(struct rev_info *revs) in limit_list() argument
1395 struct commit_list *original_list = revs->commits; in limit_list()
1401 if (revs->ancestry_path) { in limit_list()
1415 if (revs->max_age != -1 && (commit->date < revs->max_age)) in limit_list()
1417 if (process_parents(revs, commit, &original_list, NULL) < 0) in limit_list()
1426 if (revs->min_age != -1 && (commit->date > revs->min_age) && in limit_list()
1427 !revs->line_level_traverse) in limit_list()
1436 show(revs, newlist); in limit_list()
1439 if (revs->cherry_pick || revs->cherry_mark) in limit_list()
1440 cherry_pick_list(newlist, revs); in limit_list()
1442 if (revs->left_only || revs->right_only) in limit_list()
1443 limit_left_right(newlist, revs); in limit_list()
1454 if (limiting_can_increase_treesame(revs)) { in limit_list()
1460 update_treesame(revs, c); in limit_list()
1465 revs->commits = newlist; in limit_list()
1473 static void add_rev_cmdline(struct rev_info *revs, in add_rev_cmdline() argument
1479 struct rev_cmdline_info *info = &revs->cmdline; in add_rev_cmdline()
1490 static void add_rev_cmdline_list(struct rev_info *revs, in add_rev_cmdline_list() argument
1497 add_rev_cmdline(revs, object, oid_to_hex(&object->oid), in add_rev_cmdline_list()
1539 static void init_all_refs_cb(struct all_refs_cb *cb, struct rev_info *revs, in init_all_refs_cb() argument
1542 cb->all_revs = revs; in init_all_refs_cb()
1544 revs->rev_input_given = 1; in init_all_refs_cb()
1567 struct rev_info *revs, unsigned flags, in handle_refs() argument
1577 init_all_refs_cb(&cb, revs, flags); in handle_refs()
1644 void add_reflogs_to_pending(struct rev_info *revs, unsigned flags) in add_reflogs_to_pending() argument
1648 cb.all_revs = revs; in add_reflogs_to_pending()
1653 if (!revs->single_worktree) in add_reflogs_to_pending()
1657 static void add_cache_tree(struct cache_tree *it, struct rev_info *revs, in add_cache_tree() argument
1664 struct tree *tree = lookup_tree(revs->repo, &it->oid); in add_cache_tree()
1666 add_pending_object_with_path(revs, &tree->object, "", in add_cache_tree()
1673 add_cache_tree(sub->cache_tree, revs, path, flags); in add_cache_tree()
1679 static void do_add_index_objects_to_pending(struct rev_info *revs, in do_add_index_objects_to_pending() argument
1694 blob = lookup_blob(revs->repo, &ce->oid); in do_add_index_objects_to_pending()
1698 add_pending_object_with_path(revs, &blob->object, "", in do_add_index_objects_to_pending()
1704 add_cache_tree(istate->cache_tree, revs, &path, flags); in do_add_index_objects_to_pending()
1709 void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) in add_index_objects_to_pending() argument
1713 repo_read_index(revs->repo); in add_index_objects_to_pending()
1714 do_add_index_objects_to_pending(revs, revs->repo->index, flags); in add_index_objects_to_pending()
1716 if (revs->single_worktree) in add_index_objects_to_pending()
1730 do_add_index_objects_to_pending(revs, &istate, flags); in add_index_objects_to_pending()
1737 struct rev_info *revs; member
1748 obj = get_reference(data->revs, name, oid, data->flags); in add_one_alternate_ref()
1749 add_rev_cmdline(data->revs, obj, name, REV_CMD_REV, data->flags); in add_one_alternate_ref()
1750 add_pending_object(data->revs, obj, name); in add_one_alternate_ref()
1753 static void add_alternate_refs_to_pending(struct rev_info *revs, in add_alternate_refs_to_pending() argument
1757 data.revs = revs; in add_alternate_refs_to_pending()
1762 static int add_parents_only(struct rev_info *revs, const char *arg_, int flags, in add_parents_only() argument
1779 it = get_reference(revs, arg, &oid, 0); in add_parents_only()
1780 if (!it && revs->ignore_missing) in add_parents_only()
1802 add_rev_cmdline(revs, it, arg_, REV_CMD_PARENTS_ONLY, flags); in add_parents_only()
1803 add_pending_object(revs, it, arg); in add_parents_only()
1809 struct rev_info *revs, in repo_init_revisions() argument
1812 memset(revs, 0, sizeof(*revs)); in repo_init_revisions()
1814 revs->repo = r; in repo_init_revisions()
1815 revs->abbrev = DEFAULT_ABBREV; in repo_init_revisions()
1816 revs->simplify_history = 1; in repo_init_revisions()
1817 revs->pruning.repo = r; in repo_init_revisions()
1818 revs->pruning.flags.recursive = 1; in repo_init_revisions()
1819 revs->pruning.flags.quick = 1; in repo_init_revisions()
1820 revs->pruning.add_remove = file_add_remove; in repo_init_revisions()
1821 revs->pruning.change = file_change; in repo_init_revisions()
1822 revs->pruning.change_fn_data = revs; in repo_init_revisions()
1823 revs->sort_order = REV_SORT_IN_GRAPH_ORDER; in repo_init_revisions()
1824 revs->dense = 1; in repo_init_revisions()
1825 revs->prefix = prefix; in repo_init_revisions()
1826 revs->max_age = -1; in repo_init_revisions()
1827 revs->min_age = -1; in repo_init_revisions()
1828 revs->skip_count = -1; in repo_init_revisions()
1829 revs->max_count = -1; in repo_init_revisions()
1830 revs->max_parents = -1; in repo_init_revisions()
1831 revs->expand_tabs_in_log = -1; in repo_init_revisions()
1833 revs->commit_format = CMIT_FMT_DEFAULT; in repo_init_revisions()
1834 revs->expand_tabs_in_log_default = 8; in repo_init_revisions()
1836 grep_init(&revs->grep_filter, revs->repo, prefix); in repo_init_revisions()
1837 revs->grep_filter.status_only = 1; in repo_init_revisions()
1839 repo_diff_setup(revs->repo, &revs->diffopt); in repo_init_revisions()
1840 if (prefix && !revs->diffopt.prefix) { in repo_init_revisions()
1841 revs->diffopt.prefix = prefix; in repo_init_revisions()
1842 revs->diffopt.prefix_length = strlen(prefix); in repo_init_revisions()
1845 init_display_notes(&revs->notes_opt); in repo_init_revisions()
1848 static void add_pending_commit_list(struct rev_info *revs, in add_pending_commit_list() argument
1855 add_pending_object(revs, object, oid_to_hex(&object->oid)); in add_pending_commit_list()
1860 static void prepare_show_merge(struct rev_info *revs) in prepare_show_merge() argument
1867 struct index_state *istate = revs->repo->index; in prepare_show_merge()
1875 add_pending_object(revs, &head->object, "HEAD"); in prepare_show_merge()
1876 add_pending_object(revs, &other->object, "MERGE_HEAD"); in prepare_show_merge()
1878 add_rev_cmdline_list(revs, bases, REV_CMD_MERGE_BASE, UNINTERESTING | BOTTOM); in prepare_show_merge()
1879 add_pending_commit_list(revs, bases, UNINTERESTING | BOTTOM); in prepare_show_merge()
1884 repo_read_index(revs->repo); in prepare_show_merge()
1889 if (ce_path_match(istate, ce, &revs->prune_data, NULL)) { in prepare_show_merge()
1899 clear_pathspec(&revs->prune_data); in prepare_show_merge()
1900 parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL, in prepare_show_merge()
1902 revs->limited = 1; in prepare_show_merge()
1906 struct rev_info *revs, int symmetric) in dotdot_missing() argument
1908 if (revs->ignore_missing) in dotdot_missing()
1918 struct rev_info *revs, int flags, in handle_dotdot_1() argument
1943 if (get_oid_with_context(revs->repo, a_name, oc_flags, &a_oid, a_oc) || in handle_dotdot_1()
1944 get_oid_with_context(revs->repo, b_name, oc_flags, &b_oid, b_oc)) in handle_dotdot_1()
1949 verify_non_filename(revs->prefix, arg); in handle_dotdot_1()
1953 a_obj = parse_object(revs->repo, &a_oid); in handle_dotdot_1()
1954 b_obj = parse_object(revs->repo, &b_oid); in handle_dotdot_1()
1956 return dotdot_missing(arg, dotdot, revs, symmetric); in handle_dotdot_1()
1967 a = lookup_commit_reference(revs->repo, &a_obj->oid); in handle_dotdot_1()
1968 b = lookup_commit_reference(revs->repo, &b_obj->oid); in handle_dotdot_1()
1970 return dotdot_missing(arg, dotdot, revs, symmetric); in handle_dotdot_1()
1973 add_rev_cmdline_list(revs, exclude, REV_CMD_MERGE_BASE, in handle_dotdot_1()
1975 add_pending_commit_list(revs, exclude, flags_exclude); in handle_dotdot_1()
1984 add_rev_cmdline(revs, a_obj, a_name, REV_CMD_LEFT, a_flags); in handle_dotdot_1()
1985 add_rev_cmdline(revs, b_obj, b_name, REV_CMD_RIGHT, b_flags); in handle_dotdot_1()
1986 add_pending_object_with_path(revs, a_obj, a_name, a_oc->mode, a_oc->path); in handle_dotdot_1()
1987 add_pending_object_with_path(revs, b_obj, b_name, b_oc->mode, b_oc->path); in handle_dotdot_1()
1992 struct rev_info *revs, int flags, in handle_dotdot() argument
2006 ret = handle_dotdot_1(arg, dotdot, revs, flags, cant_be_filename, in handle_dotdot()
2016 static int handle_revision_arg_1(const char *arg_, struct rev_info *revs, int flags, unsigned revar… in handle_revision_arg_1() argument
2037 if (!handle_dotdot(arg, revs, flags, revarg_opt)) in handle_revision_arg_1()
2043 if (add_parents_only(revs, arg, flags, 0)) in handle_revision_arg_1()
2050 if (!add_parents_only(revs, arg, flags ^ (UNINTERESTING | BOTTOM), 0)) in handle_revision_arg_1()
2065 if (!add_parents_only(revs, arg, flags ^ (UNINTERESTING | BOTTOM), exclude_parent)) in handle_revision_arg_1()
2078 if (get_oid_with_context(revs->repo, arg, get_sha1_flags, &oid, &oc)) in handle_revision_arg_1()
2079 return revs->ignore_missing ? 0 : -1; in handle_revision_arg_1()
2081 verify_non_filename(revs->prefix, arg); in handle_revision_arg_1()
2082 object = get_reference(revs, arg, &oid, flags ^ local_flags); in handle_revision_arg_1()
2084 return revs->ignore_missing ? 0 : -1; in handle_revision_arg_1()
2085 add_rev_cmdline(revs, object, arg_, REV_CMD_REV, flags ^ local_flags); in handle_revision_arg_1()
2086 add_pending_object_with_path(revs, object, arg, oc.mode, oc.path); in handle_revision_arg_1()
2091 int handle_revision_arg(const char *arg, struct rev_info *revs, int flags, unsigned revarg_opt) in handle_revision_arg() argument
2093 int ret = handle_revision_arg_1(arg, revs, flags, revarg_opt); in handle_revision_arg()
2095 revs->rev_input_given = 1; in handle_revision_arg()
2106 static void read_revisions_from_stdin(struct rev_info *revs, in read_revisions_from_stdin() argument
2128 if (handle_revision_arg(sb.buf, revs, 0, in read_revisions_from_stdin()
2139 static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what) in add_grep() argument
2141 append_grep_pattern(&revs->grep_filter, ptn, "command line", 0, what); in add_grep()
2144 static void add_header_grep(struct rev_info *revs, enum grep_header_field field, const char *patter… in add_header_grep() argument
2146 append_header_grep_pattern(&revs->grep_filter, field, pattern); in add_header_grep()
2149 static void add_message_grep(struct rev_info *revs, const char *pattern) in add_message_grep() argument
2151 add_grep(revs, pattern, GREP_PATTERN_BODY); in add_message_grep()
2154 static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, in handle_revision_opt() argument
2180 revs->max_count = atoi(optarg); in handle_revision_opt()
2181 revs->no_walk = 0; in handle_revision_opt()
2184 revs->skip_count = atoi(optarg); in handle_revision_opt()
2188 if (strtol_i(arg + 1, 10, &revs->max_count) < 0 || in handle_revision_opt()
2189 revs->max_count < 0) in handle_revision_opt()
2191 revs->no_walk = 0; in handle_revision_opt()
2195 revs->max_count = atoi(argv[1]); in handle_revision_opt()
2196 revs->no_walk = 0; in handle_revision_opt()
2199 revs->max_count = atoi(optarg); in handle_revision_opt()
2200 revs->no_walk = 0; in handle_revision_opt()
2202 revs->max_age = atoi(optarg); in handle_revision_opt()
2205 revs->max_age = approxidate(optarg); in handle_revision_opt()
2208 revs->max_age = approxidate(optarg); in handle_revision_opt()
2211 revs->min_age = atoi(optarg); in handle_revision_opt()
2214 revs->min_age = approxidate(optarg); in handle_revision_opt()
2217 revs->min_age = approxidate(optarg); in handle_revision_opt()
2220 revs->first_parent_only = 1; in handle_revision_opt()
2222 revs->ancestry_path = 1; in handle_revision_opt()
2223 revs->simplify_history = 0; in handle_revision_opt()
2224 revs->limited = 1; in handle_revision_opt()
2226 init_reflog_walk(&revs->reflog_info); in handle_revision_opt()
2230 revs->def = argv[1]; in handle_revision_opt()
2233 revs->show_merge = 1; in handle_revision_opt()
2235 revs->sort_order = REV_SORT_IN_GRAPH_ORDER; in handle_revision_opt()
2236 revs->topo_order = 1; in handle_revision_opt()
2238 revs->simplify_merges = 1; in handle_revision_opt()
2239 revs->topo_order = 1; in handle_revision_opt()
2240 revs->rewrite_parents = 1; in handle_revision_opt()
2241 revs->simplify_history = 0; in handle_revision_opt()
2242 revs->limited = 1; in handle_revision_opt()
2244 revs->simplify_merges = 1; in handle_revision_opt()
2245 revs->topo_order = 1; in handle_revision_opt()
2246 revs->rewrite_parents = 1; in handle_revision_opt()
2247 revs->simplify_history = 0; in handle_revision_opt()
2248 revs->simplify_by_decoration = 1; in handle_revision_opt()
2249 revs->limited = 1; in handle_revision_opt()
2250 revs->prune = 1; in handle_revision_opt()
2252 revs->sort_order = REV_SORT_BY_COMMIT_DATE; in handle_revision_opt()
2253 revs->topo_order = 1; in handle_revision_opt()
2255 revs->sort_order = REV_SORT_BY_AUTHOR_DATE; in handle_revision_opt()
2256 revs->topo_order = 1; in handle_revision_opt()
2258 revs->early_output = 100; in handle_revision_opt()
2259 revs->topo_order = 1; in handle_revision_opt()
2261 if (strtoul_ui(optarg, 10, &revs->early_output) < 0) in handle_revision_opt()
2263 revs->topo_order = 1; in handle_revision_opt()
2265 revs->rewrite_parents = 1; in handle_revision_opt()
2266 revs->print_parents = 1; in handle_revision_opt()
2268 revs->dense = 1; in handle_revision_opt()
2270 revs->dense = 0; in handle_revision_opt()
2272 revs->tree_blobs_in_commit_order = 1; in handle_revision_opt()
2274 revs->remove_empty_trees = 1; in handle_revision_opt()
2276 revs->min_parents = 2; in handle_revision_opt()
2278 revs->max_parents = 1; in handle_revision_opt()
2280 revs->min_parents = atoi(optarg); in handle_revision_opt()
2282 revs->min_parents = 0; in handle_revision_opt()
2284 revs->max_parents = atoi(optarg); in handle_revision_opt()
2286 revs->max_parents = -1; in handle_revision_opt()
2288 revs->boundary = 1; in handle_revision_opt()
2290 revs->left_right = 1; in handle_revision_opt()
2292 if (revs->right_only) in handle_revision_opt()
2295 revs->left_only = 1; in handle_revision_opt()
2297 if (revs->left_only) in handle_revision_opt()
2299 revs->right_only = 1; in handle_revision_opt()
2301 if (revs->left_only) in handle_revision_opt()
2303 revs->cherry_mark = 1; in handle_revision_opt()
2304 revs->right_only = 1; in handle_revision_opt()
2305 revs->max_parents = 1; in handle_revision_opt()
2306 revs->limited = 1; in handle_revision_opt()
2308 revs->count = 1; in handle_revision_opt()
2310 if (revs->cherry_pick) in handle_revision_opt()
2312 revs->cherry_mark = 1; in handle_revision_opt()
2313 revs->limited = 1; /* needs limit_list() */ in handle_revision_opt()
2315 if (revs->cherry_mark) in handle_revision_opt()
2317 revs->cherry_pick = 1; in handle_revision_opt()
2318 revs->limited = 1; in handle_revision_opt()
2320 revs->tag_objects = 1; in handle_revision_opt()
2321 revs->tree_objects = 1; in handle_revision_opt()
2322 revs->blob_objects = 1; in handle_revision_opt()
2324 revs->tag_objects = 1; in handle_revision_opt()
2325 revs->tree_objects = 1; in handle_revision_opt()
2326 revs->blob_objects = 1; in handle_revision_opt()
2327 revs->edge_hint = 1; in handle_revision_opt()
2329 revs->tag_objects = 1; in handle_revision_opt()
2330 revs->tree_objects = 1; in handle_revision_opt()
2331 revs->blob_objects = 1; in handle_revision_opt()
2332 revs->edge_hint = 1; in handle_revision_opt()
2333 revs->edge_hint_aggressive = 1; in handle_revision_opt()
2335 revs->tag_objects = 1; in handle_revision_opt()
2336 revs->tree_objects = 1; in handle_revision_opt()
2337 revs->blob_objects = 1; in handle_revision_opt()
2338 revs->verify_objects = 1; in handle_revision_opt()
2340 revs->unpacked = 1; in handle_revision_opt()
2344 revs->no_kept_objects = 1; in handle_revision_opt()
2345 revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS; in handle_revision_opt()
2346 revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS; in handle_revision_opt()
2348 revs->no_kept_objects = 1; in handle_revision_opt()
2350 revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS; in handle_revision_opt()
2352 revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS; in handle_revision_opt()
2354 revs->diff = 1; in handle_revision_opt()
2355 revs->diffopt.flags.recursive = 1; in handle_revision_opt()
2357 revs->diff = 1; in handle_revision_opt()
2358 revs->diffopt.flags.recursive = 1; in handle_revision_opt()
2359 revs->diffopt.flags.tree_in_recursive = 1; in handle_revision_opt()
2360 } else if ((argcount = diff_merges_parse_opts(revs, argv))) { in handle_revision_opt()
2363 revs->verbose_header = 1; in handle_revision_opt()
2365 revs->verbose_header = 1; in handle_revision_opt()
2366 revs->pretty_given = 1; in handle_revision_opt()
2367 get_commit_format(NULL, revs); in handle_revision_opt()
2374 revs->verbose_header = 1; in handle_revision_opt()
2375 revs->pretty_given = 1; in handle_revision_opt()
2376 get_commit_format(optarg, revs); in handle_revision_opt()
2378 revs->expand_tabs_in_log = 8; in handle_revision_opt()
2380 revs->expand_tabs_in_log = 0; in handle_revision_opt()
2385 revs->expand_tabs_in_log = val; in handle_revision_opt()
2387 enable_default_display_notes(&revs->notes_opt, &revs->show_notes); in handle_revision_opt()
2388 revs->show_notes_given = 1; in handle_revision_opt()
2390 revs->show_signature = 1; in handle_revision_opt()
2392 revs->show_signature = 0; in handle_revision_opt()
2394 revs->break_bar = " .........."; in handle_revision_opt()
2395 revs->track_linear = 1; in handle_revision_opt()
2396 revs->track_first_time = 1; in handle_revision_opt()
2398 revs->break_bar = xstrdup(optarg); in handle_revision_opt()
2399 revs->track_linear = 1; in handle_revision_opt()
2400 revs->track_first_time = 1; in handle_revision_opt()
2404 revs->notes_opt.use_default_notes < 0) in handle_revision_opt()
2405 revs->notes_opt.use_default_notes = 1; in handle_revision_opt()
2406 enable_ref_display_notes(&revs->notes_opt, &revs->show_notes, optarg); in handle_revision_opt()
2407 revs->show_notes_given = 1; in handle_revision_opt()
2409 disable_display_notes(&revs->notes_opt, &revs->show_notes); in handle_revision_opt()
2410 revs->show_notes_given = 1; in handle_revision_opt()
2412 revs->show_notes_given = 1; in handle_revision_opt()
2413 revs->notes_opt.use_default_notes = 1; in handle_revision_opt()
2415 revs->notes_opt.use_default_notes = 0; in handle_revision_opt()
2417 revs->verbose_header = 1; in handle_revision_opt()
2418 get_commit_format("oneline", revs); in handle_revision_opt()
2419 revs->pretty_given = 1; in handle_revision_opt()
2420 revs->abbrev_commit = 1; in handle_revision_opt()
2422 revs->topo_order = 1; in handle_revision_opt()
2423 revs->rewrite_parents = 1; in handle_revision_opt()
2424 revs->graph = graph_init(revs); in handle_revision_opt()
2426 revs->encode_email_headers = 1; in handle_revision_opt()
2428 revs->encode_email_headers = 0; in handle_revision_opt()
2430 revs->show_root_diff = 1; in handle_revision_opt()
2432 revs->no_commit_id = 1; in handle_revision_opt()
2434 revs->always_show_header = 1; in handle_revision_opt()
2436 revs->abbrev = 0; in handle_revision_opt()
2438 revs->abbrev = DEFAULT_ABBREV; in handle_revision_opt()
2440 revs->abbrev = strtoul(optarg, NULL, 10); in handle_revision_opt()
2441 if (revs->abbrev < MINIMUM_ABBREV) in handle_revision_opt()
2442 revs->abbrev = MINIMUM_ABBREV; in handle_revision_opt()
2443 else if (revs->abbrev > hexsz) in handle_revision_opt()
2444 revs->abbrev = hexsz; in handle_revision_opt()
2446 revs->abbrev_commit = 1; in handle_revision_opt()
2447 revs->abbrev_commit_given = 1; in handle_revision_opt()
2449 revs->abbrev_commit = 0; in handle_revision_opt()
2451 revs->diff = 1; in handle_revision_opt()
2452 revs->full_diff = 1; in handle_revision_opt()
2454 revs->show_pulls = 1; in handle_revision_opt()
2456 revs->simplify_history = 0; in handle_revision_opt()
2458 revs->date_mode.type = DATE_RELATIVE; in handle_revision_opt()
2459 revs->date_mode_explicit = 1; in handle_revision_opt()
2461 parse_date_format(optarg, &revs->date_mode); in handle_revision_opt()
2462 revs->date_mode_explicit = 1; in handle_revision_opt()
2465 revs->show_log_size = 1; in handle_revision_opt()
2471 add_header_grep(revs, GREP_HEADER_AUTHOR, optarg); in handle_revision_opt()
2474 add_header_grep(revs, GREP_HEADER_COMMITTER, optarg); in handle_revision_opt()
2477 add_header_grep(revs, GREP_HEADER_REFLOG, optarg); in handle_revision_opt()
2480 add_message_grep(revs, optarg); in handle_revision_opt()
2483 revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_BRE; in handle_revision_opt()
2485 revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_ERE; in handle_revision_opt()
2487 revs->grep_filter.ignore_case = 1; in handle_revision_opt()
2488 revs->diffopt.pickaxe_opts |= DIFF_PICKAXE_IGNORE_CASE; in handle_revision_opt()
2490 revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_FIXED; in handle_revision_opt()
2492 revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_PCRE; in handle_revision_opt()
2494 revs->grep_filter.all_match = 1; in handle_revision_opt()
2496 revs->invert_grep = 1; in handle_revision_opt()
2504 revs->reverse ^= 1; in handle_revision_opt()
2506 revs->children.name = "children"; in handle_revision_opt()
2507 revs->limited = 1; in handle_revision_opt()
2509 revs->ignore_missing = 1; in handle_revision_opt()
2514 revs->exclude_promisor_objects = 1; in handle_revision_opt()
2516 int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix); in handle_revision_opt()
2521 if (revs->graph && revs->track_linear) in handle_revision_opt()
2527 void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, in parse_revision_opt() argument
2531 int n = handle_revision_opt(revs, ctx->argc, ctx->argv, in parse_revision_opt()
2562 static int handle_revision_pseudo_opt(struct rev_info *revs, in handle_revision_pseudo_opt() argument
2570 if (revs->repo != the_repository) { in handle_revision_pseudo_opt()
2577 if (!revs->single_worktree) in handle_revision_pseudo_opt()
2580 refs = get_main_ref_store(revs->repo); in handle_revision_pseudo_opt()
2593 handle_refs(refs, revs, *flags, refs_for_each_ref); in handle_revision_pseudo_opt()
2594 handle_refs(refs, revs, *flags, refs_head_ref); in handle_revision_pseudo_opt()
2595 if (!revs->single_worktree) { in handle_revision_pseudo_opt()
2598 init_all_refs_cb(&cb, revs, *flags); in handle_revision_pseudo_opt()
2601 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2603 handle_refs(refs, revs, *flags, refs_for_each_branch_ref); in handle_revision_pseudo_opt()
2604 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2607 handle_refs(refs, revs, *flags, for_each_bad_bisect_ref); in handle_revision_pseudo_opt()
2608 handle_refs(refs, revs, *flags ^ (UNINTERESTING | BOTTOM), in handle_revision_pseudo_opt()
2610 revs->bisect = 1; in handle_revision_pseudo_opt()
2612 handle_refs(refs, revs, *flags, refs_for_each_tag_ref); in handle_revision_pseudo_opt()
2613 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2615 handle_refs(refs, revs, *flags, refs_for_each_remote_ref); in handle_revision_pseudo_opt()
2616 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2619 init_all_refs_cb(&cb, revs, *flags); in handle_revision_pseudo_opt()
2621 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2624 add_ref_exclusion(&revs->ref_excludes, optarg); in handle_revision_pseudo_opt()
2628 init_all_refs_cb(&cb, revs, *flags); in handle_revision_pseudo_opt()
2630 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2633 init_all_refs_cb(&cb, revs, *flags); in handle_revision_pseudo_opt()
2635 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2638 init_all_refs_cb(&cb, revs, *flags); in handle_revision_pseudo_opt()
2640 clear_ref_exclusion(&revs->ref_excludes); in handle_revision_pseudo_opt()
2642 add_reflogs_to_pending(revs, *flags); in handle_revision_pseudo_opt()
2644 add_index_objects_to_pending(revs, *flags); in handle_revision_pseudo_opt()
2646 add_alternate_refs_to_pending(revs, *flags); in handle_revision_pseudo_opt()
2650 revs->no_walk = 1; in handle_revision_pseudo_opt()
2656 revs->no_walk = 1; in handle_revision_pseudo_opt()
2658 revs->unsorted_input = 0; in handle_revision_pseudo_opt()
2660 revs->unsorted_input = 1; in handle_revision_pseudo_opt()
2664 revs->no_walk = 0; in handle_revision_pseudo_opt()
2666 revs->single_worktree = 1; in handle_revision_pseudo_opt()
2695 int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct setup_revision_opt *… in setup_revisions() argument
2730 revs, argv + i, in setup_revisions()
2738 if (revs->disable_stdin) { in setup_revisions()
2742 if (revs->read_from_stdin++) in setup_revisions()
2744 read_revisions_from_stdin(revs, &prune_data); in setup_revisions()
2753 opts = handle_revision_opt(revs, argc - i, argv + i, in setup_revisions()
2765 if (handle_revision_arg(arg, revs, flags, revarg_opt)) { in setup_revisions()
2777 verify_filename(revs->prefix, argv[j], j == i); in setup_revisions()
2799 parse_pathspec(&revs->prune_data, 0, 0, in setup_revisions()
2800 revs->prefix, prune_data.v); in setup_revisions()
2804 if (revs->def == NULL) in setup_revisions()
2805 revs->def = opt ? opt->def : NULL; in setup_revisions()
2807 opt->tweak(revs, opt); in setup_revisions()
2808 if (revs->show_merge) in setup_revisions()
2809 prepare_show_merge(revs); in setup_revisions()
2810 if (revs->def && !revs->pending.nr && !revs->rev_input_given) { in setup_revisions()
2814 if (get_oid_with_context(revs->repo, revs->def, 0, &oid, &oc)) in setup_revisions()
2815 diagnose_missing_default(revs->def); in setup_revisions()
2816 object = get_reference(revs, revs->def, &oid, 0); in setup_revisions()
2817 add_pending_object_with_mode(revs, object, revs->def, oc.mode); in setup_revisions()
2821 if (revs->diffopt.output_format & ~DIFF_FORMAT_NO_OUTPUT) in setup_revisions()
2822 revs->diff = 1; in setup_revisions()
2825 if ((revs->diffopt.pickaxe_opts & DIFF_PICKAXE_KINDS_MASK) || in setup_revisions()
2826 revs->diffopt.filter || in setup_revisions()
2827 revs->diffopt.flags.follow_renames) in setup_revisions()
2828 revs->diff = 1; in setup_revisions()
2830 if (revs->diffopt.objfind) in setup_revisions()
2831 revs->simplify_history = 0; in setup_revisions()
2833 if (revs->line_level_traverse) { in setup_revisions()
2834 if (want_ancestry(revs)) in setup_revisions()
2835 revs->limited = 1; in setup_revisions()
2836 revs->topo_order = 1; in setup_revisions()
2839 if (revs->topo_order && !generation_numbers_enabled(the_repository)) in setup_revisions()
2840 revs->limited = 1; in setup_revisions()
2842 if (revs->prune_data.nr) { in setup_revisions()
2843 copy_pathspec(&revs->pruning.pathspec, &revs->prune_data); in setup_revisions()
2845 if (!revs->diffopt.flags.follow_renames) in setup_revisions()
2846 revs->prune = 1; in setup_revisions()
2847 if (!revs->full_diff) in setup_revisions()
2848 copy_pathspec(&revs->diffopt.pathspec, in setup_revisions()
2849 &revs->prune_data); in setup_revisions()
2852 diff_merges_setup_revs(revs); in setup_revisions()
2854 revs->diffopt.abbrev = revs->abbrev; in setup_revisions()
2856 diff_setup_done(&revs->diffopt); in setup_revisions()
2859 &revs->grep_filter); in setup_revisions()
2861 revs->grep_filter.ignore_locale = 1; in setup_revisions()
2862 compile_grep_patterns(&revs->grep_filter); in setup_revisions()
2864 if (revs->reverse && revs->reflog_info) in setup_revisions()
2866 if (revs->reflog_info && revs->limited) in setup_revisions()
2868 if (revs->rewrite_parents && revs->children.name) in setup_revisions()
2874 if (revs->reverse && revs->graph) in setup_revisions()
2877 if (revs->reflog_info && revs->graph) in setup_revisions()
2879 if (revs->no_walk && revs->graph) in setup_revisions()
2881 if (!revs->reflog_info && revs->grep_filter.use_reflog_filter) in setup_revisions()
2884 if (revs->line_level_traverse && in setup_revisions()
2885 (revs->diffopt.output_format & ~(DIFF_FORMAT_PATCH | DIFF_FORMAT_NO_OUTPUT))) in setup_revisions()
2888 if (revs->expand_tabs_in_log < 0) in setup_revisions()
2889 revs->expand_tabs_in_log = revs->expand_tabs_in_log_default; in setup_revisions()
2894 static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) in add_child() argument
2899 l->next = add_decoration(&revs->children, &parent->object, l); in add_child()
2902 static int remove_duplicate_parents(struct rev_info *revs, struct commit *commit) in remove_duplicate_parents() argument
2904 struct treesame_state *ts = lookup_decoration(&revs->treesame, &commit->object); in remove_duplicate_parents()
2916 compact_treesame(revs, commit, surviving_parents); in remove_duplicate_parents()
2935 static struct merge_simplify_state *locate_simplify_state(struct rev_info *revs, struct commit *com… in locate_simplify_state() argument
2939 st = lookup_decoration(&revs->merge_simplification, &commit->object); in locate_simplify_state()
2942 add_decoration(&revs->merge_simplification, &commit->object, st); in locate_simplify_state()
3004 static int leave_one_treesame_to_parent(struct rev_info *revs, struct commit *commit) in leave_one_treesame_to_parent() argument
3006 struct treesame_state *ts = lookup_decoration(&revs->treesame, &commit->object); in leave_one_treesame_to_parent()
3066 static int remove_marked_parents(struct rev_info *revs, struct commit *commit) in remove_marked_parents() argument
3080 compact_treesame(revs, commit, nth_parent); in remove_marked_parents()
3089 update_treesame(revs, commit); in remove_marked_parents()
3094 static struct commit_list **simplify_one(struct rev_info *revs, struct commit *commit, struct commi… in simplify_one() argument
3101 st = locate_simplify_state(revs, commit); in simplify_one()
3125 pst = locate_simplify_state(revs, p->item); in simplify_one()
3130 if (revs->first_parent_only) in simplify_one()
3144 pst = locate_simplify_state(revs, p->item); in simplify_one()
3146 if (revs->first_parent_only) in simplify_one()
3150 if (revs->first_parent_only) in simplify_one()
3153 cnt = remove_duplicate_parents(revs, commit); in simplify_one()
3178 marked -= leave_one_treesame_to_parent(revs, commit); in simplify_one()
3180 cnt = remove_marked_parents(revs, commit); in simplify_one()
3196 (parent = one_relevant_parent(revs, commit->parents)) == NULL || in simplify_one()
3197 (revs->show_pulls && (commit->object.flags & PULL_MERGE))) in simplify_one()
3200 pst = locate_simplify_state(revs, parent); in simplify_one()
3206 static void simplify_merges(struct rev_info *revs) in simplify_merges() argument
3212 if (!revs->prune) in simplify_merges()
3217 for (list = revs->commits; list; list = next) { in simplify_merges()
3232 tail = simplify_one(revs, commit, tail); in simplify_merges()
3237 list = revs->commits; in simplify_merges()
3238 revs->commits = NULL; in simplify_merges()
3239 tail = &revs->commits; in simplify_merges()
3244 st = locate_simplify_state(revs, commit); in simplify_merges()
3250 static void set_children(struct rev_info *revs) in set_children() argument
3253 for (l = revs->commits; l; l = l->next) { in set_children()
3258 add_child(revs, p->item, commit); in set_children()
3272 struct rev_info *revs = cb; in mark_uninteresting() local
3273 struct object *o = lookup_unknown_object(revs->repo, oid); in mark_uninteresting()
3319 static void explore_walk_step(struct rev_info *revs) in explore_walk_step() argument
3321 struct topo_walk_info *info = revs->topo_walk_info; in explore_walk_step()
3328 if (repo_parse_commit_gently(revs->repo, c, 1) < 0) in explore_walk_step()
3333 if (revs->sort_order == REV_SORT_BY_AUTHOR_DATE) in explore_walk_step()
3336 if (revs->max_age != -1 && (c->date < revs->max_age)) in explore_walk_step()
3339 if (process_parents(revs, c, NULL, NULL) < 0) in explore_walk_step()
3349 static void explore_to_depth(struct rev_info *revs, in explore_to_depth() argument
3352 struct topo_walk_info *info = revs->topo_walk_info; in explore_to_depth()
3356 explore_walk_step(revs); in explore_to_depth()
3359 static void indegree_walk_step(struct rev_info *revs) in indegree_walk_step() argument
3362 struct topo_walk_info *info = revs->topo_walk_info; in indegree_walk_step()
3368 if (repo_parse_commit_gently(revs->repo, c, 1) < 0) in indegree_walk_step()
3373 explore_to_depth(revs, commit_graph_generation(c)); in indegree_walk_step()
3379 if (repo_parse_commit_gently(revs->repo, parent, 1) < 0) in indegree_walk_step()
3389 if (revs->first_parent_only) in indegree_walk_step()
3394 static void compute_indegrees_to_depth(struct rev_info *revs, in compute_indegrees_to_depth() argument
3397 struct topo_walk_info *info = revs->topo_walk_info; in compute_indegrees_to_depth()
3401 indegree_walk_step(revs); in compute_indegrees_to_depth()
3404 static void reset_topo_walk(struct rev_info *revs) in reset_topo_walk() argument
3406 struct topo_walk_info *info = revs->topo_walk_info; in reset_topo_walk()
3414 FREE_AND_NULL(revs->topo_walk_info); in reset_topo_walk()
3417 static void init_topo_walk(struct rev_info *revs) in init_topo_walk() argument
3421 if (revs->topo_walk_info) in init_topo_walk()
3422 reset_topo_walk(revs); in init_topo_walk()
3424 revs->topo_walk_info = xmalloc(sizeof(struct topo_walk_info)); in init_topo_walk()
3425 info = revs->topo_walk_info; in init_topo_walk()
3433 switch (revs->sort_order) { in init_topo_walk()
3451 for (list = revs->commits; list; list = list->next) { in init_topo_walk()
3455 if (repo_parse_commit_gently(revs->repo, c, 1)) in init_topo_walk()
3467 if (revs->sort_order == REV_SORT_BY_AUTHOR_DATE) in init_topo_walk()
3470 compute_indegrees_to_depth(revs, info->min_generation); in init_topo_walk()
3472 for (list = revs->commits; list; list = list->next) { in init_topo_walk()
3483 if (revs->sort_order == REV_SORT_IN_GRAPH_ORDER) in init_topo_walk()
3492 static struct commit *next_topo_commit(struct rev_info *revs) in next_topo_commit() argument
3495 struct topo_walk_info *info = revs->topo_walk_info; in next_topo_commit()
3506 static void expand_topo_walk(struct rev_info *revs, struct commit *commit) in expand_topo_walk() argument
3509 struct topo_walk_info *info = revs->topo_walk_info; in expand_topo_walk()
3510 if (process_parents(revs, commit, NULL, NULL) < 0) { in expand_topo_walk()
3511 if (!revs->ignore_missing_links) in expand_topo_walk()
3526 if (repo_parse_commit_gently(revs->repo, parent, 1) < 0) in expand_topo_walk()
3532 compute_indegrees_to_depth(revs, info->min_generation); in expand_topo_walk()
3541 if (revs->first_parent_only) in expand_topo_walk()
3546 int prepare_revision_walk(struct rev_info *revs) in prepare_revision_walk() argument
3550 struct commit_list **next = &revs->commits; in prepare_revision_walk()
3552 memcpy(&old_pending, &revs->pending, sizeof(old_pending)); in prepare_revision_walk()
3553 revs->pending.nr = 0; in prepare_revision_walk()
3554 revs->pending.alloc = 0; in prepare_revision_walk()
3555 revs->pending.objects = NULL; in prepare_revision_walk()
3558 struct commit *commit = handle_commit(revs, e); in prepare_revision_walk()
3569 if (revs->simplify_merges || in prepare_revision_walk()
3570 (revs->limited && limiting_can_increase_treesame(revs))) in prepare_revision_walk()
3571 revs->treesame.name = "treesame"; in prepare_revision_walk()
3573 if (revs->exclude_promisor_objects) { in prepare_revision_walk()
3574 for_each_packed_object(mark_uninteresting, revs, in prepare_revision_walk()
3578 if (!revs->reflog_info) in prepare_revision_walk()
3579 prepare_to_use_bloom_filter(revs); in prepare_revision_walk()
3580 if (!revs->unsorted_input) in prepare_revision_walk()
3581 commit_list_sort_by_date(&revs->commits); in prepare_revision_walk()
3582 if (revs->no_walk) in prepare_revision_walk()
3584 if (revs->limited) { in prepare_revision_walk()
3585 if (limit_list(revs) < 0) in prepare_revision_walk()
3587 if (revs->topo_order) in prepare_revision_walk()
3588 sort_in_topological_order(&revs->commits, revs->sort_order); in prepare_revision_walk()
3589 } else if (revs->topo_order) in prepare_revision_walk()
3590 init_topo_walk(revs); in prepare_revision_walk()
3591 if (revs->line_level_traverse && want_ancestry(revs)) in prepare_revision_walk()
3599 line_log_filter(revs); in prepare_revision_walk()
3600 if (revs->simplify_merges) in prepare_revision_walk()
3601 simplify_merges(revs); in prepare_revision_walk()
3602 if (revs->children.name) in prepare_revision_walk()
3603 set_children(revs); in prepare_revision_walk()
3608 static enum rewrite_result rewrite_one_1(struct rev_info *revs, in rewrite_one_1() argument
3614 if (!revs->limited) in rewrite_one_1()
3615 if (process_parents(revs, p, NULL, queue) < 0) in rewrite_one_1()
3623 if ((p = one_relevant_parent(revs, p->parents)) == NULL) in rewrite_one_1()
3645 static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp) in rewrite_one() argument
3648 enum rewrite_result ret = rewrite_one_1(revs, pp, &queue); in rewrite_one()
3649 merge_queue_into_list(&queue, &revs->commits); in rewrite_one()
3654 int rewrite_parents(struct rev_info *revs, struct commit *commit, in rewrite_parents() argument
3660 switch (rewrite_parent(revs, &parent->item)) { in rewrite_parents()
3671 remove_duplicate_parents(revs, commit); in rewrite_parents()
3784 static inline int want_ancestry(const struct rev_info *revs) in want_ancestry() argument
3786 return (revs->rewrite_parents || revs->children.name); in want_ancestry()
3793 static timestamp_t comparison_date(const struct rev_info *revs, in comparison_date() argument
3796 return revs->reflog_info ? in comparison_date()
3797 get_reflog_timestamp(revs->reflog_info) : in comparison_date()
3801 enum commit_action get_commit_action(struct rev_info *revs, struct commit *commit) in get_commit_action() argument
3805 if (revs->unpacked && has_object_pack(&commit->object.oid)) in get_commit_action()
3807 if (revs->no_kept_objects) { in get_commit_action()
3809 revs->keep_pack_cache_flags)) in get_commit_action()
3814 if (revs->line_level_traverse && !want_ancestry(revs)) { in get_commit_action()
3827 if (!line_log_process_ranges_arbitrary_commit(revs, commit)) in get_commit_action()
3830 if (revs->min_age != -1 && in get_commit_action()
3831 comparison_date(revs, commit) > revs->min_age) in get_commit_action()
3833 if (revs->min_parents || (revs->max_parents >= 0)) { in get_commit_action()
3835 if ((n < revs->min_parents) || in get_commit_action()
3836 ((revs->max_parents >= 0) && (n > revs->max_parents))) in get_commit_action()
3839 if (!commit_match(commit, revs)) in get_commit_action()
3841 if (revs->prune && revs->dense) { in get_commit_action()
3847 if (!want_ancestry(revs)) in get_commit_action()
3850 if (revs->show_pulls && (commit->object.flags & PULL_MERGE)) in get_commit_action()
3878 static void save_parents(struct rev_info *revs, struct commit *commit) in save_parents() argument
3882 if (!revs->saved_parents_slab) { in save_parents()
3883 revs->saved_parents_slab = xmalloc(sizeof(struct saved_parents)); in save_parents()
3884 init_saved_parents(revs->saved_parents_slab); in save_parents()
3887 pp = saved_parents_at(revs->saved_parents_slab, commit); in save_parents()
3906 static void free_saved_parents(struct rev_info *revs) in free_saved_parents() argument
3908 if (revs->saved_parents_slab) in free_saved_parents()
3909 clear_saved_parents(revs->saved_parents_slab); in free_saved_parents()
3912 struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit) in get_saved_parents() argument
3916 if (!revs->saved_parents_slab) in get_saved_parents()
3919 parents = *saved_parents_at(revs->saved_parents_slab, commit); in get_saved_parents()
3925 enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) in simplify_commit() argument
3927 enum commit_action action = get_commit_action(revs, commit); in simplify_commit()
3930 revs->prune && revs->dense && want_ancestry(revs)) { in simplify_commit()
3937 if (revs->full_diff) in simplify_commit()
3938 save_parents(revs, commit); in simplify_commit()
3939 if (rewrite_parents(revs, commit, rewrite_one) < 0) in simplify_commit()
3945 static void track_linear(struct rev_info *revs, struct commit *commit) in track_linear() argument
3947 if (revs->track_first_time) { in track_linear()
3948 revs->linear = 1; in track_linear()
3949 revs->track_first_time = 0; in track_linear()
3952 for (p = revs->previous_parents; p; p = p->next) in track_linear()
3956 revs->linear = p != NULL; in track_linear()
3958 if (revs->reverse) { in track_linear()
3959 if (revs->linear) in track_linear()
3962 free_commit_list(revs->previous_parents); in track_linear()
3963 revs->previous_parents = copy_commit_list(commit->parents); in track_linear()
3966 static struct commit *get_revision_1(struct rev_info *revs) in get_revision_1() argument
3971 if (revs->reflog_info) in get_revision_1()
3972 commit = next_reflog_entry(revs->reflog_info); in get_revision_1()
3973 else if (revs->topo_walk_info) in get_revision_1()
3974 commit = next_topo_commit(revs); in get_revision_1()
3976 commit = pop_commit(&revs->commits); in get_revision_1()
3981 if (revs->reflog_info) in get_revision_1()
3989 if (!revs->limited) { in get_revision_1()
3990 if (revs->max_age != -1 && in get_revision_1()
3991 comparison_date(revs, commit) < revs->max_age) in get_revision_1()
3994 if (revs->reflog_info) in get_revision_1()
3995 try_to_simplify_commit(revs, commit); in get_revision_1()
3996 else if (revs->topo_walk_info) in get_revision_1()
3997 expand_topo_walk(revs, commit); in get_revision_1()
3998 else if (process_parents(revs, commit, &revs->commits, NULL) < 0) { in get_revision_1()
3999 if (!revs->ignore_missing_links) in get_revision_1()
4005 switch (simplify_commit(revs, commit)) { in get_revision_1()
4012 if (revs->track_linear) in get_revision_1()
4013 track_linear(revs, commit); in get_revision_1()
4038 static void create_boundary_commit_list(struct rev_info *revs) in create_boundary_commit_list() argument
4042 struct object_array *array = &revs->boundary_commits; in create_boundary_commit_list()
4051 if (revs->commits) { in create_boundary_commit_list()
4052 free_commit_list(revs->commits); in create_boundary_commit_list()
4053 revs->commits = NULL; in create_boundary_commit_list()
4069 commit_list_insert(c, &revs->commits); in create_boundary_commit_list()
4076 sort_in_topological_order(&revs->commits, revs->sort_order); in create_boundary_commit_list()
4079 static struct commit *get_revision_internal(struct rev_info *revs) in get_revision_internal() argument
4084 if (revs->boundary == 2) { in get_revision_internal()
4091 c = pop_commit(&revs->commits); in get_revision_internal()
4107 if (revs->max_count) { in get_revision_internal()
4108 c = get_revision_1(revs); in get_revision_internal()
4110 while (revs->skip_count > 0) { in get_revision_internal()
4111 revs->skip_count--; in get_revision_internal()
4112 c = get_revision_1(revs); in get_revision_internal()
4118 if (revs->max_count > 0) in get_revision_internal()
4119 revs->max_count--; in get_revision_internal()
4125 if (!revs->boundary) in get_revision_internal()
4134 revs->boundary = 2; in get_revision_internal()
4140 create_boundary_commit_list(revs); in get_revision_internal()
4142 return get_revision_internal(revs); in get_revision_internal()
4158 gc_boundary(&revs->boundary_commits); in get_revision_internal()
4159 add_object_array(p, NULL, &revs->boundary_commits); in get_revision_internal()
4165 struct commit *get_revision(struct rev_info *revs) in get_revision() argument
4170 if (revs->reverse) { in get_revision()
4172 while ((c = get_revision_internal(revs))) in get_revision()
4174 revs->commits = reversed; in get_revision()
4175 revs->reverse = 0; in get_revision()
4176 revs->reverse_output_stage = 1; in get_revision()
4179 if (revs->reverse_output_stage) { in get_revision()
4180 c = pop_commit(&revs->commits); in get_revision()
4181 if (revs->track_linear) in get_revision()
4182 revs->linear = !!(c && c->object.flags & TRACK_LINEAR); in get_revision()
4186 c = get_revision_internal(revs); in get_revision()
4187 if (c && revs->graph) in get_revision()
4188 graph_update(revs->graph, c); in get_revision()
4190 free_saved_parents(revs); in get_revision()
4191 if (revs->previous_parents) { in get_revision()
4192 free_commit_list(revs->previous_parents); in get_revision()
4193 revs->previous_parents = NULL; in get_revision()
4199 const char *get_revision_mark(const struct rev_info *revs, const struct commit *commit) in get_revision_mark() argument
4207 else if (!revs || revs->left_right) { in get_revision_mark()
4212 } else if (revs->graph) in get_revision_mark()
4214 else if (revs->cherry_mark) in get_revision_mark()
4219 void put_revision_mark(const struct rev_info *revs, const struct commit *commit) in put_revision_mark() argument
4221 const char *mark = get_revision_mark(revs, commit); in put_revision_mark()