revision.h 2.3 KB
Newer Older
1 2 3 4 5
#ifndef REVISION_H
#define REVISION_H

#define SEEN		(1u<<0)
#define UNINTERESTING   (1u<<1)
6
#define TREECHANGE	(1u<<2)
7
#define SHOWN		(1u<<3)
8
#define TMP_MARK	(1u<<4) /* for isolated cases; clean after use */
J
Junio C Hamano 已提交
9
#define BOUNDARY	(1u<<5)
10
#define ADDED		(1u<<6)	/* Parents already parsed and added? */
11

12 13 14 15
struct rev_info;

typedef void (prune_fn_t)(struct rev_info *revs, struct commit *commit);

16 17 18 19 20 21 22
struct rev_info {
	/* Starting list */
	struct commit_list *commits;
	struct object_list *pending_objects;

	/* Basic information */
	const char *prefix;
23 24
	void *prune_data;
	prune_fn_t *prune_fn;
25 26 27

	/* Traversal flags */
	unsigned int	dense:1,
28
			no_merges:1,
L
Linus Torvalds 已提交
29
			no_walk:1,
30 31 32 33 34 35
			remove_empty_trees:1,
			lifo:1,
			topo_order:1,
			tag_objects:1,
			tree_objects:1,
			blob_objects:1,
36 37
			edge_hint:1,
			limited:1,
J
Junio C Hamano 已提交
38
			unpacked:1,
39 40
			boundary:1,
			parents:1;
41

42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
	/* Diff flags */
	unsigned int	diff:1,
			full_diff:1,
			show_root_diff:1,
			no_commit_id:1,
			verbose_header:1,
			ignore_merges:1,
			combine_merges:1,
			dense_combined_merges:1,
			always_show_header:1;

	/* Format info */
	unsigned int	abbrev_commit:1;
	unsigned int	abbrev;
	enum cmit_fmt	commit_format;
	const char	*header_prefix;
	const char	*header;

60 61 62 63
	/* special limits */
	int max_count;
	unsigned long max_age;
	unsigned long min_age;
64

65
	/* diff info for patches and for paths limiting */
66
	struct diff_options diffopt;
67
	struct diff_options pruning;
68

69 70
	topo_sort_set_fn_t topo_setter;
	topo_sort_get_fn_t topo_getter;
71 72
};

73 74 75 76
#define REV_TREE_SAME		0
#define REV_TREE_NEW		1
#define REV_TREE_DIFFERENT	2

77
/* revision.c */
78 79
extern int rev_same_tree_as_empty(struct rev_info *, struct tree *t1);
extern int rev_compare_tree(struct rev_info *, struct tree *t1, struct tree *t2);
80 81

extern void init_revisions(struct rev_info *revs);
82 83 84 85
extern int setup_revisions(int argc, const char **argv, struct rev_info *revs, const char *def);
extern void prepare_revision_walk(struct rev_info *revs);
extern struct commit *get_revision(struct rev_info *revs);

86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
extern void mark_parents_uninteresting(struct commit *commit);
extern void mark_tree_uninteresting(struct tree *tree);

struct name_path {
	struct name_path *up;
	int elem_len;
	const char *elem;
};

extern struct object_list **add_object(struct object *obj,
				       struct object_list **p,
				       struct name_path *path,
				       const char *name);

#endif