[PATCH 5 of 6] scmutil: add a function to mark that files have been operated on
Siddharth Agarwal
sid0 at fb.com
Mon May 6 19:12:31 CDT 2013
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1365107908 25200
# Thu Apr 04 13:38:28 2013 -0700
# Node ID 486f0b01206477869f6a6946961fea0b2e776b12
# Parent 3f123b5d113d0b2626c74678aa0b6fe994a8883d
scmutil: add a function to mark that files have been operated on
Several places use scmutil.addremove as a means to declare that certain files
have been operated on. This is ugly because:
- addremove takes patterns relative to the cwd, not paths relative to the root,
which means extra contortions for callers.
- addremove doesn't make clear what happens to files whose status hasn't
changed.
This new method accepts filenames relative to the repo root, and has a much
clearer contract. It also allows future modifications that do more with files
whose status hasn't changed.
diff -r 3f123b5d113d -r 486f0b012064 mercurial/scmutil.py
--- a/mercurial/scmutil.py Wed Apr 03 15:53:59 2013 -0700
+++ b/mercurial/scmutil.py Thu Apr 04 13:38:28 2013 -0700
@@ -714,6 +714,36 @@ def addremove(repo, pats=[], opts={}, dr
return 1
return 0
+def touch(repo, files, similarity=0.0):
+ '''Assert that files have somehow been operated upon. files are relative to
+ the repo root.'''
+ m = matchfiles(repo, files)
+ rejected = []
+ m.bad = lambda x, y: rejected.append(x)
+
+ added, unknown, deleted, removed = _interestingfiles(repo, m)
+
+ if repo.ui.verbose:
+ unknownset = set(unknown)
+ toprint = unknownset.copy()
+ toprint.update(deleted)
+ for abs in sorted(toprint):
+ if abs in unknownset:
+ status = _('adding %s\n') % abs
+ else:
+ status = _('removing %s\n') % abs
+ repo.ui.status(status)
+
+ renames = _findrenames(repo, m, added + unknown, removed + deleted,
+ similarity)
+
+ _markchanges(repo, unknown, deleted, renames)
+
+ for f in rejected:
+ if f in m.files():
+ return 1
+ return 0
+
def _interestingfiles(repo, matcher):
'''Walk dirstate with matcher, looking for files that addremove would care
about.
More information about the Mercurial-devel
mailing list