-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeltafise.py
executable file
·82 lines (67 loc) · 2.75 KB
/
deltafise.py
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
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python
import pisi.operations.delta
import os
import pisi.api
from pisi.operations.delta import create_delta_packages
def workDirForPackage (orig, meta):
source = meta.source
source_name = source.name.lower ()
if source_name.startswith ("lib"):
# Handle lib* differently
base_dir = source_name [:4]
else:
base_dir = source_name[0]
arch = meta.package.architecture # Not yet needed
full_dir_name = "%s/%s" % (base_dir, source_name)
path = os.path.join (orig, full_dir_name)
return path
def produce_deltas_for_directory (directory):
for root,dirs,files in os.walk (directory):
currentPkgs = dict ()
for file in files:
if not file.endswith (".delta.pisi") and file.endswith (".pisi"):
path = os.path.join (root, file)
print "Examining %s" % path
pkg,fileList = pisi.api.info (path)
# Use a mapping
name = pkg.package.name
pkg.FILEPATH = file
if not name in currentPkgs:
currentPkgs [name] = list()
currentPkgs [name].append (pkg)
# Now loop back through current packages
for package_name in currentPkgs:
packages = currentPkgs [package_name]
print "%d packages found for %s" % (len(packages), package_name)
package_list = list()
for pkg in packages:
package_list.append( pkg.FILEPATH )
workDir = workDirForPackage (directory, packages[0])
oldDir = os.getcwd ()
os.chdir (workDir)
# Generate all possible dependencies
if len(package_list) > 1:
print "Creating deltas for %s" % package_name
package_list.sort ()
mapping = dict ()
for pkg in package_list:
print pkg
splits = pkg.split ("-")
arch = splits[-1].split (".")[0]
distro = splits[-2]
release = splits [-3]
mapping [release] = pkg
# Go back through em
keys = mapping.keys()
keys.sort()
for key in keys:
# Again, i know, weird.
olderPackages = list ()
TopDog = None
for key2 in keys:
if key2 >= key:
TopDog = mapping[key2]
break
olderPackages.append (mapping[key2])
create_delta_packages (olderPackages, TopDog)
os.chdir (oldDir)