# HG changeset patch # User Matt Harbison <matt_harbison@yahoo.com> # Date 1335115162 14400 # Sun Apr 22 13:19:22 2012 -0400 # Branch stable # Node ID 597ddcb41b326f86a8a1e93da7c06bbb184a98c8 # Parent 12dabc22de77cabe32f932b5fe093ab6bac21f18 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. diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -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 diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py --- a/hgext/largefiles/uisetup.py +++ b/hgext/largefiles/uisetup.py @@ -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', diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -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 ..