chiark / gitweb /
wip more merge driver
[topbloke.git] / DESIGN
diff --git a/DESIGN b/DESIGN
index b1c06ebcfc3013c5ac391a027b7d6d1f7f202646..f68272b1331daefe158f31cd6db36e9c0a639a63 100644 (file)
--- 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