715 s = os.lstat(self._join(filename)) |
715 s = os.lstat(self._join(filename)) |
716 mode = s.st_mode |
716 mode = s.st_mode |
717 size = s.st_size |
717 size = s.st_size |
718 mtime = s[stat.ST_MTIME] |
718 mtime = s[stat.ST_MTIME] |
719 return (mode, size, mtime) |
719 return (mode, size, mtime) |
720 |
|
721 def _normallookup(self, f): |
|
722 '''Mark a file normal, but possibly dirty.''' |
|
723 if self.in_merge: |
|
724 # if there is a merge going on and the file was either |
|
725 # "merged" or coming from other parent (-2) before |
|
726 # being removed, restore that state. |
|
727 entry = self._map.get(f) |
|
728 if entry is not None: |
|
729 # XXX this should probably be dealt with a a lower level |
|
730 # (see `merged_removed` and `from_p2_removed`) |
|
731 if entry.merged_removed or entry.from_p2_removed: |
|
732 source = self._map.copymap.get(f) |
|
733 if entry.merged_removed: |
|
734 self._addpath(f, merged=True) |
|
735 else: |
|
736 self._addpath(f, from_p2=True) |
|
737 self._map.copymap.pop(f, None) |
|
738 if source is not None: |
|
739 self.copy(source, f) |
|
740 return |
|
741 elif entry.merged or entry.from_p2: |
|
742 return |
|
743 self._addpath(f, possibly_dirty=True) |
|
744 self._map.copymap.pop(f, None) |
|
745 |
720 |
746 def _discoverpath(self, path, normed, ignoremissing, exists, storemap): |
721 def _discoverpath(self, path, normed, ignoremissing, exists, storemap): |
747 if exists is None: |
722 if exists is None: |
748 exists = os.path.lexists(os.path.join(self._root, path)) |
723 exists = os.path.lexists(os.path.join(self._root, path)) |
749 if not exists: |
724 if not exists: |