diff options
Diffstat (limited to 'lorry.gzip-importer')
-rwxr-xr-x | lorry.gzip-importer | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/lorry.gzip-importer b/lorry.gzip-importer index 8d482b7..d3d78b4 100755 --- a/lorry.gzip-importer +++ b/lorry.gzip-importer @@ -3,9 +3,9 @@ # gzip archive frontend for git-fast-import from gzip import GzipFile -import os import os.path import struct +import subprocess import sys @@ -17,7 +17,7 @@ committer_email = 'lorry-gzip-importer@lorry' # The size of a gzip file is stored in the last 4 bytes def uncompressedsize(filename): - with open(filename) as f: + with open(filename, 'rb') as f: f.seek(-4, 2) return struct.unpack('I', f.read(4))[0] @@ -25,7 +25,7 @@ def uncompressedsize(filename): def export(zipfile, fast_import): def printlines(list): for str in list: - fast_import.write(str + "\n") + fast_import.write(str.encode('utf-8') + b"\n") # Gzip does have an encoded mtime, however Python's GzipFile # just ignores it, so we just yank the mtime of the zip file itself. @@ -34,7 +34,7 @@ def export(zipfile, fast_import): zip = GzipFile(zipfile, 'rb') printlines(('blob', 'mark :1', 'data ' + str(file_size))) - fast_import.write(zip.read() + "\n") + fast_import.write(zip.read() + b"\n") committer = committer_name + ' <' + committer_email + '> %d +0000' % \ mtime @@ -46,7 +46,7 @@ def export(zipfile, fast_import): last_dot = zipfile_basename[:-1].rfind('.') unzipped_file = zipfile_basename[:last_dot] - fast_import.write('M 100644 :1 ' + unzipped_file + '\n'); + printlines(('M 100644 :1 ' + unzipped_file,)); zipname, _ = os.path.splitext(zipfile_basename) printlines(('', 'tag ' + zipname, \ @@ -59,11 +59,13 @@ def main(): print('usage:', sys.argv[0], '<gzipfile>...') sys.exit(1) - fast_import = os.popen('git fast-import --quiet', 'w') - for zipfile in sys.argv[1:]: - export(zipfile, fast_import) - if fast_import.close(): - sys.exit(1) + with subprocess.Popen('git fast-import --quiet', shell=True, + stdin=subprocess.PIPE) as import_proc: + for zipfile in sys.argv[1:]: + export(zipfile, import_proc.stdin) + import_proc.stdin.close() + if import_proc.wait() != 0: + sys.exit(1) main() |