mercurial/subrepo.py
changeset 14481 b2ee161328e0
parent 14443 6fe6defdc924
parent 14469 2fdea636f254
child 14488 278a4e0fdfed
--- a/mercurial/subrepo.py	Tue May 31 15:26:02 2011 -0500
+++ b/mercurial/subrepo.py	Tue May 31 15:28:23 2011 -0500
@@ -824,7 +824,7 @@
 
     def dirty(self, ignoreupdate=False):
         if self._gitmissing():
-            return True
+            return self._state[1] != ''
         if self._gitisbare():
             return True
         if not ignoreupdate and self._state[1] != self._gitstate():
@@ -836,6 +836,9 @@
 
     def get(self, state, overwrite=False):
         source, revision, kind = state
+        if not revision:
+            self.remove()
+            return
         self._fetch(source, revision)
         # if the repo was set to be bare, unbare it
         if self._gitisbare():
@@ -953,6 +956,8 @@
             mergefunc()
 
     def push(self, force):
+        if not self._state[1]:
+            return True
         if self._gitmissing():
             raise util.Abort(_("subrepo %s is missing") % self._relpath)
         # if a branch in origin contains the revision, nothing to do
@@ -1009,6 +1014,8 @@
 
     def archive(self, ui, archiver, prefix):
         source, revision = self._state
+        if not revision:
+            return
         self._fetch(source, revision)
 
         # Parse git's native archive command.
@@ -1033,10 +1040,10 @@
 
 
     def status(self, rev2, **opts):
-        if self._gitmissing():
+        rev1 = self._state[1]
+        if self._gitmissing() or not rev1:
             # if the repo is missing, return no results
             return [], [], [], [], [], [], []
-        rev1 = self._state[1]
         modified, added, removed = [], [], []
         if rev2:
             command = ['diff-tree', rev1, rev2]