# HG changeset patch # User Matt Harbison # Date 1335080854 14400 # Node ID 12dabc22de77cabe32f932b5fe093ab6bac21f18 # Parent 363e808de3496653d93690718149329467d2f078 largefiles: fix status -S reporting of subrepos (issue3231) Wrapping the status command will only invoke overridestatus() and set the lfstatus field for the top level repository. Wrapping the status function is required to set the field on child repositories. Previously, status -S would report large files in a subrepo as '?' regardless of their actual states, and was inconsistent with what status would report from within that subrepo. diff -r 363e808de349 -r 12dabc22de77 hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Thu Apr 26 02:41:20 2012 +0900 +++ b/hgext/largefiles/overrides.py Sun Apr 22 03:47:34 2012 -0400 @@ -202,6 +202,13 @@ restorematchfn() removelargefiles(ui, repo, *pats, **opts) +def overridestatusfn(orig, repo, rev2, **opts): + try: + repo._repo.lfstatus = True + return orig(repo, rev2, **opts) + finally: + repo._repo.lfstatus = False + def overridestatus(orig, ui, repo, *pats, **opts): try: repo.lfstatus = True diff -r 363e808de349 -r 12dabc22de77 hgext/largefiles/uisetup.py --- a/hgext/largefiles/uisetup.py Thu Apr 26 02:41:20 2012 +0900 +++ b/hgext/largefiles/uisetup.py Sun Apr 22 03:47:34 2012 -0400 @@ -12,6 +12,7 @@ httprepo, localrepo, merge, sshrepo, sshserver, wireproto from mercurial.i18n import _ from mercurial.hgweb import hgweb_mod, protocol, webcommands +from mercurial.subrepo import hgsubrepo import overrides import proto @@ -35,8 +36,13 @@ overrides.overrideremove) entry = extensions.wrapcommand(commands.table, 'forget', overrides.overrideforget) + + # Subrepos call status function entry = extensions.wrapcommand(commands.table, 'status', overrides.overridestatus) + entry = extensions.wrapfunction(hgsubrepo, 'status', + overrides.overridestatusfn) + entry = extensions.wrapcommand(commands.table, 'log', overrides.overridelog) entry = extensions.wrapcommand(commands.table, 'rollback', diff -r 363e808de349 -r 12dabc22de77 tests/test-largefiles.t --- a/tests/test-largefiles.t Thu Apr 26 02:41:20 2012 +0900 +++ b/tests/test-largefiles.t Sun Apr 22 03:47:34 2012 -0400 @@ -1050,5 +1050,29 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add files - +verify that large files in subrepos handled properly + $ hg init subrepo + $ echo "subrepo = subrepo" > .hgsub + $ hg add .hgsub + $ hg ci -m "add subrepo" + Invoking status precommit hook + A .hgsub + ? .hgsubstate + $ echo "rev 1" > subrepo/large.txt + $ hg -R subrepo add --large subrepo/large.txt + $ hg st + $ hg st -S + A subrepo/large.txt +# This is a workaround for not noticing the subrepo is dirty + $ hg -R subrepo ci -m "commit large file" + Invoking status precommit hook + A large.txt + $ hg ci -S -m "commit top repo" + Invoking status precommit hook + M .hgsubstate + $ hg st -S + $ echo "rev 2" > subrepo/large.txt + $ hg st -S + M subrepo/large.txt + $ cd ..