# Source: https://git.ao2.it/gitweb_cgit_migration.git # # Redirects mapping gitweb -> cgit # Inspired from: http://www.clearchain.com/blog/posts/cgit-upgrade-gitweb-retired # # Gitweb uses get targets seperated by ; # # /?...;...;... # # p = Project # a = Action like ( # blob, # blob_plain, # commitdiff, # commit, # history, # log, # rss|atom, # shortlog, # summary, # tag, # tree, # snapshot # ) # h = SHA Hash # hb= SHA Hash Tree Base # f= file/dir # sf= snapshot format # # Cgit uses the following: # # /project/action/?... # # action ( commit, log, diff, tree, tag, patch ) # # id = SHA Hash # id2 = SHA Hash # h = head # # Translation rules # # Project is a straight redirect # --- # /?p=(.+)\.git; https://%{SERVER_NAME}/$1/ # # Action requires a mapping # --- # a=(blob|tree) /tree/ # a=(blobdiff|commitdiff) /diff/ # a=commit /commit/ # a=(summary) / # a=(shortlog|log|history) /log/ # a=tag /tag/ # a=blob_plain /blob/ # a=rss|atom /atom # # Targets require mapping # --- # h=(.+) id=$1 # f=(.+) /$1 # hb=(.+) id2=$1 # # Now putting it all together # # Changed to must match URI '/git/' using all gitweb details in the query! # Allowing to re-use /git/ for cgit, however we use /cgit/ as target for efficiency # RewriteEngine On #RewriteLog /tmp/rewrite.log #RewriteLogLevel 5 # blob RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;h=(.+);hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%5?id=%3;id2=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%4?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+);h=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3?id=%5 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+);h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3 [R,L,NE] # tree RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;h=(.+);hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%5?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%4?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;f=(.+);h=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3?id=%5 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;f=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/%3?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;h=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree;hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tree RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tree/? [R,L,NE] # commitdiff RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blobdiff;h=(.+);hp=(.+);hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/diff/%6?id2=%4;id=%3;id3=%5 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=commitdiff;h=(.+);hp=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/diff/?id=%4;id2=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=commitdiff;h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/diff/?id=%3 [R,L,NE] # commit RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=commit;h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/commit/?id=%3 [R,L,NE] # summary RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=summary RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/? [R,L,NE] # shortlog RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=shortlog;h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=shortlog RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/? [R,L,NE] # log RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=log;h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=log RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log? [R,L,NE] # history RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;h=(.+);hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/%5?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;f=(.+);h=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/%3?id=%4;id2=%5 [R,L,NE] #RewriteBase "/git/" #RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+):/(.+) #RewriteRule ^.*$ https://cgit.openezx.org/%1.git/log/%4?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;f=(.+);h=(.+) RewriteRule ^.*$ https://cgit.openezx.org/%1.git/log/%3?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;h=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/?id=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;hb=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/%4?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=history;hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/log/?id=%3 [R,L,NE] # tag RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tag;h=refs/tags/(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tag/?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=tag;h=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/tag/?id=%3 [R,L,NE] # blob_plain RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;h=(.+);f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/plain/%4?id=%3 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;f=(.+);hb=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/plain/%3?id2=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;f=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/plain/%3 [R,L,NE] # rss|atom RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=(rss|atom);h=refsheads/(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/atom?h=%4 [R,L,NE] RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=(rss|atom) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/atom? [R,L,NE] # snapshot RewriteBase "/git/" RewriteCond %{query_string} p=(.+)(\.git);a=snapshot;h=(.+);sf=(.+) RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/snapshot/%3.tar.gz [R,L,NE] # Fail safes incase nothing above matches, try at least to put the person in the project RewriteBase "/git/" RewriteCond %{query_string} p=(.+)\.git.* RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/%1.git/? [R,L,NE] # Or else in the root of cgit RewriteBase "/git/" RewriteRule ^.*$ https://%{SERVER_NAME}/cgit/ [R,L,NE]