aboutsummaryrefslogtreecommitdiff
path: root/contrib/cpt-fork
blob: d0d8c1c68b50ae2379953c8f3eda698178add4f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/sh -ef
# 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##*/}" ] &&
        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 in such a case.
    rm -f "$pkg/manifest" "$pkg/etcsums"

    printf 'forked package to %s\n' "$PWD/$pkg"
done