Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 30060:a145161debed
merge: use labels in subrepo merge
This is the last place that doesn't respect conflict labels in merge output.
Teach subrepos to use subrepo merge output too.
author | Simon Farnsworth <simonfar@fb.com> |
---|---|
date | Sat, 08 Oct 2016 01:25:28 -0700 |
parents | 19205a0e2bf1 |
children | bb77654dc7ae |
comparison
equal
deleted
inserted
replaced
30059:6ffb7e0249f4 | 30060:a145161debed |
---|---|
24 from . import ( | 24 from . import ( |
25 cmdutil, | 25 cmdutil, |
26 config, | 26 config, |
27 error, | 27 error, |
28 exchange, | 28 exchange, |
29 filemerge, | |
29 match as matchmod, | 30 match as matchmod, |
30 node, | 31 node, |
31 pathutil, | 32 pathutil, |
32 phases, | 33 phases, |
33 scmutil, | 34 scmutil, |
172 """rewrite .hgsubstate in (outer) repo with these subrepo states""" | 173 """rewrite .hgsubstate in (outer) repo with these subrepo states""" |
173 lines = ['%s %s\n' % (state[s][1], s) for s in sorted(state) | 174 lines = ['%s %s\n' % (state[s][1], s) for s in sorted(state) |
174 if state[s][1] != nullstate[1]] | 175 if state[s][1] != nullstate[1]] |
175 repo.wwrite('.hgsubstate', ''.join(lines), '') | 176 repo.wwrite('.hgsubstate', ''.join(lines), '') |
176 | 177 |
177 def submerge(repo, wctx, mctx, actx, overwrite): | 178 def submerge(repo, wctx, mctx, actx, overwrite, labels=None): |
178 """delegated from merge.applyupdates: merging of .hgsubstate file | 179 """delegated from merge.applyupdates: merging of .hgsubstate file |
179 in working context, merging context and ancestor context""" | 180 in working context, merging context and ancestor context""" |
180 if mctx == actx: # backwards? | 181 if mctx == actx: # backwards? |
181 actx = wctx.p1() | 182 actx = wctx.p1() |
182 s1 = wctx.substate | 183 s1 = wctx.substate |
198 ld = (l[0], l[1] + "+") | 199 ld = (l[0], l[1] + "+") |
199 if wctx == actx: # overwrite | 200 if wctx == actx: # overwrite |
200 a = ld | 201 a = ld |
201 | 202 |
202 if s in s2: | 203 if s in s2: |
204 prompts = filemerge.partextras(labels) | |
205 prompts['s'] = s | |
203 r = s2[s] | 206 r = s2[s] |
204 if ld == r or r == a: # no change or local is newer | 207 if ld == r or r == a: # no change or local is newer |
205 sm[s] = l | 208 sm[s] = l |
206 continue | 209 continue |
207 elif ld == a: # other side changed | 210 elif ld == a: # other side changed |
208 debug(s, "other changed, get", r) | 211 debug(s, "other changed, get", r) |
209 wctx.sub(s).get(r, overwrite) | 212 wctx.sub(s).get(r, overwrite) |
210 sm[s] = r | 213 sm[s] = r |
211 elif ld[0] != r[0]: # sources differ | 214 elif ld[0] != r[0]: # sources differ |
215 prompts['lo'] = l[0] | |
216 prompts['ro'] = r[0] | |
212 if repo.ui.promptchoice( | 217 if repo.ui.promptchoice( |
213 _(' subrepository sources for %s differ\n' | 218 _(' subrepository sources for %(s)s differ\n' |
214 'use (l)ocal source (%s) or (r)emote source (%s)?' | 219 'use (l)ocal%(l)s source (%(lo)s)' |
215 '$$ &Local $$ &Remote') % (s, l[0], r[0]), 0): | 220 ' or (r)emote%(o)s source (%(ro)s)?' |
221 '$$ &Local $$ &Remote') % prompts, 0): | |
216 debug(s, "prompt changed, get", r) | 222 debug(s, "prompt changed, get", r) |
217 wctx.sub(s).get(r, overwrite) | 223 wctx.sub(s).get(r, overwrite) |
218 sm[s] = r | 224 sm[s] = r |
219 elif ld[1] == a[1]: # local side is unchanged | 225 elif ld[1] == a[1]: # local side is unchanged |
220 debug(s, "other side changed, get", r) | 226 debug(s, "other side changed, get", r) |
221 wctx.sub(s).get(r, overwrite) | 227 wctx.sub(s).get(r, overwrite) |
222 sm[s] = r | 228 sm[s] = r |
223 else: | 229 else: |
224 debug(s, "both sides changed") | 230 debug(s, "both sides changed") |
225 srepo = wctx.sub(s) | 231 srepo = wctx.sub(s) |
232 prompts['sl'] = srepo.shortid(l[1]) | |
233 prompts['sr'] = srepo.shortid(r[1]) | |
226 option = repo.ui.promptchoice( | 234 option = repo.ui.promptchoice( |
227 _(' subrepository %s diverged (local revision: %s, ' | 235 _(' subrepository %(s)s diverged (local revision: %(sl)s, ' |
228 'remote revision: %s)\n' | 236 'remote revision: %(sr)s)\n' |
229 '(M)erge, keep (l)ocal or keep (r)emote?' | 237 '(M)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s?' |
230 '$$ &Merge $$ &Local $$ &Remote') | 238 '$$ &Merge $$ &Local $$ &Remote') |
231 % (s, srepo.shortid(l[1]), srepo.shortid(r[1])), 0) | 239 % prompts, 0) |
232 if option == 0: | 240 if option == 0: |
233 wctx.sub(s).merge(r) | 241 wctx.sub(s).merge(r) |
234 sm[s] = l | 242 sm[s] = l |
235 debug(s, "merge with", r) | 243 debug(s, "merge with", r) |
236 elif option == 1: | 244 elif option == 1: |
247 debug(s, "local added, keep") | 255 debug(s, "local added, keep") |
248 sm[s] = l | 256 sm[s] = l |
249 continue | 257 continue |
250 else: | 258 else: |
251 if repo.ui.promptchoice( | 259 if repo.ui.promptchoice( |
252 _(' local changed subrepository %s which remote removed\n' | 260 _(' local%(l)s changed subrepository %(s)s' |
261 ' which remote%(o)s removed\n' | |
253 'use (c)hanged version or (d)elete?' | 262 'use (c)hanged version or (d)elete?' |
254 '$$ &Changed $$ &Delete') % s, 0): | 263 '$$ &Changed $$ &Delete') % prompts, 0): |
255 debug(s, "prompt remove") | 264 debug(s, "prompt remove") |
256 wctx.sub(s).remove() | 265 wctx.sub(s).remove() |
257 | 266 |
258 for s, r in sorted(s2.items()): | 267 for s, r in sorted(s2.items()): |
259 if s in s1: | 268 if s in s1: |
262 debug(s, "remote added, get", r) | 271 debug(s, "remote added, get", r) |
263 mctx.sub(s).get(r) | 272 mctx.sub(s).get(r) |
264 sm[s] = r | 273 sm[s] = r |
265 elif r != sa[s]: | 274 elif r != sa[s]: |
266 if repo.ui.promptchoice( | 275 if repo.ui.promptchoice( |
267 _(' remote changed subrepository %s which local removed\n' | 276 _(' remote%(o)s changed subrepository %(s)s' |
277 ' which local%(l)s removed\n' | |
268 'use (c)hanged version or (d)elete?' | 278 'use (c)hanged version or (d)elete?' |
269 '$$ &Changed $$ &Delete') % s, 0) == 0: | 279 '$$ &Changed $$ &Delete') % prompts, 0) == 0: |
270 debug(s, "prompt recreate", r) | 280 debug(s, "prompt recreate", r) |
271 mctx.sub(s).get(r) | 281 mctx.sub(s).get(r) |
272 sm[s] = r | 282 sm[s] = r |
273 | 283 |
274 # record merged .hgsubstate | 284 # record merged .hgsubstate |