Now that we have a Rust implementation, we defer to that accordingly.
Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Branch
- default
- Lint
No Linters Available - Unit
No Unit Test Coverage
( )
| hg-reviewers |
Now that we have a Rust implementation, we defer to that accordingly.
| No Linters Available |
| No Unit Test Coverage |
| Path | Packages | |||
|---|---|---|---|---|
| M | mercurial/dirstatemap.py (96 lines) |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| 3ff9d2047e7b | 19b264a49f84 | Raphaël Gomès | Wed, Mar 23, 12:25 PM |
| Status | Author | Revision | |
|---|---|---|---|
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare | ||
| Needs Review | Alphare |
| else: | else: | ||||
| self._dirs_decr(f, old_entry=entry, remove_variant=not entry.added) | self._dirs_decr(f, old_entry=entry, remove_variant=not entry.added) | ||||
| if not entry.p2_info: | if not entry.p2_info: | ||||
| self.copymap.pop(f, None) | self.copymap.pop(f, None) | ||||
| entry.set_untracked() | entry.set_untracked() | ||||
| self._refresh_entry(f, entry) | self._refresh_entry(f, entry) | ||||
| return True | return True | ||||
| def reset_state( | |||||
| self, | |||||
| filename, | |||||
| wc_tracked=False, | |||||
| p1_tracked=False, | |||||
| p2_info=False, | |||||
| has_meaningful_mtime=True, | |||||
| parentfiledata=None, | |||||
| ): | |||||
| """Set a entry to a given state, diregarding all previous state | |||||
| This is to be used by the part of the dirstate API dedicated to | |||||
| adjusting the dirstate after a update/merge. | |||||
| note: calling this might result to no entry existing at all if the | |||||
| dirstate map does not see any point at having one for this file | |||||
| anymore. | |||||
| """ | |||||
| # copy information are now outdated | |||||
| # (maybe new information should be in directly passed to this function) | |||||
| self.copymap.pop(filename, None) | |||||
| if not (p1_tracked or p2_info or wc_tracked): | |||||
| old_entry = self._map.get(filename) | |||||
| self._drop_entry(filename) | |||||
| self._dirs_decr(filename, old_entry=old_entry) | |||||
| return | |||||
| old_entry = self._map.get(filename) | |||||
| self._dirs_incr(filename, old_entry) | |||||
| entry = DirstateItem( | |||||
| wc_tracked=wc_tracked, | |||||
| p1_tracked=p1_tracked, | |||||
| p2_info=p2_info, | |||||
| has_meaningful_mtime=has_meaningful_mtime, | |||||
| parentfiledata=parentfiledata, | |||||
| ) | |||||
| self._insert_entry(filename, entry) | |||||
| ### disk interaction | ### disk interaction | ||||
| def _opendirstatefile(self): | def _opendirstatefile(self): | ||||
| fp, mode = txnutil.trypending(self._root, self._opener, self._filename) | fp, mode = txnutil.trypending(self._root, self._opener, self._filename) | ||||
| if self._pendingmode is not None and self._pendingmode != mode: | if self._pendingmode is not None and self._pendingmode != mode: | ||||
| fp.close() | fp.close() | ||||
| raise error.Abort( | raise error.Abort( | ||||
| _(b'working directory state may be changed parallelly') | _(b'working directory state may be changed parallelly') | ||||
| return pathutil.dirs(self._map, only_tracked=True) | return pathutil.dirs(self._map, only_tracked=True) | ||||
| @propertycache | @propertycache | ||||
| def _alldirs(self): | def _alldirs(self): | ||||
| return pathutil.dirs(self._map) | return pathutil.dirs(self._map) | ||||
| ### code related to manipulation of entries and copy-sources | ### code related to manipulation of entries and copy-sources | ||||
| def reset_state( | |||||
| self, | |||||
| filename, | |||||
| wc_tracked=False, | |||||
| p1_tracked=False, | |||||
| p2_info=False, | |||||
| has_meaningful_mtime=True, | |||||
| parentfiledata=None, | |||||
| ): | |||||
| """Set a entry to a given state, diregarding all previous state | |||||
| This is to be used by the part of the dirstate API dedicated to | |||||
| adjusting the dirstate after a update/merge. | |||||
| note: calling this might result to no entry existing at all if the | |||||
| dirstate map does not see any point at having one for this file | |||||
| anymore. | |||||
| """ | |||||
| # copy information are now outdated | |||||
| # (maybe new information should be in directly passed to this function) | |||||
| self.copymap.pop(filename, None) | |||||
| if not (p1_tracked or p2_info or wc_tracked): | |||||
| old_entry = self._map.get(filename) | |||||
| self._drop_entry(filename) | |||||
| self._dirs_decr(filename, old_entry=old_entry) | |||||
| return | |||||
| old_entry = self._map.get(filename) | |||||
| self._dirs_incr(filename, old_entry) | |||||
| entry = DirstateItem( | |||||
| wc_tracked=wc_tracked, | |||||
| p1_tracked=p1_tracked, | |||||
| p2_info=p2_info, | |||||
| has_meaningful_mtime=has_meaningful_mtime, | |||||
| parentfiledata=parentfiledata, | |||||
| ) | |||||
| self._insert_entry(filename, entry) | |||||
| def set_tracked(self, filename): | def set_tracked(self, filename): | ||||
| new = False | new = False | ||||
| entry = self.get(filename) | entry = self.get(filename) | ||||
| if entry is None: | if entry is None: | ||||
| self._dirs_incr(filename) | self._dirs_incr(filename) | ||||
| entry = DirstateItem( | entry = DirstateItem( | ||||
| wc_tracked=True, | wc_tracked=True, | ||||
| ) | ) | ||||
| self._map.addfile(f, entry) | self._map.addfile(f, entry) | ||||
| def _insert_entry(self, f, entry): | def _insert_entry(self, f, entry): | ||||
| self._map.addfile(f, entry) | self._map.addfile(f, entry) | ||||
| def set_tracked(self, f): | def set_tracked(self, f): | ||||
| return self._map.set_tracked(f) | return self._map.set_tracked(f) | ||||
| def reset_state( | |||||
| self, | |||||
| filename, | |||||
| wc_tracked=False, | |||||
| p1_tracked=False, | |||||
| p2_info=False, | |||||
| has_meaningful_mtime=True, | |||||
| parentfiledata=None, | |||||
| ): | |||||
| return self._map.reset_state( | |||||
| filename, | |||||
| wc_tracked, | |||||
| p1_tracked, | |||||
| p2_info, | |||||
| has_meaningful_mtime, | |||||
| parentfiledata, | |||||
| ) | |||||
| def _drop_entry(self, f): | def _drop_entry(self, f): | ||||
| self._map.drop_item_and_copy_source(f) | self._map.drop_item_and_copy_source(f) | ||||
| def __setitem__(self, key, value): | def __setitem__(self, key, value): | ||||
| assert isinstance(value, DirstateItem) | assert isinstance(value, DirstateItem) | ||||
| self._map.set_dirstate_item(key, value) | self._map.set_dirstate_item(key, value) | ||||