Find the (latest) common ancestor.
- Check for unwanted dependency removals.
+ Check for unwanted dependency removals.
An unwanted dependency removal is
A branch in the desired included deps
Which exists in the common ancestor's actual included deps
The "best order" for merges is in order of recency of common
ancestor, most recent first, and if that does not distinguish,
merging from local branches first.
-
+
"Recency" refers to the order from git-rev-list --date-order.
Actual included deps:
Check for merge success in the index and compare to exit status
from git-merge (which is 1 if the merge failed).
Adjust the metadata.
- Print appropriate big fat warnings if we have merge conflicts in our
+ Print appropriate big fat warnings if we have merge conflicts in our
metadata.
Commit, adjusting the parents of the new commit to the original
parents if we made the merge with special massaged parents.
inc inc..
/ ??? \
- rm
+ rm
inc.. rm.. merge of a removal, search down the rm path
/ [inc] \
inc ??? call it an inclusion, terminate search
rm.. rm..
/ ??? \
-
+
rm inc inc rm irrelevant
rm inc inc inc.. rm rm..
+
+
+
+ proposed
+ / \ |
+ /`---------- \ -----<--------.|
+ / | |
+ | | |
+ RE-INCLUDE inc rm REMOVAL |
+ \ | / / |
+ * REMOVAL rm / / |
+ | inc * |
+ rm / |
+ | / |
+ rm / |
+ | /`--------<-----------.|
+ inc / |
+ | / |
+ RE-INCLUDE inc / |
+ \ | / |
+ * REMOVAL rm / |
+ | / |
+ inc |
+ \ |
+ `------------<-------------.|
+ |
+ |
+ IT
next if $source_inc{$dep};
unless unless $anc_inc{$dep};
my $unw_dr = { Name => $dep };
+
+
+ # Algorithm
+ # We do a history graph walk.
+ # In each iteration we get git-rev-list to find us
+ # one commit.
+
+ # We get git-rev-list to find us
+ send us a series of commits
+ # We look up each one.
my @prune;
my $pruned = sub {
my ($commit) = @_;