diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2017-05-06 00:40:58 +0200 |
---|---|---|
committer | Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> | 2017-07-05 18:21:54 +0200 |
commit | 2a9b30ed3594c2dc8c5012fc845572b8d452a9b0 (patch) | |
tree | 73a055572e57ea678a8b326f00bc7c037c6257f4 /lib | |
parent | c9b1fc08b5f63c9f6bb1a992431c661129ab2db1 (diff) | |
download | devtools-2a9b30ed3594c2dc8c5012fc845572b8d452a9b0.tar.gz devtools-2a9b30ed3594c2dc8c5012fc845572b8d452a9b0.tar.xz |
makechrootpkg: delete_chroot: Fix the is-btrfs-subvolume check.
First of all, it ran `is_btrfs "$chrootdir"` to decide if it was on
btrfs, but $chrootdir wasn't defined locally; it just happens to work
because $chrootdir was defined in main(). (I noticed this because in
Parabola, it is called differently, so $chrootdir was empty).
So I was tempted to just change it to `is_btrfs "$copydir"`, but if
$copydir is just a regular directory on a btrfs filesystem, then it
It would leave much of $copydir intact. What we really care about is
if $copydir is a btrfs subvolume; which we can check by combining the
is_btrfs check with inspecting the inum of the directory.
I put this combined check in lib/archroot.sh:is_subvolume.
https://lists.archlinux.org/pipermail/arch-projects/2013-September/003901.html
Diffstat (limited to 'lib')
-rw-r--r-- | lib/archroot.sh | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/archroot.sh b/lib/archroot.sh index 46d4963..87c28a2 100644 --- a/lib/archroot.sh +++ b/lib/archroot.sh @@ -25,6 +25,15 @@ is_btrfs() { } ## +# usage : is_subvolume( $path ) +# return : whether $path is a the root of a btrfs subvolume (including +# the top-level subvolume). +## +is_subvolume() { + [[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs && "$(stat -c %i "$1")" == 256 ]] +} + +## # usage : subvolume_delete_recursive( $path ) # # Find all btrfs subvolumes under and including $path and delete them. @@ -32,7 +41,7 @@ is_btrfs() { subvolume_delete_recursive() { local subvol - is_btrfs "$1" || return 0 + is_subvolume "$1" || return 0 while IFS= read -d $'\0' -r subvol; do if ! btrfs subvolume delete "$subvol" &>/dev/null; then |