120 |
120 |
121 if not pctx.obsolete(): |
121 if not pctx.obsolete(): |
122 ui.warn(_(b"cannot solve instability of %s, skipping\n") % orig) |
122 ui.warn(_(b"cannot solve instability of %s, skipping\n") % orig) |
123 return (False, b".") |
123 return (False, b".") |
124 obs = pctx |
124 obs = pctx |
125 newer = obsutil.successorssets(repo, obs.node()) |
125 if True: |
126 # search of a parent which is not killed, but also isn't the orig |
|
127 while not newer or newer[0][0] == orig.node(): |
|
128 ui.debug(b"stabilize target %s is plain dead," |
|
129 b" trying to stabilize on its parent\n" % |
|
130 obs) |
|
131 obs = obs.p1() |
|
132 newer = obsutil.successorssets(repo, obs.node()) |
126 newer = obsutil.successorssets(repo, obs.node()) |
133 if len(newer) > 1: |
127 # search of a parent which is not killed, but also isn't the orig |
134 msg = _(b"skipping %s: divergent rewriting. can't choose " |
128 while not newer or newer[0][0] == orig.node(): |
135 b"destination\n") % obs |
129 ui.debug(b"stabilize target %s is plain dead," |
136 ui.write_err(msg) |
130 b" trying to stabilize on its parent\n" % |
137 return (False, b".") |
131 obs) |
138 targets = newer[0] |
132 obs = obs.p1() |
139 assert targets |
133 newer = obsutil.successorssets(repo, obs.node()) |
140 if len(targets) > 1: |
134 if len(newer) > 1: |
141 # split target, figure out which one to pick, are they all in line? |
135 msg = _(b"skipping %s: divergent rewriting. can't choose " |
142 targetrevs = [repo[r].rev() for r in targets] |
136 b"destination\n") % obs |
143 roots = repo.revs(b'roots(%ld)', targetrevs) |
137 ui.write_err(msg) |
144 heads = repo.revs(b'heads(%ld)', targetrevs) |
138 return (False, b".") |
145 if len(roots) > 1 or len(heads) > 1: |
139 targets = newer[0] |
146 cheader = _(b"ancestor '%s' split over multiple topological" |
140 assert targets |
147 b" branches.\nchoose an evolve destination:") % orig |
141 if len(targets) > 1: |
148 selectedrev = utility.revselectionprompt(ui, repo, list(heads), |
142 # split target, figure out which one to pick, are they all in line? |
149 cheader) |
143 targetrevs = [repo[r].rev() for r in targets] |
150 if selectedrev is None: |
144 roots = repo.revs(b'roots(%ld)', targetrevs) |
151 msg = _(b"could not solve instability, " |
145 heads = repo.revs(b'heads(%ld)', targetrevs) |
152 b"ambiguous destination: " |
146 if len(roots) > 1 or len(heads) > 1: |
153 b"parent split across two branches\n") |
147 cheader = _(b"ancestor '%s' split over multiple topological" |
154 ui.write_err(msg) |
148 b" branches.\nchoose an evolve destination:") % orig |
155 return (False, b".") |
149 selectedrev = utility.revselectionprompt(ui, repo, list(heads), |
156 target = repo[selectedrev] |
150 cheader) |
|
151 if selectedrev is None: |
|
152 msg = _(b"could not solve instability, " |
|
153 b"ambiguous destination: " |
|
154 b"parent split across two branches\n") |
|
155 ui.write_err(msg) |
|
156 return (False, b".") |
|
157 target = repo[selectedrev] |
|
158 else: |
|
159 target = repo[heads.first()] |
157 else: |
160 else: |
158 target = repo[heads.first()] |
161 target = targets[0] |
159 else: |
|
160 target = targets[0] |
|
161 target = repo[target] |
162 target = repo[target] |
162 if not ui.quiet or confirm: |
163 if not ui.quiet or confirm: |
163 repo.ui.write(_(b'move:'), label=b'evolve.operation') |
164 repo.ui.write(_(b'move:'), label=b'evolve.operation') |
164 displayer.show(orig) |
165 displayer.show(orig) |
165 if lastsolved is None or target != repo[lastsolved]: |
166 if lastsolved is None or target != repo[lastsolved]: |