Show More
@@ -184,6 +184,38 b' def _auxencode(path, dotencode):' | |||
|
184 | 184 | _maxstorepathlen = 120 |
|
185 | 185 | _dirprefixlen = 8 |
|
186 | 186 | _maxshortdirslen = 8 * (_dirprefixlen + 1) - 4 |
|
187 | ||
|
188 | def _hashencode(path, dotencode): | |
|
189 | digest = _sha(path).hexdigest() | |
|
190 | le = lowerencode(path).split('/')[1:] | |
|
191 | parts = _auxencode(le, dotencode) | |
|
192 | basename = parts[-1] | |
|
193 | _root, ext = os.path.splitext(basename) | |
|
194 | sdirs = [] | |
|
195 | sdirslen = 0 | |
|
196 | for p in parts[:-1]: | |
|
197 | d = p[:_dirprefixlen] | |
|
198 | if d[-1] in '. ': | |
|
199 | # Windows can't access dirs ending in period or space | |
|
200 | d = d[:-1] + '_' | |
|
201 | if sdirslen == 0: | |
|
202 | t = len(d) | |
|
203 | else: | |
|
204 | t = sdirslen + 1 + len(d) | |
|
205 | if t > _maxshortdirslen: | |
|
206 | break | |
|
207 | sdirs.append(d) | |
|
208 | sdirslen = t | |
|
209 | dirs = '/'.join(sdirs) | |
|
210 | if len(dirs) > 0: | |
|
211 | dirs += '/' | |
|
212 | res = 'dh/' + dirs + digest + ext | |
|
213 | spaceleft = _maxstorepathlen - len(res) | |
|
214 | if spaceleft > 0: | |
|
215 | filler = basename[:spaceleft] | |
|
216 | res = 'dh/' + dirs + filler + digest + ext | |
|
217 | return res | |
|
218 | ||
|
187 | 219 | def _hybridencode(path, dotencode): |
|
188 | 220 | '''encodes path with a length limit |
|
189 | 221 | |
@@ -219,34 +251,7 b' def _hybridencode(path, dotencode):' | |||
|
219 | 251 | ef = _encodefname(path).split('/') |
|
220 | 252 | res = '/'.join(_auxencode(ef, dotencode)) |
|
221 | 253 | if len(res) > _maxstorepathlen: |
|
222 | digest = _sha(path).hexdigest() | |
|
223 | le = lowerencode(path).split('/')[1:] | |
|
224 | parts = _auxencode(le, dotencode) | |
|
225 | basename = parts[-1] | |
|
226 | _root, ext = os.path.splitext(basename) | |
|
227 | sdirs = [] | |
|
228 | sdirslen = 0 | |
|
229 | for p in parts[:-1]: | |
|
230 | d = p[:_dirprefixlen] | |
|
231 | if d[-1] in '. ': | |
|
232 | # Windows can't access dirs ending in period or space | |
|
233 | d = d[:-1] + '_' | |
|
234 | if sdirslen == 0: | |
|
235 | t = len(d) | |
|
236 | else: | |
|
237 | t = sdirslen + 1 + len(d) | |
|
238 | if t > _maxshortdirslen: | |
|
239 | break | |
|
240 | sdirs.append(d) | |
|
241 | sdirslen = t | |
|
242 | dirs = '/'.join(sdirs) | |
|
243 | if len(dirs) > 0: | |
|
244 | dirs += '/' | |
|
245 | res = 'dh/' + dirs + digest + ext | |
|
246 | spaceleft = _maxstorepathlen - len(res) | |
|
247 | if spaceleft > 0: | |
|
248 | filler = basename[:spaceleft] | |
|
249 | res = 'dh/' + dirs + filler + digest + ext | |
|
254 | res = _hashencode(path, dotencode) | |
|
250 | 255 | return res |
|
251 | 256 | |
|
252 | 257 | def _calcmode(path): |
General Comments 0
You need to be logged in to leave comments.
Login now