X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=DESIGN;h=f68272b1331daefe158f31cd6db36e9c0a639a63;hb=befe127cf99d6cc7006776345c3cb2dc43c3341c;hp=b1c06ebcfc3013c5ac391a027b7d6d1f7f202646;hpb=5f8bef88e705fa42e51f6209857a81a8f6f97745;p=topbloke.git diff --git a/DESIGN b/DESIGN index b1c06eb..f68272b 100644 --- a/DESIGN +++ b/DESIGN @@ -100,22 +100,24 @@ merging from local branches first. Actual included branches: - This is tracked explicitly in .topgit/included, one branch per + 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 - .topgit/included is present. + .topbloke/included is present. If it isn't then we calculate a child commit which has a - .topgit/included. In the case of a remote branch or base, we + .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 .topgit/included is calculated in this way, it always gets - the list of desired included branches. (Older versions of topgit, - which do not support dependency deletion, always have exactly the + When .topbloke/included is calculated in this way, it always gets + the list of desired included branches. (topgit, + which does not support dependency deletion, always has exactly the desired branches actually included.) + Non-topbloke-controlled branches are never recorded in included. + Branch removal: @@ -125,8 +127,8 @@ Branch removal: - removed branch wants not to be in list of branches "git-branch" et al any more - branches in refs/top-branches ? - deleted branches do something to the base ? + branches in refs/top-branches ? yes + deleted branches do something to the base ? no deleting empty branch: dependencies fine deleting nonempty branch: if any dependencies found, their @@ -138,10 +140,19 @@ Branch removal: - remove from dependencies of active branches only makes sense if no active branches depend on it. + undeleting + - just unmark the branch as deleted + + +Foreign branches: + When merging from a foreign dependency, check that it + does not have .topbloke/included or .topbloke/flags; if it + does, could produce a new commit which has .topbloke removed + and merge from that + Branch naming: needs to be globally unique so put email address in it - also "tree" or "context" name, found automatically tg operations search for applicable branches safe charset for branch names . - / 0-9 a-z @@ -149,3 +160,21 @@ not permitted (git-check-ref-format(1)) spc ~ ^ : ? * [ \ @{ .lock. (apropos of shell) + + +When pulling, which remotes get to update which branches ? +Complicated question! + +For now, have "blessed" remotes, which we always pull and update from. +All these count as sources above. + +Update operation restrictions available, which restrict use of various +sources above ? What about implications for correctness of merge +algorithm ? + + +Concept of a "stack" ? +Unnecessary - instead, deal with leaf branches +Operations like "go up the stack", goes towards leaf. Hopefully unique. +"Down" the stack, uses a "conventional" linearisation +Stack reordering op ? auto adjust deps