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:
15
cache.h
15
cache.h
@ -74,6 +74,21 @@ unsigned long git_deflate_bound(git_zstream *, unsigned long);
|
||||
#define S_IFGITLINK 0160000
|
||||
#define S_ISGITLINK(m) (((m) & S_IFMT) == S_IFGITLINK)
|
||||
|
||||
/*
|
||||
* Some mode bits are also used internally for computations.
|
||||
*
|
||||
* They *must* not overlap with any valid modes, and they *must* not be emitted
|
||||
* to outside world - i.e. appear on disk or network. In other words, it's just
|
||||
* temporary fields, which we internally use, but they have to stay in-house.
|
||||
*
|
||||
* ( such approach is valid, as standard S_IF* fits into 16 bits, and in Git
|
||||
* codebase mode is `unsigned int` which is assumed to be at least 32 bits )
|
||||
*/
|
||||
|
||||
/* used internally in tree-diff */
|
||||
#define S_DIFFTREE_IFXMIN_NEQ 0x80000000
|
||||
|
||||
|
||||
/*
|
||||
* Intensive research over the course of many years has shown that
|
||||
* port 9418 is totally unused by anything else. Or
|
||||
|
Reference in New Issue
Block a user