[PATCH 4 of 4] subrepo: use low-level git-diff-index for dirty()

Eric Eisner ede at MIT.EDU
Tue Dec 14 21:07:27 CST 2010

# HG changeset patch
# User Eric Eisner <ede at mit.edu>
# Date 1292381893 18000
# Node ID d7097778f8f05ade484158220fb0233bea4ca2e2
# Parent  2fe9343bf03801cdb3c3f272f133263f7f23da00
subrepo: use low-level git-diff-index for dirty()

Despite its name, git-diff-index compares a revision to the files in the
working directory. This seems way less sketchy and more future proof than
parsing human-readable git-status.

diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -710,9 +710,8 @@ class gitsubrepo(abstractsubrepo):
         if self._state[1] != self._gitstate(): # version checked out changed?
             return True
         # check for staged changes or modified files; ignore untracked files
-        status = self._gitcommand(['status'])
-        return ('\n# Changed but not updated:' in status or
-                '\n# Changes to be committed:' in status)
+        out, code = self._gitdir(['diff-index', '--quiet', 'HEAD'])
+        return code == 1
     def get(self, state):
         source, revision, kind = state

More information about the Mercurial-devel mailing list