git

Форк
0
/
import-zips.py 
78 строк · 2.2 Кб
1
#!/usr/bin/env python
2

3
## zip archive frontend for git-fast-import
4
##
5
## For example:
6
##
7
##  mkdir project; cd project; git init
8
##  python import-zips.py *.zip
9
##  git log --stat import-zips
10

11
from os import popen, path
12
from sys import argv, exit, hexversion, stderr
13
from time import mktime
14
from zipfile import ZipFile
15

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")
19
    exit(1)
20

21
if len(argv) < 2:
22
    print 'usage:', argv[0], '<zipfile>...'
23
    exit(1)
24

25
branch_ref = 'refs/heads/import-zips'
26
committer_name = 'Z Ip Creator'
27
committer_email = 'zip@example.com'
28

29
fast_import = popen('git fast-import --quiet', 'w')
30
def printlines(list):
31
    for str in list:
32
        fast_import.write(str + "\n")
33

34
for zipfile in argv[1:]:
35
    commit_time = 0
36
    next_mark = 1
37
    common_prefix = None
38
    mark = dict()
39

40
    zip = ZipFile(zipfile, 'r')
41
    for name in zip.namelist():
42
        if name.endswith('/'):
43
            continue
44
        info = zip.getinfo(name)
45

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]
50
        else:
51
            while not name.startswith(common_prefix):
52
                last_slash = common_prefix[:-1].rfind('/') + 1
53
                common_prefix = common_prefix[:last_slash]
54

55
        mark[name] = ':' + str(next_mark)
56
        next_mark += 1
57

58
        printlines(('blob', 'mark ' + mark[name], \
59
                    'data ' + str(info.file_size)))
60
        fast_import.write(zip.read(name) + "\n")
61

62
    committer = committer_name + ' <' + committer_email + '> %d +0000' % \
63
        mktime(commit_time + (0, 0, 0))
64

65
    printlines(('commit ' + branch_ref, 'committer ' + committer, \
66
        'data <<EOM', 'Imported from ' + zipfile + '.', 'EOM', \
67
        '', 'deleteall'))
68

69
    for name in mark.keys():
70
        fast_import.write('M 100644 ' + mark[name] + ' ' +
71
            name[len(common_prefix):] + "\n")
72

73
    printlines(('',  'tag ' + path.basename(zipfile), \
74
        'from ' + branch_ref, 'tagger ' + committer, \
75
        'data <<EOM', 'Package ' + zipfile, 'EOM', ''))
76

77
if fast_import.close():
78
    exit(1)
79

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.