xref: /netbsd-src/external/gpl3/gcc/dist/contrib/git-fetch-vendor.sh (revision fb8a8121f28072308659629b86cfb7c449bd93e1)
1*fb8a8121Smrg#!/bin/sh
2*fb8a8121Smrg
3*fb8a8121Smrgusage ()
4*fb8a8121Smrg{
5*fb8a8121Smrg    echo "Usage: $0 [--enable-push] <vendor>"
6*fb8a8121Smrg    echo "The following vendors are already known:"
7*fb8a8121Smrg    git ls-remote ${upstream} "*/vendors/*" | sed -r "s:.*/vendors/([^/]+)/.*:\1:"|sort|uniq
8*fb8a8121Smrg    exit 1
9*fb8a8121Smrg}
10*fb8a8121Smrg
11*fb8a8121Smrg# Should we insert a "push" refspec to enable pushing to the vendor branch?
12*fb8a8121Smrgenable_push=no
13*fb8a8121Smrg
14*fb8a8121Smrgupstream=`git config --get "gcc-config.upstream"`
15*fb8a8121Smrgif [ x"$upstream" = x ]
16*fb8a8121Smrgthen
17*fb8a8121Smrg    echo "Config gcc-config.upstream not set, run contrib/gcc-git-customization"
18*fb8a8121Smrg    exit 1
19*fb8a8121Smrgfi
20*fb8a8121Smrg
21*fb8a8121Smrgcase $# in
22*fb8a8121Smrg    1)
23*fb8a8121Smrg	# vendor names never start with -, so catch this in case user wrote something like --help.
24*fb8a8121Smrg	case "$1" in
25*fb8a8121Smrg	    -*)
26*fb8a8121Smrg		usage
27*fb8a8121Smrg		;;
28*fb8a8121Smrg	    *)
29*fb8a8121Smrg		vendor=$1
30*fb8a8121Smrg		;;
31*fb8a8121Smrg	esac
32*fb8a8121Smrg	;;
33*fb8a8121Smrg    2)
34*fb8a8121Smrg	vendor=$2
35*fb8a8121Smrg	if [ "$1" = "--enable-push" ]
36*fb8a8121Smrg	then
37*fb8a8121Smrg	    enable_push=yes
38*fb8a8121Smrg	else
39*fb8a8121Smrg	    usage
40*fb8a8121Smrg	fi
41*fb8a8121Smrg	;;
42*fb8a8121Smrg    *)
43*fb8a8121Smrg	usage
44*fb8a8121Smrg	;;
45*fb8a8121Smrgesac
46*fb8a8121Smrg
47*fb8a8121Smrg
48*fb8a8121Smrgecho "setting up git to fetch vendor ${vendor} to remotes/vendors/${vendor}"
49*fb8a8121Smrgurl=$(git config --get "remote.${upstream}.url")
50*fb8a8121Smrgpushurl=$(git config --get "remote.${upstream}.pushurl")
51*fb8a8121Smrggit config "remote.vendors/${vendor}.url" "${url}"
52*fb8a8121Smrgif [ "x$pushurl" != "x" ]
53*fb8a8121Smrgthen
54*fb8a8121Smrg    git config "remote.vendors/${vendor}.pushurl" "${pushurl}"
55*fb8a8121Smrgfi
56*fb8a8121Smrggit config --replace-all "remote.vendors/${vendor}.fetch" "+refs/vendors/${vendor}/heads/*:refs/remotes/vendors/${vendor}/*" "refs/vendors/${vendor}/heads"
57*fb8a8121Smrggit config --replace-all "remote.vendors/${vendor}.fetch" "+refs/vendors/${vendor}/tags/*:refs/tags/vendors/${vendor}/*" "refs/vendors/${vendor}/tags"
58*fb8a8121Smrgif [ "$enable_push" = "yes" ]
59*fb8a8121Smrgthen
60*fb8a8121Smrg    echo "Warning: take care when pushing that you only push the changes you intend."
61*fb8a8121Smrg    echo "E.g. use \"git push vendors/${vendor} HEAD\" to push the current branch"
62*fb8a8121Smrg    git config --replace-all "remote.vendors/${vendor}.push" "refs/heads/${vendor}/*:refs/vendors/${vendor}/heads/*"
63*fb8a8121Smrgelse
64*fb8a8121Smrg    git config --unset-all "remote.vendors/${vendor}.push"
65*fb8a8121Smrgfi
66*fb8a8121Smrggit fetch vendors/${vendor}
67