comparison mercurial/dirstate.py @ 47513:10e740292dff

dirstate-entry: add a `merged` property Lets start to define and use more semantic property. Differential Revision: https://phab.mercurial-scm.org/D10955
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 03 Jul 2021 04:07:21 +0200
parents 769037a279ec
children 559aee84b889
comparison
equal deleted inserted replaced
47512:769037a279ec 47513:10e740292dff
353 return encoding.tolocal(self._branch) 353 return encoding.tolocal(self._branch)
354 354
355 def setparents(self, p1, p2=None): 355 def setparents(self, p1, p2=None):
356 """Set dirstate parents to p1 and p2. 356 """Set dirstate parents to p1 and p2.
357 357
358 When moving from two parents to one, 'm' merged entries a 358 When moving from two parents to one, "merged" entries a
359 adjusted to normal and previous copy records discarded and 359 adjusted to normal and previous copy records discarded and
360 returned by the call. 360 returned by the call.
361 361
362 See localrepo.setparents() 362 See localrepo.setparents()
363 """ 363 """
384 for f in candidatefiles: 384 for f in candidatefiles:
385 s = self._map.get(f) 385 s = self._map.get(f)
386 if s is None: 386 if s is None:
387 continue 387 continue
388 388
389 # Discard 'm' markers when moving away from a merge state 389 # Discard "merged" markers when moving away from a merge state
390 if s.state == b'm': 390 if s.merged:
391 source = self._map.copymap.get(f) 391 source = self._map.copymap.get(f)
392 if source: 392 if source:
393 copies[f] = source 393 copies[f] = source
394 self.normallookup(f) 394 self.normallookup(f)
395 # Also fix up otherparent markers 395 # Also fix up otherparent markers
525 525
526 def normallookup(self, f): 526 def normallookup(self, f):
527 '''Mark a file normal, but possibly dirty.''' 527 '''Mark a file normal, but possibly dirty.'''
528 if self.in_merge: 528 if self.in_merge:
529 # if there is a merge going on and the file was either 529 # if there is a merge going on and the file was either
530 # in state 'm' (-1) or coming from other parent (-2) before 530 # "merged" or coming from other parent (-2) before
531 # being removed, restore that state. 531 # being removed, restore that state.
532 entry = self._map.get(f) 532 entry = self._map.get(f)
533 if entry is not None: 533 if entry is not None:
534 if entry.state == b'r' and entry[2] in (NONNORMAL, FROM_P2): 534 if entry.state == b'r' and entry[2] in (NONNORMAL, FROM_P2):
535 source = self._map.copymap.get(f) 535 source = self._map.copymap.get(f)
538 elif entry[2] == FROM_P2: 538 elif entry[2] == FROM_P2:
539 self.otherparent(f) 539 self.otherparent(f)
540 if source: 540 if source:
541 self.copy(source, f) 541 self.copy(source, f)
542 return 542 return
543 if ( 543 if entry.merged or entry.state == b'n' and entry[2] == FROM_P2:
544 entry.state == b'm'
545 or entry.state == b'n'
546 and entry[2] == FROM_P2
547 ):
548 return 544 return
549 self._addpath(f, b'n', 0, possibly_dirty=True) 545 self._addpath(f, b'n', 0, possibly_dirty=True)
550 self._map.copymap.pop(f, None) 546 self._map.copymap.pop(f, None)
551 547
552 def otherparent(self, f): 548 def otherparent(self, f):
1360 # This can happen if we quickly do multiple commits. 1356 # This can happen if we quickly do multiple commits.
1361 # Force lookup, so we don't miss such a racy file change. 1357 # Force lookup, so we don't miss such a racy file change.
1362 ladd(fn) 1358 ladd(fn)
1363 elif listclean: 1359 elif listclean:
1364 cadd(fn) 1360 cadd(fn)
1365 elif state == b'm': 1361 elif t.merged:
1366 madd(fn) 1362 madd(fn)
1367 elif state == b'a': 1363 elif state == b'a':
1368 aadd(fn) 1364 aadd(fn)
1369 elif state == b'r': 1365 elif state == b'r':
1370 radd(fn) 1366 radd(fn)