mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
6b9c58f466
Merging all three option parsers related to whatchanged is unarguably the right thing, but the fallout was too big to scare me away. Let's try it once again, but once step at time. This splits out init_revisions() call from setup_revisions(), so that the callers can set different defaults to match the traditional benaviour. The rev-list command is still broken in a big way, which is the topic of next step. Signed-off-by: Junio C Hamano <junkio@cox.net>
107 lines
3.0 KiB
C
107 lines
3.0 KiB
C
#ifndef COMMIT_H
|
|
#define COMMIT_H
|
|
|
|
#include "object.h"
|
|
#include "tree.h"
|
|
|
|
struct commit_list {
|
|
struct commit *item;
|
|
struct commit_list *next;
|
|
};
|
|
|
|
struct commit {
|
|
struct object object;
|
|
unsigned long date;
|
|
struct commit_list *parents;
|
|
struct tree *tree;
|
|
char *buffer;
|
|
};
|
|
|
|
extern int save_commit_buffer;
|
|
extern const char *commit_type;
|
|
|
|
struct commit *lookup_commit(const unsigned char *sha1);
|
|
struct commit *lookup_commit_reference(const unsigned char *sha1);
|
|
struct commit *lookup_commit_reference_gently(const unsigned char *sha1,
|
|
int quiet);
|
|
|
|
int parse_commit_buffer(struct commit *item, void *buffer, unsigned long size);
|
|
|
|
int parse_commit(struct commit *item);
|
|
|
|
struct commit_list * commit_list_insert(struct commit *item, struct commit_list **list_p);
|
|
struct commit_list * insert_by_date(struct commit *item, struct commit_list **list);
|
|
|
|
void free_commit_list(struct commit_list *list);
|
|
|
|
void sort_by_date(struct commit_list **list);
|
|
|
|
/* Commit formats */
|
|
enum cmit_fmt {
|
|
CMIT_FMT_RAW,
|
|
CMIT_FMT_MEDIUM,
|
|
CMIT_FMT_DEFAULT = CMIT_FMT_MEDIUM,
|
|
CMIT_FMT_SHORT,
|
|
CMIT_FMT_FULL,
|
|
CMIT_FMT_FULLER,
|
|
CMIT_FMT_ONELINE,
|
|
|
|
CMIT_FMT_UNSPECIFIED,
|
|
};
|
|
|
|
extern enum cmit_fmt get_commit_format(const char *arg);
|
|
extern unsigned long pretty_print_commit(enum cmit_fmt fmt, const struct commit *, unsigned long len, char *buf, unsigned long space, int abbrev);
|
|
|
|
/** Removes the first commit from a list sorted by date, and adds all
|
|
* of its parents.
|
|
**/
|
|
struct commit *pop_most_recent_commit(struct commit_list **list,
|
|
unsigned int mark);
|
|
|
|
struct commit *pop_commit(struct commit_list **stack);
|
|
|
|
void clear_commit_marks(struct commit *commit, unsigned int mark);
|
|
|
|
int count_parents(struct commit * commit);
|
|
|
|
/*
|
|
* Performs an in-place topological sort of list supplied.
|
|
*
|
|
* Pre-conditions for sort_in_topological_order:
|
|
* all commits in input list and all parents of those
|
|
* commits must have object.util == NULL
|
|
*
|
|
* Pre-conditions for sort_in_topological_order_fn:
|
|
* all commits in input list and all parents of those
|
|
* commits must have getter(commit) == NULL
|
|
*
|
|
* Post-conditions:
|
|
* invariant of resulting list is:
|
|
* a reachable from b => ord(b) < ord(a)
|
|
* in addition, when lifo == 0, commits on parallel tracks are
|
|
* sorted in the dates order.
|
|
*/
|
|
|
|
typedef void (*topo_sort_set_fn_t)(struct commit*, void *data);
|
|
typedef void* (*topo_sort_get_fn_t)(struct commit*);
|
|
|
|
void topo_sort_default_setter(struct commit *c, void *data);
|
|
void *topo_sort_default_getter(struct commit *c);
|
|
|
|
void sort_in_topological_order(struct commit_list ** list, int lifo);
|
|
void sort_in_topological_order_fn(struct commit_list ** list, int lifo,
|
|
topo_sort_set_fn_t setter,
|
|
topo_sort_get_fn_t getter);
|
|
|
|
struct commit_graft {
|
|
unsigned char sha1[20];
|
|
int nr_parent;
|
|
unsigned char parent[FLEX_ARRAY][20]; /* more */
|
|
};
|
|
|
|
struct commit_graft *read_graft_line(char *buf, int len);
|
|
int register_commit_graft(struct commit_graft *, int);
|
|
int read_graft_file(const char *graft_file);
|
|
|
|
#endif /* COMMIT_H */
|