##// END OF EJS Templates
switch to the .hg/store layout, fix the tests
Benoit Boissinot -
r3853:c0b44915 default
parent child Browse files
Show More
@@ -157,11 +157,15 b' def clone(ui, source, dest=None, pull=Fa'
157 157 raise
158 158
159 159 src_store = os.path.realpath(src_repo.spath)
160 dest_path = os.path.realpath(os.path.join(dest, ".hg"))
161 dest_store = dest_path
162 160 if not os.path.exists(dest):
163 161 os.mkdir(dest)
162 dest_path = os.path.realpath(os.path.join(dest, ".hg"))
164 163 os.mkdir(dest_path)
164 if src_repo.spath != src_repo.path:
165 dest_store = os.path.join(dest_path, "store")
166 os.mkdir(dest_store)
167 else:
168 dest_store = dest_path
165 169 # copy the requires file
166 170 force_copy(src_repo.join("requires"),
167 171 os.path.join(dest_path, "requires"))
@@ -10,12 +10,14 b' import os, mimetypes'
10 10 import os.path
11 11
12 12 def get_mtime(repo_path):
13 hg_path = os.path.join(repo_path, ".hg")
14 cl_path = os.path.join(hg_path, "00changelog.i")
15 if os.path.exists(os.path.join(cl_path)):
13 store_path = os.path.join(repo_path, ".hg")
14 if not os.path.isdir(os.path.join(store_path, "data")):
15 store_path = os.path.join(store_path, "store")
16 cl_path = os.path.join(store_path, "00changelog.i")
17 if os.path.exists(cl_path):
16 18 return os.stat(cl_path).st_mtime
17 19 else:
18 return os.stat(hg_path).st_mtime
20 return os.stat(store_path).st_mtime
19 21
20 22 def staticfile(directory, fname, req):
21 23 """return a file inside directory with guessed content-type header
@@ -16,7 +16,7 b' demandload(globals(), "os revlog time ut'
16 16
17 17 class localrepository(repo.repository):
18 18 capabilities = ('lookup', 'changegroupsubset')
19 supported = ('revlogv1',)
19 supported = ('revlogv1', 'store')
20 20
21 21 def __del__(self):
22 22 self.transhandle = None
@@ -43,13 +43,14 b' class localrepository(repo.repository):'
43 43 if not os.path.exists(path):
44 44 os.mkdir(path)
45 45 os.mkdir(self.path)
46 #if self.spath != self.path:
47 # os.mkdir(self.spath)
48 requirements = ("revlogv1",)
46 os.mkdir(os.path.join(self.path, "store"))
47 requirements = ("revlogv1", "store")
49 48 reqfile = self.opener("requires", "w")
50 49 for r in requirements:
51 50 reqfile.write("%s\n" % r)
52 51 reqfile.close()
52 # create an invalid changelog
53 self.opener("00changelog.i", "a").write('\0\0\0\2')
53 54 else:
54 55 raise repo.RepoError(_("repository %s not found") % path)
55 56 elif create:
@@ -68,8 +69,15 b' class localrepository(repo.repository):'
68 69 raise repo.RepoError(_("requirement '%s' not supported") % r)
69 70
70 71 # setup store
71 self.spath = self.path
72 self.sopener = util.opener(self.spath)
72 if "store" in requirements:
73 self.encodefn = util.encodefilename
74 self.decodefn = util.decodefilename
75 self.spath = os.path.join(self.path, "store")
76 else:
77 self.encodefn = lambda x: x
78 self.decodefn = lambda x: x
79 self.spath = self.path
80 self.sopener = util.encodedopener(util.opener(self.spath), self.encodefn)
73 81
74 82 self.ui = ui.ui(parentui=parentui)
75 83 try:
@@ -420,6 +428,7 b' class localrepository(repo.repository):'
420 428 return os.path.join(self.path, f)
421 429
422 430 def sjoin(self, f):
431 f = self.encodefn(f)
423 432 return os.path.join(self.spath, f)
424 433
425 434 def wjoin(self, f):
@@ -32,10 +32,10 b' def opener(base):'
32 32 class statichttprepository(localrepo.localrepository):
33 33 def __init__(self, ui, path):
34 34 self._url = path
35 self.path = (path + "/.hg")
36 self.spath = self.path
37 35 self.ui = ui
38 36 self.revlogversion = 0
37
38 self.path = (path + "/.hg")
39 39 self.opener = opener(self.path)
40 40 # find requirements
41 41 try:
@@ -48,8 +48,15 b' class statichttprepository(localrepo.loc'
48 48 raise repo.RepoError(_("requirement '%s' not supported") % r)
49 49
50 50 # setup store
51 self.spath = self.path
52 self.sopener = opener(self.spath)
51 if "store" in requirements:
52 self.encodefn = util.encodefilename
53 self.decodefn = util.decodefilename
54 self.spath = self.path + "/store"
55 else:
56 self.encodefn = lambda x: x
57 self.decodefn = lambda x: x
58 self.spath = self.path
59 self.sopener = util.encodedopener(opener(self.spath), self.encodefn)
53 60
54 61 self.manifest = manifest.manifest(self.sopener)
55 62 self.changelog = changelog.changelog(self.sopener)
@@ -79,6 +79,8 b' def stream_out(repo, fileobj):'
79 79 entries = []
80 80 total_bytes = 0
81 81 for name, size in walkrepo(repo.spath):
82 if repo.decodefn:
83 name = repo.decodefn(name)
82 84 entries.append((name, size))
83 85 total_bytes += size
84 86 repolock.release()
@@ -897,6 +897,10 b' def _buildencodefun():'
897 897
898 898 encodefilename, decodefilename = _buildencodefun()
899 899
900 def encodedopener(openerfn, fn):
901 def o(path, *args, **kw):
902 return openerfn(fn(path), *args, **kw)
903 return o
900 904
901 905 def opener(base, audit=True):
902 906 """
@@ -41,11 +41,11 b' hg commit -m "1.3m" -d "1000000 0"'
41 41 hg update -C 3
42 42 hg mv afile anotherfile
43 43 hg commit -m "0.3m" -d "1000000 0"
44 hg debugindex .hg/data/afile.i
45 hg debugindex .hg/data/adifferentfile.i
46 hg debugindex .hg/data/anotherfile.i
47 hg debugindex .hg/data/fred.i
48 hg debugindex .hg/00manifest.i
44 hg debugindex .hg/store/data/afile.i
45 hg debugindex .hg/store/data/adifferentfile.i
46 hg debugindex .hg/store/data/anotherfile.i
47 hg debugindex .hg/store/data/fred.i
48 hg debugindex .hg/store/00manifest.i
49 49 hg verify
50 50 cd ..
51 51 for i in 0 1 2 3 4 5 6 7 8; do
@@ -41,11 +41,11 b' hg commit -m "1.3m"'
41 41 hg update -C 3
42 42 hg mv afile anotherfile
43 43 hg commit -m "0.3m"
44 hg debugindex .hg/data/afile.i
45 hg debugindex .hg/data/adifferentfile.i
46 hg debugindex .hg/data/anotherfile.i
47 hg debugindex .hg/data/fred.i
48 hg debugindex .hg/00manifest.i
44 hg debugindex .hg/store/data/afile.i
45 hg debugindex .hg/store/data/adifferentfile.i
46 hg debugindex .hg/store/data/anotherfile.i
47 hg debugindex .hg/store/data/fred.i
48 hg debugindex .hg/store/00manifest.i
49 49 hg verify
50 50 cd ..
51 51 for i in 0 1 2 3 4 5 6 7 8; do
@@ -11,4 +11,4 b' echo >> bar'
11 11 hg ci -m 'cp bar foo; change bar'
12 12
13 13 hg debugrename foo
14 hg debugindex .hg/data/bar.i
14 hg debugindex .hg/store/data/bar.i
@@ -13,16 +13,16 b' hg history -v'
13 13 echo "we should see one log entry for a"
14 14 hg log a
15 15 echo "this should show a revision linked to changeset 0"
16 hg debugindex .hg/data/a.i
16 hg debugindex .hg/store/data/a.i
17 17 echo "we should see one log entry for b"
18 18 hg log b
19 19 echo "this should show a revision linked to changeset 1"
20 hg debugindex .hg/data/b.i
20 hg debugindex .hg/store/data/b.i
21 21
22 22 echo "this should show the rename information in the metadata"
23 hg debugdata .hg/data/b.d 0 | head -3 | tail -2
23 hg debugdata .hg/store/data/b.d 0 | head -3 | tail -2
24 24
25 $TESTDIR/md5sum.py .hg/data/b.i
25 $TESTDIR/md5sum.py .hg/store/data/b.i
26 26 hg cat b > bsum
27 27 $TESTDIR/md5sum.py bsum
28 28 hg cat a > asum
@@ -41,7 +41,7 b' this should show a revision linked to ch'
41 41 this should show the rename information in the metadata
42 42 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
43 43 copy: a
44 ed156f22f0a6fde642de0b5eba0cbbb2 .hg/data/b.i
44 ed156f22f0a6fde642de0b5eba0cbbb2 .hg/store/data/b.i
45 45 60b725f10c9c85c70d97880dfe8191b3 bsum
46 46 60b725f10c9c85c70d97880dfe8191b3 asum
47 47 checking changesets
@@ -14,7 +14,7 b' hg commit -m2 -d"0 0"'
14 14 hg debugstate|grep '^copy'
15 15
16 16 echo "# should match"
17 hg debugindex .hg/data/foo.i
17 hg debugindex .hg/store/data/foo.i
18 18 hg debugrename bar
19 19
20 20 echo bleah > foo
@@ -30,9 +30,9 b" hg debugstate|grep '^copy'"
30 30 hg commit -m3 -d"0 0"
31 31
32 32 echo "# should show no parents for tip"
33 hg debugindex .hg/data/bar.i
33 hg debugindex .hg/store/data/bar.i
34 34 echo "# should match"
35 hg debugindex .hg/data/foo.i
35 hg debugindex .hg/store/data/foo.i
36 36 hg debugrename bar
37 37
38 38 echo "# should show no copies"
@@ -30,12 +30,12 b' hg ci -A -m 2 -d "1000000 0"'
30 30 hg merge 1
31 31 hg ci -A -m m1 -d "1000000 0"
32 32 #hg log
33 #hg debugindex .hg/00manifest.i
33 #hg debugindex .hg/store/00manifest.i
34 34 hg update -C 1
35 35 hg merge 2
36 36 hg ci -A -m m2 -d "1000000 0"
37 37 #hg log
38 #hg debugindex .hg/00manifest.i
38 #hg debugindex .hg/store/00manifest.i
39 39
40 40 cd ..
41 41 hg clone -r 3 a b
@@ -22,7 +22,7 b' echo %% no changes'
22 22 hg status
23 23
24 24 echo %% uncompressed contents in repo
25 hg debugdata .hg/data/a.gz.d 0
25 hg debugdata .hg/store/data/a.gz.d 0
26 26
27 27 echo %% uncompress our working dir copy
28 28 gunzip < a.gz
@@ -26,7 +26,7 b' HGMERGE=true hg merge 2'
26 26 hg ci -m "merge a/b -> blah" -d "1000000 0"
27 27
28 28 hg log
29 hg debugindex .hg/00changelog.i
29 hg debugindex .hg/store/00changelog.i
30 30
31 31 echo
32 32
@@ -41,6 +41,6 b' hg manifest --debug 4'
41 41
42 42 echo
43 43
44 hg debugindex .hg/data/a.i
44 hg debugindex .hg/store/data/a.i
45 45
46 46 hg verify
@@ -53,22 +53,22 b' hg debugstate | cut -b 1-16,35- | grep "'
53 53 hg ci -m "merge" -d "1000000 0"
54 54
55 55 echo "main: we should have a merge here"
56 hg debugindex .hg/00changelog.i
56 hg debugindex .hg/store/00changelog.i
57 57
58 58 echo "log should show foo and quux changed"
59 59 hg log -v -r tip
60 60
61 61 echo "foo: we should have a merge here"
62 hg debugindex .hg/data/foo.i
62 hg debugindex .hg/store/data/foo.i
63 63
64 64 echo "bar: we shouldn't have a merge here"
65 hg debugindex .hg/data/bar.i
65 hg debugindex .hg/store/data/bar.i
66 66
67 67 echo "baz: we shouldn't have a merge here"
68 hg debugindex .hg/data/baz.i
68 hg debugindex .hg/store/data/baz.i
69 69
70 70 echo "quux: we shouldn't have a merge here"
71 hg debugindex .hg/data/quux.i
71 hg debugindex .hg/store/data/quux.i
72 72
73 73 echo "manifest entries should match tips of all files"
74 74 hg manifest --debug
@@ -43,6 +43,6 b' hg -v merge'
43 43 ls -l ../test[123]/a > foo
44 44 cut -b 1-10 < foo
45 45
46 hg debugindex .hg/data/a.i
47 hg debugindex ../test2/.hg/data/a.i
48 hg debugindex ../test1/.hg/data/a.i
46 hg debugindex .hg/store/data/a.i
47 hg debugindex ../test2/.hg/store/data/a.i
48 hg debugindex ../test1/.hg/store/data/a.i
@@ -42,11 +42,11 b' hg commit -m "1.3m"'
42 42 hg update -C 3
43 43 hg mv afile anotherfile
44 44 hg commit -m "0.3m"
45 hg debugindex .hg/data/afile.i
46 hg debugindex .hg/data/adifferentfile.i
47 hg debugindex .hg/data/anotherfile.i
48 hg debugindex .hg/data/fred.i
49 hg debugindex .hg/00manifest.i
45 hg debugindex .hg/store/data/afile.i
46 hg debugindex .hg/store/data/adifferentfile.i
47 hg debugindex .hg/store/data/anotherfile.i
48 hg debugindex .hg/store/data/fred.i
49 hg debugindex .hg/store/00manifest.i
50 50 hg verify
51 51 echo "# Starting server"
52 52 hg serve -p 20061 -d --pid-file=../hg1.pid
@@ -10,7 +10,7 b' Q=$!'
10 10 sleep 3
11 11 kill -HUP $P
12 12 wait
13 ls .hg
13 ls -R .hg
14 14
15 15
16 16
@@ -4,6 +4,11 b' adding changesets'
4 4 killed!
5 5 transaction abort!
6 6 rollback completed
7 .hg:
7 8 00changelog.i
8 9 journal.dirstate
9 10 requires
11 store
12
13 .hg/store:
14 00changelog.i
@@ -6,6 +6,6 b' hg --cwd a ci -A -m a'
6 6 hg clone a b
7 7 echo b > b/b
8 8 hg --cwd b ci -A -m b
9 chmod 100 a/.hg
9 chmod 100 a/.hg/store
10 10 hg --cwd b push ../a
11 chmod 700 a/.hg
11 chmod 700 a/.hg/store
@@ -61,6 +61,6 b' HGMERGE=merge hg merge --debug'
61 61
62 62 cat test.txt | sed "s% .*%%"
63 63
64 hg debugindex .hg/data/test.txt.i
64 hg debugindex .hg/store/data/test.txt.i
65 65
66 66 hg log
@@ -43,7 +43,7 b' def opener(*args):'
43 43 return singlebyteread(f)
44 44 return wrapper
45 45
46 cl = changelog.changelog(opener('.hg'))
46 cl = changelog.changelog(opener('.hg/store'))
47 47 print cl.count(), 'revisions:'
48 48 for r in xrange(cl.count()):
49 49 print short(cl.node(r))
@@ -5,11 +5,11 b' echo foo > a'
5 5 hg add a
6 6 hg commit -m "1" -d "1000000 0"
7 7 hg verify
8 chmod -r .hg/data/a.i
8 chmod -r .hg/store/data/a.i
9 9 hg verify 2>/dev/null || echo verify failed
10 chmod +r .hg/data/a.i
10 chmod +r .hg/store/data/a.i
11 11 hg verify 2>/dev/null || echo verify failed
12 chmod -w .hg/data/a.i
12 chmod -w .hg/store/data/a.i
13 13 echo barber > a
14 14 hg commit -m "2" -d "1000000 0" 2>/dev/null || echo commit failed
15 15
@@ -7,13 +7,13 b' echo foo > b'
7 7 hg add b
8 8 hg ci -m "b" -d "1000000 0"
9 9
10 chmod -w .hg
10 chmod -w .hg/store
11 11
12 12 cd ..
13 13
14 14 hg clone a b
15 15
16 chmod +w a/.hg # let test clean up
16 chmod +w a/.hg/store # let test clean up
17 17
18 18 cd b
19 19 hg verify
@@ -41,11 +41,11 b' hg commit -m "1.3m"'
41 41 hg update -C 3
42 42 hg mv afile anotherfile
43 43 hg commit -m "0.3m"
44 hg debugindex .hg/data/afile.i
45 hg debugindex .hg/data/adifferentfile.i
46 hg debugindex .hg/data/anotherfile.i
47 hg debugindex .hg/data/fred.i
48 hg debugindex .hg/00manifest.i
44 hg debugindex .hg/store/data/afile.i
45 hg debugindex .hg/store/data/adifferentfile.i
46 hg debugindex .hg/store/data/anotherfile.i
47 hg debugindex .hg/store/data/fred.i
48 hg debugindex .hg/store/00manifest.i
49 49 hg verify
50 50 cd ..
51 51 for i in 0 1 2 3 4 5 6 7 8; do
@@ -23,5 +23,5 b' hg merge -y --debug'
23 23 hg status -AC
24 24 cat b
25 25 hg ci -m "merge" -d "0 0"
26 hg debugindex .hg/data/b.i
26 hg debugindex .hg/store/data/b.i
27 27 hg debugrename b No newline at end of file
@@ -1,7 +1,2 b''
1 changeset: 0:0acdaf898367
2 tag: tip
3 user: test
4 date: Mon Jan 12 13:46:40 1970 +0000
5 summary: test
6
1 abort: index 00changelog.i unknown format 2!
7 2 abort: requirement 'indoor-pool' not supported!
@@ -28,7 +28,8 b' echo "# creating \'remote\'"'
28 28 hg init remote
29 29 cd remote
30 30 echo this > foo
31 hg ci -A -m "init" -d "1000000 0" foo
31 echo this > fooO
32 hg ci -A -m "init" -d "1000000 0" foo fooO
32 33 echo '[server]' > .hg/hgrc
33 34 echo 'uncompressed = True' >> .hg/hgrc
34 35 echo '[hooks]' >> .hg/hgrc
@@ -66,11 +66,11 b' hg commit -m "1.3m"'
66 66 hg update -C 3
67 67 hg mv afile anotherfile
68 68 hg commit -m "0.3m"
69 hg debugindex .hg/data/afile.i
70 hg debugindex .hg/data/adifferentfile.i
71 hg debugindex .hg/data/anotherfile.i
72 hg debugindex .hg/data/fred.i
73 hg debugindex .hg/00manifest.i
69 hg debugindex .hg/store/data/afile.i
70 hg debugindex .hg/store/data/adifferentfile.i
71 hg debugindex .hg/store/data/anotherfile.i
72 hg debugindex .hg/store/data/fred.i
73 hg debugindex .hg/store/00manifest.i
74 74 hg verify
75 75 cd ..
76 76
@@ -11,20 +11,20 b' checking changesets'
11 11 checking manifests
12 12 crosschecking files in changesets and manifests
13 13 checking files
14 1 files, 1 changesets, 1 total revisions
14 2 files, 1 changesets, 2 total revisions
15 15 # clone remote via pull
16 16 requesting all changes
17 17 adding changesets
18 18 adding manifests
19 19 adding file changes
20 added 1 changesets with 1 changes to 1 files
21 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 added 1 changesets with 2 changes to 2 files
21 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 22 # verify
23 23 checking changesets
24 24 checking manifests
25 25 crosschecking files in changesets and manifests
26 26 checking files
27 1 files, 1 changesets, 1 total revisions
27 2 files, 1 changesets, 2 total revisions
28 28 # empty default pull
29 29 default = ssh://user@dummy/remote
30 30 pulling from ssh://user@dummy/remote
@@ -34,7 +34,7 b' no changes found'
34 34 # updating rc
35 35 # find outgoing
36 36 searching for changes
37 changeset: 1:c54836a570be
37 changeset: 1:572896fe480d
38 38 tag: tip
39 39 user: test
40 40 date: Mon Jan 12 13:46:40 1970 +0000
@@ -42,7 +42,7 b' summary: add'
42 42
43 43 # find incoming on the remote side
44 44 searching for changes
45 changeset: 1:c54836a570be
45 changeset: 1:572896fe480d
46 46 tag: tip
47 47 user: test
48 48 date: Mon Jan 12 13:46:40 1970 +0000
@@ -56,7 +56,7 b' remote: adding manifests'
56 56 remote: adding file changes
57 57 remote: added 1 changesets with 1 changes to 1 files
58 58 # check remote tip
59 changeset: 1:c54836a570be
59 changeset: 1:572896fe480d
60 60 tag: tip
61 61 user: test
62 62 date: Mon Jan 12 13:46:40 1970 +0000
@@ -66,7 +66,7 b' checking changesets'
66 66 checking manifests
67 67 crosschecking files in changesets and manifests
68 68 checking files
69 1 files, 2 changesets, 2 total revisions
69 2 files, 2 changesets, 3 total revisions
70 70 bleah
71 71 # push should succeed
72 72 pushing to ssh://user@dummy/remote
General Comments 0
You need to be logged in to leave comments. Login now