chiark / gitweb /
new THEORY, define inpatch
[topbloke.git] / DESIGN
diff --git a/DESIGN b/DESIGN
index 09cea32e66551b45d24848671b94e2251662db94..97f06810fe75996cfdfb35d656934e591a376465 100644 (file)
--- a/DESIGN
+++ b/DESIGN
@@ -22,7 +22,7 @@ Basic update algorithm:
 
        Find the (latest) common ancestor.
 
-       Check for unwanted dependency removals.  
+       Check for unwanted dependency removals.
        An unwanted dependency removal is
           A branch in the desired included deps
           Which exists in the common ancestor's actual included deps
@@ -112,7 +112,7 @@ Basic update algorithm:
 The "best order" for merges is in order of recency of common
 ancestor, most recent first, and if that does not distinguish,
 merging from local branches first.
-     
+
 "Recency" refers to the order from git-rev-list --date-order.
 
 Actual included deps:
@@ -225,7 +225,7 @@ OK so here is a plan:
   Check for merge success in the index and compare to exit status
   from git-merge (which is 1 if the merge failed).
   Adjust the metadata.
-  Print appropriate big fat warnings if we have merge conflicts in our 
+  Print appropriate big fat warnings if we have merge conflicts in our
   metadata.
   Commit, adjusting the parents of the new commit to the original
   parents if we made the merge with special massaged parents.
@@ -259,21 +259,85 @@ Unwanted removal search subgraphs:
 inc  inc..
 /  ???   \
 
-   rm          
+    rm
 inc..  rm..    merge of a removal, search down the rm path
 /  [inc]  \
 
   inc          ??? call it an inclusion, terminate the search
   rm
 
-  inc          merge of an inclusion, terminates search
+   inc         merge of an inclusion, terminates search
 inc..  rm..
 /  [rm]  \
 
-  inc          ??? call it an inclusion, terminate search
+   inc         ??? call it an inclusion, terminate search
 rm..  rm..
 /  ???    \
-  
+
 
   rm   inc       inc          rm       irrelevant
   rm   inc     inc inc..    rm rm..
+
+
+
+          OUR BASE              SOURCE                OUR IT TIP
+               |                  |                       |
+               |                  |                       |
+   ADD DEP WH/ inc                rm                      |
+    NEEDS IT   /|                 /\                      |
+             / |                rm  \                     |
+            /  | ______________'/    \                    |
+         inc   |'              /      \                   |     IT tip
+           /   inc     REMOVAL rm       \                         |    elsewhere
+          /     |             /          \                        |   |   |
+        /      |           inc           \                |   |   |
+     some IT    |           /              |                      |   |   |
+                |         inc              |                      |   |   |
+               /           |               |                      |   |   |
+              /          inc               |                      |   |   |
+             |           / |               |                      |   |   |
+           /           /  inc             |               |   |   |
+          /           |   | `------------ | ----<-------- | -.|   |
+                 /           inc  inc             |               |   *2  |
+         |            |`- | ------------- | ----<--------.|   |   |
+         |            `---inc             |              1*  /    |
+         |                |               |               | /     |
+         |     RE-INCLUDE inc             rm REMOVAL      |'      |
+        inc     \          |               |                      |       |
+         |      * REMOVAL rm              |               |       |
+                 |                |              /                |       |
+                 |`-------------- | ----------. /                 |       |
+                 |                |           inc ANC2            |       |
+        inc               inc         /                   |       |
+         |`.____________  |          /                    |       |
+         |              `inc ANC1   /                     |       |
+         |                |        /`--------<----------- | ---.  |
+       without            inc     /                       |     \/
+         |                |      /                        |     /
+          \    RE-INCLUDE inc   /                         |    /
+                   \   \          |    /                          |   /
+            \   * REMOVAL rm  /                           |  /
+              \            |  /                                   | /
+               \           inc FIRST ADD DEP                      |/
+               \          |  \                            *3
+                \         |   `------------<-------------.|
+                         \        |                               |
+                  \       without                         |
+                   \_____ |                               |
+                         `without                         |
+                          |                               |
+                                                         IT
+
+
+  Merge 1* and 2*, diff against some relevant base branch commit
+  or something, and apply to proposed. ???
+
+
+After we are done:
+  source tip is included in our base
+
+Each time:
+  * pick common ancestor
+  * compute whether merge from common anc would unwantedly remove
+  * if so we arrange that the common anc is a "rm" but our branch
+    actually contains IT