diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-09 17:19:29 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-09 17:19:29 +0100 |
commit | ffe979a855bc3bc0c56fc1e6c35b35fbace5334c (patch) | |
tree | 2e2dea9b1d13cfe57e0c76c9dc65876dc9751739 | |
parent | f5d0882b4099b74560fbbd5546ca00228c7e2cdd (diff) | |
download | poky-ffe979a855bc3bc0c56fc1e6c35b35fbace5334c.tar.gz |
Add package_history.bbclass which checks generated package against previous package looking for problematic changes
-rw-r--r-- | meta-moblin/conf/distro/moblin.conf | 2 | ||||
-rw-r--r-- | meta/classes/packagehistory.bbclass | 100 |
2 files changed, 101 insertions, 1 deletions
diff --git a/meta-moblin/conf/distro/moblin.conf b/meta-moblin/conf/distro/moblin.conf index d27aa96e0e..485c3a13f1 100644 --- a/meta-moblin/conf/distro/moblin.conf +++ b/meta-moblin/conf/distro/moblin.conf | |||
@@ -6,7 +6,7 @@ MAINTAINER = "Moblin <dev@lists.moblin.org>" | |||
6 | 6 | ||
7 | PACKAGE_CLASSES ?= "package_ipk package_rpm" | 7 | PACKAGE_CLASSES ?= "package_ipk package_rpm" |
8 | INHERIT_INSANE ?= "insane" | 8 | INHERIT_INSANE ?= "insane" |
9 | INHERIT += "${PACKAGE_CLASSES} debian moblin devshell ${INHERIT_INSANE} packaged-staging" | 9 | INHERIT += "${PACKAGE_CLASSES} debian moblin devshell ${INHERIT_INSANE} packaged-staging packagehistory" |
10 | 10 | ||
11 | # For some reason, this doesn't work | 11 | # For some reason, this doesn't work |
12 | # TARGET_OS ?= "linux" | 12 | # TARGET_OS ?= "linux" |
diff --git a/meta/classes/packagehistory.bbclass b/meta/classes/packagehistory.bbclass new file mode 100644 index 0000000000..c48deb3e57 --- /dev/null +++ b/meta/classes/packagehistory.bbclass | |||
@@ -0,0 +1,100 @@ | |||
1 | PACKAGEFUNCS += "emit_pkghistory" | ||
2 | |||
3 | PKGHIST_DIR = "${TMPDIR}/pkghistory/" | ||
4 | |||
5 | |||
6 | # | ||
7 | # Called during do_package to write out metadata about this package | ||
8 | # for comparision when writing future packages | ||
9 | # | ||
10 | python emit_pkghistory() { | ||
11 | packages = bb.data.getVar('PACKAGES', d, True) | ||
12 | pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) | ||
13 | |||
14 | |||
15 | # Should check PACKAGES here to see if anything removed | ||
16 | |||
17 | def getpkgvar(pkg, var): | ||
18 | val = bb.data.getVar('%s_%s' % (var, pkg), d, 1) | ||
19 | if val: | ||
20 | return val | ||
21 | val = bb.data.getVar('%s' % (var), d, 1) | ||
22 | |||
23 | return val | ||
24 | |||
25 | def getlastversion(pkg): | ||
26 | try: | ||
27 | pe = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, "latest"))) | ||
28 | pv = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, pe, "latest"))) | ||
29 | pr = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, pe, pv, "latest"))) | ||
30 | return (pe, pv, pr) | ||
31 | except OSError: | ||
32 | return (None, None, None) | ||
33 | |||
34 | for pkg in packages.split(): | ||
35 | pe = getpkgvar(pkg, 'PE') or "0" | ||
36 | pv = getpkgvar(pkg, 'PV') | ||
37 | pr = getpkgvar(pkg, 'PR') | ||
38 | destdir = os.path.join(pkghistdir, pkg, pe, pv, pr) | ||
39 | |||
40 | # | ||
41 | # Find out what the last version was | ||
42 | # Make sure the version did not decrease | ||
43 | # | ||
44 | lastversion = getlastversion(pkg) | ||
45 | (last_pe, last_pv, last_pr) = lastversion | ||
46 | |||
47 | if last_pe is not None: | ||
48 | r = bb.utils.vercmp((pe, pv, pr), lastversion) | ||
49 | if r < 0: | ||
50 | bb.fatal("Package version for package %s went backwards which would break package feeds from (%s:%s-%s to %s:%s-%s)" % (pkg, last_pe, last_pv, last_pr, pe, pv, pr)) | ||
51 | |||
52 | write_pkghistory(pkg, pe, pv, pr, d) | ||
53 | |||
54 | if last_pe is not None: | ||
55 | check_pkghistory(pkg, pe, pv, pr, lastversion) | ||
56 | |||
57 | write_latestlink(pkg, pe, pv, pr, d) | ||
58 | } | ||
59 | |||
60 | |||
61 | def check_pkghistory(pkg, pe, pv, pr, lastversion): | ||
62 | import bb | ||
63 | |||
64 | (last_pe, last_pv, last_pr) = lastversion | ||
65 | |||
66 | bb.debug(2, "Checking package history") | ||
67 | # RDEPENDS removed? | ||
68 | # PKG changed? | ||
69 | # Each file list of each package for file removals? | ||
70 | |||
71 | |||
72 | def write_pkghistory(pkg, pe, pv, pr, d): | ||
73 | import bb, os | ||
74 | bb.debug(2, "Writing package history") | ||
75 | |||
76 | pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) | ||
77 | |||
78 | verpath = os.path.join(pkghistdir, pkg, pe, pv, pr) | ||
79 | if not os.path.exists(verpath): | ||
80 | os.makedirs(verpath) | ||
81 | |||
82 | def write_latestlink(pkg, pe, pv, pr, d): | ||
83 | import bb, os | ||
84 | |||
85 | pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) | ||
86 | |||
87 | def rm_link(path): | ||
88 | try: | ||
89 | os.unlink(path) | ||
90 | except OSError: | ||
91 | return | ||
92 | |||
93 | rm_link(os.path.join(pkghistdir, pkg, "latest")) | ||
94 | rm_link(os.path.join(pkghistdir, pkg, pe, "latest")) | ||
95 | rm_link(os.path.join(pkghistdir, pkg, pe, pv, "latest")) | ||
96 | |||
97 | os.symlink(os.path.join(pkghistdir, pkg, pe), os.path.join(pkghistdir, pkg, "latest")) | ||
98 | os.symlink(os.path.join(pkghistdir, pkg, pe, pv), os.path.join(pkghistdir, pkg, pe, "latest")) | ||
99 | os.symlink(os.path.join(pkghistdir, pkg, pe, pv, pr), os.path.join(pkghistdir, pkg, pe, pv, "latest")) | ||
100 | |||