aboutsummaryrefslogtreecommitdiff
path: root/bin/vcs
blob: 3cd8ed04591cb64a3d3c426e8ba77479823b83d0 (plain) (blame)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/sh
set -eu


usage() {
	cat <<-'EOF'
		Usage:
		  vcs TYPE ACTION
		  vcs -h
	EOF
}

help() {
	cat <<-'EOF'


		Options:
		  -h, --help    show this message

		  TYPE          the type of the underlying VCS:
		                - git
		                - darcs
		                - mercurial
		                - fossil
		                - cvs
		  ACTION        the action to be performed on the repository:
		                - fetch
	EOF
}


for flag in "$@"; do
	case "$flag" in
		--)
			break
			;;
		--help)
			usage
			help
			exit
			;;
		*)
			;;
	esac
done

while getopts 'h' flag; do
	case "$flag" in
		h)
			usage
			help
			exit
			;;
		*)
			usage >&2
			exit 2
	esac
done
shift $((OPTIND - 1))


git_fetch() {
	git fetch
}

darcs_fetch() {
	darcs fetch
}

mercurial_fetch() {
	hg pull
}

fossil_fetch() {
	fossil pull
}

cvs_fetch() {
	cvs update
}


VCS="${1:-}"
ACTION="${2:-}"

eval "$(assert-arg "$VCS"    'VCS')"
eval "$(assert-arg "$ACTION" 'ACTION')"


CMD="$VCS"_"$ACTION"
if ! command -v "$CMD" >/dev/null; then
	printf 'Invalid VCS/action combination: %s %s.\n' "$VCS" "$ACTION" >&2
	exit 2
fi

"$CMD"