merge alg needs to check for cyclic dependencies
+when creating needs to remove metadata, make a separate commit with no
+metadata to allow us to spot what's happening. should only do this
+with option to permit it! Also need to do this when merging.
+
wibblings:
what about strangeness in ancient history wrt merge alg
topgit import
- topbloke {base,tip} is ff desc of topgit {base,tip}
- with metadata adjusted
+ topbloke {base,tip} is ff desc of topgit {base,tip}
+ with metadata adjusted
+ reject topbloke imports of topgit branches which
+ also contain topbloke metadata
need patch name in metadata
patch dep metadata syntax unsatisfactory: too twiddly
flags metadata unsatisfactory: wants to be valued properties
- the branch for each direct dep
- the remote base)
- Find the common ancestor.
+ Find the (latest) common ancestor.
Check for unwanted dependency removals.
An unwanted dependency removal is
which have already occurred on our base; these will be
reverted later.)
For each unwanted dependency removal (ie for each such
- branch), find the most recent commit which unwantedly removed
- the dep from the source's actual included deps ("relevant
- unwanted removal commit"). (Abort if any such commit is a
- merge.) Select the earliest relevant unwanted removal commit
- (from the set of relevant unwanted removal commits
- corresponding to the unwanted dependency removals).
- Merge from the ancestor of the relevant unwanted removal commit.
- Merge from the relevant unwanted removal commit using -s ours.
+ branch), search as follows:
+ * An "unwanted removal commit" is a non-merge commit in the
+ history of the source, which unwantedly removes the dep
+ from the actual included deps.
+ * But the search stops at any point where we would have to
+ traverse a commit where .topbloke/deps is empty (which
+ stops us looking into the hitory of non-topbloke-controlled
+ branches). This can be done with git-rev-list
+ --remove-empty.
+ * The the relevant unwanted removal commit for that dep is
+ the most recent unwanted removal commit, as defined.
+ Select the unwantedly removed dep whose relevant unwanted
+ removal commit is the earliest. Merge from the ancestor of
+ that relevant unwanted removal commit. Merge from the relevant
+ unwanted removal commit using -s ours.
+
+ Now continue to the next unwanted dependency removal.
(The purpose of this, and the result, is that the unwanted
dependency removal has gone away. Doing things in this order
of a patch affected by an unwanted removal will benefit from
that client's resolution of the situation.)
- Now continue to the next unwanted dependency removal.
-
If there are no (more) unwanted dependency removals, merge
from the source.