tests/test-oldcgi.t
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Sun, 19 Jun 2016 02:17:33 +0900
changeset 29375 fcaf20175b1b
parent 22046 7a9cbb315d84
child 32956 b6776b34e44e
permissions -rw-r--r--
demandimport: delay loading for "from a import b" with absolute_import Before this patch, "from a import b" doesn't delay loading module "b", if absolute_import is enabled, even though "from . import b" does. For example: - it is assumed that extension X has "from P import M" for module M under package P with absolute_import feature - if importing module M is already delayed before loading extension X, loading module M in extension X is delayed until actually referring util, cmdutil, scmutil or so of Mercurial itself should be imported by "from . import M" style before loading extension X - otherwise, module M is loaded immediately at loading extension X, even if extension X itself isn't used at that "hg" command invocation Some minor modules (e.g. filemerge or so) of Mercurial itself aren't imported by "from . import M" style before loading extension X. And of course, external libraries aren't, too. This might cause startup performance problem of hg command, because many bundled extensions already enable absolute_import feature. To delay loading module for "from a import b" with absolute_import feature, this patch does below in "from a (or .a) import b" with absolute_import case: 1. import root module of "name" by system built-in __import__ (referred as _origimport) 2. recurse down the module chain for hierarchical "name" This logic can be shared with non absolute_import case. Therefore, this patch also centralizes it into chainmodules(). 3. and fall through to process elements in "fromlist" for the leaf module of "name" Processing elements in "fromlist" is executed in the code path after "if _pypy: .... else: ..." clause. Therefore, this patch replaces "if _pypy:" with "elif _pypy:" to share it. At 4f1144c3c72b introducing original "work around" for "from a import b" case, elements in "fromlist" were imported with "level=level". But "level" might be grater than 1 (e.g. level=2 in "from .. import b" case) at demandimport() invocation, and importing direct sub-module in "fromlist" with level grater than 1 causes unexpected result. IMHO, this seems main reason of "errors for unknown reason" described in 4f1144c3c72b, and we don't have to worry about it, because this issue was already fixed by 78d05778907b. This is reason why this patch removes "errors for unknown reasons" comment.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 15567
diff changeset
     1
#require no-msys # MSYS will translate web paths as if they were file paths
15567
8b84d040d9f9 tests: introduce 'hghave msys' to skip tests that would fail because of msys
Mads Kiilerich <mads@kiilerich.com>
parents: 13269
diff changeset
     2
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     3
This tests if CGI files from before d0db3462d568 still work.
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
     4
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     5
  $ hg init test
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     6
  $ cat >hgweb.cgi <<HGWEB
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     7
  > #!/usr/bin/env python
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     8
  > #
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
     9
  > # An example CGI script to use hgweb, edit as necessary
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    10
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    11
  > import cgitb, os, sys
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    12
  > cgitb.enable()
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    13
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    14
  > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    15
  > from mercurial import hgweb
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    16
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    17
  > h = hgweb.hgweb("test", "Empty test repository")
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    18
  > h.run()
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    19
  > HGWEB
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    20
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    21
  $ chmod 755 hgweb.cgi
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    22
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    23
  $ cat >hgweb.config <<HGWEBDIRCONF
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    24
  > [paths]
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    25
  > test = test
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    26
  > HGWEBDIRCONF
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    27
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    28
  $ cat >hgwebdir.cgi <<HGWEBDIR
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    29
  > #!/usr/bin/env python
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    30
  > #
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    31
  > # An example CGI script to export multiple hgweb repos, edit as necessary
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    32
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    33
  > import cgitb, sys
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    34
  > cgitb.enable()
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    35
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    36
  > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    37
  > from mercurial import hgweb
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    38
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    39
  > # The config file looks like this.  You can have paths to individual
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    40
  > # repos, collections of repos in a directory tree, or both.
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    41
  > #
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    42
  > # [paths]
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    43
  > # virtual/path = /real/path
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    44
  > # virtual/path = /real/path
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    45
  > #
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    46
  > # [collections]
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    47
  > # /prefix/to/strip/off = /root/of/tree/full/of/repos
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    48
  > #
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    49
  > # collections example: say directory tree /foo contains repos /foo/bar,
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    50
  > # /foo/quux/baz.  Give this config section:
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    51
  > #   [collections]
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    52
  > #   /foo = /foo
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    53
  > # Then repos will list as bar and quux/baz.
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    54
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    55
  > # Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    56
  > # or use a dictionary with entries like 'virtual/path': '/real/path'
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    57
  > 
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    58
  > h = hgweb.hgwebdir("hgweb.config")
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    59
  > h.run()
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    60
  > HGWEBDIR
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    61
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    62
  $ chmod 755 hgwebdir.cgi
2533
589474a1dc36 Create a test to make sure old CGI scripts will still work.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
    63
13269
aa3f726a2bdb tests: remove duplication of the CGI environment variables
StevenGBrown
parents: 12472
diff changeset
    64
  $ . "$TESTDIR/cgienv"
12472
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    65
  $ python hgweb.cgi > page1
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    66
  $ python hgwebdir.cgi > page2
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    67
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    68
  $ PATH_INFO="/test/"
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    69
  $ PATH_TRANSLATED="/var/something/test.cgi"
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    70
  $ REQUEST_URI="/test/test/"
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    71
  $ SCRIPT_URI="http://hg.omnifarious.org/test/test/"
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    72
  $ SCRIPT_URL="/test/test/"
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    73
  $ python hgwebdir.cgi > page3
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    74
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    75
  $ grep -i error page1 page2 page3
17c62039cadd tests: unify test-oldcgi
Matt Mackall <mpm@selenic.com>
parents: 5580
diff changeset
    76
  [1]