largefiles: enable subrepo support for forget

This commit is contained in:
Matt Harbison 2015-01-11 23:20:51 -05:00
parent f534500188
commit 6d2831411e
3 changed files with 31 additions and 11 deletions

View File

@ -972,12 +972,10 @@ def overridebailifchanged(orig, repo):
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 @@ def overrideforget(orig, ui, repo, *pats, **opts):
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 @@ def overrideforget(orig, ui, repo, *pats, **opts):
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

View File

@ -34,8 +34,7 @@ def uisetup(ui):
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',

View File

@ -323,4 +323,25 @@ Find an exact match to a standin (should archive nothing)
$ 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 ..