comparison mercurial/store.py @ 6892:dab95717058d

verify: check repo.store
author Adrian Buehlmann <adrian@cadifra.com>
date Wed, 13 Aug 2008 20:18:41 -0500
parents fddef0602859
children 40690d614ce6
comparison
equal deleted inserted replaced
6891:22cb82433842 6892:dab95717058d
3 # Copyright 2008 Matt Mackall <mpm@selenic.com> 3 # Copyright 2008 Matt Mackall <mpm@selenic.com>
4 # 4 #
5 # This software may be used and distributed according to the terms 5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 from i18n import _
8 import os, stat, osutil, util 9 import os, stat, osutil, util
9 10
10 def _buildencodefun(): 11 def _buildencodefun():
11 e = '_' 12 e = '_'
12 win_reserved = [ord(x) for x in '\\:*?"<>|'] 13 win_reserved = [ord(x) for x in '\\:*?"<>|']
75 filetypes = ('.d', '.i') 76 filetypes = ('.d', '.i')
76 for f, size in _dirwalk(path, recurse): 77 for f, size in _dirwalk(path, recurse):
77 if (len(f) > 2) and f[-2:] in filetypes: 78 if (len(f) > 2) and f[-2:] in filetypes:
78 yield util.pconvert(f[striplen:]), size 79 yield util.pconvert(f[striplen:]), size
79 80
80 def _datafiles(self): 81 def datafiles(self, reporterror=None):
81 for x in self._revlogfiles('data', True): 82 for x in self._revlogfiles('data', True):
82 yield x 83 yield x
83 84
84 def walk(self): 85 def walk(self):
85 '''yields (direncoded filename, size)''' 86 '''yields (direncoded filename, size)'''
86 # yield data files first 87 # yield data files first
87 for x in self._datafiles(): 88 for x in self.datafiles():
88 yield x 89 yield x
89 # yield manifest before changelog 90 # yield manifest before changelog
90 meta = util.sort(self._revlogfiles()) 91 meta = util.sort(self._revlogfiles())
91 meta.reverse() 92 meta.reverse()
92 for x in meta: 93 for x in meta:
93 yield x 94 yield x
94 95
95 class directstore(_store): 96 class directstore(_store):
96 def __init__(self, path): 97 def __init__(self, path):
97 _store.__init__(self, path) 98 _store.__init__(self, path)
98 self.encodefn = lambda x: x
99 self.opener = util.opener(self.path) 99 self.opener = util.opener(self.path)
100 self.opener.createmode = self.createmode 100 self.opener.createmode = self.createmode
101 101
102 class encodedstore(_store): 102 class encodedstore(_store):
103 def __init__(self, path): 103 def __init__(self, path):
105 self.encodefn = encodefilename 105 self.encodefn = encodefilename
106 op = util.opener(self.path) 106 op = util.opener(self.path)
107 op.createmode = self.createmode 107 op.createmode = self.createmode
108 self.opener = lambda f, *args, **kw: op(self.encodefn(f), *args, **kw) 108 self.opener = lambda f, *args, **kw: op(self.encodefn(f), *args, **kw)
109 109
110 def _datafiles(self): 110 def datafiles(self, reporterror=None):
111 for f, size in self._revlogfiles('data', True): 111 for f, size in self._revlogfiles('data', True):
112 yield decodefilename(f), size 112 try:
113 yield decodefilename(f), size
114 except KeyError:
115 if not reporterror:
116 raise
117 reporterror(_("cannot decode filename '%s'") % f)
113 118
114 def join(self, f): 119 def join(self, f):
115 return os.path.join(self.path, self.encodefn(f)) 120 return os.path.join(self.path, self.encodefn(f))
116 121
117 def encodefn(requirements): 122 def encodefn(requirements):