equal
deleted
inserted
replaced
307 for data in util.filechunkiter(fd, 128 * 1024): |
307 for data in util.filechunkiter(fd, 128 * 1024): |
308 hasher.update(data) |
308 hasher.update(data) |
309 fd.close() |
309 fd.close() |
310 return hasher.hexdigest() |
310 return hasher.hexdigest() |
311 |
311 |
312 class limitreader(object): |
|
313 def __init__(self, f, limit): |
|
314 self.f = f |
|
315 self.limit = limit |
|
316 |
|
317 def read(self, length): |
|
318 if self.limit == 0: |
|
319 return '' |
|
320 length = length > self.limit and self.limit or length |
|
321 self.limit -= length |
|
322 return self.f.read(length) |
|
323 |
|
324 def close(self): |
|
325 pass |
|
326 |
|
327 def writehash(hash, filename, executable): |
312 def writehash(hash, filename, executable): |
328 util.makedirs(os.path.dirname(filename)) |
313 util.makedirs(os.path.dirname(filename)) |
329 util.writefile(filename, hash + '\n') |
314 util.writefile(filename, hash + '\n') |
330 os.chmod(filename, getmode(executable)) |
315 os.chmod(filename, getmode(executable)) |
331 |
316 |