311 |
311 |
312 def extras(self, filename): |
312 def extras(self, filename): |
313 """return extras stored with the mergestate for the given filename""" |
313 """return extras stored with the mergestate for the given filename""" |
314 return self._stateextras[filename] |
314 return self._stateextras[filename] |
315 |
315 |
316 def _resolve(self, preresolve, dfile, wctx): |
316 def _resolve(self, dfile, wctx): |
317 """rerun merge process for file path `dfile`. |
317 """rerun merge process for file path `dfile`. |
318 Returns whether the merge was completed and the return value of merge |
318 Returns the return value of merge obtained from filemerge._filemerge(). |
319 obtained from filemerge._filemerge(). |
|
320 """ |
319 """ |
321 if self[dfile] in ( |
320 if self[dfile] in ( |
322 MERGE_RECORD_RESOLVED, |
321 MERGE_RECORD_RESOLVED, |
323 LEGACY_RECORD_DRIVER_RESOLVED, |
322 LEGACY_RECORD_DRIVER_RESOLVED, |
324 ): |
323 ): |
325 return True, 0 |
324 return 0 |
326 stateentry = self._state[dfile] |
325 stateentry = self._state[dfile] |
327 state, localkey, lfile, afile, anode, ofile, onode, flags = stateentry |
326 state, localkey, lfile, afile, anode, ofile, onode, flags = stateentry |
328 octx = self._repo[self._other] |
327 octx = self._repo[self._other] |
329 extras = self.extras(dfile) |
328 extras = self.extras(dfile) |
330 anccommitnode = extras.get(b'ancestorlinknode') |
329 anccommitnode = extras.get(b'ancestorlinknode') |
339 # "premerge" x flags |
338 # "premerge" x flags |
340 flo = fco.flags() |
339 flo = fco.flags() |
341 fla = fca.flags() |
340 fla = fca.flags() |
342 if b'x' in flags + flo + fla and b'l' not in flags + flo + fla: |
341 if b'x' in flags + flo + fla and b'l' not in flags + flo + fla: |
343 if fca.rev() == nullrev and flags != flo: |
342 if fca.rev() == nullrev and flags != flo: |
344 if preresolve: |
343 self._repo.ui.warn( |
345 self._repo.ui.warn( |
344 _( |
346 _( |
345 b'warning: cannot merge flags for %s ' |
347 b'warning: cannot merge flags for %s ' |
346 b'without common ancestor - keeping local flags\n' |
348 b'without common ancestor - keeping local flags\n' |
|
349 ) |
|
350 % afile |
|
351 ) |
347 ) |
|
348 % afile |
|
349 ) |
352 elif flags == fla: |
350 elif flags == fla: |
353 flags = flo |
351 flags = flo |
354 if preresolve: |
352 # restore local |
355 # restore local |
353 if localkey != self._repo.nodeconstants.nullhex: |
356 if localkey != self._repo.nodeconstants.nullhex: |
354 self._restore_backup(wctx[dfile], localkey, flags) |
357 self._restore_backup(wctx[dfile], localkey, flags) |
355 else: |
358 else: |
356 wctx[dfile].remove(ignoremissing=True) |
359 wctx[dfile].remove(ignoremissing=True) |
357 complete, merge_ret, deleted = filemerge.premerge( |
360 complete, merge_ret, deleted = filemerge.premerge( |
358 self._repo, |
361 self._repo, |
359 wctx, |
362 wctx, |
360 self._local, |
363 self._local, |
361 lfile, |
364 lfile, |
362 fcd, |
365 fcd, |
363 fco, |
366 fco, |
364 fca, |
367 fca, |
365 labels=self._labels, |
368 labels=self._labels, |
366 ) |
369 ) |
367 if not complete: |
370 else: |
|
371 complete, merge_ret, deleted = filemerge.filemerge( |
368 complete, merge_ret, deleted = filemerge.filemerge( |
372 self._repo, |
369 self._repo, |
373 wctx, |
370 wctx, |
374 self._local, |
371 self._local, |
375 lfile, |
372 lfile, |
404 else: |
401 else: |
405 action = ACTION_ADD |
402 action = ACTION_ADD |
406 # else: regular merges (no action necessary) |
403 # else: regular merges (no action necessary) |
407 self._results[dfile] = merge_ret, action |
404 self._results[dfile] = merge_ret, action |
408 |
405 |
409 return complete, merge_ret |
406 return merge_ret |
410 |
407 |
411 def resolve(self, dfile, wctx): |
408 def resolve(self, dfile, wctx): |
412 """run merge process for dfile |
409 """run merge process for dfile |
413 |
410 |
414 Returns the exit code of the merge.""" |
411 Returns the exit code of the merge.""" |
415 complete, r = self._resolve(True, dfile, wctx) |
412 return self._resolve(dfile, wctx) |
416 if not complete: |
|
417 r = self._resolve(False, dfile, wctx)[1] |
|
418 return r |
|
419 |
413 |
420 def counts(self): |
414 def counts(self): |
421 """return counts for updated, merged and removed files in this |
415 """return counts for updated, merged and removed files in this |
422 session""" |
416 session""" |
423 updated, merged, removed = 0, 0, 0 |
417 updated, merged, removed = 0, 0, 0 |