[PATCH 5 of 5] convert: hg sink no longer reads from the working directory
Patrick Mezard
pmezard at gmail.com
Mon Jun 2 16:31:40 CDT 2008
# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1212441839 -7200
# Node ID cc44b958626d498be256f432f21aaff3c9cdf0be
# Parent 946542b6c0169e08d613e862bef768684be5d5f2
convert: hg sink no longer reads from the working directory
diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -17,9 +17,19 @@
from mercurial.i18n import _
from mercurial.repo import RepoError
from mercurial.node import bin, hex, nullid
-from mercurial import hg, revlog, util
+from mercurial import hg, revlog, util, localrepo
from common import NoRepo, commit, converter_source, converter_sink
+
+class tagfile(localrepo.fileobject):
+ def __init__(self, data):
+ self._data = data
+
+ def name(self):
+ return '.hgtags'
+
+ def data(self):
+ return self._data
class mercurial_sink(converter_sink):
def __init__(self, ui, path):
@@ -126,19 +136,6 @@
self.before()
def putcommit(self, fileobjs, parents, commit):
- files = []
- for f in fileobjs:
- files.append(f.name())
- try:
- data = f.data()
- except IOError, inst:
- self.delfile(f.name())
- else:
- e = (f.islink() and 'l' or '') + (f.isexec() and 'x' or '')
- self.putfile(f.name(), e, data)
- if f.copied():
- self.copyfile(f.copied(), f.name())
-
seen = {}
pl = []
for p in parents:
@@ -165,7 +162,7 @@
while parents:
p1 = p2
p2 = parents.pop(0)
- a = self.repo.rawcommit(files, text, commit.author, commit.date,
+ a = self.repo.memcommit(fileobjs, text, commit.author, commit.date,
bin(p1), bin(p2), extra=extra)
self.repo.dirstate.clear()
text = "(octopus merge fixup)\n"
@@ -182,35 +179,28 @@
def puttags(self, tags):
try:
- old = self.repo.wfile(".hgtags").read()
+ parentctx = self.repo.changectx(self.tagsbranch)
+ tagparent = parentctx.node()
+ except RepoError, inst:
+ parentctx = None
+ tagparent = nullid
+
+ try:
+ old = parentctx.filectx(".hgtags").data()
oldlines = old.splitlines(1)
oldlines.sort()
except:
oldlines = []
- k = tags.keys()
- k.sort()
- newlines = []
- for tag in k:
- newlines.append("%s %s\n" % (tags[tag], tag))
-
+ newlines = [("%s %s\n" % (tags[tag], tag)) for tag in tags.keys()]
newlines.sort()
if newlines != oldlines:
self.ui.status("updating tags\n")
- f = self.repo.wfile(".hgtags", "w")
- f.write("".join(newlines))
- f.close()
- if not oldlines: self.repo.add([".hgtags"])
+ f = tagfile("".join(newlines))
date = "%s 0" % int(time.mktime(time.gmtime()))
- extra = {}
- if self.tagsbranch != 'default':
- extra['branch'] = self.tagsbranch
- try:
- tagparent = self.repo.changectx(self.tagsbranch).node()
- except RepoError, inst:
- tagparent = nullid
- self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
+ extra = {'branch': self.tagsbranch}
+ self.repo.memcommit([f], "update tags", "convert-repo",
date, tagparent, nullid, extra=extra)
return hex(self.repo.changelog.tip())
diff --git a/tests/test-convert-cvs b/tests/test-convert-cvs
--- a/tests/test-convert-cvs
+++ b/tests/test-convert-cvs
@@ -5,6 +5,11 @@
cvscall()
{
cvs -f $@
+}
+
+hgcat()
+{
+ hg --cwd src-hg cat -r tip "$1"
}
echo "[extensions]" >> $HGRCPATH
@@ -45,13 +50,13 @@
echo % convert fresh repo
hg convert src src-hg | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/a
-cat src-hg/b/c
+hgcat a
+hgcat b/c
echo % convert fresh repo with --filemap
echo include b/c > filemap
hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/b/c
+hgcat b/c
hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
echo % commit new file revisions
@@ -64,12 +69,12 @@
echo % convert again
hg convert src src-hg | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/a
-cat src-hg/b/c
+hgcat a
+hgcat b/c
echo % convert again with --filemap
hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/b/c
+hgcat b/c
hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
echo % commit branch
@@ -84,12 +89,12 @@
echo % convert again
hg convert src src-hg | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/a
-cat src-hg/b/c
+hgcat a
+hgcat b/c
echo % convert again with --filemap
hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-cat src-hg/b/c
+hgcat b/c
hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
echo "graphlog = " >> $HGRCPATH
diff --git a/tests/test-convert-cvs.out b/tests/test-convert-cvs.out
--- a/tests/test-convert-cvs.out
+++ b/tests/test-convert-cvs.out
@@ -78,7 +78,6 @@
sorting...
converting...
0 ci2
-a
a
c
d
More information about the Mercurial-devel
mailing list