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)
 
             - 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
 
        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
           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
 
        (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.)
 
        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.
 
        If there are no (more) unwanted dependency removals, merge
        from the source.