Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/localrepo.py @ 6840:80e51429cb9a
introduce store classes
move store walking from streamclone.py into store.py
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Thu, 24 Jul 2008 16:32:52 +0200 |
parents | 01db3e101362 |
children | 077f1e637cd8 |
comparison
equal
deleted
inserted
replaced
6839:01db3e101362 | 6840:80e51429cb9a |
---|---|
58 # check them | 58 # check them |
59 for r in requirements: | 59 for r in requirements: |
60 if r not in self.supported: | 60 if r not in self.supported: |
61 raise repo.RepoError(_("requirement '%s' not supported") % r) | 61 raise repo.RepoError(_("requirement '%s' not supported") % r) |
62 | 62 |
63 # setup store | 63 self.store = store.store(requirements, self.path) |
64 if "store" in requirements: | 64 |
65 self.encodefn = store.encodefilename | 65 self.spath = self.store.path |
66 self.decodefn = store.decodefilename | 66 self.sopener = self.store.opener |
67 self.spath = os.path.join(self.path, "store") | 67 self.sjoin = self.store.join |
68 else: | 68 self._createmode = self.store.createmode |
69 self.encodefn = lambda x: x | 69 self.opener.createmode = self.store.createmode |
70 self.decodefn = lambda x: x | |
71 self.spath = self.path | |
72 | |
73 try: | |
74 # files in .hg/ will be created using this mode | |
75 mode = os.stat(self.spath).st_mode | |
76 # avoid some useless chmods | |
77 if (0777 & ~util._umask) == (0777 & mode): | |
78 mode = None | |
79 except OSError: | |
80 mode = None | |
81 | |
82 self._createmode = mode | |
83 self.opener.createmode = mode | |
84 sopener = util.opener(self.spath) | |
85 sopener.createmode = mode | |
86 self.sopener = store.encodedopener(sopener, self.encodefn) | |
87 | 70 |
88 self.ui = ui.ui(parentui=parentui) | 71 self.ui = ui.ui(parentui=parentui) |
89 try: | 72 try: |
90 self.ui.readconfig(self.join("hgrc"), self.root) | 73 self.ui.readconfig(self.join("hgrc"), self.root) |
91 extensions.loadall(self.ui) | 74 extensions.loadall(self.ui) |
478 def local(self): | 461 def local(self): |
479 return True | 462 return True |
480 | 463 |
481 def join(self, f): | 464 def join(self, f): |
482 return os.path.join(self.path, f) | 465 return os.path.join(self.path, f) |
483 | |
484 def sjoin(self, f): | |
485 f = self.encodefn(f) | |
486 return os.path.join(self.spath, f) | |
487 | 466 |
488 def wjoin(self, f): | 467 def wjoin(self, f): |
489 return os.path.join(self.root, f) | 468 return os.path.join(self.root, f) |
490 | 469 |
491 def rjoin(self, f): | 470 def rjoin(self, f): |
2059 | 2038 |
2060 if stream and not heads and remote.capable('stream'): | 2039 if stream and not heads and remote.capable('stream'): |
2061 return self.stream_in(remote) | 2040 return self.stream_in(remote) |
2062 return self.pull(remote, heads) | 2041 return self.pull(remote, heads) |
2063 | 2042 |
2043 def storefiles(self): | |
2044 '''get all *.i and *.d files in the store | |
2045 | |
2046 Returns (list of (filename, size), total_bytes)''' | |
2047 | |
2048 lock = None | |
2049 try: | |
2050 self.ui.debug('scanning\n') | |
2051 entries = [] | |
2052 total_bytes = 0 | |
2053 # get consistent snapshot of repo, lock during scan | |
2054 lock = self.lock() | |
2055 for name, size in self.store.walk(): | |
2056 entries.append((name, size)) | |
2057 total_bytes += size | |
2058 return entries, total_bytes | |
2059 finally: | |
2060 del lock | |
2061 | |
2064 # used to avoid circular references so destructors work | 2062 # used to avoid circular references so destructors work |
2065 def aftertrans(files): | 2063 def aftertrans(files): |
2066 renamefiles = [tuple(t) for t in files] | 2064 renamefiles = [tuple(t) for t in files] |
2067 def a(): | 2065 def a(): |
2068 for src, dest in renamefiles: | 2066 for src, dest in renamefiles: |