testsuite: Fix dg-message syntax.
[gcc.git] / contrib / gcc-git-customization.sh
1 #!/bin/sh
2
3 # Script to add some local git customizations suitable for working
4 # with the GCC git repository
5
6 ask () {
7 question=$1
8 default=$2
9 var=$3
10 echo -n $question "["$default"]? "
11 read answer
12 if [ "x$answer" = "x" ]
13 then
14 eval $var=\$default
15 else
16 eval $var=\$answer
17 fi
18 }
19
20 # Add a git command to find the git commit equivalent to legacy SVN revision NNN
21 git config alias.svn-rev '!f() { rev=$1; shift; git log --all --grep="From-SVN: r\\?$rev\\b" "${@}"; } ; f'
22
23 # Add git commands to convert git commit to monotonically increasing revision number
24 # and vice versa
25 git config alias.gcc-descr \!"f() { if test \${1:-no} = --full; then c=\${2:-master}; r=\$(git describe --all --abbrev=40 --match 'basepoints/gcc-[0-9]*' \$c | sed -n 's,^\\(tags/\\)\\?basepoints/gcc-,r,p'); expr match \${r:-no} '^r[0-9]\\+\$' >/dev/null && r=\${r}-0-g\$(git rev-parse \${2:-master}); else c=\${1:-master}; r=\$(git describe --all --match 'basepoints/gcc-[0-9]*' \$c | sed -n 's,^\\(tags/\\)\\?basepoints/gcc-\\([0-9]\\+\\)-\\([0-9]\\+\\)-g[0-9a-f]*\$,r\\2-\\3,p;s,^\\(tags/\\)\\?basepoints/gcc-\\([0-9]\\+\\)\$,r\\2-0,p'); fi; if test -n \$r; then o=\$(git config --get gcc-config.upstream); rr=\$(echo \$r | sed -n 's,^r\\([0-9]\\+\\)-[0-9]\\+\\(-g[0-9a-f]\\+\\)\\?\$,\\1,p'); if git rev-parse --verify --quiet \${o:-origin}/releases/gcc-\$rr >/dev/null; then m=releases/gcc-\$rr; else m=master; fi; git merge-base --is-ancestor \$c \${o:-origin}/\$m && \echo \${r}; fi; }; f"
26 git config alias.gcc-undescr \!"f() { o=\$(git config --get gcc-config.upstream); r=\$(echo \$1 | sed -n 's,^r\\([0-9]\\+\\)-[0-9]\\+\$,\\1,p'); n=\$(echo \$1 | sed -n 's,^r[0-9]\\+-\\([0-9]\\+\\)\$,\\1,p'); test -z \$r && echo Invalid id \$1 && exit 1; h=\$(git rev-parse --verify --quiet \${o:-origin}/releases/gcc-\$r); test -z \$h && h=\$(git rev-parse --verify --quiet \${o:-origin}/master); p=\$(git describe --all --match 'basepoints/gcc-'\$r \$h | sed -n 's,^\\(tags/\\)\\?basepoints/gcc-[0-9]\\+-\\([0-9]\\+\\)-g[0-9a-f]*\$,\\2,p;s,^\\(tags/\\)\\?basepoints/gcc-[0-9]\\+\$,0,p'); git rev-parse --verify \$h~\$(expr \$p - \$n); }; f"
27
28 # Make diff on MD files use "(define" as a function marker.
29 # Use this in conjunction with a .gitattributes file containing
30 # *.md diff=md
31 git config diff.md.xfuncname '^\(define.*$'
32
33 set_user=$(git config --get "user.name")
34 set_email=$(git config --get "user.email")
35
36 if [ "x$set_user" = "x" ]
37 then
38 # Try to guess the user's name by looking it up in the password file
39 new_user=$(getent passwd $(whoami) | awk -F: '{ print $5 }')
40 if [ "x$new_user" = "x" ]
41 then
42 new_user="(no default)"
43 fi
44 else
45 new_user=$set_user
46 fi
47 ask "Your name" "${new_user}" new_user
48 if [ "x$new_user" = "x(no default)" ]
49 then
50 echo "Cannot continue, git needs to record your name against commits"
51 exit 1
52 fi
53
54 if [ "x$set_email" = "x" ]
55 then
56 new_email="(no_default)"
57 else
58 new_email=$set_email
59 fi
60
61 ask "Your email address (for git commits)" "${new_email}" new_email
62 if [ "x$new_email" = "x(no default)" ]
63 then
64 echo "Cannot continue, git needs to record your email address against commits"
65 exit 1
66 fi
67
68 if [ "x$set_user" != "x$new_user" ]
69 then
70 git config "user.name" "$new_user"
71 fi
72
73 if [ "x$set_email" != "x$new_email" ]
74 then
75 git config "user.email" "$new_email"
76 fi
77
78 upstream=$(git config --get "gcc-config.upstream")
79 if [ "x$upstream" = "x" ]
80 then
81 upstream="origin"
82 fi
83 ask "Local name for upstream repository" "origin" upstream
84 git config "gcc-config.upstream" "$upstream"
85
86 remote_id=$(git config --get "gcc-config.user")
87 if [ "x$remote_id" = "x" ]
88 then
89 # See if the url specifies the remote user name.
90 url=$(git config --get "remote.$upstream.url")
91 if [ "x$url" = "x" ]
92 then
93 # This is a pure guess, but for many people it might be OK.
94 remote_id=$(whoami)
95 else
96 remote_id=$(echo $url | sed -r "s|^.*ssh://(.+)@gcc.gnu.org.*$|\1|")
97 if [ x$remote_id = x$url ]
98 then
99 remote_id=$(whoami)
100 fi
101 fi
102 fi
103 ask "Account name on gcc.gnu.org (for your personal branches area)" $remote_id remote_id
104 git config "gcc-config.user" "$remote_id"
105
106 old_pfx=$(git config --get "gcc-config.userpfx")
107 if [ "x$old_pfx" = "x" ]
108 then
109 old_pfx="me"
110 fi
111 echo "Local branch prefix for personal branches you want to share"
112 echo "(local branches starting <prefix>/ can be pushed directly to your"
113 ask "personal area on the gcc server)" $old_pfx new_pfx
114 git config "gcc-config.userpfx" "$new_pfx"
115
116 echo "Setting up tracking for personal namespace $remote_id in remotes/$upstream/${new_pfx}"
117 git config --replace-all "remote.${upstream}.fetch" "+refs/users/${remote_id}/heads/*:refs/remotes/${upstream}/${new_pfx}/*" ":refs/remotes/${upstream}/${old_pfx}/"
118 git config --replace-all "remote.${upstream}.fetch" "+refs/users/${remote_id}/tags/*:refs/tags/${new_pfx}/*" ":refs/tags/${old_pfx}/"
119
120 push_rule=$(git config --get "remote.${upstream}.push")
121 if [ "x$push_rule" != "x" ]
122 then
123 echo "***********************************************"
124 echo " Warning"
125 echo "***********************************************"
126 echo
127 echo "Old versions of this script used to add custom push"
128 echo "rules to simplify pushing to personal branches."
129 echo "Your configuration contains such rules, but we no-longer"
130 echo "recommend doing this."
131 echo
132 echo "To delete these rules run:"
133 echo " git config --unset-all \"remote.${upstream}.push\""
134 fi