diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-23 15:40:00 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-23 15:40:00 +0200 |
commit | b2ef9492881a0713cb8856b146570b261f57689e (patch) | |
tree | fa4f62330e00c6130079272cc03e8d5478c29d84 /src/Daemon | |
parent | 4144647a53c8338da2d958b78fb4b2e6096a3ea2 (diff) | |
download | abrt-b2ef9492881a0713cb8856b146570b261f57689e.tar.gz abrt-b2ef9492881a0713cb8856b146570b261f57689e.tar.xz abrt-b2ef9492881a0713cb8856b146570b261f57689e.zip |
updates to abrt-debuginfo-install (but it is still ifdef'ed out)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rwxr-xr-x | src/Daemon/abrt-debuginfo-install | 109 |
1 files changed, 61 insertions, 48 deletions
diff --git a/src/Daemon/abrt-debuginfo-install b/src/Daemon/abrt-debuginfo-install index fc5380ba..1f947cde 100755 --- a/src/Daemon/abrt-debuginfo-install +++ b/src/Daemon/abrt-debuginfo-install @@ -62,10 +62,6 @@ tempdir=$2 cachedir=$3 debug=false -count_words() { - echo $# -} - exec 2>&1 test -f "$core" || exit 2 @@ -78,6 +74,37 @@ mkdir "$tempdir" || exit 2 cd "$tempdir" || exit 2 $debug && echo "Installing rpms to $tempdir" + +count_words() { + echo $# +} + +cleanup_and_report_missing() { +# Which debuginfo files are still missing, including those we just unpacked? + missing_build_ids=`for build_id in $build_ids; do + build_id1=${build_id:0:2} + build_id2=${build_id:2} + file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" + test -f "/$file" && continue + test -f "$cachedir/$file" && continue + echo -n "$build_id " + done` + $debug && echo "missing_build_ids:$missing_build_ids" + + # If cachedir is specified, tempdir is just a staging area. Delete it + if test x"$cachedir" != x""; then + $debug && echo "Removing $tempdir" + rm -rf "$tempdir" + fi + + for missing in $missing_build_ids; do + echo "MISSING:$missing" + done + + test x"$missing_build_ids" != x"" && echo "`count_words $missing_build_ids` debuginfos can't be found" +} + + # eu-unstrip output example: # 0x400000+0x209000 23c77451cf6adff77fc1f5ee2a01d75de6511dda@0x40024c - - [exe] # or @@ -86,7 +113,9 @@ $debug && echo "Installing rpms to $tempdir" # 0x3d15600000+0x208000 20196628d1bc062279622615cc9955554e5bb227@0x3d156001a0 /usr/lib64/libnotify.so.1.1.3 /usr/lib/debug/usr/lib64/libnotify.so.1.1.3.debug libnotify.so.1 # 0x7fd8ae931000+0x62d000 dd49f44f958b5a11a1635523b2f09cb2e45c1734@0x7fd8ae9311a0 /usr/lib64/libgtk-x11-2.0.so.0.1600.6 /usr/lib/debug/usr/lib64/libgtk-x11-2.0.so.0.1600.6.debug echo "Getting list of build IDs" -eu_unstrip_OUT=`eu-unstrip "--core=$core" -n 2>&1` +# Observed errors: +# eu-unstrip: /var/cache/abrt/ccpp-1256301004-2754/coredump: Callback returned failure +eu_unstrip_OUT=`eu-unstrip "--core=$core" -n 2>eu_unstrip.ERR` err=$? printf "%s\nexitcode:%s\n" "$eu_unstrip_OUT" $err >eu_unstrip.OUT test $err = 0 || exit 2 @@ -112,24 +141,19 @@ $debug && echo "build_ids:$build_ids" missing_debuginfo_files=`for build_id in $build_ids; do build_id1=${build_id:0:2} build_id2=${build_id:2} - file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" if test x"$cachedir" != x"" && test x"$cachedir" != x"/" ; then test -f "$cachedir/$file" && continue - if test -f "/$file"; then - mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1" - # Note: this does not preserve symlinks. This is intentional - $debug && echo Copying "$file" to "$cachedir/$file" >&2 - cp "$file" "$cachedir/$file" - continue - fi fi test -f "/$file" && continue echo -n "/$file " done` $debug && echo "missing_debuginfo_files:$missing_debuginfo_files" -test x"$missing_debuginfo_files" = x"" && exit 0 +if test x"$missing_debuginfo_files" = x""; then + cleanup_and_report_missing + exit 0 +fi # We'll run something like: # yum --enablerepo='*debuginfo*' --quiet provides \ @@ -162,7 +186,10 @@ $debug && echo "packages:$packages" # yum may return "" here if it found no packages (say, if coredump is from a new, # unreleased package fresh from koji). -test x"$packages" = x"" && exit 1 +if test x"$packages" = x""; then + cleanup_and_report_missing + exit 1 +fi # Redirecting, since progress bar stuff only messes up our output echo "Downloading `count_words $packages` packages" @@ -180,45 +207,31 @@ for f in *.rpm; do rpm2cpio <"$f" 2>>unpack.OUT | cpio -id >>unpack.OUT 2>&1 done -# Which debuginfo files are still missing, including those we just unpacked? -missing_build_ids=`for build_id in $build_ids; do - build_id1=${build_id:0:2} - build_id2=${build_id:2} +# Copy debuginfo files to cachedir +if test x"$cachedir" != x"" && test -d "$cachedir"; then + for build_id in $build_ids; do + build_id1=${build_id:0:2} + build_id2=${build_id:2} - file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" + file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" - test -f "/$file" && continue - test x"$cachedir" != x"" \ - && test x"$cachedir" != x"/" \ - && test -f "$cachedir/$file" && continue - - if test -f "$file"; then - # file is one of those we just installed. - # Cache it if cachedir is specified. - if test x"$cachedir" != x"" && test -d "$cachedir"; then + test -f "/$file" && continue + test x"$cachedir" != x"/" && test -f "$cachedir/$file" && continue + + if test -f "$file"; then + # file is one of those we just installed. + # Cache it if cachedir is specified. mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1" # Note: this does not preserve symlinks. This is intentional - $debug && echo Copying "$file" to "$cachedir/$file" >&2 + $debug && echo Copying2 "$file" to "$cachedir/$file" >&2 cp --remove-destination "$file" "$cachedir/$file" + continue fi - continue - fi - echo -n "$build_id " -done` -$debug && echo "missing_build_ids:$missing_build_ids" - -# If cachedir is specified, tempdir is just a staging area. Delete it -if test x"$cachedir" != x""; then - $debug && echo "Removing $tempdir" - rm -rf "$tempdir" + done fi +$debug && echo "missing_build_ids:$missing_build_ids" -test x"$missing_build_ids" = x"" && exit 0 - -for missing in $missing_build_ids; do - echo "MISSING:$missing" -done - -echo "`count_words $missing_build_ids` debuginfos can't be found" +cleanup_and_report_missing -exit 1 +test x"$missing_build_ids" != x"" && exit 1 +exit 0 |