chiark / gitweb /
Some thoughts
[topbloke.git] / DESIGN
diff --git a/DESIGN b/DESIGN
index b7c677d51e5bd7c7e943214739cbae8cd135bd46..a7c142b3cefbeed0f09d5129d1caa4efaad527b5 100644 (file)
--- a/DESIGN
+++ b/DESIGN
@@ -19,7 +19,7 @@ Basic update algorithm:
             - the branch for each direct dep
             - the remote base)
 
-       Find the common ancestor.
+       Find the (latest) common ancestor.
 
        Check for unwanted dependency removals.  
        An unwanted dependency removal is
@@ -30,14 +30,23 @@ Basic update algorithm:
           which have already occurred on our base; these will be
           reverted later.)
        For each unwanted dependency removal (ie for each such
-       branch), find the most recent commit which unwantedly removed
-       the dep from the source's actual included deps ("relevant
-       unwanted removal commit").  (Abort if any such commit is a
-       merge.)  Select the earliest relevant unwanted removal commit
-       (from the set of relevant unwanted removal commits
-       corresponding to the unwanted dependency removals).
-       Merge from the ancestor of the relevant unwanted removal commit.
-       Merge from the relevant unwanted removal commit using -s ours.
+       branch), search as follows:
+          * An "unwanted removal commit" is a non-merge commit in the
+            history of the source, which unwantedly removes the dep
+            from the actual included deps.
+          * But the search stops at any point where we would have to
+            traverse a commit where .topbloke/deps is empty (which
+            stops us looking into the hitory of non-topbloke-controlled
+            branches).  This can be done with git-rev-list
+            --remove-empty.
+          * The the relevant unwanted removal commit for that dep is
+            the most recent unwanted removal commit, as defined.
+       Select the unwantedly removed dep whose relevant unwanted
+       removal commit is the earliest.  Merge from the ancestor of
+       that relevant unwanted removal commit.  Merge from the relevant
+       unwanted removal commit using -s ours.
+
+       Now continue to the next unwanted dependency removal.
 
        (The purpose of this, and the result, is that the unwanted
        dependency removal has gone away.  Doing things in this order
@@ -48,8 +57,6 @@ Basic update algorithm:
        of a patch affected by an unwanted removal will benefit from
        that client's resolution of the situation.)
 
-       Now continue to the next unwanted dependency removal.
-
        If there are no (more) unwanted dependency removals, merge
        from the source.