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.
--- 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 ..