]>
Commit | Line | Data |
---|---|---|
743d4d82 RE |
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 | ||
e19db6a2 JJ |
23 | # Add git commands to convert git commit to monotonically increasing revision number |
24 | # and vice versa | |
6ff7efb7 JJ |
25 | git config alias.gcc-descr \!"f() { if test \${1:-no} = --full; then r=\$(git describe --all --abbrev=40 --match 'basepoints/gcc-[0-9]*' \${2:-master} | 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}); test -n \$r && echo \${r}; else git describe --all --match 'basepoints/gcc-[0-9]*' \${1:-master} | 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; }; 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" | |
e19db6a2 | 27 | |
affb7b66 | 28 | # Make diff on MD files use "(define" as a function marker. |
743d4d82 RE |
29 | # Use this in conjunction with a .gitattributes file containing |
30 | # *.md diff=md | |
31 | git config diff.md.xfuncname '^\(define.*$' | |
32 | ||
33 | upstream=`git config --get "gcc-config.upstream"` | |
34 | if [ "x$upstream" = "x" ] | |
35 | then | |
36 | upstream="origin" | |
37 | fi | |
38 | ask "Local name for upstream repository" "origin" upstream | |
39 | git config "gcc-config.upstream" "$upstream" | |
40 | ||
41 | remote_id=`git config --get "gcc-config.user"` | |
42 | if [ "x$remote_id" = "x" ] | |
43 | then | |
44 | # See if the url specifies the remote user name. | |
45 | url=`git config --get "remote.$upstream.url"` | |
46 | if [ "x$url" = "x" ] | |
47 | then | |
48 | # This is a pure guess, but for many people it might be OK. | |
49 | remote_id=`whoami` | |
50 | else | |
51 | remote_id=`echo $url | sed -r "s|^.*ssh://(.+)@gcc.gnu.org.*$|\1|"` | |
52 | if [ x$remote_id = x$url ] | |
53 | then | |
54 | remote_id=`whoami` | |
55 | fi | |
56 | fi | |
57 | fi | |
e6107422 | 58 | ask "Account name on gcc.gnu.org (for your personal branches area)" $remote_id remote_id |
743d4d82 RE |
59 | git config "gcc-config.user" "$remote_id" |
60 | ||
61 | old_pfx=`git config --get "gcc-config.userpfx"` | |
62 | if [ "x$old_pfx" = "x" ] | |
63 | then | |
64 | old_pfx="me" | |
65 | fi | |
66 | echo "Local branch prefix for personal branches you want to share" | |
67 | echo "(local branches starting <prefix>/ can be pushed directly to your" | |
68 | ask "personal area on the gcc server)" $old_pfx new_pfx | |
69 | git config "gcc-config.userpfx" "$new_pfx" | |
70 | ||
71 | echo "Setting up tracking for personal namespace $remote_id in remotes/$upstream/${new_pfx}" | |
72 | git config --replace-all "remote.${upstream}.fetch" "+refs/users/${remote_id}/heads/*:refs/remotes/${upstream}/${new_pfx}/*" ":refs/remotes/${upstream}/${old_pfx}/" | |
73 | git config --replace-all "remote.${upstream}.fetch" "+refs/users/${remote_id}/tags/*:refs/tags/${new_pfx}/*" ":refs/tags/${old_pfx}/" | |
e6107422 RE |
74 | |
75 | push_rule=`git config --get "remote.${upstream}.push"` | |
76 | if [ "x$push_rule" != "x" ] | |
77 | then | |
78 | echo "***********************************************" | |
79 | echo " Warning" | |
80 | echo "***********************************************" | |
81 | echo | |
82 | echo "Old versions of this script used to add custom push" | |
83 | echo "rules to simplify pushing to personal branches." | |
84 | echo "Your configuration contains such rules, but we no-longer" | |
85 | echo "recommend doing this." | |
86 | echo | |
87 | echo "To delete these rules run:" | |
88 | echo " git config --unset-all \"remote.${upstream}.push\"" | |
89 | fi |