about summary refs log tree commit diff
path: root/third_party/git/Documentation/technical/trivial-merge.txt
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2021-09-21T10·03+0300
committerVincent Ambo <mail@tazj.in>2021-09-21T11·29+0300
commit43b1791ec601732ac31195df96781a848360a9ac (patch)
treedaae8d638343295d2f1f7da955e556ef4c958864 /third_party/git/Documentation/technical/trivial-merge.txt
parent2d8e7dc9d9c38127ec4ebd13aee8e8f586a43318 (diff)
chore(3p/git): Unvendor git and track patches instead r/2903
This was vendored a long time ago under the expectation that keeping
it in sync with cgit would be easier this way, but it has proven not
to be a big issue.

On the other hand, a vendored copy of git is an annoying maintenance
burden. It is much easier to rebase the single (dottime) patch that we
have.

This removes the vendored copy of git and instead passes the git
source code to cgit via `pkgs.srcOnly`, which includes the applied
patch so that cgit can continue rendering dottime.

Change-Id: If31f62dea7ce688fd1b9050204e9378019775f2b
Diffstat (limited to 'third_party/git/Documentation/technical/trivial-merge.txt')
-rw-r--r--third_party/git/Documentation/technical/trivial-merge.txt121
1 files changed, 0 insertions, 121 deletions
diff --git a/third_party/git/Documentation/technical/trivial-merge.txt b/third_party/git/Documentation/technical/trivial-merge.txt
deleted file mode 100644
index 1f1c33d0da30..000000000000
--- a/third_party/git/Documentation/technical/trivial-merge.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-Trivial merge rules
-===================
-
-This document describes the outcomes of the trivial merge logic in read-tree.
-
-One-way merge
--------------
-
-This replaces the index with a different tree, keeping the stat info
-for entries that don't change, and allowing -u to make the minimum
-required changes to the working tree to have it match.
-
-Entries marked '+' have stat information. Spaces marked '*' don't
-affect the result.
-
-   index   tree    result
-   -----------------------
-   *       (empty) (empty)
-   (empty) tree    tree
-   index+  tree    tree
-   index+  index   index+
-
-Two-way merge
--------------
-
-It is permitted for the index to lack an entry; this does not prevent
-any case from applying.
-
-If the index exists, it is an error for it not to match either the old
-or the result.
-
-If multiple cases apply, the one used is listed first.
-
-A result which changes the index is an error if the index is not empty
-and not up to date.
-
-Entries marked '+' have stat information. Spaces marked '*' don't
-affect the result.
-
- case  index   old     new     result
- -------------------------------------
- 0/2   (empty) *       (empty) (empty)
- 1/3   (empty) *       new     new
- 4/5   index+  (empty) (empty) index+
- 6/7   index+  (empty) index   index+
- 10    index+  index   (empty) (empty)
- 14/15 index+  old     old     index+
- 18/19 index+  old     index   index+
- 20    index+  index   new     new
-
-Three-way merge
----------------
-
-It is permitted for the index to lack an entry; this does not prevent
-any case from applying.
-
-If the index exists, it is an error for it not to match either the
-head or (if the merge is trivial) the result.
-
-If multiple cases apply, the one used is listed first.
-
-A result of "no merge" means that index is left in stage 0, ancest in
-stage 1, head in stage 2, and remote in stage 3 (if any of these are
-empty, no entry is left for that stage). Otherwise, the given entry is
-left in stage 0, and there are no other entries.
-
-A result of "no merge" is an error if the index is not empty and not
-up to date.
-
-*empty* means that the tree must not have a directory-file conflict
- with the entry.
-
-For multiple ancestors, a '+' means that this case applies even if
-only one ancestor or remote fits; a '^' means all of the ancestors
-must be the same.
-
- case  ancest    head    remote    result
- ----------------------------------------
- 1     (empty)+  (empty) (empty)   (empty)
- 2ALT  (empty)+  *empty* remote    remote
- 2     (empty)^  (empty) remote    no merge
- 3ALT  (empty)+  head    *empty*   head
- 3     (empty)^  head    (empty)   no merge
- 4     (empty)^  head    remote    no merge
- 5ALT  *         head    head      head
- 6     ancest+   (empty) (empty)   no merge
- 8     ancest^   (empty) ancest    no merge
- 7     ancest+   (empty) remote    no merge
- 10    ancest^   ancest  (empty)   no merge
- 9     ancest+   head    (empty)   no merge
- 16    anc1/anc2 anc1    anc2      no merge
- 13    ancest+   head    ancest    head
- 14    ancest+   ancest  remote    remote
- 11    ancest+   head    remote    no merge
-
-Only #2ALT and #3ALT use *empty*, because these are the only cases
-where there can be conflicts that didn't exist before. Note that we
-allow directory-file conflicts between things in different stages
-after the trivial merge.
-
-A possible alternative for #6 is (empty), which would make it like
-#1. This is not used, due to the likelihood that it arises due to
-moving the file to multiple different locations or moving and deleting
-it in different branches.
-
-Case #1 is included for completeness, and also in case we decide to
-put on '+' markings; any path that is never mentioned at all isn't
-handled.
-
-Note that #16 is when both #13 and #14 apply; in this case, we refuse
-the trivial merge, because we can't tell from this data which is
-right. This is a case of a reverted patch (in some direction, maybe
-multiple times), and the right answer depends on looking at crossings
-of history or common ancestors of the ancestors.
-
-Note that, between #6, #7, #9, and #11, all cases not otherwise
-covered are handled in this table.
-
-For #8 and #10, there is alternative behavior, not currently
-implemented, where the result is (empty). As currently implemented,
-the automatic merge will generally give this effect.