summaryrefslogtreecommitdiffstats
path: root/tests/regress/opk.py
blob: f96037e964dfc6bd73a389c1a4d8dd36f809b0f4 (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import tarfile, os
import cfg

class Opk:
	valid_control_fields = ["Package", "Version", "Depends", "Provides",\
			"Replaces", "Conflicts", "Suggests", "Recommends",\
			"Section", "Architecture", "Maintainer", "MD5Sum",\
			"Size", "InstalledSize", "Filename", "Source",\
			"Description", "OE", "Homepage", "Priority",\
			"Conffiles"]

	def __init__(self, **control):
		for k in control.keys():
			if k not in self.valid_control_fields:
				raise Exception("Invalid control field: "
						"{}".format(k))
		if "Package" not in control.keys():
			print("Cannot create opk without Package name.\n")
			return None
		if "Architecture" not in control.keys():
			control["Architecture"] = "all"
		if "Version" not in control.keys():
			control["Version"] = "1.0"
		self.control = control

	def write(self, tar_not_ar=False, data_files=None):
		filename = "{Package}_{Version}_{Architecture}.opk"\
						.format(**self.control)
		if os.path.exists(filename):
			os.unlink(filename)
		if os.path.exists("control"):
			os.unlink("control")
		if os.path.exists("control.tar.gz"):
			os.unlink("control.tar.gz")
		if os.path.exists("data.tar.gz"):
			os.unlink("data.tar.gz")

		f = open("control", "w")
		for k in self.control.keys():
			f.write("{}: {}\n".format(k, self.control[k]))
		f.close()

		tar = tarfile.open("control.tar.gz", "w:gz")
		tar.add("control")
		tar.close()

		tar = tarfile.open("data.tar.gz", "w:gz")
		if data_files:
			for df in data_files:
				tar.add(df)
		tar.close()


		if tar_not_ar:
			tar = tarfile.open(filename, "w:gz")
			tar.add("control.tar.gz")
			tar.add("data.tar.gz")
			tar.close()
		else:
			os.system("ar q {} control.tar.gz data.tar.gz \
					2>/dev/null".format(filename))

		os.unlink("control")
		os.unlink("control.tar.gz")
		os.unlink("data.tar.gz")

class OpkGroup:
	def __init__(self):
		self.opk_list = []

	def add(self, **control):
		self.opk_list.append(Opk(**control))

	def addOpk(self, opk):
		self.opk_list.append(opk)
	
	def write_opk(self, tar_not_ar=False):
		for o in self.opk_list:
			o.write(tar_not_ar)

	def write_list(self, filename="Packages"):
		f = open(filename, "w")
		for opk in self.opk_list:
			for k in opk.control.keys():
				f.write("{}: {}\n".format(k, opk.control[k]))
			f.write("Filename: {Package}_{Version}_{Architecture}"
					".opk\n".format(**opk.control))
			f.write("\n")
		f.close()


def regress_init():
	"""
	Initialisation and sanity checking.
	"""

	if not os.access(cfg.opkgcl, os.X_OK):
		print("Cannot exec {}".format(cfg.opkgcl))
		exit(False)

	os.chdir(cfg.opkdir)

	os.system("rm -fr {}".format(cfg.offline_root))

	os.makedirs("{}/usr/lib/opkg".format(cfg.offline_root))
	os.makedirs("{}/etc/opkg".format(cfg.offline_root))

	f = open("{}/etc/opkg/opkg.conf".format(cfg.offline_root), "w")
	f.write("arch all 1\n")
	f.write("src test file:{}\n".format(cfg.opkdir))
	f.close()