[PATCH 5 of 6] scmutil: add a function to mark that files have been operated on

Augie Fackler raf at durin42.com
Tue May 7 12:25:35 CDT 2013


On Mon, May 06, 2013 at 05:12:31PM -0700, Siddharth Agarwal wrote:
> # 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):

markhandled?
markchecked?

touch confuses me, as it sounds to me like we're trying to dirty the
file, when in fact it's the opposite.

> +    '''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.
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list