D2773: hgweb: remove support for short query string based aliases (BC)
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)
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)
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)
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)
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 =