X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke.git;a=blobdiff_plain;f=DESIGN;h=44650578a3d5473243481e8022e6ce395453f25e;hp=1569517b0634542925d0ed6b76b05529099e4761;hb=c98691988623c62686b36ad0c42d4a958a306a5d;hpb=ed5261298c2cc3e7488e8b85946cdc9d5fd46794 diff --git a/DESIGN b/DESIGN index 1569517..4465057 100644 --- a/DESIGN +++ b/DESIGN @@ -115,27 +115,6 @@ merging from local branches first. "Recency" refers to the order from git-rev-list --date-order. -Actual included deps: - - This is tracked explicitly in .topbloke/included, one branch per - line. For compatibility with older versions, every time we think - about a base, branch or source above, we check whether - .topbloke/included is present. - - If it isn't then we calculate a child commit which has a - .topbloke/included. In the case of a remote branch or base, we - substitute this child commit for the relevant remote ref but do - not record it in the remote ref; in the case of a local branch or - base, we advance the local branch or base accordingly. - - When .topbloke/included is calculated in this way, it always gets - the list of desired included deps. (topgit, - which does not support dependency deletion, always has exactly the - desired deps actually included.) - - Foreign branches cannot be removed from included and cannot - therefore be removed from dependency lists. - Patch removal: @@ -280,41 +259,64 @@ rm.. rm.. - proposed (elsewhere) - / \ | | - / \ | | - / | | | - REMOVAL rm | | | - | | | | - inc | | | - / | | | | - / inc | | | - | | `------------ | ----<-------- | -.| - inc inc | | *2 - |`- | ------------- | ----<--------.| | - `---inc | 1* / - | | | / - RE-INCLUDE inc rm REMOVAL |' - \ | / | - * REMOVAL rm / | - | inc | - inc / | - | / | - inc / | - | /`--------<-----------.| - inc / | - | / | - RE-INCLUDE inc / | - \ | / | - * REMOVAL rm / | - | / | - inc | - \ | - `------------<-------------.| - | - | - IT + 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. + 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