summaryrefslogtreecommitdiff
path: root/pbs-package-fork
blob: 6ae1eff7766326ca3d66496bb2f08c74c059bc6d (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash -euE

. 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 "$@"