Mercurial > hg
view tests/test-status-rev.t @ 23409:dc4d2cd3aa3e stable
hgweb: send proper HTTP response after uncaught exception
This patch fixes a bug where hgweb would send an incomplete HTTP
response.
If an uncaught exception is raised when hgweb is processing a request,
hgweb attempts to send a generic error response and log that exception.
The server defaults to chunked transfer coding. If an uncaught exception
occurred, it was sending the error response string / chunk properly.
However, RFC 7230 Section 4.1 mandates a 0 size last chunk be sent to
indicate end of the entity body. hgweb was failing to send this last
chunk. As a result, properly written HTTP clients would assume more data
was coming and they would likely time out waiting for another chunk to
arrive.
Mercurial's own test harness was paving over the improper HTTP behavior
by not attempting to read the response body if the status code was 500.
This incorrect workaround was added in ba6577a19656 and has been removed
with this patch.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 28 Nov 2014 10:59:02 -0800 |
parents | eeaed3d2b004 |
children | daa73289dd2a |
line wrap: on
line source
Tests of 'hg status --rev <rev>' to make sure status between <rev> and '.' get combined correctly with the dirstate status. Sets up a history for a number of files where the filename describes the file's history. The first two letters of the filename describe the first two commits; the third letter describes the dirstate for the file. For example, a file called 'amr' was added in the first commit, modified in the second and then removed in the dirstate. These codes are used for commits: x: does not exist a: added c: clean m: modified r: removed These codes are used for dirstate: d: in dirstate, but deleted from disk f: removed from dirstate, but file exists (forgotten) r: removed from dirstate and disk q: added, but deleted from disk (q for q-rious?) u: not in dirstate, but file exists (unknown) $ hg init $ touch .hgignore $ hg add .hgignore $ hg commit -m initial First letter: first commit $ echo a >acc $ echo a >acd $ echo a >acf $ echo a >acm $ echo a >acr $ echo a >amc $ echo a >amd $ echo a >amf $ echo a >amm $ echo a >amr $ echo a >ara $ echo a >arq $ echo a >aru $ hg commit -Aqm first Second letter: second commit $ echo b >xad $ echo b >xaf $ echo b >xam $ echo b >xar $ echo b >amc $ echo b >amd $ echo b >amf $ echo b >amm $ echo b >amr $ hg rm ara $ hg rm arq $ hg rm aru $ hg commit -Aqm second Third letter: dirstate $ echo c >acm $ echo c >amm $ echo c >xam $ echo c >ara && hg add ara $ echo c >arq && hg add arq && rm arq $ echo c >aru $ hg rm amr $ hg rm acr $ hg rm xar $ rm acd $ rm amd $ rm xad $ hg forget acf $ hg forget amf $ hg forget xaf $ touch xxu Status compared to one revision back $ hg status -A --rev 1 acc C acc BROKEN: file appears twice; should be '!' $ hg status -A --rev 1 acd ! acd C acd $ hg status -A --rev 1 acf R acf $ hg status -A --rev 1 acm M acm $ hg status -A --rev 1 acr R acr $ hg status -A --rev 1 amc M amc BROKEN: file appears twice; should be '!' $ hg status -A --rev 1 amd ! amd C amd $ hg status -A --rev 1 amf R amf $ hg status -A --rev 1 amm M amm $ hg status -A --rev 1 amr R amr $ hg status -A --rev 1 ara M ara BROKEN: file appears twice; should be '!' $ hg status -A --rev 1 arq R arq ! arq $ hg status -A --rev 1 aru R aru $ hg status -A --rev 1 xad ! xad $ hg status -A --rev 1 xaf $ hg status -A --rev 1 xam A xam $ hg status -A --rev 1 xar $ hg status -A --rev 1 xxu ? xxu Status compared to two revisions back $ hg status -A --rev 0 acc A acc $ hg status -A --rev 0 acd ! acd BROKEN: file exists, so should be listed (as '?') $ hg status -A --rev 0 acf $ hg status -A --rev 0 acm A acm $ hg status -A --rev 0 acr $ hg status -A --rev 0 amc A amc $ hg status -A --rev 0 amd ! amd BROKEN: file exists, so should be listed (as '?') $ hg status -A --rev 0 amf $ hg status -A --rev 0 amm A amm $ hg status -A --rev 0 amr $ hg status -A --rev 0 ara A ara $ hg status -A --rev 0 arq ! arq $ hg status -A --rev 0 aru ? aru $ hg status -A --rev 0 xad ! xad BROKEN: file exists, so should be listed (as '?') $ hg status -A --rev 0 xaf $ hg status -A --rev 0 xam A xam $ hg status -A --rev 0 xar