pr-1122/newren/in-core-merge-tree-v2
tagged this
29 Jan 18:07
Note: Depends on en/remerge-diff (Note2: This is a continuation of my series at [0], but I can't change the base repository for a pull request in GitHub so I had to open a new PR and that makes it look like a new series. [0] https://lore.kernel.org/git/pull.1114.v2.git.git.1641403655.gitgitgadget@gmail.com/) == Basic Summary == This series introduces a new mode to git merge-tree allowing it to perform real merges (three-way text content merges, recursive ancestor consolidation, rename detection, proper directory/file conflict handling, etc.) and write the result as a toplevel tree. It doesn't touch the working tree or index, and doesn't create any commits or update any refs. == Updates Log == Stuff NOT included that reviewers brought up in the last round: * Very generic (mode, oid, stage, filename) printing formatting[1] * Always printing 3 stages for each filename with conflicts[2] [1] https://lore.kernel.org/git/CABPp-BGnOes7J_piDyBUeuLVm274w4-9G3k0vR-0it3z7TPn_w@mail.gmail.com/ [2] https://lore.kernel.org/git/CABPp-BG2rMEYBLuBW=0wtpJe4aUFGCFa8D0NTSKz9Sm+CkXPxw@mail.gmail.com/ Updates since v3 (which looks like v1 due to the re-submit; thanks to René, Ævar, Christian, Dscho for very helpful feedback): * New patch from Dscho allowing diff_warn_rename_limit() to print somewhere other than stdout (I hope he's okay with me including his Signed-off-by) * Now prints filenames relative to prefix, much like ls-files * Renamed --exclude-oids-and-modes to --exclude-modes-oids-stages and gave it a -l shorthand; I'm wondering if I should just drop this option, though. * And numerous cleanups, in lots of areas: * Multiple parse-options cleanups * Lots of commit message cleanups * Wording tweaks to the "Description" section of the manual * Several small code cleanups * I dropped the RFC label Updates since v2 (thanks to Christian, Dscho, Ramsay, and René for suggestions and comments on v2): * Significant changes to output format: * Flags no longer take a filename for additional output; they write to stdout instead. * More information included by default when there are conflicts (no need to request it with additional flags, instead flags can be used to suppress it). * Provide (mode, oid, stage, file) tuples -- i.e. ls-files -u style of information -- when there are conflicts. Add a flag to only list conflicted files if that's preferred. * Much more thorough manual for git-merge-tree.txt * Renamed option from --real to --write-tree * Accept an optional --trivial-merge option to get old style merge-tree behavior * Allow both --write-tree and --trivial-merge to be omitted since we can deduce which from number of arguments * Document exit code when the merge cannot be run (so we can distinguish other error cases from conflicts) * testcase cleanups: test_tick, early skip of test when using recursive backend, variable renames, etc. * various minor code cleanups * Add a new --allow-unrelated-histories option (with same meaning as the one used in git merge) * Rebased on top of en/remerge-diff to avoid a small conflict Updates since v1 (thanks to Johannes Altmanninger and Fabian for suggestions on v1): * Fixed a bad patch splitting, and a style issue pointed out by Johannes Altimanninger * Fixed misleading commit messages in new test cases * Fixed my comments about how commit-tree could be used to correctly use two -p flags Elijah Newren (12): merge-tree: rename merge_trees() to trivial_merge_trees() merge-tree: move logic for existing merge into new function merge-tree: add option parsing and initial shell for real merge function merge-tree: implement real merges merge-ort: split out a separate display_update_messages() function merge-ort: allow update messages to be written to different file stream merge-tree: support including merge messages in output merge-ort: provide a merge_get_conflicted_files() helper function merge-tree: provide a list of which files have conflicts merge-tree: provide easy access to `ls-files -u` style info merge-tree: add a --allow-unrelated-histories flag git-merge-tree.txt: add a section on potentional usage mistakes Johannes Schindelin (1): diff: allow diff_warn_rename_limit to write somewhere besides stdout Documentation/git-merge-tree.txt | 179 ++++++++++++++++++++++++++++--- builtin/merge-tree.c | 162 +++++++++++++++++++++++++--- diff.c | 20 ++-- diff.h | 3 +- git.c | 2 +- merge-ort.c | 109 ++++++++++++------- merge-ort.h | 30 ++++++ merge-recursive.c | 3 +- t/t4301-merge-tree-write-tree.sh | 164 ++++++++++++++++++++++++++++ 9 files changed, 603 insertions(+), 69 deletions(-) create mode 100755 t/t4301-merge-tree-write-tree.sh base-commit: ea5df61cf358d3c831189e2f04863abc2157e3e1 Submitted-As: https://lore.kernel.org/git/pull.1122.v2.git.1643479633.gitgitgadget@gmail.com In-Reply-To: https://lore.kernel.org/git/pull.1122.git.1642888562.gitgitgadget@gmail.com
Assets 2
-
2022-01-29T18:07:13Z -
2022-01-29T18:07:13Z - Loading