]> git.wh0rd.org - home.git/blame - .bin/vcs-url
redshift-check: reset cwd to / rather than $HOME
[home.git] / .bin / vcs-url
CommitLineData
149dcd4d
MF
1#!/bin/bash
2
3err() { echo "error: $*" >&2; exit 1; }
4
5_cvs_url() {
6 [[ $# -gt 1 ]] && err "accepted args: <file>[:rev1[:rev2]]"
7
8 # spec has the form file:rev1[:rev2]
9 # rev2 defaults to rev1-1
10 export IFS=:
11 set -- $1
12 unset IFS
13
14 local file=$1
15 if [[ ! -e ${file} ]] ; then
16 echo "file '${file}' does not exist"
17 return 1
18 fi
19 local dir="."
20 [[ ${file} == */* ]] && dir=${file%/*}
21 file=${file##*/}
22
23 local rev2=$2
24 if [[ -z ${rev2} ]] ; then
25 rev2=$(
26 cd ${dir}
27 export IFS=/
28 set -- $(grep /${file}/ CVS/Entries)
29 unset IFS
30 echo $3
31 )
32 if [[ ${rev2} == "0" ]] ; then
33 # new file
34 rev2="1.1"
35 else
36 # existing file, bump rev automatically
37 rev2="1.$((${rev2#1.}+1))"
38 fi
39 fi
40 local rev2r=${rev2#1.}
41 local rev1=${3:-1.$((rev2r - 1))}
42
43 local cvsroot=$(<${dir}/CVS/Repository)
44 if [[ ${cvsroot} == gentoo-x86* ]] ; then
45 cvsroot=${cvsroot#gentoo-x86}
46 cvsroot=${cvsroot#/}
47 fi
48
49 local urirev
50 [[ ${rev2} == "1.1" || ${rev1} == "${rev2}" ]] \
51 && urirev="?rev=${rev2}" \
52 || urirev="?r1=${rev1}&r2=${rev2}"
53 echo "http://sources.gentoo.org/${cvsroot}/${file}${urirev}"
54}
55cvs_url() {
56 local f
57 for f in "$@" ; do
58 _cvs_url "${f}"
59 done
60}
61
62git_url() {
02b192ca 63 [[ $# -gt 1 ]] && err "accepted args: <rev>"
149dcd4d
MF
64
65 local repo url
66 local remote=$(git config remote.origin.url)
67 case ${remote} in
68 *://uclibc.org/*|*://git.uclibc.org/*|\
69 *://busybox.net/*|*://git.busybox.net/*|\
70 *://buildroot.org/*|*://git.buildroot.org/*|\
71 *://buildroot.net/*|*://git.buildroot.net/*)
72 repo=$(echo "${remote}" | sed -e 's,^[^:]*://[^/]*/,,' -e 's:[.]git$::')
73 url="https://git.${repo,,}.org/${repo}/commit/?id="
74 ;;
75 *://git@git.gentoo.org/*|\
76 *://anongit.gentoo.org/*)
77 repo=$(echo "${remote}" | sed 's:.*git[.a-z]*.gentoo.org/::')
78 url="http://gitweb.gentoo.org/${repo}/commit/?id="
79 ;;
80 git@github.com/*|\
81 *://github.com/*)
82 repo=$(echo "${remote}" | sed -e 's,^git@github.com/,,' -e 's,^https://github.com/,,' -e 's:[.]git$::')
83 url="https://github.com/${repo}/commit/"
84 ;;
85 *)
86 echo "Unknown remote: ${remote}"
87 exit 1
88 ;;
89 esac
90
91 git log -n3 ${1:-HEAD} | sed "s,^commit ,${url},"
92}
93
94svn_url() {
95 if [[ $# -eq 0 ]] ; then
96 svn info | \
97 awk '{
98 if ($1 == "URL:") {
99 URL = "http://sources.gentoo.org/" gensub(/.*svnroot\/([^/]*).*/,"\\1","");
100 } else if ($1 == "Revision:") {
101 rev = $2
102 URL = URL "?rev=" (rev + 1) "&view=rev"
103 }
104 }
105 END { print URL }'
106 return 0
107 fi
108
109 local f
110 for f in "$@" ; do
111 svn info "${f}" | \
112 awk '{
113 if ($1 == "URL:") {
114 sub(/.*svnroot/,"")
115 URL = "http://sources.gentoo.org" $1 "?"
116 } else if ($1 == "Revision:") {
117 rev = $2
118 URL = URL "r1=" rev "&r2=" (rev + 1)
119 }
120 }
121 END { print URL }'
122 done
123}
124
125usage() {
126 exec cat <<-EOF
127 Usage: $0 [options] [args]
128
129 Options:
130 -c CVS URL
131 -g GIT URL (default)
132 -s SVN URL
133 -x Trace the script
134 -h Help
135 EOF
136}
137
138main() {
139 local vcs="git"
140 while [[ $# -gt 0 ]] ; do
141 case $1 in
142 -c) vcs="cvs";;
143 -s) vcs="svn";;
144 -g) vcs="git";;
145 -x) set -x;;
146 -h) usage;;
147 --) shift; break;;
148 -*) usage;;
149 *) break;;
150 esac
151 shift
152 done
153
154 case ${vcs} in
155 cvs) cvs_url "$@";;
156 git) git_url "$@";;
157 svn) svn_url "$@";;
158 esac
159}
160main "$@"