[PATCH 1 of 3] dirstate: don't check state of subrepo directories
durin42 at gmail.com
durin42 at gmail.com
Thu Dec 10 10:29:58 CST 2009
# HG changeset patch
# User Augie Fackler <durin42 at gmail.com>
# Date 1260390227 21600
# Node ID 58972474c3eb72dec11dbe0232e9100f2d1b8fa8
# Parent 15fbbc939373b7aded977a8b6fa757f8bbfe3dd8
dirstate: don't check state of subrepo directories
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -7,7 +7,7 @@
from node import nullid
from i18n import _
-import util, ignore, osutil, parsers
+import util, ignore, osutil, parsers, subrepo
import struct, os, stat, errno
import cStringIO
@@ -483,7 +483,13 @@
files = set(match.files())
if not files or '.' in files:
files = ['']
- results = {'.hg': None}
+ subfile = join('.hgsub')
+ if os.path.exists(subfile):
+ substate = subrepo.parsesub(subfile, open(subfile).read())
+ else:
+ substate = {}
+ removekeys = substate.keys() + ['.hg']
+ results = dict.fromkeys(removekeys)
# step 1: find all explicit files
for ff in sorted(files):
@@ -562,7 +568,7 @@
st = None
results[nf] = st
- del results['.hg']
+ map(results.pop, removekeys)
return results
def status(self, match, ignored, clean, unknown):
diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -12,19 +12,12 @@
nullstate = ('', '')
-def state(ctx):
+def parsesub(file, data, ctx=None):
p = config.config()
- def read(f, sections=None, remap=None):
- if f in ctx:
- try:
- p.parse(f, ctx[f].data(), sections, remap)
- except IOError, err:
- if err.errno != errno.ENOENT:
- raise
- read('.hgsub')
+ p.parse(file, data, None, None)
rev = {}
- if '.hgsubstate' in ctx:
+ if ctx and '.hgsubstate' in ctx:
try:
for l in ctx['.hgsubstate'].data().splitlines():
revision, path = l.split(" ", 1)
@@ -39,6 +32,16 @@
return state
+
+def state(ctx):
+ if '.hgsub' in ctx:
+ try:
+ return parsesub('.hgsub', ctx['.hgsub'].data(), ctx=ctx)
+ except IOError, err:
+ if err.errno != errno.ENOENT:
+ raise
+ return {}
+
def writestate(repo, state):
repo.wwrite('.hgsubstate',
''.join(['%s %s\n' % (state[s][1], s)
More information about the Mercurial-devel
mailing list