3 ## zip archive frontend for git-fast-import
7 ## mkdir project; cd project; git init
8 ## python import-zips.py *.zip
9 ## git log --stat import-zips
11 from os
import popen
, path
12 from sys
import argv
, exit
, hexversion
, stderr
13 from time
import mktime
14 from zipfile
import ZipFile
16 if hexversion
< 0x01060000:
17 # The limiter is the zipfile module
18 stderr
.write("import-zips.py: requires Python 1.6.0 or later.\n")
22 print 'usage:', argv
[0], '<zipfile>...'
25 branch_ref
= 'refs/heads/import-zips'
26 committer_name
= 'Z Ip Creator'
27 committer_email
= 'zip@example.com'
29 fast_import
= popen('git fast-import --quiet', 'w')
32 fast_import
.write(str + "\n")
34 for zipfile
in argv
[1:]:
40 zip = ZipFile(zipfile
, 'r')
41 for name
in zip.namelist():
42 if name
.endswith('/'):
44 info
= zip.getinfo(name
)
46 if commit_time
< info
.date_time
:
47 commit_time
= info
.date_time
48 if common_prefix
== None:
49 common_prefix
= name
[:name
.rfind('/') + 1]
51 while not name
.startswith(common_prefix
):
52 last_slash
= common_prefix
[:-1].rfind('/') + 1
53 common_prefix
= common_prefix
[:last_slash
]
55 mark
[name
] = ':' + str(next_mark
)
58 printlines(('blob', 'mark ' + mark
[name
], \
59 'data ' + str(info
.file_size
)))
60 fast_import
.write(zip.read(name
) + "\n")
62 committer
= committer_name
+ ' <' + committer_email
+ '> %d +0000' % \
63 mktime(commit_time
+ (0, 0, 0))
65 printlines(('commit ' + branch_ref
, 'committer ' + committer
, \
66 'data <<EOM', 'Imported from ' + zipfile
+ '.', 'EOM', \
69 for name
in mark
.keys():
70 fast_import
.write('M 100644 ' + mark
[name
] + ' ' +
71 name
[len(common_prefix
):] + "\n")
73 printlines(('', 'tag ' + path
.basename(zipfile
), \
74 'from ' + branch_ref
, 'tagger ' + committer
, \
75 'data <<EOM', 'Package ' + zipfile
, 'EOM', ''))
77 if fast_import
.close():