--- a/hgext/largefiles/overrides.py Tue Jan 13 15:07:08 2015 -0800
+++ b/hgext/largefiles/overrides.py Sun Jan 11 23:20:51 2015 -0500
@@ -972,12 +972,10 @@
if s.modified or s.added or s.removed or s.deleted:
raise util.Abort(_('uncommitted changes'))
-def overrideforget(orig, ui, repo, *pats, **opts):
- installnormalfilesmatchfn(repo[None].manifest())
- result = orig(ui, repo, *pats, **opts)
- restorematchfn()
- m = composelargefilematcher(scmutil.match(repo[None], pats, opts),
- repo[None].manifest())
+def cmdutilforget(orig, ui, repo, match, prefix, explicitonly):
+ normalmatcher = composenormalfilematcher(match, repo[None].manifest())
+ bad, forgot = orig(ui, repo, normalmatcher, prefix, explicitonly)
+ m = composelargefilematcher(match, repo[None].manifest())
try:
repo.lfstatus = True
@@ -992,7 +990,7 @@
repo.wvfs.isdir(lfutil.standin(f)):
ui.warn(_('not removing %s: file is already untracked\n')
% m.rel(f))
- result = 1
+ bad.append(f)
for f in forget:
if ui.verbose or not m.exact(f):
@@ -1012,11 +1010,13 @@
standins = [lfutil.standin(f) for f in forget]
for f in standins:
util.unlinkpath(repo.wjoin(f), ignoremissing=True)
- repo[None].forget(standins)
+ rejected = repo[None].forget(standins)
finally:
wlock.release()
- return result
+ bad.extend(f for f in rejected if f in m.files())
+ forgot.extend(f for f in forget if f not in rejected)
+ return bad, forgot
def _getoutgoings(repo, other, missing, addfunc):
"""get pairs of filename and largefile hash in outgoing revisions
--- a/hgext/largefiles/uisetup.py Tue Jan 13 15:07:08 2015 -0800
+++ b/hgext/largefiles/uisetup.py Sun Jan 11 23:20:51 2015 -0500
@@ -34,8 +34,7 @@
entry = extensions.wrapfunction(scmutil, 'addremove',
overrides.scmutiladdremove)
extensions.wrapfunction(cmdutil, 'remove', overrides.cmdutilremove)
- entry = extensions.wrapcommand(commands.table, 'forget',
- overrides.overrideforget)
+ extensions.wrapfunction(cmdutil, 'forget', overrides.cmdutilforget)
# Subrepos call status function
entry = extensions.wrapcommand(commands.table, 'status',
--- a/tests/test-subrepo-deep-nested-change.t Tue Jan 13 15:07:08 2015 -0800
+++ b/tests/test-subrepo-deep-nested-change.t Sun Jan 11 23:20:51 2015 -0500
@@ -323,4 +323,25 @@
$ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf
$ find ../archive_lf 2> /dev/null | sort
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > largefiles=
+ > EOF
+
+Test forget through a deep subrepo with the largefiles extension, both a
+largefile and a normal file. Then a largefile that hasn't been committed yet.
+ $ touch sub1/sub2/untracked.txt
+ $ hg forget sub1/sub2/large.bin sub1/sub2/test.txt sub1/sub2/untracked.txt
+ not removing sub1/sub2/untracked.txt: file is already untracked (glob)
+ [1]
+ $ hg add -v --large -R sub1/sub2 sub1/sub2/untracked.txt
+ adding sub1/sub2/untracked.txt as a largefile (glob)
+ $ hg forget -v sub1/sub2/untracked.txt
+ removing sub1/sub2/untracked.txt (glob)
+ $ hg status -S
+ R sub1/sub2/large.bin
+ R sub1/sub2/test.txt
+ ? foo/bar/abc
+ ? sub1/sub2/untracked.txt
+
$ cd ..