D2773: hgweb: remove support for short query string based aliases (BC)

2018-03-12 Thread indygreg (Gregory Szorc)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG422be99519e5: hgweb: remove support for short query string 
based aliases (BC) (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2773?vs=6835=6911

REVISION DETAIL
  https://phab.mercurial-scm.org/D2773

AFFECTED FILES
  mercurial/hgweb/request.py
  tests/test-hgweb-raw.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-raw.t b/tests/test-hgweb-raw.t
--- a/tests/test-hgweb-raw.t
+++ b/tests/test-hgweb-raw.t
@@ -17,7 +17,7 @@
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
 
   $ killdaemons.py hg.pid
 
@@ -32,14 +32,14 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ rm access.log error.log
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \
   > --config web.guessmime=True
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
   $ killdaemons.py hg.pid
 
   $ cat getoutput.txt
@@ -53,6 +53,6 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ cd ..
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -27,37 +27,6 @@
 util,
 )
 
-shortcuts = {
-'cl': [('cmd', ['changelog']), ('rev', None)],
-'sl': [('cmd', ['shortlog']), ('rev', None)],
-'cs': [('cmd', ['changeset']), ('node', None)],
-'f': [('cmd', ['file']), ('filenode', None)],
-'fl': [('cmd', ['filelog']), ('filenode', None)],
-'fd': [('cmd', ['filediff']), ('node', None)],
-'fa': [('cmd', ['annotate']), ('filenode', None)],
-'mf': [('cmd', ['manifest']), ('manifest', None)],
-'ca': [('cmd', ['archive']), ('node', None)],
-'tags': [('cmd', ['tags'])],
-'tip': [('cmd', ['changeset']), ('node', ['tip'])],
-'static': [('cmd', ['static']), ('file', None)]
-}
-
-def normalize(form):
-# first expand the shortcuts
-for k in shortcuts:
-if k in form:
-for name, value in shortcuts[k]:
-if value is None:
-value = form[k]
-form[name] = value
-del form[k]
-# And strip the values
-bytesform = {}
-for k, v in form.iteritems():
-bytesform[pycompat.bytesurl(k)] = [
-pycompat.bytesurl(i.strip()) for i in v]
-return bytesform
-
 @attr.s(frozen=True)
 class parsedrequest(object):
 """Represents a parsed WSGI request.
@@ -258,7 +227,7 @@
 self.run_once = wsgienv[r'wsgi.run_once']
 self.env = wsgienv
 self.req = parserequestfromenv(wsgienv, inp)
-self.form = normalize(self.req.querystringdict)
+self.form = self.req.querystringdict
 self._start_response = start_response
 self.server_write = None
 self.headers = []



To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2773: hgweb: remove support for short query string based aliases (BC)

2018-03-10 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 6835.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2773?vs=6820=6835

REVISION DETAIL
  https://phab.mercurial-scm.org/D2773

AFFECTED FILES
  mercurial/hgweb/request.py
  tests/test-hgweb-raw.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-raw.t b/tests/test-hgweb-raw.t
--- a/tests/test-hgweb-raw.t
+++ b/tests/test-hgweb-raw.t
@@ -17,7 +17,7 @@
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
 
   $ killdaemons.py hg.pid
 
@@ -32,14 +32,14 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ rm access.log error.log
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \
   > --config web.guessmime=True
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
   $ killdaemons.py hg.pid
 
   $ cat getoutput.txt
@@ -53,6 +53,6 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ cd ..
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -27,37 +27,6 @@
 util,
 )
 
-shortcuts = {
-'cl': [('cmd', ['changelog']), ('rev', None)],
-'sl': [('cmd', ['shortlog']), ('rev', None)],
-'cs': [('cmd', ['changeset']), ('node', None)],
-'f': [('cmd', ['file']), ('filenode', None)],
-'fl': [('cmd', ['filelog']), ('filenode', None)],
-'fd': [('cmd', ['filediff']), ('node', None)],
-'fa': [('cmd', ['annotate']), ('filenode', None)],
-'mf': [('cmd', ['manifest']), ('manifest', None)],
-'ca': [('cmd', ['archive']), ('node', None)],
-'tags': [('cmd', ['tags'])],
-'tip': [('cmd', ['changeset']), ('node', ['tip'])],
-'static': [('cmd', ['static']), ('file', None)]
-}
-
-def normalize(form):
-# first expand the shortcuts
-for k in shortcuts:
-if k in form:
-for name, value in shortcuts[k]:
-if value is None:
-value = form[k]
-form[name] = value
-del form[k]
-# And strip the values
-bytesform = {}
-for k, v in form.iteritems():
-bytesform[pycompat.bytesurl(k)] = [
-pycompat.bytesurl(i.strip()) for i in v]
-return bytesform
-
 @attr.s(frozen=True)
 class parsedrequest(object):
 """Represents a parsed WSGI request.
@@ -258,7 +227,7 @@
 self.run_once = wsgienv[r'wsgi.run_once']
 self.env = wsgienv
 self.req = parserequestfromenv(wsgienv, inp)
-self.form = normalize(self.req.querystringdict)
+self.form = self.req.querystringdict
 self._start_response = start_response
 self.server_write = None
 self.headers = []



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2773: hgweb: remove support for short query string based aliases (BC)

2018-03-09 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 6820.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2773?vs=6818=6820

REVISION DETAIL
  https://phab.mercurial-scm.org/D2773

AFFECTED FILES
  mercurial/hgweb/request.py
  tests/test-hgweb-raw.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-raw.t b/tests/test-hgweb-raw.t
--- a/tests/test-hgweb-raw.t
+++ b/tests/test-hgweb-raw.t
@@ -17,7 +17,7 @@
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
 
   $ killdaemons.py hg.pid
 
@@ -32,14 +32,14 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ rm access.log error.log
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \
   > --config web.guessmime=True
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
   $ killdaemons.py hg.pid
 
   $ cat getoutput.txt
@@ -53,6 +53,6 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ cd ..
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -27,37 +27,6 @@
 util,
 )
 
-shortcuts = {
-'cl': [('cmd', ['changelog']), ('rev', None)],
-'sl': [('cmd', ['shortlog']), ('rev', None)],
-'cs': [('cmd', ['changeset']), ('node', None)],
-'f': [('cmd', ['file']), ('filenode', None)],
-'fl': [('cmd', ['filelog']), ('filenode', None)],
-'fd': [('cmd', ['filediff']), ('node', None)],
-'fa': [('cmd', ['annotate']), ('filenode', None)],
-'mf': [('cmd', ['manifest']), ('manifest', None)],
-'ca': [('cmd', ['archive']), ('node', None)],
-'tags': [('cmd', ['tags'])],
-'tip': [('cmd', ['changeset']), ('node', ['tip'])],
-'static': [('cmd', ['static']), ('file', None)]
-}
-
-def normalize(form):
-# first expand the shortcuts
-for k in shortcuts:
-if k in form:
-for name, value in shortcuts[k]:
-if value is None:
-value = form[k]
-form[name] = value
-del form[k]
-# And strip the values
-bytesform = {}
-for k, v in form.iteritems():
-bytesform[pycompat.bytesurl(k)] = [
-pycompat.bytesurl(i.strip()) for i in v]
-return bytesform
-
 @attr.s(frozen=True)
 class parsedrequest(object):
 """Represents a parsed WSGI request.
@@ -258,7 +227,7 @@
 self.run_once = wsgienv[r'wsgi.run_once']
 self.env = wsgienv
 self.req = parserequestfromenv(wsgienv, inp)
-self.form = normalize(self.req.querystringdict)
+self.form = self.req.querystringdict
 self._start_response = start_response
 self.server_write = None
 self.headers = []



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2773: hgweb: remove support for short query string based aliases (BC)

2018-03-09 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 6818.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2773?vs=6817=6818

REVISION DETAIL
  https://phab.mercurial-scm.org/D2773

AFFECTED FILES
  mercurial/hgweb/request.py
  tests/test-hgweb-raw.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-raw.t b/tests/test-hgweb-raw.t
--- a/tests/test-hgweb-raw.t
+++ b/tests/test-hgweb-raw.t
@@ -17,7 +17,7 @@
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
 
   $ killdaemons.py hg.pid
 
@@ -32,14 +32,14 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ rm access.log error.log
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \
   > --config web.guessmime=True
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
   $ killdaemons.py hg.pid
 
   $ cat getoutput.txt
@@ -53,6 +53,6 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 - (glob)
 
   $ cd ..
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -28,37 +28,6 @@
 util,
 )
 
-shortcuts = {
-'cl': [('cmd', ['changelog']), ('rev', None)],
-'sl': [('cmd', ['shortlog']), ('rev', None)],
-'cs': [('cmd', ['changeset']), ('node', None)],
-'f': [('cmd', ['file']), ('filenode', None)],
-'fl': [('cmd', ['filelog']), ('filenode', None)],
-'fd': [('cmd', ['filediff']), ('node', None)],
-'fa': [('cmd', ['annotate']), ('filenode', None)],
-'mf': [('cmd', ['manifest']), ('manifest', None)],
-'ca': [('cmd', ['archive']), ('node', None)],
-'tags': [('cmd', ['tags'])],
-'tip': [('cmd', ['changeset']), ('node', ['tip'])],
-'static': [('cmd', ['static']), ('file', None)]
-}
-
-def normalize(form):
-# first expand the shortcuts
-for k in shortcuts:
-if k in form:
-for name, value in shortcuts[k]:
-if value is None:
-value = form[k]
-form[name] = value
-del form[k]
-# And strip the values
-bytesform = {}
-for k, v in form.iteritems():
-bytesform[pycompat.bytesurl(k)] = [
-pycompat.bytesurl(i.strip()) for i in v]
-return bytesform
-
 @attr.s(frozen=True)
 class parsedrequest(object):
 """Represents a parsed WSGI request.
@@ -311,7 +280,7 @@
 self.run_once = wsgienv[r'wsgi.run_once']
 self.env = wsgienv
 self.req = parserequestfromenv(wsgienv, inp)
-self.form = normalize(self.req.params)
+self.form = self.req.params
 self._start_response = start_response
 self.server_write = None
 self.headers = []



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2773: hgweb: remove support for short query string based aliases (BC)

2018-03-09 Thread indygreg (Gregory Szorc)
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Form data exposed by hgweb is post-processed to expand certain
  shortcuts. For example, URLs with "?cs=@" is essentially expanded to
  "?cmd=changeset=@". And the URL router treats this the same
  as "/changeset/@".
  
  These shortcuts were initially added in 2005 in 
https://phab.mercurial-scm.org/rHG34cb3957d875ce3341c0ec4b86f016a60aded698 and
  https://phab.mercurial-scm.org/rHG964baa35faf8218650d412581f0567eb41ae1ee9. 
They have rarely been touched in the last decade (just
  moving code around a bit).
  
  We have almost no test coverage of this feature. AFAICT no templates
  reference URLs of this form. I even looked at the initial version
  of paper and coal from ~2008 and they use the "/command/params" URL
  form and not these shortcuts.
  
  Furthermore, I couldn't even get some shortcuts to work! For example,
  "?sl=@" attempts to do a revision search instead of showing shortlog
  starting at revision @. Maybe I'm just doing it wrong?
  
  Because this is ancient, mostly untested code, there is a migration
  path to something better, and because anyone passionate enough to
  preserve URLs can install URL redirects, let's nuke the feature.
  
  .. bc::
  
Query string shorts in hgweb like ``?cs=@`` have been removed. Use
URLs of the form ``/:cmd`` instead.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2773

AFFECTED FILES
  mercurial/hgweb/request.py
  tests/test-hgweb-raw.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-raw.t b/tests/test-hgweb-raw.t
--- a/tests/test-hgweb-raw.t
+++ b/tests/test-hgweb-raw.t
@@ -17,7 +17,7 @@
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
 
   $ killdaemons.py hg.pid
 
@@ -32,14 +32,14 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 -
 
   $ rm access.log error.log
   $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \
   > --config web.guessmime=True
 
   $ cat hg.pid >> $DAEMON_PIDS
-  $ (get-with-headers.py localhost:$HGPORT 
'?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw' content-type 
content-length content-disposition) >getoutput.txt
+  $ (get-with-headers.py localhost:$HGPORT 
'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length 
content-disposition) >getoutput.txt
   $ killdaemons.py hg.pid
 
   $ cat getoutput.txt
@@ -53,6 +53,6 @@
   It is very boring to read, but computers don't
   care about things like that.
   $ cat access.log error.log
-  $LOCALIP - - [*] "GET /?f=bf0ff59095c9;file=sub/some%20text%25.txt;style=raw 
HTTP/1.1" 200 - (glob)
+  $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt 
HTTP/1.1" 200 -
 
   $ cd ..
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -28,37 +28,6 @@
 util,
 )
 
-shortcuts = {
-'cl': [('cmd', ['changelog']), ('rev', None)],
-'sl': [('cmd', ['shortlog']), ('rev', None)],
-'cs': [('cmd', ['changeset']), ('node', None)],
-'f': [('cmd', ['file']), ('filenode', None)],
-'fl': [('cmd', ['filelog']), ('filenode', None)],
-'fd': [('cmd', ['filediff']), ('node', None)],
-'fa': [('cmd', ['annotate']), ('filenode', None)],
-'mf': [('cmd', ['manifest']), ('manifest', None)],
-'ca': [('cmd', ['archive']), ('node', None)],
-'tags': [('cmd', ['tags'])],
-'tip': [('cmd', ['changeset']), ('node', ['tip'])],
-'static': [('cmd', ['static']), ('file', None)]
-}
-
-def normalize(form):
-# first expand the shortcuts
-for k in shortcuts:
-if k in form:
-for name, value in shortcuts[k]:
-if value is None:
-value = form[k]
-form[name] = value
-del form[k]
-# And strip the values
-bytesform = {}
-for k, v in form.iteritems():
-bytesform[pycompat.bytesurl(k)] = [
-pycompat.bytesurl(i.strip()) for i in v]
-return bytesform
-
 @attr.s(frozen=True)
 class parsedrequest(object):
 """Represents a parsed WSGI request.
@@ -311,7 +280,7 @@
 self.run_once = wsgienv[r'wsgi.run_once']
 self.env = wsgienv
 self.req = parserequestfromenv(wsgienv, inp)
-self.form =