Mercurial > hg-stable
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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/hg.py Sun Dec 10 02:11:02 2006 -0600 @@ -128,15 +128,13 @@ 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 @@ 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 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/hgweb/common.py Sun Dec 10 02:11:02 2006 -0600 @@ -10,12 +10,14 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/localrepo.py Sun Dec 10 02:11:02 2006 -0600 @@ -16,6 +16,7 @@ class localrepository(repo.repository): capabilities = ('lookup', 'changegroupsubset') + supported = ('revlogv1', 'store') def __del__(self): self.transhandle = None @@ -30,28 +31,55 @@ 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 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/statichttprepo.py Sun Dec 10 02:11:02 2006 -0600 @@ -32,12 +32,32 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/streamclone.py Sun Dec 10 02:11:02 2006 -0600 @@ -79,6 +79,8 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/mercurial/util.py Sun Dec 10 02:11:02 2006 -0600 @@ -905,6 +905,38 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-bundle-r Sun Dec 10 02:11:02 2006 -0600 @@ -41,11 +41,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-clone-r Sun Dec 10 02:11:02 2006 -0600 @@ -41,11 +41,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-commit-copy Sun Dec 10 02:11:02 2006 -0600 @@ -11,4 +11,4 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-copy Sun Dec 10 02:11:02 2006 -0600 @@ -13,16 +13,16 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-copy.out Sun Dec 10 02:11:02 2006 -0600 @@ -41,7 +41,7 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-copy2 Sun Dec 10 02:11:02 2006 -0600 @@ -14,7 +14,7 @@ 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 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-empty-group Sun Dec 10 02:11:02 2006 -0600 @@ -30,12 +30,12 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-encode Sun Dec 10 02:11:02 2006 -0600 @@ -22,7 +22,7 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-excessive-merge Sun Dec 10 02:11:02 2006 -0600 @@ -26,7 +26,7 @@ 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 @@ echo -hg debugindex .hg/data/a.i +hg debugindex .hg/store/data/a.i hg verify
--- a/tests/test-filebranch Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-filebranch Sun Dec 10 02:11:02 2006 -0600 @@ -53,22 +53,22 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-flags Sun Dec 10 02:11:02 2006 -0600 @@ -43,6 +43,6 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-http-clone-r Sun Dec 10 02:11:02 2006 -0600 @@ -42,11 +42,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-hup Sun Dec 10 02:11:02 2006 -0600 @@ -10,7 +10,7 @@ sleep 3 kill -HUP $P wait -ls .hg +ls -R .hg
--- a/tests/test-hup.out Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-hup.out Sun Dec 10 02:11:02 2006 -0600 @@ -4,5 +4,11 @@ killed! transaction abort! rollback completed +.hg: 00changelog.i journal.dirstate +requires +store + +.hg/store: +00changelog.i
--- a/tests/test-lock-badness Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-lock-badness Sun Dec 10 02:11:02 2006 -0600 @@ -6,6 +6,6 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-merge7 Sun Dec 10 02:11:02 2006 -0600 @@ -61,6 +61,6 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-parseindex Sun Dec 10 02:11:02 2006 -0600 @@ -43,7 +43,7 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-permissions Sun Dec 10 02:11:02 2006 -0600 @@ -5,11 +5,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-pull-permission Sun Dec 10 02:11:02 2006 -0600 @@ -7,13 +7,13 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-push-r Sun Dec 10 02:11:02 2006 -0600 @@ -41,11 +41,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-rename-merge1 Sun Dec 10 02:11:02 2006 -0600 @@ -23,5 +23,5 @@ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-requires Sun Dec 10 02:11:02 2006 -0600 @@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-requires.out Sun Dec 10 02:11:02 2006 -0600 @@ -0,0 +1,2 @@ +abort: index 00changelog.i unknown format 2! +abort: requirement 'indoor-pool' not supported!
--- a/tests/test-ssh Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-ssh Sun Dec 10 02:11:02 2006 -0600 @@ -28,7 +28,8 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-ssh-clone-r Sun Dec 10 02:11:02 2006 -0600 @@ -66,11 +66,11 @@ 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 Sun Dec 10 01:05:00 2006 -0600 +++ b/tests/test-ssh.out Sun Dec 10 02:11:02 2006 -0600 @@ -11,20 +11,20 @@ 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 @@ # 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 @@ # 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 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 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