78 return func(self, *args, **kwargs) |
78 return func(self, *args, **kwargs) |
79 |
79 |
80 return wrap |
80 return wrap |
81 |
81 |
82 |
82 |
83 def requires_no_parents_change(func): |
83 def requires_not_changing_parents(func): |
84 def wrap(self, *args, **kwargs): |
84 def wrap(self, *args, **kwargs): |
85 if self.pendingparentchange(): |
85 if self.pendingparentchange(): |
86 msg = 'calling `%s` inside of a changing_parents context' |
86 msg = 'calling `%s` inside of a changing_parents context' |
87 msg %= func.__name__ |
87 msg %= func.__name__ |
88 raise error.ProgrammingError(msg) |
88 raise error.ProgrammingError(msg) |
476 return self._map.copymap.get(file, None) |
476 return self._map.copymap.get(file, None) |
477 |
477 |
478 def copies(self): |
478 def copies(self): |
479 return self._map.copymap |
479 return self._map.copymap |
480 |
480 |
481 @requires_no_parents_change |
481 @requires_not_changing_parents |
482 def set_tracked(self, filename, reset_copy=False): |
482 def set_tracked(self, filename, reset_copy=False): |
483 """a "public" method for generic code to mark a file as tracked |
483 """a "public" method for generic code to mark a file as tracked |
484 |
484 |
485 This function is to be called outside of "update/merge" case. For |
485 This function is to be called outside of "update/merge" case. For |
486 example by a command like `hg add X`. |
486 example by a command like `hg add X`. |
498 self._map.copymap.pop(filename, None) |
498 self._map.copymap.pop(filename, None) |
499 if pre_tracked: |
499 if pre_tracked: |
500 self._dirty_tracked_set = True |
500 self._dirty_tracked_set = True |
501 return pre_tracked |
501 return pre_tracked |
502 |
502 |
503 @requires_no_parents_change |
503 @requires_not_changing_parents |
504 def set_untracked(self, filename): |
504 def set_untracked(self, filename): |
505 """a "public" method for generic code to mark a file as untracked |
505 """a "public" method for generic code to mark a file as untracked |
506 |
506 |
507 This function is to be called outside of "update/merge" case. For |
507 This function is to be called outside of "update/merge" case. For |
508 example by a command like `hg remove X`. |
508 example by a command like `hg remove X`. |
513 if ret: |
513 if ret: |
514 self._dirty = True |
514 self._dirty = True |
515 self._dirty_tracked_set = True |
515 self._dirty_tracked_set = True |
516 return ret |
516 return ret |
517 |
517 |
518 @requires_no_parents_change |
518 @requires_not_changing_parents |
519 def set_clean(self, filename, parentfiledata): |
519 def set_clean(self, filename, parentfiledata): |
520 """record that the current state of the file on disk is known to be clean""" |
520 """record that the current state of the file on disk is known to be clean""" |
521 self._dirty = True |
521 self._dirty = True |
522 if not self._map[filename].tracked: |
522 if not self._map[filename].tracked: |
523 self._check_new_tracked_filename(filename) |
523 self._check_new_tracked_filename(filename) |
524 (mode, size, mtime) = parentfiledata |
524 (mode, size, mtime) = parentfiledata |
525 self._map.set_clean(filename, mode, size, mtime) |
525 self._map.set_clean(filename, mode, size, mtime) |
526 |
526 |
527 @requires_no_parents_change |
527 @requires_not_changing_parents |
528 def set_possibly_dirty(self, filename): |
528 def set_possibly_dirty(self, filename): |
529 """record that the current state of the file on disk is unknown""" |
529 """record that the current state of the file on disk is unknown""" |
530 self._dirty = True |
530 self._dirty = True |
531 self._map.set_possibly_dirty(filename) |
531 self._map.set_possibly_dirty(filename) |
532 |
532 |