Hi!

The monotonically increasing revision ids need to be globally unique, so they 
should
only identify commits that were committed to the upstream repo to its master or
releases/gcc-N branches.  The alias could print something even for private 
branches
or vendor branches etc., but if such an identifier is then used publicly, it 
will
refer to something else.

Committed to trunk.

Martin also suggested for git gcc-descr --full to also include date (commit
date) in the string, so instead of
r10-5998-g2588197b6c2175d7ef9f05a8636f58dfeab12b1d
print
r10-5998-20200116-g2588197b6c2175d7ef9f05a8636f58dfeab12b1d

What do others think?  The r10-5998 part in there is still needed to be the
unique monotonically increasing identifier, the rest is something that can
be derived from it, but e.g. in bugzilla the date could provide extra
helpful information (which can be seen if one follows the link obviously).
In addition to adjusting gcc-git-customization.sh, git-hooks we'd need to
update the redirects and ask Frederic to update bugzilla URLization too.

2020-01-16  Jakub Jelinek  <ja...@redhat.com>

        * gcc-git-customization.sh: Verify the id to be printed is ancestor of
        the corresponding remote release branch (or master), otherwise print
        nothing.

--- contrib/gcc-git-customization.sh.jj 2020-01-15 14:28:26.996758773 +0100
+++ contrib/gcc-git-customization.sh    2020-01-16 12:27:46.734690164 +0100
@@ -22,7 +22,7 @@ git config alias.svn-rev '!f() { rev=$1;
 
 # Add git commands to convert git commit to monotonically increasing revision 
number
 # and vice versa
-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"
+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"
 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"
 
 # Make diff on MD files use "(define" as a function marker.

 
        Jakub

Reply via email to