X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke.git;a=blobdiff_plain;f=DESIGN;fp=DESIGN;h=a7c142b3cefbeed0f09d5129d1caa4efaad527b5;hp=b7c677d51e5bd7c7e943214739cbae8cd135bd46;hb=e7a04f5c030191f438b9556cd0701d1cd4950589;hpb=effecc36db10d6fe9562097242d60e2be102407a diff --git a/DESIGN b/DESIGN index b7c677d..a7c142b 100644 --- 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.