From 40f476c649e2c1938c391575f4339c6f50b97e7c Mon Sep 17 00:00:00 2001 From: Morten Linderud Date: Sat, 10 Feb 2024 12:46:08 +0100 Subject: fix(pkgctl): skip path arguments that are not directories Several subcommands accept multiple paths in a way that passing a wildcard is an expected use case. Previously this wasn't possible if the main directory contained any text files or scripts. Fix this by skipping none directory paths for such commands. Component: pkgctl Signed-off-by: Morten Linderud --- src/lib/repo/switch.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/lib/repo/switch.sh') diff --git a/src/lib/repo/switch.sh b/src/lib/repo/switch.sh index f411ac2..d8ba9df 100644 --- a/src/lib/repo/switch.sh +++ b/src/lib/repo/switch.sh @@ -101,16 +101,21 @@ pkgctl_repo_switch() { fi for path in "${paths[@]}"; do - if ! realpath=$(realpath -e -- "${path}"); then + # resolve symlink for basename + if ! realpath=$(realpath --canonicalize-existing -- "${path}"); then die "No such directory: ${path}" fi - pkgbase=$(basename "${realpath}") - - if [[ ! -d "${path}/.git" ]]; then + # skip paths that are not directories + if [[ ! -d "${realpath}" ]]; then + continue + fi + # skip paths that are not git repositories + if [[ ! -d "${realpath}/.git" ]]; then error "Not a Git repository: ${path}" continue fi + pkgbase=$(basename "${realpath}") if ! git -C "${path}" checkout "${GIT_CHECKOUT_OPTIONS[@]}" "${GIT_REF}"; then die "Failed to switch ${pkgbase} to version ${VERSION}" fi -- cgit v1.2.3-54-g00ecf