##// END OF EJS Templates
merge with stable
Thomas Arendsen Hein -
r16208:85db9917 merge default
parent child Browse files
Show More
@@ -49,3 +49,4 b' 195dbd1cef0c2f9f8bcf4ea303238105f716bda3'
49 6344043924497cd06d781d9014c66802285072e4 0 iD8DBQBPALgmywK+sNU5EO8RAlfhAJ9nYOdWnhfVDHYtDTJAyJtXBAQS9wCgnefoSQt7QABkbGxM+Q85UYEBuD0=
49 6344043924497cd06d781d9014c66802285072e4 0 iD8DBQBPALgmywK+sNU5EO8RAlfhAJ9nYOdWnhfVDHYtDTJAyJtXBAQS9wCgnefoSQt7QABkbGxM+Q85UYEBuD0=
50 db33555eafeaf9df1e18950e29439eaa706d399b 0 iD8DBQBPGdzxywK+sNU5EO8RAppkAJ9jOXhUVE/97CPgiMA0pMGiIYnesQCfengAszcBiSiKGugiI8Okc9ghU+Y=
50 db33555eafeaf9df1e18950e29439eaa706d399b 0 iD8DBQBPGdzxywK+sNU5EO8RAppkAJ9jOXhUVE/97CPgiMA0pMGiIYnesQCfengAszcBiSiKGugiI8Okc9ghU+Y=
51 2aa5b51f310fb3befd26bed99c02267f5c12c734 0 iD8DBQBPKZ9bywK+sNU5EO8RAt1TAJ45r1eJ0YqSkInzrrayg4TVCh0SnQCgm0GA/Ua74jnnDwVQ60lAwROuz1Q=
51 2aa5b51f310fb3befd26bed99c02267f5c12c734 0 iD8DBQBPKZ9bywK+sNU5EO8RAt1TAJ45r1eJ0YqSkInzrrayg4TVCh0SnQCgm0GA/Ua74jnnDwVQ60lAwROuz1Q=
52 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 0 iD8DBQBPT/fvywK+sNU5EO8RAnfYAKCn7d0vwqIb100YfWm1F7nFD5B+FACeM02YHpQLSNsztrBCObtqcnfod7Q=
@@ -61,3 +61,4 b' 195dbd1cef0c2f9f8bcf4ea303238105f716bda3'
61 6344043924497cd06d781d9014c66802285072e4 2.0.2
61 6344043924497cd06d781d9014c66802285072e4 2.0.2
62 db33555eafeaf9df1e18950e29439eaa706d399b 2.1-rc
62 db33555eafeaf9df1e18950e29439eaa706d399b 2.1-rc
63 2aa5b51f310fb3befd26bed99c02267f5c12c734 2.1
63 2aa5b51f310fb3befd26bed99c02267f5c12c734 2.1
64 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 2.1.1
@@ -14,6 +14,17 b' import cStringIO'
14
14
15 _format = ">cllll"
15 _format = ">cllll"
16 propertycache = util.propertycache
16 propertycache = util.propertycache
17 filecache = scmutil.filecache
18
19 class repocache(filecache):
20 """filecache for files in .hg/"""
21 def join(self, obj, fname):
22 return obj._opener.join(fname)
23
24 class rootcache(filecache):
25 """filecache for files in the repository root"""
26 def join(self, obj, fname):
27 return obj._join(fname)
17
28
18 def _finddirs(path):
29 def _finddirs(path):
19 pos = path.rfind('/')
30 pos = path.rfind('/')
@@ -52,6 +63,7 b' class dirstate(object):'
52 self._dirtypl = False
63 self._dirtypl = False
53 self._lastnormaltime = 0
64 self._lastnormaltime = 0
54 self._ui = ui
65 self._ui = ui
66 self._filecache = {}
55
67
56 @propertycache
68 @propertycache
57 def _map(self):
69 def _map(self):
@@ -77,7 +89,7 b' class dirstate(object):'
77 f['.'] = '.' # prevents useless util.fspath() invocation
89 f['.'] = '.' # prevents useless util.fspath() invocation
78 return f
90 return f
79
91
80 @propertycache
92 @repocache('branch')
81 def _branch(self):
93 def _branch(self):
82 try:
94 try:
83 return self._opener.read("branch").strip() or "default"
95 return self._opener.read("branch").strip() or "default"
@@ -113,7 +125,7 b' class dirstate(object):'
113 def dirs(self):
125 def dirs(self):
114 return self._dirs
126 return self._dirs
115
127
116 @propertycache
128 @rootcache('.hgignore')
117 def _ignore(self):
129 def _ignore(self):
118 files = [self._join('.hgignore')]
130 files = [self._join('.hgignore')]
119 for name, path in self._ui.configitems("ui"):
131 for name, path in self._ui.configitems("ui"):
@@ -19,6 +19,11 b' import weakref, errno, os, time, inspect'
19 propertycache = util.propertycache
19 propertycache = util.propertycache
20 filecache = scmutil.filecache
20 filecache = scmutil.filecache
21
21
22 class storecache(filecache):
23 """filecache for files in the store"""
24 def join(self, obj, fname):
25 return obj.sjoin(fname)
26
22 class localrepository(repo.repository):
27 class localrepository(repo.repository):
23 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey',
28 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey',
24 'known', 'getbundle'))
29 'known', 'getbundle'))
@@ -176,7 +181,7 b' class localrepository(repo.repository):'
176 def _writebookmarks(self, marks):
181 def _writebookmarks(self, marks):
177 bookmarks.write(self)
182 bookmarks.write(self)
178
183
179 @filecache('phaseroots', True)
184 @storecache('phaseroots')
180 def _phaseroots(self):
185 def _phaseroots(self):
181 self._dirtyphases = False
186 self._dirtyphases = False
182 phaseroots = phases.readroots(self)
187 phaseroots = phases.readroots(self)
@@ -195,7 +200,7 b' class localrepository(repo.repository):'
195 cache[rev] = phase
200 cache[rev] = phase
196 return cache
201 return cache
197
202
198 @filecache('00changelog.i', True)
203 @storecache('00changelog.i')
199 def changelog(self):
204 def changelog(self):
200 c = changelog.changelog(self.sopener)
205 c = changelog.changelog(self.sopener)
201 if 'HG_PENDING' in os.environ:
206 if 'HG_PENDING' in os.environ:
@@ -204,7 +209,7 b' class localrepository(repo.repository):'
204 c.readpending('00changelog.i.a')
209 c.readpending('00changelog.i.a')
205 return c
210 return c
206
211
207 @filecache('00manifest.i', True)
212 @storecache('00manifest.i')
208 def manifest(self):
213 def manifest(self):
209 return manifest.manifest(self.sopener)
214 return manifest.manifest(self.sopener)
210
215
@@ -896,10 +901,13 b' class localrepository(repo.repository):'
896 rereads the dirstate. Use dirstate.invalidate() if you want to
901 rereads the dirstate. Use dirstate.invalidate() if you want to
897 explicitly read the dirstate again (i.e. restoring it to a previous
902 explicitly read the dirstate again (i.e. restoring it to a previous
898 known good state).'''
903 known good state).'''
899 try:
904 if 'dirstate' in self.__dict__:
905 for k in self.dirstate._filecache:
906 try:
907 delattr(self.dirstate, k)
908 except AttributeError:
909 pass
900 delattr(self, 'dirstate')
910 delattr(self, 'dirstate')
901 except AttributeError:
902 pass
903
911
904 def invalidate(self):
912 def invalidate(self):
905 for k in self._filecache:
913 for k in self._filecache:
@@ -211,7 +211,7 b' class opener(abstractopener):'
211 if r:
211 if r:
212 raise util.Abort("%s: %r" % (r, path))
212 raise util.Abort("%s: %r" % (r, path))
213 self.auditor(path)
213 self.auditor(path)
214 f = os.path.join(self.base, path)
214 f = self.join(path)
215
215
216 if not text and "b" not in mode:
216 if not text and "b" not in mode:
217 mode += "b" # for that other OS
217 mode += "b" # for that other OS
@@ -255,7 +255,7 b' class opener(abstractopener):'
255
255
256 def symlink(self, src, dst):
256 def symlink(self, src, dst):
257 self.auditor(dst)
257 self.auditor(dst)
258 linkname = os.path.join(self.base, dst)
258 linkname = self.join(dst)
259 try:
259 try:
260 os.unlink(linkname)
260 os.unlink(linkname)
261 except OSError:
261 except OSError:
@@ -280,6 +280,9 b' class opener(abstractopener):'
280 def audit(self, path):
280 def audit(self, path):
281 self.auditor(path)
281 self.auditor(path)
282
282
283 def join(self, path):
284 return os.path.join(self.base, path)
285
283 class filteropener(abstractopener):
286 class filteropener(abstractopener):
284 '''Wrapper opener for filtering filenames with a function.'''
287 '''Wrapper opener for filtering filenames with a function.'''
285
288
@@ -804,9 +807,17 b' class filecache(object):'
804 to tell us if a file has been replaced. If it can't, we fallback to
807 to tell us if a file has been replaced. If it can't, we fallback to
805 recreating the object on every call (essentially the same behaviour as
808 recreating the object on every call (essentially the same behaviour as
806 propertycache).'''
809 propertycache).'''
807 def __init__(self, path, instore=False):
810 def __init__(self, path):
808 self.path = path
811 self.path = path
809 self.instore = instore
812
813 def join(self, obj, fname):
814 """Used to compute the runtime path of the cached file.
815
816 Users should subclass filecache and provide their own version of this
817 function to call the appropriate join function on 'obj' (an instance
818 of the class that its member function was decorated).
819 """
820 return obj.join(fname)
810
821
811 def __call__(self, func):
822 def __call__(self, func):
812 self.func = func
823 self.func = func
@@ -824,7 +835,7 b' class filecache(object):'
824 if entry.changed():
835 if entry.changed():
825 entry.obj = self.func(obj)
836 entry.obj = self.func(obj)
826 else:
837 else:
827 path = self.instore and obj.sjoin(self.path) or obj.join(self.path)
838 path = self.join(obj, self.path)
828
839
829 # We stat -before- creating the object so our cache doesn't lie if
840 # We stat -before- creating the object so our cache doesn't lie if
830 # a writer modified between the time we read and stat
841 # a writer modified between the time we read and stat
@@ -212,6 +212,27 b' def rollback(server):'
212 runcommand(server, ['rollback'])
212 runcommand(server, ['rollback'])
213 runcommand(server, ['phase', '-r', '.'])
213 runcommand(server, ['phase', '-r', '.'])
214
214
215 def branch(server):
216 readchannel(server)
217 runcommand(server, ['branch'])
218 os.system('hg branch foo')
219 runcommand(server, ['branch'])
220 os.system('hg branch default')
221
222 def hgignore(server):
223 readchannel(server)
224 f = open('.hgignore', 'ab')
225 f.write('')
226 f.close()
227 runcommand(server, ['commit', '-Am.'])
228 f = open('ignored-file', 'ab')
229 f.write('')
230 f.close()
231 f = open('.hgignore', 'ab')
232 f.write('ignored-file')
233 f.close()
234 runcommand(server, ['status', '-i', '-u'])
235
215 if __name__ == '__main__':
236 if __name__ == '__main__':
216 os.system('hg init')
237 os.system('hg init')
217
238
@@ -232,3 +253,5 b" if __name__ == '__main__':"
232 check(tagscache)
253 check(tagscache)
233 check(setphase)
254 check(setphase)
234 check(rollback)
255 check(rollback)
256 check(branch)
257 check(hgignore)
@@ -145,3 +145,21 b' repository tip rolled back to revision 3'
145 working directory now based on revision 3
145 working directory now based on revision 3
146 runcommand phase -r .
146 runcommand phase -r .
147 3: public
147 3: public
148
149 testing branch:
150
151 runcommand branch
152 default
153 marked working directory as branch foo
154 (branches are permanent and global, did you want a bookmark?)
155 runcommand branch
156 foo
157 marked working directory as branch default
158 (branches are permanent and global, did you want a bookmark?)
159
160 testing hgignore:
161
162 runcommand commit -Am.
163 adding .hgignore
164 runcommand status -i -u
165 I ignored-file
General Comments 0
You need to be logged in to leave comments. Login now