--- a/mercurial/subrepo.py Mon Dec 20 13:59:33 2010 -0500
+++ b/mercurial/subrepo.py Mon Dec 20 13:59:33 2010 -0500
@@ -903,6 +903,29 @@
ui.progress(_('archiving (%s)') % relpath, None)
+ def status(self, rev2, **opts):
+ rev1 = self._state[1]
+ modified, added, removed = [], [], []
+ if rev2:
+ command = ['diff-tree', rev1, rev2]
+ else:
+ command = ['diff-index', rev1]
+ out = self._gitcommand(command)
+ for line in out.split('\n'):
+ tab = line.find('\t')
+ if tab == -1:
+ continue
+ status, f = line[tab - 1], line[tab + 1:]
+ if status == 'M':
+ modified.append(f)
+ elif status == 'A':
+ added.append(f)
+ elif status == 'D':
+ removed.append(f)
+
+ deleted = unknown = ignored = clean = []
+ return modified, added, removed, deleted, unknown, ignored, clean
+
types = {
'hg': hgsubrepo,
'svn': svnsubrepo,
--- a/tests/test-subrepo-git.t Mon Dec 20 13:59:33 2010 -0500
+++ b/tests/test-subrepo-git.t Mon Dec 20 13:59:33 2010 -0500
@@ -52,6 +52,8 @@
$ git checkout -q -b testing origin/testing >/dev/null
$ cd ..
+ $ hg status --subrepos
+ M s/g
$ hg commit -m 'update git subrepo'
committing subrepository s
$ hg debugsub
@@ -99,6 +101,8 @@
$ cd ../ta
$ echo ggg >> s/g
+ $ hg status --subrepos
+ M s/g
$ hg commit -m ggg
committing subrepository s
$ hg debugsub
@@ -119,6 +123,8 @@
$ git add f
$ cd ..
+ $ hg status --subrepos
+ A s/f
$ hg commit -m f
committing subrepository s
$ hg debugsub
@@ -160,6 +166,10 @@
ggg
$ hg commit -m 'merge'
committing subrepository s
+ $ hg status --subrepos --rev 1:5
+ M .hgsubstate
+ M s/g
+ A s/f
$ hg debugsub
path s
source ../gitroot
@@ -282,6 +292,8 @@
nested commit
$ echo ffff >> inner/s/f
+ $ hg status --subrepos
+ M inner/s/f
$ hg commit -m nested
committing subrepository inner
committing subrepository inner/s