[pacman-dev] [PATCH] makepkg: exit if updating pkgver fails
From: Zach Buhman <zack@buhman.org> [Allan: add details to failure message] Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index cedef4c..db344a3 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -813,7 +813,11 @@ update_pkgver() { if [[ -n $newpkgver && $newpkgver != "$pkgver" ]]; then if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then - @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE" + if ! @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE"; then + error "$(gettext "Failure updating %s from %s to %s")" + "pkgver" "$pkgver" "$newpkgver" + exit 1 + fi @SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "$BUILDFILE" source_safe "$BUILDFILE" local fullver=$(get_full_version) -- 1.8.4
On Oct 14, 2013 2:52 AM, "Allan McRae" <allan@archlinux.org> wrote:
From: Zach Buhman <zack@buhman.org>
[Allan: add details to failure message] Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index cedef4c..db344a3 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -813,7 +813,11 @@ update_pkgver() {
if [[ -n $newpkgver && $newpkgver != "$pkgver" ]]; then if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then - @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/"
"$BUILDFILE"
+ if ! @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE"; then + error "$(gettext "Failure updating %s from %s to %s")" + "pkgver" "$pkgver" "$newpkgver" + exit 1
This does not work. Failure to match in not a program failure.
+ fi @SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "$BUILDFILE" source_safe "$BUILDFILE" local fullver=$(get_full_version) -- 1.8.4
On 14/10/13 21:02, Dave Reisner wrote:
On Oct 14, 2013 2:52 AM, "Allan McRae" <allan@archlinux.org> wrote:
From: Zach Buhman <zack@buhman.org>
[Allan: add details to failure message] Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index cedef4c..db344a3 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -813,7 +813,11 @@ update_pkgver() {
if [[ -n $newpkgver && $newpkgver != "$pkgver" ]]; then if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then - @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/"
"$BUILDFILE"
+ if ! @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE"; then + error "$(gettext "Failure updating %s from %s to %s")" + "pkgver" "$pkgver" "$newpkgver" + exit 1
This does not work. Failure to match in not a program failure.
Failure to match will mean the sanity check for pkgrel right after this will fail. This is to catch cases like: newpkgver="/path/to/PKGBUILD: line 22: svnversion: command not found"
+ fi @SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "$BUILDFILE" source_safe "$BUILDFILE" local fullver=$(get_full_version) -- 1.8.4
Validate the new pkgver efore blindly ramming it into the PKGBUILD. This gives us good feedback and prevents corrupting the PKGBUILD, e.g. ==> Starting pkgver()... ==> ERROR: pkgver is not allowed to contain colons, hyphens or whitespace. ==> ERROR: pkgver() generated an invalid version: a horse is not a pkgver As an additional failsafe, exchange a valid for invalid character as command separator in @SEDINPLACE@ expressions. For even more paranoia, exit if sed fails for any reason. Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- scripts/makepkg.sh.in | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 2b01c46..31d2b12 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -810,11 +810,19 @@ download_sources() { # Re-sources the PKGBUILD afterwards to allow for other variables that use $pkgver update_pkgver() { newpkgver=$(run_function_safe pkgver) + if ! validate_pkgver "$newpkgver"; then + error "$(gettext "pkgver() generated an invalid version: %s")" "$newpkgver" + exit 1 + fi if [[ -n $newpkgver && $newpkgver != "$pkgver" ]]; then if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then - @SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE" - @SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "$BUILDFILE" + if ! @SEDINPLACE@ "s:^pkgver=[^ ]*:pkgver=$newpkgver:" "$BUILDFILE"; then + error "$(gettext "Failed to update %s from %s to %s")" \ + "pkgver" "$pkgver" "$newpkgver" + exit 1 + fi + @SEDINPLACE@ "s:^pkgrel=[^ ]*:pkgrel=1:" "$BUILDFILE" source "$BUILDFILE" local fullver=$(get_full_version) msg "$(gettext "Updated version: %s")" "$pkgbase $fullver" @@ -1354,7 +1362,6 @@ extract_sources() { if (( PKGVERFUNC )); then update_pkgver - check_pkgver || exit 1 check_build_status fi } @@ -2249,6 +2256,13 @@ check_sanity() { return $ret } +validate_pkgver() { + if [[ $1 = *[[:space:]:-]* ]]; then + error "$(gettext "%s is not allowed to contain colons, hyphens or whitespace.")" "pkgver" + return 1 + fi +} + check_pkgver() { local ret=0 @@ -2260,10 +2274,7 @@ check_pkgver() { awk -F'=' '$1 ~ /^[[:space:]]*pkgver$/' "$BUILDFILE" | sed "s/[[:space:]]*#.*//" | while IFS='=' read -r _ i; do eval i=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "${i%%+([[:space:]])}")\" - if [[ $i = *[[:space:]:-]* ]]; then - error "$(gettext "%s is not allowed to contain colons, hyphens or whitespace.")" "pkgver" - return 1 - fi + validate_pkgver "$i" || return 1 done || ret=1 return $ret -- 1.8.4
participants (3)
-
Allan McRae
-
Dave Reisner
-
Dave Reisner