Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 3854:4f6db0233606
Merge Benoit's .hg/store support
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 10 Dec 2006 02:11:02 -0600 |
parents | d1ce5461beed c0b449154a90 |
children | db36a4f490f6 |
comparison
equal
deleted
inserted
replaced
3848:8cbf060f637e | 3854:4f6db0233606 |
---|---|
14 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui") | 14 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui") |
15 demandload(globals(), "os revlog time util") | 15 demandload(globals(), "os revlog time util") |
16 | 16 |
17 class localrepository(repo.repository): | 17 class localrepository(repo.repository): |
18 capabilities = ('lookup', 'changegroupsubset') | 18 capabilities = ('lookup', 'changegroupsubset') |
19 supported = ('revlogv1', 'store') | |
19 | 20 |
20 def __del__(self): | 21 def __del__(self): |
21 self.transhandle = None | 22 self.transhandle = None |
22 def __init__(self, parentui, path=None, create=0): | 23 def __init__(self, parentui, path=None, create=0): |
23 repo.repository.__init__(self) | 24 repo.repository.__init__(self) |
28 p = os.path.dirname(p) | 29 p = os.path.dirname(p) |
29 if p == oldp: | 30 if p == oldp: |
30 raise repo.RepoError(_("There is no Mercurial repository" | 31 raise repo.RepoError(_("There is no Mercurial repository" |
31 " here (.hg not found)")) | 32 " here (.hg not found)")) |
32 path = p | 33 path = p |
34 | |
33 self.path = os.path.join(path, ".hg") | 35 self.path = os.path.join(path, ".hg") |
34 self.spath = self.path | 36 self.root = os.path.realpath(path) |
37 self.origroot = path | |
38 self.opener = util.opener(self.path) | |
39 self.wopener = util.opener(self.root) | |
35 | 40 |
36 if not os.path.isdir(self.path): | 41 if not os.path.isdir(self.path): |
37 if create: | 42 if create: |
38 if not os.path.exists(path): | 43 if not os.path.exists(path): |
39 os.mkdir(path) | 44 os.mkdir(path) |
40 os.mkdir(self.path) | 45 os.mkdir(self.path) |
41 if self.spath != self.path: | 46 os.mkdir(os.path.join(self.path, "store")) |
42 os.mkdir(self.spath) | 47 requirements = ("revlogv1", "store") |
48 reqfile = self.opener("requires", "w") | |
49 for r in requirements: | |
50 reqfile.write("%s\n" % r) | |
51 reqfile.close() | |
52 # create an invalid changelog | |
53 self.opener("00changelog.i", "a").write('\0\0\0\2') | |
43 else: | 54 else: |
44 raise repo.RepoError(_("repository %s not found") % path) | 55 raise repo.RepoError(_("repository %s not found") % path) |
45 elif create: | 56 elif create: |
46 raise repo.RepoError(_("repository %s already exists") % path) | 57 raise repo.RepoError(_("repository %s already exists") % path) |
47 | 58 else: |
48 self.root = os.path.realpath(path) | 59 # find requirements |
49 self.origroot = path | 60 try: |
61 requirements = self.opener("requires").read().splitlines() | |
62 except IOError, inst: | |
63 if inst.errno != errno.ENOENT: | |
64 raise | |
65 requirements = [] | |
66 # check them | |
67 for r in requirements: | |
68 if r not in self.supported: | |
69 raise repo.RepoError(_("requirement '%s' not supported") % r) | |
70 | |
71 # setup store | |
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) | |
81 | |
50 self.ui = ui.ui(parentui=parentui) | 82 self.ui = ui.ui(parentui=parentui) |
51 self.opener = util.opener(self.path) | |
52 self.sopener = util.opener(self.spath) | |
53 self.wopener = util.opener(self.root) | |
54 | |
55 try: | 83 try: |
56 self.ui.readconfig(self.join("hgrc"), self.root) | 84 self.ui.readconfig(self.join("hgrc"), self.root) |
57 except IOError: | 85 except IOError: |
58 pass | 86 pass |
59 | 87 |
406 | 434 |
407 def join(self, f): | 435 def join(self, f): |
408 return os.path.join(self.path, f) | 436 return os.path.join(self.path, f) |
409 | 437 |
410 def sjoin(self, f): | 438 def sjoin(self, f): |
439 f = self.encodefn(f) | |
411 return os.path.join(self.spath, f) | 440 return os.path.join(self.spath, f) |
412 | 441 |
413 def wjoin(self, f): | 442 def wjoin(self, f): |
414 return os.path.join(self.root, f) | 443 return os.path.join(self.root, f) |
415 | 444 |