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 |