[PATCH stable] addremove: add back forgotten files
Augie Fackler
raf at durin42.com
Tue Nov 11 08:24:13 CST 2014
On Sun, Nov 09, 2014 at 12:43:58AM -0800, Martin von Zweigbergk wrote:
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz at google.com>
> # Date 1415517219 28800
> # Sat Nov 08 23:13:39 2014 -0800
> # Node ID abe330fc28e4b612e0ed2be5fc3cdaa378396ddd
> # Parent 2d54aa5397cdb1c697673ba10b7618d5ac25c69e
> addremove: add back forgotten files
I've dithered on this, but it also seems reasonable. Does this go
hand-in-hand with your add patch that you sent yesterday?
>
> After running "hg forget README && hg addremove", README will still be
> reported as removed. This is because scmutil._interestingfiles()
> reports the file as removed, so scmutil.addremove() does not add
> it.
>
> Teach _interestingfiles() to report forgotten files separately from
> removed files and make addremove() add forgotten files back. However,
> do not treat forgotten files as sources for rename detection. Note
> that since removed and forgotten files are treated the same before
> this change, forgotten files were considered sources for rename
> detection.
>
> Also update the other caller, marktouched(), in the same way as
> addremove().
>
> diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
> --- a/mercurial/scmutil.py
> +++ b/mercurial/scmutil.py
> @@ -686,9 +686,9 @@
> rejected = []
> m.bad = lambda x, y: rejected.append(x)
>
> - added, unknown, deleted, removed = _interestingfiles(repo, m)
> + added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
>
> - unknownset = set(unknown)
> + unknownset = set(unknown + forgotten)
> toprint = unknownset.copy()
> toprint.update(deleted)
> for abs in sorted(toprint):
> @@ -704,7 +704,7 @@
> similarity)
>
> if not dry_run:
> - _markchanges(repo, unknown, deleted, renames)
> + _markchanges(repo, unknown + forgotten, deleted, renames)
>
> for f in rejected:
> if f in m.files():
> @@ -718,10 +718,10 @@
> rejected = []
> m.bad = lambda x, y: rejected.append(x)
>
> - added, unknown, deleted, removed = _interestingfiles(repo, m)
> + added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
>
> if repo.ui.verbose:
> - unknownset = set(unknown)
> + unknownset = set(unknown + forgotten)
> toprint = unknownset.copy()
> toprint.update(deleted)
> for abs in sorted(toprint):
> @@ -734,7 +734,7 @@
> renames = _findrenames(repo, m, added + unknown, removed + deleted,
> similarity)
>
> - _markchanges(repo, unknown, deleted, renames)
> + _markchanges(repo, unknown + forgotten, deleted, renames)
>
> for f in rejected:
> if f in m.files():
> @@ -747,7 +747,7 @@
>
> This is different from dirstate.status because it doesn't care about
> whether files are modified or clean.'''
> - added, unknown, deleted, removed = [], [], [], []
> + added, unknown, deleted, removed, forgotten = [], [], [], [], []
> audit_path = pathutil.pathauditor(repo.root)
>
> ctx = repo[None]
> @@ -760,13 +760,15 @@
> unknown.append(abs)
> elif dstate != 'r' and not st:
> deleted.append(abs)
> + elif dstate == 'r' and st:
> + forgotten.append(abs)
> # for finding renames
> - elif dstate == 'r':
> + elif dstate == 'r' and not st:
> removed.append(abs)
> elif dstate == 'a':
> added.append(abs)
>
> - return added, unknown, deleted, removed
> + return added, unknown, deleted, removed, forgotten
>
> def _findrenames(repo, matcher, added, removed, similarity):
> '''Find renames from removed files to added ones.'''
> diff --git a/tests/test-addremove.t b/tests/test-addremove.t
> --- a/tests/test-addremove.t
> +++ b/tests/test-addremove.t
> @@ -18,7 +18,11 @@
> dir/bar_2
> foo_2
> committed changeset 1:e65414bf35c5
> - $ cd ../..
> + $ cd ..
> + $ hg forget foo
> + $ hg -v addremove
> + adding foo
> + $ cd ..
>
> $ hg init sim
> $ cd sim
> @@ -45,4 +49,9 @@
> adding d
> recording removal of a as rename to b (100% similar)
> $ hg commit -mb
> + $ cp b c
> + $ hg forget b
> + $ hg addremove -s 50
> + adding b
> + adding c
> $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list