##// END OF EJS Templates
hidden: drop the hidden cache logic...
marmoute -
r32477:1cc7c96c default
parent child Browse files
Show More
@@ -9,12 +9,9 b''
9 from __future__ import absolute_import
9 from __future__ import absolute_import
10
10
11 import copy
11 import copy
12 import hashlib
13 import struct
14
12
15 from .node import nullrev
13 from .node import nullrev
16 from . import (
14 from . import (
17 error,
18 obsolete,
15 obsolete,
19 phases,
16 phases,
20 tags as tagsmod,
17 tags as tagsmod,
@@ -126,82 +123,6 b' def _domainancestors(pfunc, revs, domain'
126 stack.append(p)
123 stack.append(p)
127 return ancestors
124 return ancestors
128
125
129 cacheversion = 1
130 cachefile = 'cache/hidden'
131
132 def cachehash(repo, hideable):
133 """return sha1 hash of repository data to identify a valid cache.
134
135 We calculate a sha1 of repo heads and the content of the obsstore and write
136 it to the cache. Upon reading we can easily validate by checking the hash
137 against the stored one and discard the cache in case the hashes don't match.
138 """
139 h = hashlib.sha1()
140 h.update(''.join(repo.heads()))
141 h.update('%d' % hash(frozenset(hideable)))
142 return h.digest()
143
144 def _writehiddencache(cachefile, cachehash, hidden):
145 """write hidden data to a cache file"""
146 data = struct.pack('>%ii' % len(hidden), *sorted(hidden))
147 cachefile.write(struct.pack(">H", cacheversion))
148 cachefile.write(cachehash)
149 cachefile.write(data)
150
151 def trywritehiddencache(repo, hideable, hidden):
152 """write cache of hidden changesets to disk
153
154 Will not write the cache if a wlock cannot be obtained lazily.
155 The cache consists of a head of 22byte:
156 2 byte version number of the cache
157 20 byte sha1 to validate the cache
158 n*4 byte hidden revs
159 """
160 wlock = fh = None
161 try:
162 wlock = repo.wlock(wait=False)
163 # write cache to file
164 newhash = cachehash(repo, hideable)
165 fh = repo.vfs.open(cachefile, 'w+b', atomictemp=True)
166 _writehiddencache(fh, newhash, hidden)
167 fh.close()
168 except (IOError, OSError):
169 repo.ui.debug('error writing hidden changesets cache\n')
170 except error.LockHeld:
171 repo.ui.debug('cannot obtain lock to write hidden changesets cache\n')
172 finally:
173 if wlock:
174 wlock.release()
175
176 def _readhiddencache(repo, cachefilename, newhash):
177 hidden = fh = None
178 try:
179 if repo.vfs.exists(cachefile):
180 fh = repo.vfs.open(cachefile, 'rb')
181 version, = struct.unpack(">H", fh.read(2))
182 oldhash = fh.read(20)
183 if (cacheversion, oldhash) == (version, newhash):
184 # cache is valid, so we can start reading the hidden revs
185 data = fh.read()
186 count = len(data) / 4
187 hidden = frozenset(struct.unpack('>%ii' % count, data))
188 return hidden
189 except struct.error:
190 repo.ui.debug('corrupted hidden cache\n')
191 # No need to fix the content as it will get rewritten
192 return None
193 except (IOError, OSError):
194 repo.ui.debug('cannot read hidden cache\n')
195 return None
196 finally:
197 if fh:
198 fh.close()
199
200 def tryreadcache(repo, hideable):
201 """read a cache if the cache exists and is valid, otherwise returns None."""
202 newhash = cachehash(repo, hideable)
203 return _readhiddencache(repo, cachefile, newhash)
204
205 def computehidden(repo):
126 def computehidden(repo):
206 """compute the set of hidden revision to filter
127 """compute the set of hidden revision to filter
207
128
@@ -212,10 +133,7 b' def computehidden(repo):'
212 hideable = hideablerevs(repo)
133 hideable = hideablerevs(repo)
213 if hideable:
134 if hideable:
214 cl = repo.changelog
135 cl = repo.changelog
215 hidden = tryreadcache(repo, hideable)
136 hidden = frozenset(_getstatichidden(repo))
216 if hidden is None:
217 hidden = frozenset(_getstatichidden(repo))
218 trywritehiddencache(repo, hideable, hidden)
219
137
220 # check if we have wd parents, bookmarks or tags pointing to hidden
138 # check if we have wd parents, bookmarks or tags pointing to hidden
221 # changesets and remove those.
139 # changesets and remove those.
@@ -70,10 +70,6 b' Beat up tags caches:'
70 $ damage tags tags2-visible
70 $ damage tags tags2-visible
71 $ damage "tag -f t3" hgtagsfnodes1
71 $ damage "tag -f t3" hgtagsfnodes1
72
72
73 Beat up hidden cache:
74
75 $ damage log hidden
76
77 Beat up branch caches:
73 Beat up branch caches:
78
74
79 $ damage branches branch2-base "rm .hg/cache/branch2-[vs]*"
75 $ damage branches branch2-base "rm .hg/cache/branch2-[vs]*"
@@ -1093,25 +1093,6 b' Test heads computation on pending index '
1093 $ hg amendtransient
1093 $ hg amendtransient
1094 [1, 3]
1094 [1, 3]
1095
1095
1096 Check that corrupted hidden cache does not crash
1097
1098 $ printf "" > .hg/cache/hidden
1099 $ hg log -r . -T '{node}' --debug
1100 corrupted hidden cache
1101 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
1102 $ hg log -r . -T '{node}' --debug
1103 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
1104
1105 #if unix-permissions
1106 Check that wrong hidden cache permission does not crash
1107
1108 $ chmod 000 .hg/cache/hidden
1109 $ hg log -r . -T '{node}' --debug
1110 cannot read hidden cache
1111 error writing hidden changesets cache
1112 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
1113 #endif
1114
1115 Test cache consistency for the visible filter
1096 Test cache consistency for the visible filter
1116 1) We want to make sure that the cached filtered revs are invalidated when
1097 1) We want to make sure that the cached filtered revs are invalidated when
1117 bookmarks change
1098 bookmarks change
General Comments 0
You need to be logged in to leave comments. Login now