X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke.git;a=blobdiff_plain;f=DESIGN;h=57f3191e23f1282d5b76fc75dd9084128071a52a;hp=036cbec757ab4ee966798c1fd2ffb9cc36b001fc;hb=3cef5f54091fb536fb77af9a33838a631fbf6738;hpb=4a54766a2027a9c9bdeacc84e1a645a4ad60b571 diff --git a/DESIGN b/DESIGN index 036cbec..57f3191 100644 --- a/DESIGN +++ b/DESIGN @@ -17,7 +17,8 @@ Basic update algorithm: ii. For each source in the best order, do the following merge: (Our base has sources: - the branch for each direct dep - - the remote base) + - the remote base + - the topgit base, if this is a topgit import) Find the (latest) common ancestor. @@ -86,12 +87,14 @@ Basic update algorithm: * Attempt to apply the appropriate diff to add (resp. remove) the contents of the relevant patch (adjusted appropriately for metadata, XXX??? particularly the actual inclusion list) + XXX if we want to add a dep we need to update the dep first * Go round again looking for another discrepancy. 3. Update our branch. Our branch has sources: - our base - the remote for our branch + - the topgit branch, if this is a topgit import For each source in the best order, do the merge. Double-check the actual dependency inclusions. In @@ -220,3 +223,18 @@ OK so here is a plan: Commit, adjusting the parents of the new commit to the original parents if we made the merge with special massaged parents. We may still need to have custom merge drivers for metadata. + + +Strategies for each metadata file merge: + + in base/tip same patch's tip dep -> base base -> tip + + msg T textual merge rm from src not in src + deps T list merge rm from src not in src + deleted T std existence merge rm from src not in src + patch- BT must be same rm from src must be same + topgit- T must be same rm from src not in src + [^+]*- ?? textual merge rm from src rm from src + +included BT list merge rm from non-tb src list merge + +*- ?? textual merge rm from non-tb src textual merge + *[^-] ?? die, aborting all ops, if found in any tb src or branch