Merge branch 'ks/tree-diff-nway'
Instead of running N pair-wise diff-trees when inspecting a N-parent merge, find the set of paths that were touched by walking N+1 trees in parallel. These set of paths can then be turned into N pair-wise diff-tree results to be processed through rename detections and such. And N=2 case nicely degenerates to the usual 2-way diff-tree, which is very nice. * ks/tree-diff-nway: mingw: activate alloca combine-diff: speed it up, by using multiparent diff tree-walker directly tree-diff: rework diff_tree() to generate diffs for multiparent cases as well Portable alloca for Git tree-diff: reuse base str(buf) memory on sub-tree recursion tree-diff: no need to call "full" diff_tree_sha1 from show_path() tree-diff: rework diff_tree interface to be sha1 based tree-diff: diff_tree() should now be static tree-diff: remove special-case diff-emitting code for empty-tree cases tree-diff: simplify tree_entry_pathcmp tree-diff: show_path prototype is not needed anymore tree-diff: rename compare_tree_entry -> tree_entry_pathcmp tree-diff: move all action-taking code out of compare_tree_entry() tree-diff: don't assume compare_tree_entry() returns -1,0,1 tree-diff: consolidate code for emitting diffs and recursion in one place tree-diff: show_tree() is not needed tree-diff: no need to pass match to skip_uninteresting() tree-diff: no need to manually verify that there is no mode change for a path combine-diff: move changed-paths scanning logic into its own function combine-diff: move show_log_first logic/action out of paths scanning
This commit is contained in:
11
diff.h
11
diff.h
@ -15,6 +15,10 @@ struct diff_filespec;
|
||||
struct userdiff_driver;
|
||||
struct sha1_array;
|
||||
struct commit;
|
||||
struct combine_diff_path;
|
||||
|
||||
typedef int (*pathchange_fn_t)(struct diff_options *options,
|
||||
struct combine_diff_path *path);
|
||||
|
||||
typedef void (*change_fn_t)(struct diff_options *options,
|
||||
unsigned old_mode, unsigned new_mode,
|
||||
@ -157,6 +161,7 @@ struct diff_options {
|
||||
int close_file;
|
||||
|
||||
struct pathspec pathspec;
|
||||
pathchange_fn_t pathchange;
|
||||
change_fn_t change;
|
||||
add_remove_fn_t add_remove;
|
||||
diff_format_fn_t format_callback;
|
||||
@ -189,8 +194,10 @@ const char *diff_line_prefix(struct diff_options *);
|
||||
|
||||
extern const char mime_boundary_leader[];
|
||||
|
||||
extern int diff_tree(struct tree_desc *t1, struct tree_desc *t2,
|
||||
const char *base, struct diff_options *opt);
|
||||
extern struct combine_diff_path *diff_tree_paths(
|
||||
struct combine_diff_path *p, const unsigned char *sha1,
|
||||
const unsigned char **parent_sha1, int nparent,
|
||||
struct strbuf *base, struct diff_options *opt);
|
||||
extern int diff_tree_sha1(const unsigned char *old, const unsigned char *new,
|
||||
const char *base, struct diff_options *opt);
|
||||
extern int diff_root_tree_sha1(const unsigned char *new, const char *base,
|
||||
|
||||
Reference in New Issue
Block a user