- objdir = dir = os.path.join(self.repo_dir, b'objects')
- fd, name = tempfile.mkstemp(suffix=b'.pack', dir=objdir)
- try:
- self.file = os.fdopen(fd, 'w+b')
- except:
- os.close(fd)
- raise
- try:
- self.parentfd = os.open(objdir, os.O_RDONLY)
- except:
- f = self.file
- self.file = None
- f.close()
- raise
- assert name.endswith(b'.pack')
- self.filename = name[:-5]
- self.file.write(b'PACK\0\0\0\2\0\0\0\0')
- self.idx = PackIdxV2Writer()
+ with ExitStack() as err_stack:
+ objdir = dir = os.path.join(self.repo_dir, b'objects')
+ self.tmpdir = err_stack.enter_context(temp_dir(dir=objdir, prefix=b'pack-tmp-'))
+ self.file = err_stack.enter_context(open(self.tmpdir + b'/pack', 'w+b'))
+ self.parentfd = err_stack.enter_context(finalized(os.open(objdir, os.O_RDONLY),
+ lambda x: os.close(x)))
+ self.file.write(b'PACK\0\0\0\2\0\0\0\0')
+ self.idx = PackIdxV2Writer()
+ err_stack.pop_all()