From 1f7a632a9689fb9b6e03eefd0781f3e39c6f12e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Mon, 26 Oct 2009 09:49:20 +0100 Subject: update-rc.d.bbclass: make prerm and postrm dpkg-compatible * prerm : only stop service at the "upgrade" and "remove" steps * postrm : only remove symlinks at the "remove" and "purge" steps, after checking the init script no longer exists --- classes/update-rc.d.bbclass | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/update-rc.d.bbclass b/classes/update-rc.d.bbclass index 91af859392..00ec37cfb8 100644 --- a/classes/update-rc.d.bbclass +++ b/classes/update-rc.d.bbclass @@ -16,17 +16,27 @@ update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS} updatercd_prerm() { if test "x$D" = "x"; then - ${INIT_D_DIR}/${INITSCRIPT_NAME} stop + if test "$1" = "upgrade" -o "$1" = "remove"; then + ${INIT_D_DIR}/${INITSCRIPT_NAME} stop + fi fi } +# Note: to be Debian compliant, we should only invoke update-rc.d remove +# at the "purge" step, but opkg does not support it. So instead we also +# run it at the "remove" step if the init script no longer exists. + updatercd_postrm() { if test "x$D" != "x"; then OPT="-r $D" else OPT="" fi -update-rc.d $OPT ${INITSCRIPT_NAME} remove +if test "$1" = "remove" -o "$1" = "purge"; then + if ! test -e "${INIT_D_DIR}/${INITSCRIPT_NAME}"; then + update-rc.d $OPT ${INITSCRIPT_NAME} remove + fi +fi } -- cgit v1.2.3 From dba8dec4093dc68610b762c8c7ac4e38c31cc8f9 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sun, 25 Oct 2009 21:47:55 -0400 Subject: gitver.bbclass: fix git dependency tracking .git/HEAD doesn't usually change on a commit, but the ref it points to (e.g. .git/refs/heads/master) should. Handle this and another couple of cases: if a tag is added without a new commit, or if the ref is in packed-refs. Signed-off-by: Michael Smith Acked-by: Chris Larson --- classes/gitver.bbclass | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'classes') diff --git a/classes/gitver.bbclass b/classes/gitver.bbclass index 92c053ae24..5b4ba8d1e1 100644 --- a/classes/gitver.bbclass +++ b/classes/gitver.bbclass @@ -8,20 +8,14 @@ GITVER = "${@get_git_pv('${S}', d)}" -def gitver_mark_dependency(d): - from bb.data import expand - from bb.parse import mark_dependency - from os.path import abspath - - fn = abspath(expand("${S}/.git/HEAD", d)) - mark_dependency(d, fn) - def get_git_pv(path, d, tagadjust=None): from subprocess import Popen, PIPE - from os.path import join + import os from bb import error + from bb.parse import mark_dependency - env = {"GIT_DIR": join(d.getVar("S", True), ".git")} + gitdir = os.path.abspath(os.path.join(d.getVar("S", True), ".git")) + env = { "GIT_DIR": gitdir } def popen(cmd, **kwargs): kwargs["stderr"] = PIPE @@ -39,7 +33,23 @@ def get_git_pv(path, d, tagadjust=None): return return stdout.rstrip() - gitver_mark_dependency(d) + # Force the recipe to be reparsed so the version gets bumped + # if the active branch is switched, or if the branch changes. + mark_dependency(d, os.path.join(gitdir, "HEAD")) + + ref = popen(["git", "symbolic-ref", "HEAD"]) + reffile = os.path.join(gitdir, ref) + if ref and os.path.exists(reffile): + mark_dependency(d, reffile) + else: + # The ref might be hidden in packed-refs. Force a reparse if anything + # in the working copy changes. + mark_dependency(d, os.path.join(gitdir, "index")) + + # Catch new tags. + tagdir = os.path.join(gitdir, "refs", "tags") + if os.path.exists(tagdir): + mark_dependency(d, tagdir) ver = popen(["git", "describe", "--tags"], cwd=path) if not ver: -- cgit v1.2.3