518 os.mkdir(self.tmpdir) |
518 os.mkdir(self.tmpdir) |
519 |
519 |
520 @RunInMain |
520 @RunInMain |
521 def SeedBlob(self, seed): |
521 def SeedBlob(self, seed): |
522 blob = (mkstemp(dir=self.tmpdir) + (hashlib.new('md5'),)) |
522 blob = (mkstemp(dir=self.tmpdir) + (hashlib.new('md5'),)) |
523 _fobj, _path, md5sum = blob |
523 _fd, _path, md5sum = blob |
524 md5sum.update(seed) |
524 md5sum.update(seed) |
525 newBlobID = md5sum.digest() |
525 newBlobID = md5sum.digest() |
526 self.blobs[newBlobID] = blob |
526 self.blobs[newBlobID] = blob |
527 return newBlobID |
527 return newBlobID |
528 |
528 |
531 blob = self.blobs.pop(blobID, None) |
531 blob = self.blobs.pop(blobID, None) |
532 |
532 |
533 if blob is None: |
533 if blob is None: |
534 return None |
534 return None |
535 |
535 |
536 fobj, _path, md5sum = blob |
536 fd, _path, md5sum = blob |
537 md5sum.update(data) |
537 md5sum.update(data) |
538 newBlobID = md5sum.digest() |
538 newBlobID = md5sum.digest() |
539 os.write(fobj, data) |
539 os.write(fd, data) |
540 self.blobs[newBlobID] = blob |
540 self.blobs[newBlobID] = blob |
541 return newBlobID |
541 return newBlobID |
542 |
542 |
543 @RunInMain |
543 @RunInMain |
544 def PurgeBlobs(self): |
544 def PurgeBlobs(self): |
545 for fobj, _path, _md5sum in self.blobs.values(): |
545 for fd, _path, _md5sum in self.blobs.values(): |
546 os.close(fobj) |
546 os.close(fd) |
547 self._init_blobs() |
547 self._init_blobs() |
548 |
548 |
549 def _BlobAsFile(self, blobID, newpath): |
549 def _BlobAsFile(self, blobID, newpath): |
550 blob = self.blobs.pop(blobID, None) |
550 blob = self.blobs.pop(blobID, None) |
551 |
551 |
552 if blob is None: |
552 if blob is None: |
553 raise Exception(_("Missing data to create file: {}").format(newpath)) |
553 raise Exception(_("Missing data to create file: {}").format(newpath)) |
554 |
554 |
555 fobj, path, _md5sum = blob |
555 fd, path, _md5sum = blob |
556 os.close(fobj) |
556 fobj = os.fdopen(fd) |
|
557 fobj.flush() |
|
558 os.fsync(fd) |
|
559 fobj.close() |
557 shutil.move(path, newpath) |
560 shutil.move(path, newpath) |
558 |
561 |
559 def _extra_files_log_path(self): |
562 def _extra_files_log_path(self): |
560 return os.path.join(self.workingdir, "extra_files.txt") |
563 return os.path.join(self.workingdir, "extra_files.txt") |
561 |
564 |