On Sat, Jan 11, 2020 at 12:28:01PM +0100, Jakub Jelinek wrote:
> For the redirectors, it could be something like following patch, except the
> last new redirect would need also a yet to be written cgi script that would
> git undescr the argument and print
> Location: https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=...
> 
> --- /etc/httpd/conf.d/sourceware-vhost-gcc.include    2019-11-21 
> 19:25:03.172399228 +0000
> +++ /etc/httpd/conf.d/sourceware-vhost-gcc.include    2020-01-11 
> 11:22:00.752261787 +0000
> @@ -59,6 +59,11 @@
>    # Support short URLs for referring to SVN revisions.
>    RedirectMatch ^/r([0-9]+)$         
> https://gcc.gnu.org/viewcvs/gcc?view=revision\&revision=$1
>  
> +  # Similarly for GIT commits.
> +  RedirectMatch ^/g:([0-9a-zA-Z._{}~^-]+)$   
> https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=$1
> +  RedirectMatch ^/r[0-9]+-[0-9]+-g([0-9a-f]+)$       
> https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=$1
> +  RedirectMatch ^/(r[0-9]+-[0-9]+)$  
> https://gcc.gnu.org/cgi-bin/gcc-gitref.cgi?r=$1
> +
>  # ViewCVS setup
>    
>    RewriteRule ^/cgi-bin/cvsweb.cgi   https://gcc.gnu.org/viewvc/gcc [L]
> 

And the cgi script could be something like (after the basepoints tags would
be pushed to upstream) attached, tested by hand against my copy of the
converted repo with:
$ git tag -l | grep basepoints
basepoints/gcc-0
basepoints/gcc-10
basepoints/gcc-5
basepoints/gcc-6
basepoints/gcc-7
basepoints/gcc-8
basepoints/gcc-9
$ for i in 0 `seq 5 10`; do echo -n basepoints/gcc-$i" "; git log 
basepoints/gcc-$i --max-count=1 | head -n 1; done
basepoints/gcc-0 commit 6f39d4ff6715973bbdf6510a69fccc46f9a746b9
basepoints/gcc-5 commit 89eb97de15f1618bd63b6138e8a5536b935861e8
basepoints/gcc-6 commit 1a46d358050cf6964df0d8ceaffafd0cc88539b2
basepoints/gcc-7 commit 70f4fdeb67fe065041a52304bb20f6ce701b1cf7
basepoints/gcc-8 commit aa90195aedfa348284c6e4e8ce59dc1b734f1d71
basepoints/gcc-9 commit 3bedd3463137d0712b72d582836a0b14c74ef620
basepoints/gcc-10 commit 68ec60c4a377b532ec2d265ea542107c36b1d15c

        Jakub
#!/bin/sh
rel=`echo "$@" | sed -n 's/^r=r\([0-9]\+\)-[0-9]\+$/\1/p'`
cnt=`echo "$@" | sed -n 's/^r=r[0-9]\+-\([0-9]\+\)$/\1/p'`
repo=/sourceware/git/gcc.git

ret=
if [ -n "$rel" ]; then
  if [ -f /opt/rh/git19/enable ]; then
    . /opt/rh/git19/enable
  fi

  sha=`git --git-dir=$repo rev-parse --verify --quiet releases/gcc-$rel`
  if [ -z "$sha" ]; then
    sha=`git --git-dir=$repo rev-parse --verify --quiet master`
  fi
  if [ -n "$sha" ]; then
    num=`git --git-dir=$repo describe --all --match basepoints/gcc-$rel $sha 
2>/dev/null \
         | sed -n 
's,^tags/basepoints/gcc-[0-9]\+-\([0-9]\+\)-g[0-9a-f]*$,\1,p;s,^tags/basepoints/gcc-[0-9]\+$,0,p'`
    if [ -n "$num" ]; then
      num=`expr $num - $cnt`
      ret=`git --git-dir=$repo rev-parse --verify $sha~$num`
    fi
  fi
fi
if expr match "$ret" "[0-9a-f]\{7,40\}" > /dev/null; then
  echo 'Content-type: text/html'
  echo
  echo '<html>'
  echo '<meta http-equiv="Refresh" content="1; 
url=https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h='$ret'">'
  echo '</html>'
else
  echo 'Status: 400 Bad Request'
  echo 'Content-type: text/html'
  echo
  echo '<html>'
  echo '<head><title>400 Bad Request</title></head>'
  echo '<body>'
  echo '<h1>Error</h1>'
  echo '<p>Invalid argument or could not determine git revision.</p>'
  echo '</body>'
  echo '</html>'
fi

Reply via email to