From f719b2ecae8183eabcc5fc3580c32af565ea778d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 3 May 2017 01:00:40 -0400 Subject: libredbdiff: improve tmpfile management --- src/abslibre-tools/libredbdiff | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/abslibre-tools') diff --git a/src/abslibre-tools/libredbdiff b/src/abslibre-tools/libredbdiff index 8bcc6d9..24a716d 100755 --- a/src/abslibre-tools/libredbdiff +++ b/src/abslibre-tools/libredbdiff @@ -37,9 +37,6 @@ field_pkgname_arch=30 cmd="${0##*/}" -arch_packages_tmp="/tmp/$cmd.arch-packages" -prbl_packages_tmp="/tmp/$cmd.parabola-packages" - field_pkgname_total="$((field_pkgname_prbl + field_pkgname_arch))" printf_format="%s %-${field_pkgname_prbl}s%-${field_pkgname_arch}s %s | %s\n" printf_format_noarch="%s %-${field_pkgname_total}s %s\n" @@ -150,6 +147,11 @@ initialize() { fi } +# Globals: +# - pkgname : the Parabola pkgname +# - ver_prbl : a map of pkgname->arch_pkgver +# - ver_arch : a map of pkgname->prbl_pkgver +# - provides : a map of pkgname->provides compare_pkgs() { local cmp if [[ -n "${ver_arch[$pkgname]}" ]] ; then @@ -186,6 +188,11 @@ compare_pkgs() { fi } +# Globals: +# - prbl_packages_tmp +# - ver_prbl +# - ver_arch (transitively through compare_pkgs) +# - provides print_cmp() { local repo="$1" awk -F/ -v repo="$repo" \ @@ -342,6 +349,12 @@ main_compare() { filenotfound "$conffile_prbl" filenotfound "$conffile_arch" + local tmpdir + tmpdir="$(mktemp --tmpdir -d "$cmd.XXXXXXXXXX")" || die "Could not create temporary working directory" + trap "rm -rf -- $(printf %q "$tmpdir")" RETURN + local arch_packages_tmp="$tmpdir/arch-packages" + local prbl_packages_tmp="$tmpdir/parabola-packages" + unset provides ver_prbl ver_arch declare -gA provides ver_prbl ver_arch @@ -350,7 +363,6 @@ main_compare() { awk -F/ '{print $2}' \ > "$arch_packages_tmp" || \ die "pacman command to get Arch package data has failed. Exiting." - chmod 777 "$arch_packages_tmp" while read -a line; do ver_arch["${line[0]}"]="${line[1]}" @@ -359,7 +371,6 @@ main_compare() { expac --config "$conffile_prbl" -S '%r/%n %v %S' \ > "$prbl_packages_tmp" || \ die "expac command to get Parabola package data has failed. Exiting." - chmod 777 "$prbl_packages_tmp" if [[ $# == 1 ]]; then print_cmp "$1" -- cgit v1.2.3-54-g00ecf