[PATCH 09 of 13] Py3k localrepo fixes; WIP
Alejandro Santos
alejolp at alejolp.com
Wed Aug 5 15:55:43 CDT 2009
# HG changeset patch
# User Alejandro Santos <alejolp at alejolp.com>
# Date 1249505636 10800
# Node ID 7e7aba33a25ebfe2afd1c15ec866c97d2ed511bb
# Parent 33bef15b45baf422fb233d40b723905e7f810e18
Py3k localrepo fixes; WIP
diff -r 33bef15b45ba -r 7e7aba33a25e mercurial/context.py
--- a/mercurial/context.py Wed Aug 05 17:53:56 2009 -0300
+++ b/mercurial/context.py Wed Aug 05 17:53:56 2009 -0300
@@ -8,7 +8,7 @@
from node import nullid, nullrev, short, hex
from i18n import _
import ancestor, bdiff, error, util, subrepo
-import os, errno
+import os, sys, errno
propertycache = util.propertycache
@@ -512,7 +512,8 @@
if 'branch' not in self._extra:
branch = self._repo.dirstate.branch()
try:
- branch = branch.decode('UTF-8').encode('UTF-8')
+ if sys.version_info[0] == 2:
+ branch = branch.decode('UTF-8').encode('UTF-8')
except UnicodeDecodeError:
raise util.Abort(_('branch name not in UTF-8!'))
self._extra['branch'] = branch
diff -r 33bef15b45ba -r 7e7aba33a25e mercurial/dirstate.py
--- a/mercurial/dirstate.py Wed Aug 05 17:53:56 2009 -0300
+++ b/mercurial/dirstate.py Wed Aug 05 17:53:56 2009 -0300
@@ -381,11 +381,12 @@
if gran > 0:
limit = util.fstat(st).st_mtime - gran
- cs = cStringIO.StringIO()
+ cs = []
copymap = self._copymap
pack = struct.pack
- write = cs.write
- write("".join(self._pl))
+ write = cs.append
+ for p in self._pl:
+ write(p)
for f, e in self._map.iteritems():
if f in copymap:
f = "%s\0%s" % (f, copymap[f])
@@ -394,7 +395,12 @@
e = pack(_format, e[0], e[1], e[2], e[3], len(f))
write(e)
write(f)
- st.write(cs.getvalue())
+ if sys.version_info[0] == 2:
+ for e in cs:
+ st.write(e)
+ else:
+ for e in cs:
+ st.write(type(e) is str and e.encode('utf-8') or e)
st.rename()
self._dirty = self._dirtypl = False
diff -r 33bef15b45ba -r 7e7aba33a25e mercurial/localrepo.py
--- a/mercurial/localrepo.py Wed Aug 05 17:53:56 2009 -0300
+++ b/mercurial/localrepo.py Wed Aug 05 17:53:56 2009 -0300
@@ -15,7 +15,7 @@
import merge as merge_
import tags as tags_
from lock import release
-import weakref, stat, errno, os, time, inspect
+import weakref, stat, errno, os, time, inspect, sys
propertycache = util.propertycache
class localrepository(repo.repository):
@@ -50,28 +50,15 @@
if self.ui.configbool('format', 'usefncache', True):
requirements.append("fncache")
# create an invalid changelog
- self.opener("00changelog.i", "a").write(
- '\0\0\0\2' # represents revlogv2
- ' dummy changelog to prevent using the old repo layout'
- )
- reqfile = self.opener("requires", "w")
- for r in requirements:
- reqfile.write("%s\n" % r)
- reqfile.close()
+ self._writeinvalidchangelog()
+ self._writerequirementsfile(requirements)
else:
raise error.RepoError(_("repository %s not found") % path)
elif create:
raise error.RepoError(_("repository %s already exists") % path)
else:
# find requirements
- requirements = set()
- try:
- requirements = set(self.opener("requires").read().splitlines())
- except IOError, inst:
- if inst.errno != errno.ENOENT:
- raise
- for r in requirements - self.supported:
- raise error.RepoError(_("requirement '%s' not supported") % r)
+ requirements = self._findrequirements()
self.sharedpath = self.path
try:
@@ -106,6 +93,34 @@
self._datafilters = {}
self._transref = self._lockref = self._wlockref = None
+ def _writeinvalidchangelog(self):
+ f = self.opener("00changelog.i", "a")
+ f.write('\0\0\0\2'.encode('ascii')) # represents revlogv2
+ f.write((' dummy changelog to prevent using the '
+ 'old repo layout').encode('utf-8'))
+ f.close()
+
+ def _writerequirementsfile(self, requirements):
+ reqfile = self.opener("requires", "w")
+ for r in requirements:
+ reqfile.write(("%s\n" % r).encode('utf-8'))
+ reqfile.close()
+
+ def _findrequirements(self):
+ requirements = set()
+ try:
+ requirements = self.opener("requires").read()
+ if sys.version_info[0] == 3:
+ requirements = requirements.decode('utf-8')
+ requirements = set(requirements.splitlines())
+
+ except IOError, inst:
+ if inst.errno != errno.ENOENT:
+ raise
+ for r in requirements - self.supported:
+ raise error.RepoError(_("requirement '%s' not supported") % r)
+ return requirements
+
@propertycache
def changelog(self):
c = changelog.changelog(self.sopener)
More information about the Mercurial-devel
mailing list