Skip to content
Snippets Groups Projects
  • Jeffery To's avatar
    f96cfe01
    build: Fix directory symlinks not removed when cleaning STAGING_DIR · f96cfe01
    Jeffery To authored
    
    Currently, a symbolic link whose target is a directory will not be
    removed when cleaning packages from STAGING_DIR.
    
    In the first cleaning pass in scripts/clean-package.sh, the -f test for
    a directory symlink returns false (because the link target is a
    directory) and so the symlink is not removed.
    
    In the second pass, the -d test returns true for a directory symlink,
    but the symlink is not removed by rmdir because rmdir only removes
    (real) directories.
    
    This updates clean-package.sh to remove all non-directories (including
    symbolic links) in the first pass.
    
    Signed-off-by: default avatarJeffery To <jeffery.to@gmail.com>
    f96cfe01
    History
    build: Fix directory symlinks not removed when cleaning STAGING_DIR
    Jeffery To authored
    
    Currently, a symbolic link whose target is a directory will not be
    removed when cleaning packages from STAGING_DIR.
    
    In the first cleaning pass in scripts/clean-package.sh, the -f test for
    a directory symlink returns false (because the link target is a
    directory) and so the symlink is not removed.
    
    In the second pass, the -d test returns true for a directory symlink,
    but the symlink is not removed by rmdir because rmdir only removes
    (real) directories.
    
    This updates clean-package.sh to remove all non-directories (including
    symbolic links) in the first pass.
    
    Signed-off-by: default avatarJeffery To <jeffery.to@gmail.com>
clean-package.sh 453 B
#!/usr/bin/env bash
IFS=$'\n'
[ -n "$1" -a -n "$2" ] || {
	echo "Usage: $0 <file> <directory>"
	exit 1
}
[ -f "$1" -a -d "$2" ] || {
	echo "File/directory not found"
	exit 1
}
cat "$1" | (
	cd "$2"
	while read entry; do
		[ -n "$entry" ] || break
		[ ! -d "$entry" ] || [ -L "$entry" ] && rm -f "$entry"
	done
)
sort -r "$1" | (
	cd "$2"
	while read entry; do
		[ -n "$entry" ] || break
		[ -d "$entry" ] && rmdir "$entry" > /dev/null 2>&1
	done
)
true