X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke.git;a=blobdiff_plain;f=DESIGN;h=66252ceafed5073102f9118622b726f7f838af0d;hp=e4066e4a8143a5320557e5b2a3941e82af0c4ef0;hb=e9bcefd93e14d2d8d2906efdd713cde6be4c4fa5;hpb=e7f741df9cbb0657a5bb2420d3e92abbe2524df0 diff --git a/DESIGN b/DESIGN index e4066e4..66252ce 100644 --- a/DESIGN +++ b/DESIGN @@ -96,107 +96,12 @@ Strategies for each metadata file merge: in base/tip same patch & branch dep -> base base -> tip msg T textual merge rm from src not in src + patch BT must be same rm from src must be same + base T compute specially rm from src not in src deps B list merge rm from src rm from src deleted T std existence merge rm from src not in src - patch- BT must be same rm from src must be same - topgit- B std exist/text merge rm from src rm from src [^+]*- ?? textual merge rm from src rm from src +included BT list merge rm from non-tb src list merge + +ends BT compute specially compute specially +*- ?? textual merge rm from non-tb src textual merge *[^-] ?? die, aborting all ops, if found in any tb src or branch - - - - - -Unwanted removal search subgraphs: - - rm relevant removal - inc - - rm impossible to undo removal, arrgh, terminates search -inc inc.. -/ ??? \ - - 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.. rm.. -/ [rm] \ - - 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