On Fri, Mar 09, 2012 at 05:59:09PM +1000, Allan McRae wrote: > In preparation for the removal of the global error trap we need a > way to ensure changing directories succeeds. Add a "cd_safe" > wrapper that performs the necessary check. > > Signed-off-by: Allan McRae <al...@archlinux.org> > --- > scripts/makepkg.sh.in | 40 ++++++++++++++++++++++++---------------- > 1 file changed, 24 insertions(+), 16 deletions(-) > > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in > index 534f6f8..f21c638 100644 > --- a/scripts/makepkg.sh.in > +++ b/scripts/makepkg.sh.in > @@ -874,6 +874,14 @@ error_function() { > exit 2 # $E_BUILD_FAILED > } > > +cd_safe() { > + if ! cd "$1"; then
Do we want to write stdout to /dev/null here? It _should_ be quiet since we unset CDPATH early on... > + error "$(gettext "Failed to change to directory %s")" "$1" > + plain "$(gettext "Aborting...")" > + exit 1 > + fi > +} > + > run_function() { > if [[ -z $1 ]]; then > return 1 > @@ -891,7 +899,7 @@ run_function() { > fi > > msg "$(gettext "Starting %s()...")" "$pkgfunc" > - cd "$srcdir" > + cd_safe "$srcdir" > > # ensure all necessary build variables are exported > export CFLAGS CXXFLAGS LDFLAGS MAKEFLAGS CHOST > @@ -969,7 +977,7 @@ run_package() { > } > > tidy_install() { > - cd "$pkgdir" > + cd_safe "$pkgdir" > msg "$(gettext "Tidying install...")" > > if [[ $(check_option docs) = "n" && -n ${DOC_DIRS[*]} ]]; then > @@ -1219,7 +1227,7 @@ write_pkginfo() { > } > > check_package() { > - cd "$pkgdir" > + cd_safe "$pkgdir" > > # check existence of backup files > local file > @@ -1248,7 +1256,7 @@ create_package() { > > check_package > > - cd "$pkgdir" > + cd_safe "$pkgdir" > msg "$(gettext "Creating package...")" > > local nameofpkg > @@ -1407,7 +1415,7 @@ create_srcpackage() { > > # tar it up > msg2 "$(gettext "Compressing source package...")" > - cd "${srclinks}" > + cd_safe "${srclinks}" > if ! bsdtar -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then > error "$(gettext "Failed to create source package file.")" > exit 1 # TODO: error code > @@ -1423,7 +1431,7 @@ create_srcpackage() { > warning "$(gettext "Failed to create symlink to source package > file.")" > fi > > - cd "${startdir}" > + cd_safe "${startdir}" > rm -rf "${srclinks}" > } > > @@ -1757,7 +1765,7 @@ devel_check() { > fi > msg "$(gettext "Determining latest %s revision...")" > 'hg' > if [[ -d ./src/$_hgrepo ]] ; then > - cd ./src/$_hgrepo > + cd_safe ./src/$_hgrepo > local ret=0 > hg pull || ret=$? > if (( ! ret )); then > @@ -1768,10 +1776,10 @@ devel_check() { > else > [[ ! -d ./src/ ]] && mkdir ./src/ > hg clone $_hgroot/$_hgrepo ./src/$_hgrepo > - cd ./src/$_hgrepo > + cd_safe ./src/$_hgrepo > fi > newpkgver=$(hg tip --template "{rev}") > - cd ../../ > + cd_safe ../../ > fi > > if [[ -n $newpkgver ]]; then > @@ -1847,7 +1855,7 @@ canonicalize_path() { > > if [[ -d $path ]]; then > ( > - cd "$path" > + cd_safe "$path" > pwd -P > ) > else > @@ -2171,7 +2179,7 @@ fi > if (( GENINTEG )); then > mkdir -p "$srcdir" > chmod a-s "$srcdir" > - cd "$srcdir" > + cd_safe "$srcdir" > download_sources > generate_checksums > exit 0 # $E_OK > @@ -2321,14 +2329,14 @@ if (( SOURCEONLY )); then > # Get back to our src directory so we can begin with sources. > mkdir -p "$srcdir" > chmod a-s "$srcdir" > - cd "$srcdir" > + cd_safe "$srcdir" > if ( (( ! SKIPCHECKSUMS )) || \ > ( (( ! SKIPPGPCHECK )) && source_has_signatures ) ) || \ > (( SOURCEONLY == 2 )); then > download_sources > fi > check_source_integrity > - cd "$startdir" > + cd_safe "$startdir" > > # if we are root or if fakeroot is not enabled, then we don't use it > if [[ $(check_buildenv fakeroot) != "y" ]] || (( EUID == 0 )); then > @@ -2384,7 +2392,7 @@ umask 0022 > # get back to our src directory so we can begin with sources > mkdir -p "$srcdir" > chmod a-s "$srcdir" > -cd "$srcdir" > +cd_safe "$srcdir" > > if (( NOEXTRACT )); then > warning "$(gettext "Skipping source retrieval -- using existing > %s tree")" "src/" > @@ -2420,7 +2428,7 @@ else > fi > mkdir -p "$pkgdir" > chmod a-s "$pkgdir" > - cd "$startdir" > + cd_safe "$startdir" > > # if we are root or if fakeroot is not enabled, then we don't use it > if [[ $(check_buildenv fakeroot) != "y" ]] || (( EUID == 0 )); then > @@ -2450,7 +2458,7 @@ else > devel_update > (( BUILDFUNC )) && run_build > (( CHECKFUNC )) && run_check > - cd "$startdir" > + cd_safe "$startdir" > fi > > enter_fakeroot > -- > 1.7.9.3 > >