##// END OF EJS Templates
highlight: convert text to local before passing to pygmentize (issue1341)...
Christian Ebert -
r7120:db755735 default
parent child Browse files
Show More
@@ -1,54 +1,57 b''
1 # highlight extension implementation file
1 # highlight extension implementation file
2 #
2 #
3 # The original module was split in an interface and an implementation
3 # The original module was split in an interface and an implementation
4 # file to defer pygments loading and speedup extension setup.
4 # file to defer pygments loading and speedup extension setup.
5
5
6 from mercurial import demandimport
6 from mercurial import demandimport
7 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__',])
7 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__',])
8
8
9 from mercurial import util
9 from mercurial import util
10 from mercurial.templatefilters import filters
10 from mercurial.templatefilters import filters
11
11
12 from pygments import highlight
12 from pygments import highlight
13 from pygments.util import ClassNotFound
13 from pygments.util import ClassNotFound
14 from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer
14 from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer
15 from pygments.formatters import HtmlFormatter
15 from pygments.formatters import HtmlFormatter
16
16
17 SYNTAX_CSS = ('\n<link rel="stylesheet" href="{url}highlightcss" '
17 SYNTAX_CSS = ('\n<link rel="stylesheet" href="{url}highlightcss" '
18 'type="text/css" />')
18 'type="text/css" />')
19
19
20 def pygmentize(field, fctx, style, tmpl):
20 def pygmentize(field, fctx, style, tmpl):
21
21
22 # append a <link ...> to the syntax highlighting css
22 # append a <link ...> to the syntax highlighting css
23 old_header = ''.join(tmpl('header'))
23 old_header = ''.join(tmpl('header'))
24 if SYNTAX_CSS not in old_header:
24 if SYNTAX_CSS not in old_header:
25 new_header = old_header + SYNTAX_CSS
25 new_header = old_header + SYNTAX_CSS
26 tmpl.cache['header'] = new_header
26 tmpl.cache['header'] = new_header
27
27
28 text = fctx.data()
28 text = fctx.data()
29 if util.binary(text):
29 if util.binary(text):
30 return
30 return
31
31
32 # avoid UnicodeDecodeError in pygments
33 text = util.tolocal(text)
34
32 # To get multi-line strings right, we can't format line-by-line
35 # To get multi-line strings right, we can't format line-by-line
33 try:
36 try:
34 lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
37 lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
35 encoding=util._encoding)
38 encoding=util._encoding)
36 except (ClassNotFound, ValueError):
39 except (ClassNotFound, ValueError):
37 try:
40 try:
38 lexer = guess_lexer(text[:1024], encoding=util._encoding)
41 lexer = guess_lexer(text[:1024], encoding=util._encoding)
39 except (ClassNotFound, ValueError):
42 except (ClassNotFound, ValueError):
40 lexer = TextLexer(encoding=util._encoding)
43 lexer = TextLexer(encoding=util._encoding)
41
44
42 formatter = HtmlFormatter(style=style, encoding=util._encoding)
45 formatter = HtmlFormatter(style=style, encoding=util._encoding)
43
46
44 colorized = highlight(text, lexer, formatter)
47 colorized = highlight(text, lexer, formatter)
45 # strip wrapping div
48 # strip wrapping div
46 colorized = colorized[:colorized.find('\n</pre>')]
49 colorized = colorized[:colorized.find('\n</pre>')]
47 colorized = colorized[colorized.find('<pre>')+5:]
50 colorized = colorized[colorized.find('<pre>')+5:]
48 coloriter = iter(colorized.splitlines())
51 coloriter = iter(colorized.splitlines())
49
52
50 filters['colorize'] = lambda x: coloriter.next()
53 filters['colorize'] = lambda x: coloriter.next()
51
54
52 oldl = tmpl.cache[field]
55 oldl = tmpl.cache[field]
53 newl = oldl.replace('line|escape', 'line|colorize')
56 newl = oldl.replace('line|escape', 'line|colorize')
54 tmpl.cache[field] = newl
57 tmpl.cache[field] = newl
@@ -1,82 +1,90 b''
1 #!/bin/sh
1 #!/bin/sh
2
2
3 "$TESTDIR/hghave" pygments || exit 80
3 "$TESTDIR/hghave" pygments || exit 80
4
4
5 cat <<EOF >> $HGRCPATH
5 cat <<EOF >> $HGRCPATH
6 [extensions]
6 [extensions]
7 hgext.highlight =
7 hgext.highlight =
8 [web]
8 [web]
9 pygments_style = friendly
9 pygments_style = friendly
10 EOF
10 EOF
11
11
12 hg init test
12 hg init test
13 cd test
13 cd test
14 cp $TESTDIR/get-with-headers.py ./
14 cp $TESTDIR/get-with-headers.py ./
15
16 # check for UnicodeDecodeError with iso-8859-1 file contents
17 python -c 'fp = open("isolatin", "w"); fp.write("h\xFCbsch\n"); fp.close();'
18
15 hg ci -Ama
19 hg ci -Ama
16
20
17 echo % hg serve
21 echo % hg serve
18 hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
22 hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
19 cat hg.pid >> $DAEMON_PIDS
23 cat hg.pid >> $DAEMON_PIDS
20
24
21 echo % hgweb filerevision, html
25 echo % hgweb filerevision, html
22 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \
26 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \
23 | sed "s/[0-9]* years ago/long ago/g" | sed "s/class=\"k\"/class=\"kn\"/g"
27 | sed "s/[0-9]* years ago/long ago/g" | sed "s/class=\"k\"/class=\"kn\"/g"
24
28
29 echo % hgweb filerevision, html
30 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/isolatin') \
31 | sed "s/[0-9]* years ago/long ago/g" | sed "s/class=\"k\"/class=\"kn\"/g"
32
25 echo % hgweb fileannotate, html
33 echo % hgweb fileannotate, html
26 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \
34 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \
27 | sed "s/[0-9]* years ago/long ago/g" | sed "s/class=\"k\"/class=\"kn\"/g"
35 | sed "s/[0-9]* years ago/long ago/g" | sed "s/class=\"k\"/class=\"kn\"/g"
28
36
29 echo % hgweb fileannotate, raw
37 echo % hgweb fileannotate, raw
30 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py?style=raw') \
38 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py?style=raw') \
31 | sed "s/test@//" > a
39 | sed "s/test@//" > a
32
40
33 echo "200 Script output follows" > b
41 echo "200 Script output follows" > b
34 echo "" >> b
42 echo "" >> b
35 echo "" >> b
43 echo "" >> b
36 hg annotate "get-with-headers.py" >> b
44 hg annotate "get-with-headers.py" >> b
37 echo "" >> b
45 echo "" >> b
38 echo "" >> b
46 echo "" >> b
39 echo "" >> b
47 echo "" >> b
40 echo "" >> b
48 echo "" >> b
41
49
42 diff -u b a
50 diff -u b a
43
51
44 echo
52 echo
45 echo % hgweb filerevision, raw
53 echo % hgweb filerevision, raw
46 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py?style=raw') \
54 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py?style=raw') \
47 > a
55 > a
48
56
49 echo "200 Script output follows" > b
57 echo "200 Script output follows" > b
50 echo "" >> b
58 echo "" >> b
51 hg cat get-with-headers.py >> b
59 hg cat get-with-headers.py >> b
52
60
53 diff -u b a
61 diff -u b a
54
62
55 echo
63 echo
56 echo % hgweb highlightcss friendly
64 echo % hgweb highlightcss friendly
57 "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
65 "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
58 head -n 4 out
66 head -n 4 out
59 rm out
67 rm out
60
68
61 echo % errors encountered
69 echo % errors encountered
62 cat errors.log
70 cat errors.log
63 kill `cat hg.pid`
71 kill `cat hg.pid`
64
72
65 # Change the pygments style
73 # Change the pygments style
66 cat > .hg/hgrc <<EOF
74 cat > .hg/hgrc <<EOF
67 [web]
75 [web]
68 pygments_style = fruity
76 pygments_style = fruity
69 EOF
77 EOF
70
78
71 echo % hg serve again
79 echo % hg serve again
72 hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
80 hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
73 cat hg.pid >> $DAEMON_PIDS
81 cat hg.pid >> $DAEMON_PIDS
74
82
75 echo % hgweb highlightcss fruity
83 echo % hgweb highlightcss fruity
76 "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
84 "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
77 head -n 4 out
85 head -n 4 out
78 rm out
86 rm out
79
87
80 echo % errors encountered
88 echo % errors encountered
81 cat errors.log
89 cat errors.log
82
90
@@ -1,149 +1,213 b''
1 adding get-with-headers.py
1 adding get-with-headers.py
2 adding isolatin
2 % hg serve
3 % hg serve
3 % hgweb filerevision, html
4 % hgweb filerevision, html
4 200 Script output follows
5 200 Script output follows
5
6
6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
7 <html>
8 <html>
8 <head>
9 <head>
9 <link rel="icon" href="/static/hgicon.png" type="image/png">
10 <link rel="icon" href="/static/hgicon.png" type="image/png">
10 <meta name="robots" content="index, nofollow" />
11 <meta name="robots" content="index, nofollow" />
11 <link rel="stylesheet" href="/static/style.css" type="text/css" />
12 <link rel="stylesheet" href="/static/style.css" type="text/css" />
12
13
13 <link rel="stylesheet" href="/highlightcss" type="text/css" />
14 <link rel="stylesheet" href="/highlightcss" type="text/css" />
14 <title>test:get-with-headers.py</title>
15 <title>test:get-with-headers.py</title>
15 </head>
16 </head>
16 <body>
17 <body>
17
18
18 <div class="buttons">
19 <div class="buttons">
19 <a href="/log/0">changelog</a>
20 <a href="/log/0">changelog</a>
20 <a href="/shortlog/0">shortlog</a>
21 <a href="/shortlog/0">shortlog</a>
21 <a href="/graph">graph</a>
22 <a href="/graph">graph</a>
22 <a href="/tags">tags</a>
23 <a href="/tags">tags</a>
23 <a href="/rev/53f07353b803">changeset</a>
24 <a href="/rev/7697c52ca9b0">changeset</a>
24 <a href="/file/53f07353b803/">files</a>
25 <a href="/file/7697c52ca9b0/">files</a>
25 <a href="/log/53f07353b803/get-with-headers.py">revisions</a>
26 <a href="/log/7697c52ca9b0/get-with-headers.py">revisions</a>
26 <a href="/annotate/53f07353b803/get-with-headers.py">annotate</a>
27 <a href="/annotate/7697c52ca9b0/get-with-headers.py">annotate</a>
27 <a href="/raw-file/53f07353b803/get-with-headers.py">raw</a>
28 <a href="/raw-file/7697c52ca9b0/get-with-headers.py">raw</a>
28 </div>
29 </div>
29
30
30 <h2>get-with-headers.py</h2>
31 <h2>get-with-headers.py</h2>
31
32
32 <table>
33 <table>
33 <tr>
34 <tr>
34 <td class="metatag">changeset 0:</td>
35 <td class="metatag">changeset 0:</td>
35 <td><a href="/rev/53f07353b803">53f07353b803</a></td></tr>
36 <td><a href="/rev/7697c52ca9b0">7697c52ca9b0</a></td></tr>
36
37
37
38
38 <tr>
39 <tr>
39 <td class="metatag">author:</td>
40 <td class="metatag">author:</td>
40 <td>&#116;&#101;&#115;&#116;</td></tr>
41 <td>&#116;&#101;&#115;&#116;</td></tr>
41 <tr>
42 <tr>
42 <td class="metatag">date:</td>
43 <td class="metatag">date:</td>
43 <td>Thu Jan 01 00:00:00 1970 +0000 (long ago)</td></tr>
44 <td>Thu Jan 01 00:00:00 1970 +0000 (long ago)</td></tr>
44 <tr>
45 <tr>
45 <td class="metatag">permissions:</td>
46 <td class="metatag">permissions:</td>
46 <td>-rwxr-xr-x</td></tr>
47 <td>-rwxr-xr-x</td></tr>
47 <tr>
48 <tr>
48 <td class="metatag">description:</td>
49 <td class="metatag">description:</td>
49 <td>a</td>
50 <td>a</td>
50 </tr>
51 </tr>
51 </table>
52 </table>
52
53
53 <pre>
54 <pre>
54 <div class="parity0"><a class="lineno" href="#l1" id="l1"> 1</a><span class="c">#!/usr/bin/env python</span></div><div class="parity1"><a class="lineno" href="#l2" id="l2"> 2</a></div><div class="parity0"><a class="lineno" href="#l3" id="l3"> 3</a><span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></div><div class="parity1"><a class="lineno" href="#l4" id="l4"> 4</a><span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></div><div class="parity0"><a class="lineno" href="#l5" id="l5"> 5</a></div><div class="parity1"><a class="lineno" href="#l6" id="l6"> 6</a><span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span></div><div class="parity0"><a class="lineno" href="#l7" id="l7"> 7</a></div><div class="parity1"><a class="lineno" href="#l8" id="l8"> 8</a><span class="kn">try</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l9" id="l9"> 9</a> <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></div><div class="parity1"><a class="lineno" href="#l10" id="l10"> 10</a> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity0"><a class="lineno" href="#l11" id="l11"> 11</a> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity1"><a class="lineno" href="#l12" id="l12"> 12</a><span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l13" id="l13"> 13</a> <span class="kn">pass</span></div><div class="parity1"><a class="lineno" href="#l14" id="l14"> 14</a></div><div class="parity0"><a class="lineno" href="#l15" id="l15"> 15</a><span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">3</span><span class="p">:]]</span></div><div class="parity1"><a class="lineno" href="#l16" id="l16"> 16</a><span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></div><div class="parity0"><a class="lineno" href="#l17" id="l17"> 17</a><span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">2</span><span class="p">])</span></div><div class="parity1"><a class="lineno" href="#l18" id="l18"> 18</a><span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></div><div class="parity0"><a class="lineno" href="#l19" id="l19"> 19</a><span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></div><div class="parity1"><a class="lineno" href="#l20" id="l20"> 20</a><span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l21" id="l21"> 21</a> <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></div><div class="parity1"><a class="lineno" href="#l22" id="l22"> 22</a> <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></div><div class="parity0"><a class="lineno" href="#l23" id="l23"> 23</a><span class="kn">print</span></div><div class="parity1"><a class="lineno" href="#l24" id="l24"> 24</a><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">())</span></div><div class="parity0"><a class="lineno" href="#l25" id="l25"> 25</a></div><div class="parity1"><a class="lineno" href="#l26" id="l26"> 26</a><span class="kn">if</span> <span class="mf">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mf">299</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l27" id="l27"> 27</a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span></div><div class="parity1"><a class="lineno" href="#l28" id="l28"> 28</a><span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span></div>
55 <div class="parity0"><a class="lineno" href="#l1" id="l1"> 1</a><span class="c">#!/usr/bin/env python</span></div><div class="parity1"><a class="lineno" href="#l2" id="l2"> 2</a></div><div class="parity0"><a class="lineno" href="#l3" id="l3"> 3</a><span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></div><div class="parity1"><a class="lineno" href="#l4" id="l4"> 4</a><span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></div><div class="parity0"><a class="lineno" href="#l5" id="l5"> 5</a></div><div class="parity1"><a class="lineno" href="#l6" id="l6"> 6</a><span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span></div><div class="parity0"><a class="lineno" href="#l7" id="l7"> 7</a></div><div class="parity1"><a class="lineno" href="#l8" id="l8"> 8</a><span class="kn">try</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l9" id="l9"> 9</a> <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></div><div class="parity1"><a class="lineno" href="#l10" id="l10"> 10</a> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity0"><a class="lineno" href="#l11" id="l11"> 11</a> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity1"><a class="lineno" href="#l12" id="l12"> 12</a><span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l13" id="l13"> 13</a> <span class="kn">pass</span></div><div class="parity1"><a class="lineno" href="#l14" id="l14"> 14</a></div><div class="parity0"><a class="lineno" href="#l15" id="l15"> 15</a><span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">3</span><span class="p">:]]</span></div><div class="parity1"><a class="lineno" href="#l16" id="l16"> 16</a><span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></div><div class="parity0"><a class="lineno" href="#l17" id="l17"> 17</a><span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">2</span><span class="p">])</span></div><div class="parity1"><a class="lineno" href="#l18" id="l18"> 18</a><span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></div><div class="parity0"><a class="lineno" href="#l19" id="l19"> 19</a><span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></div><div class="parity1"><a class="lineno" href="#l20" id="l20"> 20</a><span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l21" id="l21"> 21</a> <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></div><div class="parity1"><a class="lineno" href="#l22" id="l22"> 22</a> <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></div><div class="parity0"><a class="lineno" href="#l23" id="l23"> 23</a><span class="kn">print</span></div><div class="parity1"><a class="lineno" href="#l24" id="l24"> 24</a><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">())</span></div><div class="parity0"><a class="lineno" href="#l25" id="l25"> 25</a></div><div class="parity1"><a class="lineno" href="#l26" id="l26"> 26</a><span class="kn">if</span> <span class="mf">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mf">299</span><span class="p">:</span></div><div class="parity0"><a class="lineno" href="#l27" id="l27"> 27</a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span></div><div class="parity1"><a class="lineno" href="#l28" id="l28"> 28</a><span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span></div>
55 </pre>
56 </pre>
56
57
57
58
58 <div class="logo">
59 <div class="logo">
59 <a href="http://www.selenic.com/mercurial/">
60 <a href="http://www.selenic.com/mercurial/">
60 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
61 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
61 </div>
62 </div>
62
63
63 </body>
64 </body>
64 </html>
65 </html>
65
66
67 % hgweb filerevision, html
68 200 Script output follows
69
70 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
71 <html>
72 <head>
73 <link rel="icon" href="/static/hgicon.png" type="image/png">
74 <meta name="robots" content="index, nofollow" />
75 <link rel="stylesheet" href="/static/style.css" type="text/css" />
76
77 <link rel="stylesheet" href="/highlightcss" type="text/css" />
78 <title>test:isolatin</title>
79 </head>
80 <body>
81
82 <div class="buttons">
83 <a href="/log/0">changelog</a>
84 <a href="/shortlog/0">shortlog</a>
85 <a href="/graph">graph</a>
86 <a href="/tags">tags</a>
87 <a href="/rev/7697c52ca9b0">changeset</a>
88 <a href="/file/7697c52ca9b0/">files</a>
89 <a href="/log/7697c52ca9b0/isolatin">revisions</a>
90 <a href="/annotate/7697c52ca9b0/isolatin">annotate</a>
91 <a href="/raw-file/7697c52ca9b0/isolatin">raw</a>
92 </div>
93
94 <h2>isolatin</h2>
95
96 <table>
97 <tr>
98 <td class="metatag">changeset 0:</td>
99 <td><a href="/rev/7697c52ca9b0">7697c52ca9b0</a></td></tr>
100
101
102 <tr>
103 <td class="metatag">author:</td>
104 <td>&#116;&#101;&#115;&#116;</td></tr>
105 <tr>
106 <td class="metatag">date:</td>
107 <td>Thu Jan 01 00:00:00 1970 +0000 (long ago)</td></tr>
108 <tr>
109 <td class="metatag">permissions:</td>
110 <td>-rw-r--r--</td></tr>
111 <tr>
112 <td class="metatag">description:</td>
113 <td>a</td>
114 </tr>
115 </table>
116
117 <pre>
118 <div class="parity0"><a class="lineno" href="#l1" id="l1"> 1</a>h?bsch</div>
119 </pre>
120
121
122 <div class="logo">
123 <a href="http://www.selenic.com/mercurial/">
124 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
125 </div>
126
127 </body>
128 </html>
129
66 % hgweb fileannotate, html
130 % hgweb fileannotate, html
67 200 Script output follows
131 200 Script output follows
68
132
69 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
133 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
70 <html>
134 <html>
71 <head>
135 <head>
72 <link rel="icon" href="/static/hgicon.png" type="image/png">
136 <link rel="icon" href="/static/hgicon.png" type="image/png">
73 <meta name="robots" content="index, nofollow" />
137 <meta name="robots" content="index, nofollow" />
74 <link rel="stylesheet" href="/static/style.css" type="text/css" />
138 <link rel="stylesheet" href="/static/style.css" type="text/css" />
75
139
76 <link rel="stylesheet" href="/highlightcss" type="text/css" />
140 <link rel="stylesheet" href="/highlightcss" type="text/css" />
77 <title>test: get-with-headers.py annotate</title>
141 <title>test: get-with-headers.py annotate</title>
78 </head>
142 </head>
79 <body>
143 <body>
80
144
81 <div class="buttons">
145 <div class="buttons">
82 <a href="/log/0">changelog</a>
146 <a href="/log/0">changelog</a>
83 <a href="/shortlog/0">shortlog</a>
147 <a href="/shortlog/0">shortlog</a>
84 <a href="/graph">graph</a>
148 <a href="/graph">graph</a>
85 <a href="/tags">tags</a>
149 <a href="/tags">tags</a>
86 <a href="/rev/53f07353b803">changeset</a>
150 <a href="/rev/7697c52ca9b0">changeset</a>
87 <a href="/file/53f07353b803/">files</a>
151 <a href="/file/7697c52ca9b0/">files</a>
88 <a href="/file/53f07353b803/get-with-headers.py">file</a>
152 <a href="/file/7697c52ca9b0/get-with-headers.py">file</a>
89 <a href="/log/53f07353b803/get-with-headers.py">revisions</a>
153 <a href="/log/7697c52ca9b0/get-with-headers.py">revisions</a>
90 <a href="/raw-annotate/53f07353b803/get-with-headers.py">raw</a>
154 <a href="/raw-annotate/7697c52ca9b0/get-with-headers.py">raw</a>
91 </div>
155 </div>
92
156
93 <h2>Annotate get-with-headers.py</h2>
157 <h2>Annotate get-with-headers.py</h2>
94
158
95 <table>
159 <table>
96 <tr>
160 <tr>
97 <td class="metatag">changeset 0:</td>
161 <td class="metatag">changeset 0:</td>
98 <td><a href="/rev/53f07353b803">53f07353b803</a></td></tr>
162 <td><a href="/rev/7697c52ca9b0">7697c52ca9b0</a></td></tr>
99
163
100
164
101 <tr>
165 <tr>
102 <td class="metatag">author:</td>
166 <td class="metatag">author:</td>
103 <td>&#116;&#101;&#115;&#116;</td></tr>
167 <td>&#116;&#101;&#115;&#116;</td></tr>
104 <tr>
168 <tr>
105 <td class="metatag">date:</td>
169 <td class="metatag">date:</td>
106 <td>Thu Jan 01 00:00:00 1970 +0000 (long ago)</td>
170 <td>Thu Jan 01 00:00:00 1970 +0000 (long ago)</td>
107 </tr>
171 </tr>
108 <tr>
172 <tr>
109 <td class="metatag">permissions:</td>
173 <td class="metatag">permissions:</td>
110 <td>-rwxr-xr-x</td>
174 <td>-rwxr-xr-x</td>
111 </tr>
175 </tr>
112 <tr>
176 <tr>
113 <td class="metatag">description:</td>
177 <td class="metatag">description:</td>
114 <td>a</td>
178 <td>a</td>
115 </tr>
179 </tr>
116 </table>
180 </table>
117
181
118 <br/>
182 <br/>
119
183
120 <table cellspacing="0" cellpadding="0">
184 <table cellspacing="0" cellpadding="0">
121 <tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l1" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l1" id="l1"> 1</a></td><td><pre><span class="c">#!/usr/bin/env python</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l2" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l2" id="l2"> 2</a></td><td><pre></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l3" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l3" id="l3"> 3</a></td><td><pre><span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l4" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l4" id="l4"> 4</a></td><td><pre><span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l5" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l5" id="l5"> 5</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l6" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l6" id="l6"> 6</a></td><td><pre><span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l7" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l7" id="l7"> 7</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l8" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l8" id="l8"> 8</a></td><td><pre><span class="kn">try</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l9" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l9" id="l9"> 9</a></td><td><pre> <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l10" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l10" id="l10"> 10</a></td><td><pre> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l11" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l11" id="l11"> 11</a></td><td><pre> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l12" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l12" id="l12"> 12</a></td><td><pre><span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l13" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l13" id="l13"> 13</a></td><td><pre> <span class="kn">pass</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l14" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l14" id="l14"> 14</a></td><td><pre></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l15" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l15" id="l15"> 15</a></td><td><pre><span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">3</span><span class="p">:]]</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l16" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l16" id="l16"> 16</a></td><td><pre><span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l17" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l17" id="l17"> 17</a></td><td><pre><span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">2</span><span class="p">])</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l18" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l18" id="l18"> 18</a></td><td><pre><span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l19" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l19" id="l19"> 19</a></td><td><pre><span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l20" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l20" id="l20"> 20</a></td><td><pre><span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l21" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l21" id="l21"> 21</a></td><td><pre> <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l22" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l22" id="l22"> 22</a></td><td><pre> <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l23" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l23" id="l23"> 23</a></td><td><pre><span class="kn">print</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l24" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l24" id="l24"> 24</a></td><td><pre><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">())</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l25" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l25" id="l25"> 25</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l26" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l26" id="l26"> 26</a></td><td><pre><span class="kn">if</span> <span class="mf">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mf">299</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l27" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l27" id="l27"> 27</a></td><td><pre> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/53f07353b803/get-with-headers.py#l28" title="53f07353b803: a">test@0</a></td><td><a class="lineno" href="#l28" id="l28"> 28</a></td><td><pre><span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span></pre></td></tr>
185 <tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l1" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l1" id="l1"> 1</a></td><td><pre><span class="c">#!/usr/bin/env python</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l2" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l2" id="l2"> 2</a></td><td><pre></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l3" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l3" id="l3"> 3</a></td><td><pre><span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l4" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l4" id="l4"> 4</a></td><td><pre><span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l5" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l5" id="l5"> 5</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l6" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l6" id="l6"> 6</a></td><td><pre><span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l7" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l7" id="l7"> 7</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l8" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l8" id="l8"> 8</a></td><td><pre><span class="kn">try</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l9" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l9" id="l9"> 9</a></td><td><pre> <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l10" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l10" id="l10"> 10</a></td><td><pre> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l11" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l11" id="l11"> 11</a></td><td><pre> <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l12" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l12" id="l12"> 12</a></td><td><pre><span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l13" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l13" id="l13"> 13</a></td><td><pre> <span class="kn">pass</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l14" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l14" id="l14"> 14</a></td><td><pre></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l15" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l15" id="l15"> 15</a></td><td><pre><span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">3</span><span class="p">:]]</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l16" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l16" id="l16"> 16</a></td><td><pre><span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l17" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l17" id="l17"> 17</a></td><td><pre><span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">2</span><span class="p">])</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l18" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l18" id="l18"> 18</a></td><td><pre><span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l19" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l19" id="l19"> 19</a></td><td><pre><span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l20" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l20" id="l20"> 20</a></td><td><pre><span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l21" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l21" id="l21"> 21</a></td><td><pre> <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l22" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l22" id="l22"> 22</a></td><td><pre> <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l23" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l23" id="l23"> 23</a></td><td><pre><span class="kn">print</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l24" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l24" id="l24"> 24</a></td><td><pre><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">())</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l25" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l25" id="l25"> 25</a></td><td><pre></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l26" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l26" id="l26"> 26</a></td><td><pre><span class="kn">if</span> <span class="mf">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mf">299</span><span class="p">:</span></pre></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l27" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l27" id="l27"> 27</a></td><td><pre> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span></pre></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7697c52ca9b0/get-with-headers.py#l28" title="7697c52ca9b0: a">test@0</a></td><td><a class="lineno" href="#l28" id="l28"> 28</a></td><td><pre><span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span></pre></td></tr>
122 </table>
186 </table>
123
187
124
188
125 <div class="logo">
189 <div class="logo">
126 <a href="http://www.selenic.com/mercurial/">
190 <a href="http://www.selenic.com/mercurial/">
127 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
191 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
128 </div>
192 </div>
129
193
130 </body>
194 </body>
131 </html>
195 </html>
132
196
133 % hgweb fileannotate, raw
197 % hgweb fileannotate, raw
134
198
135 % hgweb filerevision, raw
199 % hgweb filerevision, raw
136
200
137 % hgweb highlightcss friendly
201 % hgweb highlightcss friendly
138 200 Script output follows
202 200 Script output follows
139
203
140 /* pygments_style = friendly */
204 /* pygments_style = friendly */
141
205
142 % errors encountered
206 % errors encountered
143 % hg serve again
207 % hg serve again
144 % hgweb highlightcss fruity
208 % hgweb highlightcss fruity
145 200 Script output follows
209 200 Script output follows
146
210
147 /* pygments_style = fruity */
211 /* pygments_style = fruity */
148
212
149 % errors encountered
213 % errors encountered
General Comments 0
You need to be logged in to leave comments. Login now