diff options
Diffstat (limited to 'lorry.gzip-importer')
-rwxr-xr-x | lorry.gzip-importer | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lorry.gzip-importer b/lorry.gzip-importer new file mode 100755 index 0000000..c1c7215 --- /dev/null +++ b/lorry.gzip-importer @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +# gzip archive frontend for git-fast-import + +from os import popen, path +from os.path import splitext +from os.path import getmtime +from sys import argv, exit, hexversion, stderr +from gzip import GzipFile +import struct + +if len(argv) < 2: + print 'usage:', argv[0], '<gzipfile>...' + exit(1) + +branch_name = 'master' +branch_ref = 'refs/heads/%s' % branch_name +committer_name = 'Lorry Gzip Importer' +committer_email = 'lorry-gzip-importer@lorry' + +fast_import = popen('git fast-import --quiet', 'w') +def printlines(list): + for str in list: + fast_import.write(str + "\n") + +# The size of a gzip file is stored in the last 4 bytes +def uncompressedsize(filename): + with open(filename) as f: + f.seek(-4, 2) + return struct.unpack('I', f.read(4))[0] + +for zipfile in argv[1:]: + + # Gzip does have an encoded mtime, however Python's GzipFile + # just ignores it, so we just yank the mtime of the zip file itself. + mtime = getmtime (zipfile); + file_size = uncompressedsize (zipfile); + zip = GzipFile(zipfile, 'rb') + + printlines(('blob', 'mark :1', 'data ' + str(file_size))) + fast_import.write(zip.read() + "\n") + + committer = committer_name + ' <' + committer_email + '> %d +0000' % \ + mtime + + zipfile_basename = path.basename(zipfile) + printlines(('commit ' + branch_ref, 'committer ' + committer, \ + 'data <<EOM', 'Imported from ' + zipfile_basename + '.', 'EOM', \ + '', 'deleteall')) + + last_dot = zipfile_basename[:-1].rfind('.') + unzipped_file = zipfile_basename[:last_dot] + fast_import.write('M 100644 :1 ' + unzipped_file + '\n'); + + zipname, _ = splitext(zipfile_basename) + printlines(('', 'tag ' + zipname, \ + 'from ' + branch_ref, 'tagger ' + committer, \ + 'data <<EOM', 'Package ' + zipfile, 'EOM', '')) + +if fast_import.close(): + exit(1) |