#!/bin/bash -euE . $(which libremessages) cmd=${0##*/} usage() { echo "Usage: $cmd [OPTIONS] REPOSITORY OLDPACKAGE REPO/NEWPACKAGE" echo 'Forks a package.' echo '' echo 'To fork a local package, (for example, making `pcr/emacs-lucid`' echo 'from `pcr/emacs-lucid`), the repository is the local filesystem,' echo 'so use `./`' echo '' echo ' $cmd ./ emacs pcr/emacs-lucid' echo '' echo 'This forks the branch `packages/emacs` into a new branch' echo '`packages/emacs-lucid`, creates the file `pbstrack` in it, and' echo 'checks it out as a git submodule to the directory ' echo '`prc/emacs-lucid`.' echo '' echo 'Use `pbs-merge` to pull updates from the original package.' echo '' echo 'Options:' echo ' -h Show this message' } main() { while getopts 'h' arg; do case $arg in h) usage; return 0;; *) usage; return 1;; esac done shift $(($OPTIND - 1)) if [[ $# != 3 ]]; then usage return 1 fi local repository=$1 local oldpackage=$2 local dest=$3 local newpackage="${dest##*/}" git submodule add -b "packages/${oldpackage}" "${repository}" "${dest}" cd "${dest}" git checkout -b "packages/${newpackage}" printf '%s packages/%s\n' "${repository}" "${oldpackage}" > pbstrack git add pbstrack git commit -m 'Fork package from ${repository} ${oldpackage} to ${dest}' } main "$@"