1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-11-24 03:59:46 +01:00

home-environment: fix error when deleting empty directories

With --ignore-fail-on-non-empty, non-emptiness is the only failure
that gets ignored by rmdir. In the case that rmdir reaches $HOME and
considers deleting it, it will detect insufficient permissions and
subsequently exit with an error, even if $HOME is not empty.

Prevent this by calling rmdir with a relative path that excludes
$HOME.

(cherry picked from commit da5b7bea78)
This commit is contained in:
Cornelius Mika 2017-08-19 09:49:05 +02:00 committed by Robert Helgesson
parent 758d2ef9c1
commit 9865e3ce29
No known key found for this signature in database
GPG key ID: C3DB11069E65DC86

View file

@ -315,16 +315,20 @@ in
else
echo "Checking $targetPath gone (deleting)"
$DRY_RUN_CMD rm $VERBOSE_ARG "$targetPath"
targetDir="$(dirname "$targetPath")"
# Recursively remove the containing directory. We only
# do this if the containing folder is not $HOME since
# running rmdir on $HOME will result in a harmless but
# unpleasant error message.
if [[ "$targetDir" != "$HOME" ]] ; then
# Recursively delete empty parent directories.
targetDir="$(dirname "$relativePath")"
if [[ "$targetDir" != "." ]] ; then
pushd "$HOME" > /dev/null
# Call rmdir with a relative path excluding $HOME.
# Otherwise, it might try to delete $HOME and exit
# with a permission error.
$DRY_RUN_CMD rmdir $VERBOSE_ARG \
-p --ignore-fail-on-non-empty \
"$targetDir"
popd > /dev/null
fi
fi
done