Mercurial > hg
changeset 16516:597ddcb41b32 stable
largefiles: notice dirty large files in a subrepo
Summary and commit use dirty() to check the status of a subrepository,
so this overrides dirty() in the subrepo in the same manner as
status() to check the large files instead of their standins.
Previously, if only a large file was changed in a subrepo, summary in
the top level repo would not report the subrepo was dirty and commit
-S would report nothing changed. If any type of file was changed in
the top repo and only a large file in the subrepo, commit -S would not
commit the changes to the subrepo.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 22 Apr 2012 13:19:22 -0400 |
parents | 12dabc22de77 |
children | 4bce649a2b0f |
files | hgext/largefiles/overrides.py hgext/largefiles/uisetup.py tests/test-largefiles.t |
diffstat | 3 files changed, 36 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/largefiles/overrides.py Sun Apr 22 03:47:34 2012 -0400 +++ b/hgext/largefiles/overrides.py Sun Apr 22 13:19:22 2012 -0400 @@ -216,6 +216,13 @@ finally: repo.lfstatus = False +def overridedirty(orig, repo, ignoreupdate=False): + try: + repo._repo.lfstatus = True + return orig(repo, ignoreupdate) + finally: + repo._repo.lfstatus = False + def overridelog(orig, ui, repo, *pats, **opts): try: repo.lfstatus = True
--- a/hgext/largefiles/uisetup.py Sun Apr 22 03:47:34 2012 -0400 +++ b/hgext/largefiles/uisetup.py Sun Apr 22 13:19:22 2012 -0400 @@ -81,6 +81,10 @@ entry = extensions.wrapfunction(cmdutil, 'copy', overrides.overridecopy) + # Summary calls dirty on the subrepos + entry = extensions.wrapfunction(hgsubrepo, 'dirty', + overrides.overridedirty) + # Backout calls revert so we need to override both the command and the # function entry = extensions.wrapcommand(commands.table, 'revert',
--- a/tests/test-largefiles.t Sun Apr 22 03:47:34 2012 -0400 +++ b/tests/test-largefiles.t Sun Apr 22 13:19:22 2012 -0400 @@ -1060,19 +1060,40 @@ ? .hgsubstate $ echo "rev 1" > subrepo/large.txt $ hg -R subrepo add --large subrepo/large.txt + $ hg sum + parent: 1:8ee150ea2e9c tip + add subrepo + branch: default + commit: 1 subrepos + update: (current) $ 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" + $ hg ci -S -m "commit top repo" + committing subrepository subrepo Invoking status precommit hook A large.txt - $ hg ci -S -m "commit top repo" Invoking status precommit hook M .hgsubstate +# No differences $ hg st -S + $ hg sum + parent: 2:ce4cd0c527a6 tip + commit top repo + branch: default + commit: (clean) + update: (current) $ echo "rev 2" > subrepo/large.txt $ hg st -S M subrepo/large.txt - + $ hg sum + parent: 2:ce4cd0c527a6 tip + commit top repo + branch: default + commit: 1 subrepos + update: (current) + $ hg ci -m "this commit should fail without -S" + abort: uncommitted changes in subrepo subrepo + (use --subrepos for recursive commit) + [255] $ cd ..