From cad366009045adaae0359b9d0c55d33d0f106d61 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Tue, 10 Nov 2015 22:36:52 +0900 Subject: Added gzip file support to lorry The new 'gzip' lorry file is practical for any gzipped single file repositories, this can be useful for some static blob resources, such as fonts. Change-Id: I931e15e4c1291d820db82d0fc764aa767d3df9ab --- lorry.gzip-importer | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 lorry.gzip-importer (limited to 'lorry.gzip-importer') 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], '...' + 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 <