Show More
@@ -428,7 +428,10 b' class hgwebdir(object):' | |||||
428 | uenv.iteritems()} |
|
428 | uenv.iteritems()} | |
429 | req = requestmod.parserequestfromenv( |
|
429 | req = requestmod.parserequestfromenv( | |
430 | uenv, reponame=virtualrepo, |
|
430 | uenv, reponame=virtualrepo, | |
431 |
altbaseurl=self.ui.config('web', 'baseurl') |
|
431 | altbaseurl=self.ui.config('web', 'baseurl'), | |
|
432 | # Reuse wrapped body file object otherwise state | |||
|
433 | # tracking can get confused. | |||
|
434 | bodyfh=req.bodyfh) | |||
432 | try: |
|
435 | try: | |
433 | # ensure caller gets private copy of ui |
|
436 | # ensure caller gets private copy of ui | |
434 | repo = hg.repository(self.ui.copy(), real) |
|
437 | repo = hg.repository(self.ui.copy(), real) |
@@ -124,7 +124,7 b' class parsedrequest(object):' | |||||
124 | # WSGI environment dict, unmodified. |
|
124 | # WSGI environment dict, unmodified. | |
125 | rawenv = attr.ib() |
|
125 | rawenv = attr.ib() | |
126 |
|
126 | |||
127 | def parserequestfromenv(env, reponame=None, altbaseurl=None): |
|
127 | def parserequestfromenv(env, reponame=None, altbaseurl=None, bodyfh=None): | |
128 | """Parse URL components from environment variables. |
|
128 | """Parse URL components from environment variables. | |
129 |
|
129 | |||
130 | WSGI defines request attributes via environment variables. This function |
|
130 | WSGI defines request attributes via environment variables. This function | |
@@ -144,6 +144,9 b' def parserequestfromenv(env, reponame=No' | |||||
144 | if the request were to ``http://myserver:9000/prefix/rev/@``. In other |
|
144 | if the request were to ``http://myserver:9000/prefix/rev/@``. In other | |
145 | words, ``wsgi.url_scheme``, ``SERVER_NAME``, ``SERVER_PORT``, and |
|
145 | words, ``wsgi.url_scheme``, ``SERVER_NAME``, ``SERVER_PORT``, and | |
146 | ``SCRIPT_NAME`` are all effectively replaced by components from this URL. |
|
146 | ``SCRIPT_NAME`` are all effectively replaced by components from this URL. | |
|
147 | ||||
|
148 | ``bodyfh`` can be used to specify a file object to read the request body | |||
|
149 | from. If not defined, ``wsgi.input`` from the environment dict is used. | |||
147 | """ |
|
150 | """ | |
148 | # PEP 3333 defines the WSGI spec and is a useful reference for this code. |
|
151 | # PEP 3333 defines the WSGI spec and is a useful reference for this code. | |
149 |
|
152 | |||
@@ -307,9 +310,10 b' def parserequestfromenv(env, reponame=No' | |||||
307 | if 'CONTENT_TYPE' in env and 'HTTP_CONTENT_TYPE' not in env: |
|
310 | if 'CONTENT_TYPE' in env and 'HTTP_CONTENT_TYPE' not in env: | |
308 | headers['Content-Type'] = env['CONTENT_TYPE'] |
|
311 | headers['Content-Type'] = env['CONTENT_TYPE'] | |
309 |
|
312 | |||
310 | bodyfh = env['wsgi.input'] |
|
313 | if bodyfh is None: | |
311 | if 'Content-Length' in headers: |
|
314 | bodyfh = env['wsgi.input'] | |
312 | bodyfh = util.cappedreader(bodyfh, int(headers['Content-Length'])) |
|
315 | if 'Content-Length' in headers: | |
|
316 | bodyfh = util.cappedreader(bodyfh, int(headers['Content-Length'])) | |||
313 |
|
317 | |||
314 | return parsedrequest(method=env['REQUEST_METHOD'], |
|
318 | return parsedrequest(method=env['REQUEST_METHOD'], | |
315 | url=fullurl, baseurl=baseurl, |
|
319 | url=fullurl, baseurl=baseurl, |
@@ -380,3 +380,47 b' Make phases updates work' | |||||
380 | #endif |
|
380 | #endif | |
381 |
|
381 | |||
382 | $ cd .. |
|
382 | $ cd .. | |
|
383 | ||||
|
384 | Pushing via hgwebdir works | |||
|
385 | ||||
|
386 | $ hg init hgwebdir | |||
|
387 | $ cd hgwebdir | |||
|
388 | $ echo 0 > a | |||
|
389 | $ hg -q commit -A -m initial | |||
|
390 | $ cd .. | |||
|
391 | ||||
|
392 | $ cat > web.conf << EOF | |||
|
393 | > [paths] | |||
|
394 | > / = * | |||
|
395 | > [web] | |||
|
396 | > push_ssl = false | |||
|
397 | > allow_push = * | |||
|
398 | > EOF | |||
|
399 | ||||
|
400 | $ hg serve --web-conf web.conf -p $HGPORT -d --pid-file hg.pid | |||
|
401 | $ cat hg.pid > $DAEMON_PIDS | |||
|
402 | ||||
|
403 | $ hg clone http://localhost:$HGPORT/hgwebdir hgwebdir-local | |||
|
404 | requesting all changes | |||
|
405 | adding changesets | |||
|
406 | adding manifests | |||
|
407 | adding file changes | |||
|
408 | added 1 changesets with 1 changes to 1 files | |||
|
409 | new changesets 98a3f8f02ba7 | |||
|
410 | updating to branch default | |||
|
411 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
412 | $ cd hgwebdir-local | |||
|
413 | $ echo commit > a | |||
|
414 | $ hg commit -m 'local commit' | |||
|
415 | ||||
|
416 | $ hg push | |||
|
417 | pushing to http://localhost:$HGPORT/hgwebdir | |||
|
418 | searching for changes | |||
|
419 | remote: adding changesets | |||
|
420 | remote: adding manifests | |||
|
421 | remote: adding file changes | |||
|
422 | remote: added 1 changesets with 1 changes to 1 files | |||
|
423 | ||||
|
424 | $ killdaemons.py | |||
|
425 | ||||
|
426 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now