diff options
-rwxr-xr-x | contrib/cpt-fork | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/contrib/cpt-fork b/contrib/cpt-fork index 6d50064..d0d8c1c 100755 --- a/contrib/cpt-fork +++ b/contrib/cpt-fork @@ -2,17 +2,23 @@ # Fork a package to the current directory case "$1" in ''|--help|-h) printf '\033[1;33m-> \033[m%s\n' "usage: ${0##*/} [pkg...]" ; exit 0 ; esac +die() { printf '\033[1;31m!> \033[m%s\n' "$@" >&2; exit 1;} for pkg; do - [ "$CPT_FORCE" != 1 ] && [ -d "$pkg" ] && { - printf '\033[1;31m!> \033[m%s\n' \ - "$pkg already exists on the current directory. You can set" \ - "CPT_FORCE=1 to ignore this." - exit 1 - } - cpt-search "$pkg" >/dev/null + [ "$CPT_FORCE" != 1 ] && [ -d "${pkg##*/}" ] && + die "$pkg already exists on the current directory." \ + "You can set CPT_FORCE=1 to ignore this." - cp -r "$(cpt-search --single "$pkg")" . + case "$pkg" in + */*) + [ -d "$pkg" ] || die "$pkg is not a directory" + cp -r "$pkg" . + pkg=${pkg##*/} + ;; + *) + cpt-search "$pkg" >/dev/null + cp -r "$(cpt-search --single "$pkg")" . + esac # Sometimes forked packages are from the database and not from a repository. # We should remove the manifest in such a case. |