changeset 3854:4f6db0233606

Merge Benoit's .hg/store support
author Matt Mackall <mpm@selenic.com>
date Sun, 10 Dec 2006 02:11:02 -0600
parents 8cbf060f637e (current diff) c0b449154a90 (diff)
children b9cdd6f2aa43
files mercurial/hg.py mercurial/localrepo.py mercurial/util.py
diffstat 32 files changed, 217 insertions(+), 95 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -128,15 +128,13 @@ def clone(ui, source, dest=None, pull=Fa
             if self.dir_:
                 self.rmtree(self.dir_, True)
 
-    dest_repo = repository(ui, dest, create=True)
-
     dir_cleanup = None
-    if dest_repo.local():
-        dir_cleanup = DirCleanup(os.path.realpath(dest_repo.root))
+    if islocal(dest):
+        dir_cleanup = DirCleanup(dest)
 
     abspath = source
     copy = False
-    if src_repo.local() and dest_repo.local():
+    if src_repo.local() and islocal(dest):
         abspath = os.path.abspath(source)
         copy = not pull and not rev
 
@@ -152,9 +150,27 @@ def clone(ui, source, dest=None, pull=Fa
             copy = False
 
     if copy:
-        # we lock here to avoid premature writing to the target
+        def force_copy(src, dst):
+            try:
+                util.copyfiles(src, dst)
+            except OSError, inst:
+                if inst.errno != errno.ENOENT:
+                    raise
+
         src_store = os.path.realpath(src_repo.spath)
-        dest_store = os.path.realpath(dest_repo.spath)
+        if not os.path.exists(dest):
+            os.mkdir(dest)
+        dest_path = os.path.realpath(os.path.join(dest, ".hg"))
+        os.mkdir(dest_path)
+        if src_repo.spath != src_repo.path:
+            dest_store = os.path.join(dest_path, "store")
+            os.mkdir(dest_store)
+        else:
+            dest_store = dest_path
+        # copy the requires file
+        force_copy(src_repo.join("requires"),
+                   os.path.join(dest_path, "requires"))
+        # we lock here to avoid premature writing to the target
         dest_lock = lock.lock(os.path.join(dest_store, "lock"))
 
         files = ("data",
@@ -163,17 +179,15 @@ def clone(ui, source, dest=None, pull=Fa
         for f in files:
             src = os.path.join(src_store, f)
             dst = os.path.join(dest_store, f)
-            try:
-                util.copyfiles(src, dst)
-            except OSError, inst:
-                if inst.errno != errno.ENOENT:
-                    raise
+            force_copy(src, dst)
 
         # we need to re-init the repo after manually copying the data
         # into it
         dest_repo = repository(ui, dest)
 
     else:
+        dest_repo = repository(ui, dest, create=True)
+
         revs = None
         if rev:
             if 'lookup' not in src_repo.capabilities:
--- a/mercurial/hgweb/common.py
+++ b/mercurial/hgweb/common.py
@@ -10,12 +10,14 @@ import os, mimetypes
 import os.path
 
 def get_mtime(repo_path):
-    hg_path = os.path.join(repo_path, ".hg")
-    cl_path = os.path.join(hg_path, "00changelog.i")
-    if os.path.exists(os.path.join(cl_path)):
+    store_path = os.path.join(repo_path, ".hg")
+    if not os.path.isdir(os.path.join(store_path, "data")):
+        store_path = os.path.join(store_path, "store")
+    cl_path = os.path.join(store_path, "00changelog.i")
+    if os.path.exists(cl_path):
         return os.stat(cl_path).st_mtime
     else:
-        return os.stat(hg_path).st_mtime
+        return os.stat(store_path).st_mtime
 
 def staticfile(directory, fname, req):
     """return a file inside directory with guessed content-type header
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -16,6 +16,7 @@ demandload(globals(), "os revlog time ut
 
 class localrepository(repo.repository):
     capabilities = ('lookup', 'changegroupsubset')
+    supported = ('revlogv1', 'store')
 
     def __del__(self):
         self.transhandle = None
@@ -30,28 +31,55 @@ class localrepository(repo.repository):
                     raise repo.RepoError(_("There is no Mercurial repository"
                                            " here (.hg not found)"))
             path = p
+
         self.path = os.path.join(path, ".hg")
-        self.spath = self.path
+        self.root = os.path.realpath(path)
+        self.origroot = path
+        self.opener = util.opener(self.path)
+        self.wopener = util.opener(self.root)
 
         if not os.path.isdir(self.path):
             if create:
                 if not os.path.exists(path):
                     os.mkdir(path)
                 os.mkdir(self.path)
-                if self.spath != self.path:
-                    os.mkdir(self.spath)
+                os.mkdir(os.path.join(self.path, "store"))
+                requirements = ("revlogv1", "store")
+                reqfile = self.opener("requires", "w")
+                for r in requirements:
+                    reqfile.write("%s\n" % r)
+                reqfile.close()
+                # create an invalid changelog
+                self.opener("00changelog.i", "a").write('\0\0\0\2')
             else:
                 raise repo.RepoError(_("repository %s not found") % path)
         elif create:
             raise repo.RepoError(_("repository %s already exists") % path)
+        else:
+            # find requirements
+            try:
+                requirements = self.opener("requires").read().splitlines()
+            except IOError, inst:
+                if inst.errno != errno.ENOENT:
+                    raise
+                requirements = []
+        # check them
+        for r in requirements:
+            if r not in self.supported:
+                raise repo.RepoError(_("requirement '%s' not supported") % r)
 
-        self.root = os.path.realpath(path)
-        self.origroot = path
+        # setup store
+        if "store" in requirements:
+            self.encodefn = util.encodefilename
+            self.decodefn = util.decodefilename
+            self.spath = os.path.join(self.path, "store")
+        else:
+            self.encodefn = lambda x: x
+            self.decodefn = lambda x: x
+            self.spath = self.path
+        self.sopener = util.encodedopener(util.opener(self.spath), self.encodefn)
+
         self.ui = ui.ui(parentui=parentui)
-        self.opener = util.opener(self.path)
-        self.sopener = util.opener(self.spath)
-        self.wopener = util.opener(self.root)
-
         try:
             self.ui.readconfig(self.join("hgrc"), self.root)
         except IOError:
@@ -408,6 +436,7 @@ class localrepository(repo.repository):
         return os.path.join(self.path, f)
 
     def sjoin(self, f):
+        f = self.encodefn(f)
         return os.path.join(self.spath, f)
 
     def wjoin(self, f):
--- a/mercurial/statichttprepo.py
+++ b/mercurial/statichttprepo.py
@@ -32,12 +32,32 @@ def opener(base):
 class statichttprepository(localrepo.localrepository):
     def __init__(self, ui, path):
         self._url = path
-        self.path = (path + "/.hg")
-        self.spath = self.path
         self.ui = ui
         self.revlogversion = 0
+
+        self.path = (path + "/.hg")
         self.opener = opener(self.path)
-        self.sopener = opener(self.spath)
+        # find requirements
+        try:
+            requirements = self.opener("requires").read().splitlines()
+        except IOError:
+            requirements = []
+        # check them
+        for r in requirements:
+            if r not in self.supported:
+                raise repo.RepoError(_("requirement '%s' not supported") % r)
+
+        # setup store
+        if "store" in requirements:
+            self.encodefn = util.encodefilename
+            self.decodefn = util.decodefilename
+            self.spath = self.path + "/store"
+        else:
+            self.encodefn = lambda x: x
+            self.decodefn = lambda x: x
+            self.spath = self.path
+        self.sopener = util.encodedopener(opener(self.spath), self.encodefn)
+
         self.manifest = manifest.manifest(self.sopener)
         self.changelog = changelog.changelog(self.sopener)
         self.tagscache = None
--- a/mercurial/streamclone.py
+++ b/mercurial/streamclone.py
@@ -79,6 +79,8 @@ def stream_out(repo, fileobj):
     entries = []
     total_bytes = 0
     for name, size in walkrepo(repo.spath):
+        if repo.decodefn:
+            name = repo.decodefn(name)
         entries.append((name, size))
         total_bytes += size
     repolock.release()
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -905,6 +905,38 @@ else:
             st = fstat(f)
         return st.st_uid == os.getuid()
 
+def _buildencodefun():
+    e = '_'
+    win_reserved = [ord(x) for x in '|\?*<":>+[]']
+    cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
+    for x in (range(32) + range(126, 256) + win_reserved):
+        cmap[chr(x)] = "~%02x" % x
+    for x in range(ord("A"), ord("Z")+1) + [ord(e)]:
+        cmap[chr(x)] = e + chr(x).lower()
+    dmap = {}
+    for k, v in cmap.iteritems():
+        dmap[v] = k
+    def decode(s):
+        i = 0
+        while i < len(s):
+            for l in xrange(1, 4):
+                try:
+                    yield dmap[s[i:i+l]]
+                    i += l
+                    break
+                except KeyError:
+                    pass
+            else:
+                raise KeyError
+    return (lambda s: "".join([cmap[c] for c in s]),
+            lambda s: "".join(list(decode(s))))
+
+encodefilename, decodefilename = _buildencodefun()
+
+def encodedopener(openerfn, fn):
+    def o(path, *args, **kw):
+        return openerfn(fn(path), *args, **kw)
+    return o
 
 def opener(base, audit=True):
     """
--- a/tests/test-bundle-r
+++ b/tests/test-bundle-r
@@ -41,11 +41,11 @@ hg commit -m "1.3m" -d "1000000 0"
 hg update -C 3
 hg mv afile anotherfile
 hg commit -m "0.3m" -d "1000000 0"
-hg debugindex .hg/data/afile.i
-hg debugindex .hg/data/adifferentfile.i
-hg debugindex .hg/data/anotherfile.i
-hg debugindex .hg/data/fred.i
-hg debugindex .hg/00manifest.i
+hg debugindex .hg/store/data/afile.i
+hg debugindex .hg/store/data/adifferentfile.i
+hg debugindex .hg/store/data/anotherfile.i
+hg debugindex .hg/store/data/fred.i
+hg debugindex .hg/store/00manifest.i
 hg verify
 cd ..
 for i in 0 1 2 3 4 5 6 7 8; do
--- a/tests/test-clone-r
+++ b/tests/test-clone-r
@@ -41,11 +41,11 @@ hg commit -m "1.3m"
 hg update -C 3
 hg mv afile anotherfile
 hg commit -m "0.3m"
-hg debugindex .hg/data/afile.i
-hg debugindex .hg/data/adifferentfile.i
-hg debugindex .hg/data/anotherfile.i
-hg debugindex .hg/data/fred.i
-hg debugindex .hg/00manifest.i
+hg debugindex .hg/store/data/afile.i
+hg debugindex .hg/store/data/adifferentfile.i
+hg debugindex .hg/store/data/anotherfile.i
+hg debugindex .hg/store/data/fred.i
+hg debugindex .hg/store/00manifest.i
 hg verify
 cd ..
 for i in 0 1 2 3 4 5 6 7 8; do
--- a/tests/test-commit-copy
+++ b/tests/test-commit-copy
@@ -11,4 +11,4 @@ echo >> bar
 hg ci -m 'cp bar foo; change bar'
 
 hg debugrename foo
-hg debugindex .hg/data/bar.i
+hg debugindex .hg/store/data/bar.i
--- a/tests/test-copy
+++ b/tests/test-copy
@@ -13,16 +13,16 @@ hg history -v
 echo "we should see one log entry for a"
 hg log a
 echo "this should show a revision linked to changeset 0"
-hg debugindex .hg/data/a.i
+hg debugindex .hg/store/data/a.i
 echo "we should see one log entry for b"
 hg log b
 echo "this should show a revision linked to changeset 1"
-hg debugindex .hg/data/b.i
+hg debugindex .hg/store/data/b.i
 
 echo "this should show the rename information in the metadata"
-hg debugdata .hg/data/b.d 0 | head -3 | tail -2
+hg debugdata .hg/store/data/b.d 0 | head -3 | tail -2
 
-$TESTDIR/md5sum.py .hg/data/b.i
+$TESTDIR/md5sum.py .hg/store/data/b.i
 hg cat b > bsum
 $TESTDIR/md5sum.py bsum
 hg cat a > asum
--- a/tests/test-copy.out
+++ b/tests/test-copy.out
@@ -41,7 +41,7 @@ this should show a revision linked to ch
 this should show the rename information in the metadata
 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
 copy: a
-ed156f22f0a6fde642de0b5eba0cbbb2  .hg/data/b.i
+ed156f22f0a6fde642de0b5eba0cbbb2  .hg/store/data/b.i
 60b725f10c9c85c70d97880dfe8191b3  bsum
 60b725f10c9c85c70d97880dfe8191b3  asum
 checking changesets
--- a/tests/test-copy2
+++ b/tests/test-copy2
@@ -14,7 +14,7 @@ hg commit -m2 -d"0 0"
 hg debugstate|grep '^copy'
 
 echo "# should match"
-hg debugindex .hg/data/foo.i
+hg debugindex .hg/store/data/foo.i
 hg debugrename bar
 
 echo bleah > foo
@@ -30,9 +30,9 @@ hg debugstate|grep '^copy'
 hg commit -m3 -d"0 0"
 
 echo "# should show no parents for tip"
-hg debugindex .hg/data/bar.i
+hg debugindex .hg/store/data/bar.i
 echo "# should match"
-hg debugindex .hg/data/foo.i
+hg debugindex .hg/store/data/foo.i
 hg debugrename bar
 
 echo "# should show no copies"
--- a/tests/test-empty-group
+++ b/tests/test-empty-group
@@ -30,12 +30,12 @@ hg ci -A -m 2 -d "1000000 0"
 hg merge 1
 hg ci -A -m m1 -d "1000000 0"
 #hg log
-#hg debugindex .hg/00manifest.i
+#hg debugindex .hg/store/00manifest.i
 hg update -C 1
 hg merge 2
 hg ci -A -m m2 -d "1000000 0"
 #hg log
-#hg debugindex .hg/00manifest.i
+#hg debugindex .hg/store/00manifest.i
 
 cd ..
 hg clone -r 3 a b
--- a/tests/test-encode
+++ b/tests/test-encode
@@ -22,7 +22,7 @@ echo %% no changes
 hg status
 
 echo %% uncompressed contents in repo
-hg debugdata .hg/data/a.gz.d 0
+hg debugdata .hg/store/data/a.gz.d 0
 
 echo %% uncompress our working dir copy
 gunzip < a.gz
--- a/tests/test-excessive-merge
+++ b/tests/test-excessive-merge
@@ -26,7 +26,7 @@ HGMERGE=true hg merge 2
 hg ci -m "merge a/b -> blah" -d "1000000 0"
 
 hg log
-hg debugindex .hg/00changelog.i
+hg debugindex .hg/store/00changelog.i
 
 echo
 
@@ -41,6 +41,6 @@ hg manifest --debug 4
 
 echo
 
-hg debugindex .hg/data/a.i
+hg debugindex .hg/store/data/a.i
 
 hg verify
--- a/tests/test-filebranch
+++ b/tests/test-filebranch
@@ -53,22 +53,22 @@ hg debugstate | cut -b 1-16,35- | grep "
 hg ci -m "merge" -d "1000000 0"
 
 echo "main: we should have a merge here"
-hg debugindex .hg/00changelog.i
+hg debugindex .hg/store/00changelog.i
 
 echo "log should show foo and quux changed"
 hg log -v -r tip
 
 echo "foo: we should have a merge here"
-hg debugindex .hg/data/foo.i
+hg debugindex .hg/store/data/foo.i
 
 echo "bar: we shouldn't have a merge here"
-hg debugindex .hg/data/bar.i
+hg debugindex .hg/store/data/bar.i
 
 echo "baz: we shouldn't have a merge here"
-hg debugindex .hg/data/baz.i
+hg debugindex .hg/store/data/baz.i
 
 echo "quux: we shouldn't have a merge here"
-hg debugindex .hg/data/quux.i
+hg debugindex .hg/store/data/quux.i
 
 echo "manifest entries should match tips of all files"
 hg manifest --debug
--- a/tests/test-flags
+++ b/tests/test-flags
@@ -43,6 +43,6 @@ hg -v merge
 ls -l ../test[123]/a > foo
 cut -b 1-10 < foo
 
-hg debugindex .hg/data/a.i
-hg debugindex ../test2/.hg/data/a.i
-hg debugindex ../test1/.hg/data/a.i
+hg debugindex .hg/store/data/a.i
+hg debugindex ../test2/.hg/store/data/a.i
+hg debugindex ../test1/.hg/store/data/a.i
--- a/tests/test-http-clone-r
+++ b/tests/test-http-clone-r
@@ -42,11 +42,11 @@ hg commit -m "1.3m"
 hg update -C 3
 hg mv afile anotherfile
 hg commit -m "0.3m"
-hg debugindex .hg/data/afile.i
-hg debugindex .hg/data/adifferentfile.i
-hg debugindex .hg/data/anotherfile.i
-hg debugindex .hg/data/fred.i
-hg debugindex .hg/00manifest.i
+hg debugindex .hg/store/data/afile.i
+hg debugindex .hg/store/data/adifferentfile.i
+hg debugindex .hg/store/data/anotherfile.i
+hg debugindex .hg/store/data/fred.i
+hg debugindex .hg/store/00manifest.i
 hg verify
 echo "# Starting server"
 hg serve -p 20061 -d --pid-file=../hg1.pid
--- a/tests/test-hup
+++ b/tests/test-hup
@@ -10,7 +10,7 @@ Q=$!
 sleep 3
 kill -HUP $P
 wait
-ls .hg
+ls -R .hg
 
 
 
--- a/tests/test-hup.out
+++ b/tests/test-hup.out
@@ -4,5 +4,11 @@ adding changesets
 killed!
 transaction abort!
 rollback completed
+.hg:
 00changelog.i
 journal.dirstate
+requires
+store
+
+.hg/store:
+00changelog.i
--- a/tests/test-lock-badness
+++ b/tests/test-lock-badness
@@ -6,6 +6,6 @@ hg --cwd a ci -A -m a
 hg clone a b
 echo b > b/b
 hg --cwd b ci -A -m b
-chmod 100 a/.hg
+chmod 100 a/.hg/store
 hg --cwd b push ../a
-chmod 700 a/.hg
+chmod 700 a/.hg/store
--- a/tests/test-merge7
+++ b/tests/test-merge7
@@ -61,6 +61,6 @@ HGMERGE=merge hg merge --debug
 
 cat test.txt | sed "s% .*%%"
 
-hg debugindex .hg/data/test.txt.i
+hg debugindex .hg/store/data/test.txt.i
 
 hg log
--- a/tests/test-parseindex
+++ b/tests/test-parseindex
@@ -43,7 +43,7 @@ def opener(*args):
         return singlebyteread(f)
     return wrapper
 
-cl = changelog.changelog(opener('.hg'))
+cl = changelog.changelog(opener('.hg/store'))
 print cl.count(), 'revisions:'
 for r in xrange(cl.count()):
     print short(cl.node(r))
--- a/tests/test-permissions
+++ b/tests/test-permissions
@@ -5,11 +5,11 @@ echo foo > a
 hg add a
 hg commit -m "1" -d "1000000 0"
 hg verify
-chmod -r .hg/data/a.i
+chmod -r .hg/store/data/a.i
 hg verify 2>/dev/null || echo verify failed
-chmod +r .hg/data/a.i
+chmod +r .hg/store/data/a.i
 hg verify 2>/dev/null || echo verify failed
-chmod -w .hg/data/a.i
+chmod -w .hg/store/data/a.i
 echo barber > a
 hg commit -m "2" -d "1000000 0" 2>/dev/null || echo commit failed
 
--- a/tests/test-pull-permission
+++ b/tests/test-pull-permission
@@ -7,13 +7,13 @@ echo foo > b
 hg add b
 hg ci -m "b" -d "1000000 0"
 
-chmod -w .hg
+chmod -w .hg/store
 
 cd ..
 
 hg clone a b
 
-chmod +w a/.hg # let test clean up
+chmod +w a/.hg/store # let test clean up
 
 cd b
 hg verify
--- a/tests/test-push-r
+++ b/tests/test-push-r
@@ -41,11 +41,11 @@ hg commit -m "1.3m"
 hg update -C 3
 hg mv afile anotherfile
 hg commit -m "0.3m"
-hg debugindex .hg/data/afile.i
-hg debugindex .hg/data/adifferentfile.i
-hg debugindex .hg/data/anotherfile.i
-hg debugindex .hg/data/fred.i
-hg debugindex .hg/00manifest.i
+hg debugindex .hg/store/data/afile.i
+hg debugindex .hg/store/data/adifferentfile.i
+hg debugindex .hg/store/data/anotherfile.i
+hg debugindex .hg/store/data/fred.i
+hg debugindex .hg/store/00manifest.i
 hg verify
 cd ..
 for i in 0 1 2 3 4 5 6 7 8; do
--- a/tests/test-rename-merge1
+++ b/tests/test-rename-merge1
@@ -23,5 +23,5 @@ hg merge -y --debug
 hg status -AC
 cat b
 hg ci -m "merge" -d "0 0"
-hg debugindex .hg/data/b.i
+hg debugindex .hg/store/data/b.i
 hg debugrename b
\ No newline at end of file
new file mode 100755
--- /dev/null
+++ b/tests/test-requires
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+mkdir t
+cd t
+hg init
+echo a > a
+hg add a
+hg commit -m test -d "1000000 0"
+rm .hg/requires
+hg tip
+echo indoor-pool > .hg/requires
+hg tip
+
+true
new file mode 100644
--- /dev/null
+++ b/tests/test-requires.out
@@ -0,0 +1,2 @@
+abort: index 00changelog.i unknown format 2!
+abort: requirement 'indoor-pool' not supported!
--- a/tests/test-ssh
+++ b/tests/test-ssh
@@ -28,7 +28,8 @@ echo "# creating 'remote'"
 hg init remote
 cd remote
 echo this > foo
-hg ci -A -m "init" -d "1000000 0" foo
+echo this > fooO
+hg ci -A -m "init" -d "1000000 0" foo fooO
 echo '[server]' > .hg/hgrc
 echo 'uncompressed = True' >> .hg/hgrc
 echo '[hooks]' >> .hg/hgrc
--- a/tests/test-ssh-clone-r
+++ b/tests/test-ssh-clone-r
@@ -66,11 +66,11 @@ hg commit -m "1.3m"
 hg update -C 3
 hg mv afile anotherfile
 hg commit -m "0.3m"
-hg debugindex .hg/data/afile.i
-hg debugindex .hg/data/adifferentfile.i
-hg debugindex .hg/data/anotherfile.i
-hg debugindex .hg/data/fred.i
-hg debugindex .hg/00manifest.i
+hg debugindex .hg/store/data/afile.i
+hg debugindex .hg/store/data/adifferentfile.i
+hg debugindex .hg/store/data/anotherfile.i
+hg debugindex .hg/store/data/fred.i
+hg debugindex .hg/store/00manifest.i
 hg verify
 cd ..
 
--- a/tests/test-ssh.out
+++ b/tests/test-ssh.out
@@ -11,20 +11,20 @@ checking changesets
 checking manifests
 crosschecking files in changesets and manifests
 checking files
-1 files, 1 changesets, 1 total revisions
+2 files, 1 changesets, 2 total revisions
 # clone remote via pull
 requesting all changes
 adding changesets
 adding manifests
 adding file changes
-added 1 changesets with 1 changes to 1 files
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+added 1 changesets with 2 changes to 2 files
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # verify
 checking changesets
 checking manifests
 crosschecking files in changesets and manifests
 checking files
-1 files, 1 changesets, 1 total revisions
+2 files, 1 changesets, 2 total revisions
 # empty default pull
 default = ssh://user@dummy/remote
 pulling from ssh://user@dummy/remote
@@ -34,7 +34,7 @@ no changes found
 # updating rc
 # find outgoing
 searching for changes
-changeset:   1:c54836a570be
+changeset:   1:572896fe480d
 tag:         tip
 user:        test
 date:        Mon Jan 12 13:46:40 1970 +0000
@@ -42,7 +42,7 @@ summary:     add
 
 # find incoming on the remote side
 searching for changes
-changeset:   1:c54836a570be
+changeset:   1:572896fe480d
 tag:         tip
 user:        test
 date:        Mon Jan 12 13:46:40 1970 +0000
@@ -56,7 +56,7 @@ remote: adding manifests
 remote: adding file changes
 remote: added 1 changesets with 1 changes to 1 files
 # check remote tip
-changeset:   1:c54836a570be
+changeset:   1:572896fe480d
 tag:         tip
 user:        test
 date:        Mon Jan 12 13:46:40 1970 +0000
@@ -66,7 +66,7 @@ checking changesets
 checking manifests
 crosschecking files in changesets and manifests
 checking files
-1 files, 2 changesets, 2 total revisions
+2 files, 2 changesets, 3 total revisions
 bleah
 # push should succeed
 pushing to ssh://user@dummy/remote