#define SYMMETRIC_LEFT (1u<<8)
#define PATCHSAME (1u<<9)
#define BOTTOM (1u<<10)
-#define USER_GIVEN (1u<<25) /* given directly by the user */
+/*
+ * Indicates object was reached by traversal. i.e. not given by user on
+ * command-line or stdin.
+ * NEEDSWORK: NOT_USER_GIVEN doesn't apply to commits because we only support
+ * filtering trees and blobs, but it may be useful to support filtering commits
+ * in the future.
+ */
+#define NOT_USER_GIVEN (1u<<25)
#define TRACK_LINEAR (1u<<26)
-#define ALL_REV_FLAGS (((1u<<11)-1) | USER_GIVEN | TRACK_LINEAR)
+#define ALL_REV_FLAGS (((1u<<11)-1) | NOT_USER_GIVEN | TRACK_LINEAR)
+
+#define TOPO_WALK_EXPLORED (1u<<27)
+#define TOPO_WALK_INDEGREE (1u<<28)
#define DECORATE_SHORT_REFS 1
#define DECORATE_FULL_REFS 2
#define REVISION_WALK_NO_WALK_SORTED 1
#define REVISION_WALK_NO_WALK_UNSORTED 2
+struct oidset;
+struct topo_walk_info;
+
struct rev_info {
/* Starting list */
struct commit_list *commits;
line_level_traverse:1,
tree_blobs_in_commit_order:1,
+ /*
+ * Blobs are shown without regard for their existence.
+ * But not so for trees: unless exclude_promisor_objects
+ * is set and the tree in question is a promisor object;
+ * OR ignore_missing_links is set, the revision walker
+ * dies with a "bad tree object HASH" message when
+ * encountering a missing tree. For callers that can
+ * handle missing trees and want them to be filterable
+ * and showable, set this to true. The revision walker
+ * will filter and show such a missing tree as usual,
+ * but will not attempt to recurse into this tree
+ * object.
+ */
+ do_not_die_on_missing_tree:1,
+
/* for internal use only */
exclude_promisor_objects:1;
verbose_header:1,
ignore_merges:1,
combine_merges:1,
+ combined_all_paths:1,
dense_combined_merges:1,
always_show_header:1;
const char *break_bar;
struct revision_sources *sources;
+
+ struct topo_walk_info *topo_walk_info;
};
int ref_excluded(struct string_list *, const char *path);
const char *def;
void (*tweak)(struct rev_info *, struct setup_revision_opt *);
const char *submodule; /* TODO: drop this and use rev_info->repo */
- int assume_dashdash;
+ unsigned int assume_dashdash:1,
+ allow_exclude_promisor_objects:1;
unsigned revarg_opt;
};
void mark_parents_uninteresting(struct commit *commit);
void mark_tree_uninteresting(struct repository *r, struct tree *tree);
+void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees);
void show_object_with_name(FILE *, struct object *, const char *);