1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/env python
import json
import os
import re
from subprocess import call
import shutil
import MySQLdb
from git import Repo
PLATFORMS = ['linux32', 'linux64', 'mac', 'win32', 'win64']
os.chdir('/tmp')
db = MySQLdb.connect(host="db", user="clpm", passwd="clpm", db="clpmdb")
pcur = db.cursor()
vcur = db.cursor()
pcur.execute('SELECT `id`,`name`,`git_url` FROM `package`')
for pkg in pcur.fetchall():
print(pkg[1])
known_versions = []
vcur.execute('SELECT `major`,`minor`,`revision` FROM `version` ' + \
'WHERE `package_id`=%d' % pkg[0])
for ver in vcur.fetchall():
known_versions.append((ver[0], ver[1], ver[2]))
try:
shutil.rmtree(pkg[1])
except:
pass
repo = Repo.clone_from(pkg[2], pkg[1])
for tag in repo.tags:
mat = re.match(r'v(\d+)\.(\d+)\.(\d+)', str(tag))
if mat:
[vmaj, vmin, vrev] = [int(mat.group(i)) for i in [1,2,3]]
if (vmaj, vmin, vrev) in known_versions:
continue
repo.head.reference = tag
repo.head.reset(index=True, working_tree=True)
os.makedirs('/repo/%s/%d.%d.%d' % (pkg[1], vmaj, vmin, vrev))
for pf in PLATFORMS:
print(str(tag) + '-' + pf)
call(['make', '-C', pkg[1], pf + '.tar.gz'])
shutil.move(
'/tmp/%s/%s.tar.gz' % (pkg[1], pf),
'/repo/%s/%d.%d.%d/%s.tar.gz' %
(pkg[1], vmaj, vmin, vrev, pf))
call(['make', '-C', pkg[1], 'clean'])
depends = []
with open('/tmp/%s/clpm.json' % pkg[1], 'r') as clpm:
depends = json.load(clpm)['depends']
vcur.execute('INSERT INTO `version` ' + \
'(`package_id`,`major`,`minor`,`revision`,`depends`) ' + \
'VALUES (%d,%d,%d,%d,\'%s\')' %
(pkg[0], vmaj, vmin, vrev, json.dumps(depends)))
try:
shutil.rmtree(pkg[1])
except:
pass
db.commit()
db.close()
|