Show More
@@ -1678,22 +1678,6 b' def defineparents(repo, rev, destmap, st' | |||
|
1678 | 1678 | elif p in state and state[p] > 0: |
|
1679 | 1679 | np = state[p] |
|
1680 | 1680 | |
|
1681 | # "bases" only record "special" merge bases that cannot be | |
|
1682 | # calculated from changelog DAG (i.e. isancestor(p, np) is False). | |
|
1683 | # For example: | |
|
1684 | # | |
|
1685 | # B' # rebase -s B -d D, when B was rebased to B'. dest for C | |
|
1686 | # | C # is B', but merge base for C is B, instead of | |
|
1687 | # D | # changelog.ancestor(C, B') == A. If changelog DAG and | |
|
1688 | # | B # "state" edges are merged (so there will be an edge from | |
|
1689 | # |/ # B to B'), the merge base is still ancestor(C, B') in | |
|
1690 | # A # the merged graph. | |
|
1691 | # | |
|
1692 | # Also see https://bz.mercurial-scm.org/show_bug.cgi?id=1950#c8 | |
|
1693 | # which uses "virtual null merge" to explain this situation. | |
|
1694 | if isancestor(p, np): | |
|
1695 | bases[i] = nullrev | |
|
1696 | ||
|
1697 | 1681 | # If one parent becomes an ancestor of the other, drop the ancestor |
|
1698 | 1682 | for j, x in enumerate(newps[:i]): |
|
1699 | 1683 | if x == nullrev: |
@@ -1754,10 +1738,10 b' def defineparents(repo, rev, destmap, st' | |||
|
1754 | 1738 | # But our merge base candidates (D and E in above case) could still be |
|
1755 | 1739 | # better than the default (ancestor(F, Z) == null). Therefore still |
|
1756 | 1740 | # pick one (so choose p1 above). |
|
1757 | if sum(1 for b in set(bases) if b != nullrev) > 1: | |
|
1741 | if sum(1 for b in set(bases) if b != nullrev and b not in newps) > 1: | |
|
1758 | 1742 | unwanted = [None, None] # unwanted[i]: unwanted revs if choose bases[i] |
|
1759 | 1743 | for i, base in enumerate(bases): |
|
1760 | if base == nullrev: | |
|
1744 | if base == nullrev or base in newps: | |
|
1761 | 1745 | continue |
|
1762 | 1746 | # Revisions in the side (not chosen as merge base) branch that |
|
1763 | 1747 | # might contain "surprising" contents |
@@ -1781,42 +1765,40 b' def defineparents(repo, rev, destmap, st' | |||
|
1781 | 1765 | ) |
|
1782 | 1766 | ) |
|
1783 | 1767 | |
|
1784 | # Choose a merge base that has a minimal number of unwanted revs. | |
|
1785 | l, i = min( | |
|
1786 |
|
|
|
1787 | for i, revs in enumerate(unwanted) | |
|
1788 |
|
|
|
1789 | ) | |
|
1790 | ||
|
1791 | # The merge will include unwanted revisions. Abort now. Revisit this if | |
|
1792 | # we have a more advanced merge algorithm that handles multiple bases. | |
|
1793 | if l > 0: | |
|
1794 | unwanteddesc = _(b' or ').join( | |
|
1795 | ( | |
|
1796 | b', '.join(b'%d:%s' % (r, repo[r]) for r in revs) | |
|
1797 | for revs in unwanted | |
|
1798 | if revs is not None | |
|
1799 | ) | |
|
1800 | ) | |
|
1801 | raise error.Abort( | |
|
1802 | _(b'rebasing %d:%s will include unwanted changes from %s') | |
|
1803 | % (rev, repo[rev], unwanteddesc) | |
|
1768 | if any(revs is not None for revs in unwanted): | |
|
1769 | # Choose a merge base that has a minimal number of unwanted revs. | |
|
1770 | l, i = min( | |
|
1771 | (len(revs), i) | |
|
1772 | for i, revs in enumerate(unwanted) | |
|
1773 | if revs is not None | |
|
1804 | 1774 | ) |
|
1805 | 1775 | |
|
1806 | # newps[0] should match merge base if possible. Currently, if newps[i] | |
|
1807 | # is nullrev, the only case is newps[i] and newps[j] (j < i), one is | |
|
1808 | # the other's ancestor. In that case, it's fine to not swap newps here. | |
|
1809 | # (see CASE-1 and CASE-2 above) | |
|
1810 | if i != 0: | |
|
1811 | if newps[i] != nullrev: | |
|
1812 | newps[0], newps[i] = newps[i], newps[0] | |
|
1813 | bases[0], bases[i] = bases[i], bases[0] | |
|
1776 | # The merge will include unwanted revisions. Abort now. Revisit this if | |
|
1777 | # we have a more advanced merge algorithm that handles multiple bases. | |
|
1778 | if l > 0: | |
|
1779 | unwanteddesc = _(b' or ').join( | |
|
1780 | ( | |
|
1781 | b', '.join(b'%d:%s' % (r, repo[r]) for r in revs) | |
|
1782 | for revs in unwanted | |
|
1783 | if revs is not None | |
|
1784 | ) | |
|
1785 | ) | |
|
1786 | raise error.Abort( | |
|
1787 | _(b'rebasing %d:%s will include unwanted changes from %s') | |
|
1788 | % (rev, repo[rev], unwanteddesc) | |
|
1789 | ) | |
|
1790 | ||
|
1791 | # newps[0] should match merge base if possible. Currently, if newps[i] | |
|
1792 | # is nullrev, the only case is newps[i] and newps[j] (j < i), one is | |
|
1793 | # the other's ancestor. In that case, it's fine to not swap newps here. | |
|
1794 | # (see CASE-1 and CASE-2 above) | |
|
1795 | if i != 0: | |
|
1796 | if newps[i] != nullrev: | |
|
1797 | newps[0], newps[i] = newps[i], newps[0] | |
|
1798 | bases[0], bases[i] = bases[i], bases[0] | |
|
1814 | 1799 | |
|
1815 | 1800 | # "rebasenode" updates to new p1, use the corresponding merge base. |
|
1816 | if bases[0] != nullrev: | |
|
1817 | base = bases[0] | |
|
1818 | else: | |
|
1819 | base = None | |
|
1801 | base = bases[0] | |
|
1820 | 1802 | |
|
1821 | 1803 | repo.ui.debug(b" future parents are %d and %d\n" % tuple(newps)) |
|
1822 | 1804 |
@@ -256,7 +256,7 b' Different destinations for merge changes' | |||
|
256 | 256 | > EOS |
|
257 | 257 | rebasing 3:a4256619d830 "B" (B) |
|
258 | 258 | rebasing 6:8e139e245220 "C" (C tip) |
|
259 |
o 8: |
|
|
259 | o 8: d7d1169e9b1c C | |
|
260 | 260 | |\ |
|
261 | 261 | | o 7: 2ed0c8546285 B |
|
262 | 262 | | |\ |
@@ -68,11 +68,6 b' interesting conflict resolutions or addi' | |||
|
68 | 68 | that is mixed up with the actual merge stuff and there is in general no way to |
|
69 | 69 | separate them. |
|
70 | 70 | |
|
71 | Note: The dev branch contains _no_ changes to f-default. It might be unclear | |
|
72 | how rebasing of ancestor merges should be handled, but the current behavior | |
|
73 | with spurious prompts for conflicts in files that didn't change seems very | |
|
74 | wrong. | |
|
75 | ||
|
76 | 71 | $ hg init ancestor-merge |
|
77 | 72 | $ cd ancestor-merge |
|
78 | 73 | |
@@ -133,16 +128,11 b' Full rebase all the way back from branch' | |||
|
133 | 128 |
note: |
|
134 | 129 |
|
|
135 | 130 |
|
|
136 | file 'f-default' was deleted in local [dest] but was modified in other [source]. | |
|
137 | You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. | |
|
138 | What do you want to do? c | |
|
131 | note: not rebasing 4:4b019212aaf6 "dev: merge default", its destination already has all its changes | |
|
139 | 132 |
rebasing |
|
133 | note: not rebasing 6:010ced67e558 "dev: merge default", its destination already has all its changes | |
|
140 | 134 |
|
|
141 | 135 |
$ |
|
142 | o 6: de147e4f69cf 'dev: merge default' | |
|
143 | | | |
|
144 | o 5: eda7b7f46f5d 'dev: merge default' | |
|
145 | | | |
|
146 | 136 |
o |
|
147 | 137 | | |
|
148 | 138 |
@ 3: |
@@ -163,28 +153,8 b' Grafty cherry picking rebasing:' | |||
|
163 | 153 | > EOF |
|
164 | 154 |
|
|
165 | 155 |
|
|
166 | file 'f-default' was deleted in local [dest] but was modified in other [source]. | |
|
167 | You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. | |
|
168 | What do you want to do? c | |
|
169 | rebasing 6:010ced67e558 "dev: merge default" | |
|
170 | saved backup bundle to $TESTTMP/ancestor-merge-2/.hg/strip-backup/ec2c14fb2984-827d7a44-rebase.hg | |
|
171 | $ hg tglog | |
|
172 | o 7: de147e4f69cf 'dev: merge default' | |
|
173 | | | |
|
174 | o 6: eda7b7f46f5d 'dev: merge default' | |
|
175 | | | |
|
176 | o 5: 3e075b1c0a40 'dev: f-dev stuff' | |
|
177 | | | |
|
178 | o 4: e08089805d82 'default: f-other stuff' | |
|
179 | | | |
|
180 | o 3: 462860db70a1 'default: remove f-default' | |
|
181 | | | |
|
182 | o 2: f157ecfd2b6b 'default: f-default stuff' | |
|
183 | | | |
|
184 | | o 1: 1d1a643d390e 'dev: create branch' dev | |
|
185 | |/ | |
|
186 | o 0: e90e8eb90b6f 'default: create f-default' | |
|
187 | ||
|
156 | abort: rebasing 4:4b019212aaf6 will include unwanted changes from 1:1d1a643d390e | |
|
157 | [255] | |
|
188 | 158 |
$ |
|
189 | 159 | |
|
190 | 160 | |
@@ -284,18 +254,7 b' rebase of merge of ancestors' | |||
|
284 | 254 |
|
|
285 | 255 |
|
|
286 | 256 |
|
|
287 | note: merging f9daf77ffe76+ and 4c5f12f25ebe using bids from ancestors a60552eb93fb and f59da8fc0fcf | |
|
288 | ||
|
289 | calculating bids for ancestor a60552eb93fb | |
|
290 | 257 |
|
|
291 | ||
|
292 | calculating bids for ancestor f59da8fc0fcf | |
|
293 | resolving manifests | |
|
294 | ||
|
295 | auction for merging merge bids | |
|
296 | other: consensus for g | |
|
297 | end of auction | |
|
298 | ||
|
299 | 258 |
|
|
300 | 259 |
|
|
301 | 260 |
|
General Comments 0
You need to be logged in to leave comments.
Login now