From 148e19e880f0c132f7679bd8779377fa4e1e6778 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Wed, 1 Aug 2012 17:14:53 +0800 Subject: createrepo 0.4.11: add rpm-createsolvedb.py Move scripts/rpm-createsolvedb.py to meta/recipes-support/createrepo/createrepo/ since we should wrap it to use the native python. [YOCTO #2822] (From OE-Core rev: 72d673bef385e756bd858f9eca7fe419efaceb39) Signed-off-by: Robert Yang Signed-off-by: Richard Purdie --- meta/classes/rootfs_rpm.bbclass | 2 +- .../createrepo/createrepo/rpm-createsolvedb.py | 64 ++++++++++++++++++++++ .../createrepo/createrepo_0.4.11.bb | 4 +- scripts/rpm-createsolvedb.py | 64 ---------------------- 4 files changed, 68 insertions(+), 66 deletions(-) create mode 100755 meta/recipes-support/createrepo/createrepo/rpm-createsolvedb.py delete mode 100755 scripts/rpm-createsolvedb.py diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index c9258dfe39..a03e9f379d 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass @@ -17,7 +17,7 @@ do_rootfs[depends] += "rpmresolve-native:do_populate_sysroot" do_rootfs[depends] += "opkg-native:do_populate_sysroot" # Creating the repo info in do_rootfs -#do_rootfs[depends] += "createrepo-native:do_populate_sysroot" +do_rootfs[depends] += "createrepo-native:do_populate_sysroot" do_rootfs[recrdeptask] += "do_package_write_rpm" diff --git a/meta/recipes-support/createrepo/createrepo/rpm-createsolvedb.py b/meta/recipes-support/createrepo/createrepo/rpm-createsolvedb.py new file mode 100755 index 0000000000..a5b61bade7 --- /dev/null +++ b/meta/recipes-support/createrepo/createrepo/rpm-createsolvedb.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# +# This script generates a solution database for a directory containing rpm packages +# but tries to be efficient about this, only doing so when the packages have changed +# in some way. +# +# It is assumed something already went through and removed all the solvedb.done stamp files +# in advance. +# +# First argument - the rpm binary to use +# Subsequent arguments - paths to process solution databases for +# + +import sys, os +import hashlib +import stat +import subprocess + +if len(sys.argv) < 1: + print("Error, rpm command not specified") + sys.exit(1) + +if len(sys.argv) < 2: + print("Error, no paths specified") + sys.exit(1) + +paths = sys.argv[2:] + +for path in paths: + if os.path.exists(path + "/solvedb.done"): + continue + data = "" + manifest = [] + for root, dirs, files in os.walk(path): + for file in files: + f = os.path.join(root, file) + if f.startswith(path + "/" + "solvedb"): + continue + data = data + str(os.stat(f)[stat.ST_MTIME]) + manifest.append(f) + checksum = hashlib.md5(data).hexdigest() + + if os.path.exists(path + "/solvedb.checksum") and open(path + "/solvedb.checksum", "r").read() == checksum: + open(path + "/solvedb.done", "w") + continue + + if os.path.exists(path + "/solvedb"): + subprocess.call("rm -rf %s" % (path + "/solvedb"), shell=True) + os.mkdir(path + "/solvedb") + m = open(path + "/solvedb/manifest", "w") + m.write("# Dynamically generated solve manifest\n") + for f in manifest: + m.write(f + "\n") + m.close() + + cmd = sys.argv[1] + ' -i --replacepkgs --replacefiles --oldpackage -D "_dbpath ' + path + '/solvedb" --justdb \ + --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ + --ignoresize --nosignature --nodigest -D "__dbi_txn create nofsync" \ + ' + path + '/solvedb/manifest' + subprocess.call(cmd, shell=True) + + open(path + "/solvedb.checksum", "w").write(checksum) + open(path + "/solvedb.done", "w") + diff --git a/meta/recipes-support/createrepo/createrepo_0.4.11.bb b/meta/recipes-support/createrepo/createrepo_0.4.11.bb index 7a4d05968e..dcddcf8331 100644 --- a/meta/recipes-support/createrepo/createrepo_0.4.11.bb +++ b/meta/recipes-support/createrepo/createrepo_0.4.11.bb @@ -6,12 +6,13 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760" RDEPENDS_${PN}_virtclass-native += "libxml2-native rpm-native" -PR = "r4" +PR = "r5" SRC_URI= "http://createrepo.baseurl.org/download/${BP}.tar.gz \ file://fix-native-install.patch \ file://python-scripts-should-use-interpreter-from-env.patch \ file://createrepo-rpm549.patch \ + file://rpm-createsolvedb.py \ " SRC_URI[md5sum] = "3e9ccf4abcffe3f49af078c83611eda2" @@ -21,4 +22,5 @@ BBCLASSEXTEND = "native" do_install () { oe_runmake -e 'DESTDIR=${D}' install + install -m 0755 ${WORKDIR}/rpm-createsolvedb.py ${D}${bindir}/ } diff --git a/scripts/rpm-createsolvedb.py b/scripts/rpm-createsolvedb.py deleted file mode 100755 index a5b61bade7..0000000000 --- a/scripts/rpm-createsolvedb.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python -# -# This script generates a solution database for a directory containing rpm packages -# but tries to be efficient about this, only doing so when the packages have changed -# in some way. -# -# It is assumed something already went through and removed all the solvedb.done stamp files -# in advance. -# -# First argument - the rpm binary to use -# Subsequent arguments - paths to process solution databases for -# - -import sys, os -import hashlib -import stat -import subprocess - -if len(sys.argv) < 1: - print("Error, rpm command not specified") - sys.exit(1) - -if len(sys.argv) < 2: - print("Error, no paths specified") - sys.exit(1) - -paths = sys.argv[2:] - -for path in paths: - if os.path.exists(path + "/solvedb.done"): - continue - data = "" - manifest = [] - for root, dirs, files in os.walk(path): - for file in files: - f = os.path.join(root, file) - if f.startswith(path + "/" + "solvedb"): - continue - data = data + str(os.stat(f)[stat.ST_MTIME]) - manifest.append(f) - checksum = hashlib.md5(data).hexdigest() - - if os.path.exists(path + "/solvedb.checksum") and open(path + "/solvedb.checksum", "r").read() == checksum: - open(path + "/solvedb.done", "w") - continue - - if os.path.exists(path + "/solvedb"): - subprocess.call("rm -rf %s" % (path + "/solvedb"), shell=True) - os.mkdir(path + "/solvedb") - m = open(path + "/solvedb/manifest", "w") - m.write("# Dynamically generated solve manifest\n") - for f in manifest: - m.write(f + "\n") - m.close() - - cmd = sys.argv[1] + ' -i --replacepkgs --replacefiles --oldpackage -D "_dbpath ' + path + '/solvedb" --justdb \ - --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ - --ignoresize --nosignature --nodigest -D "__dbi_txn create nofsync" \ - ' + path + '/solvedb/manifest' - subprocess.call(cmd, shell=True) - - open(path + "/solvedb.checksum", "w").write(checksum) - open(path + "/solvedb.done", "w") - -- cgit v1.2.3-54-g00ecf