#!/bin/sh -ef # Fork a package to the current directory ## SYNOPSIS: ## .Nm ## .Op Ar pkg... ## DESCRIPTION: ## .Nm ## copies the given packages to the current directory. ## HANDLING FORKED PACKAGES: ## After forking a package, a user can either add the parent directory of the ## package to their ## .Ev CPT_PATH ## or run ## .Bd -literal -compact -offset indent ## cpt-build && cpt-install ## .Ed ## inside the package directory to build and install the forked package. ## see: cpt-link.1 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##*/}" ] && die "$pkg already exists on the current directory." \ "You can set CPT_FORCE=1 to ignore this." 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 and etcsums in such a case. rm -f "$pkg/manifest" "$pkg/etcsums" printf 'forked package to %s\n' "$PWD/$pkg" done