view tests/test-oldcgi.t @ 24885:eea3977e6fca stable

windows: make shellquote() quote any path containing '\' (issue4629) The '~' in the bug report is being expanded to a path with Windows style slashes before being passed to shellquote() via util.shellquote(). But shlex.split() strips '\' out of the string, leaving an invalid path in dispatch.aliasargs(). This regressed in 1642eb429536. For now, the tests need to be conditionalized for Windows (because those paths are quoted). In the future, a more complex regex could probably skip the quotes if all component separators are double '\'. I opted to glob away the quotes in test-rename-merge2.t and test-up-local-change.t (which only exist on Windows), because they are in very large blocks of output and there are way too many diffs to conditionalize with #if directives. Maybe the entire path should be globbed away like the following paths in each changed line. Or, letting #if directives sit in the middle of the output as was mentioned a few months back would work too. Unfortunately, I couldn't figure out how to test the specific bug. All of the 'hg serve' tests have a #require serve declaration, causing them to be skipped on Windows. Adding an alias for 'expandtest = outgoing ~/bogusrepo' prints the repo as '$TESTTMP/bogusrepo', so the test runner must be changing the environment somehow.
author Matt Harbison <matt_harbison@yahoo.com>
date Wed, 29 Apr 2015 21:14:59 -0400
parents 7a9cbb315d84
children b6776b34e44e
line wrap: on
line source

#require no-msys # MSYS will translate web paths as if they were file paths

This tests if CGI files from before d0db3462d568 still work.

  $ hg init test
  $ cat >hgweb.cgi <<HGWEB
  > #!/usr/bin/env python
  > #
  > # An example CGI script to use hgweb, edit as necessary
  > 
  > import cgitb, os, sys
  > cgitb.enable()
  > 
  > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
  > from mercurial import hgweb
  > 
  > h = hgweb.hgweb("test", "Empty test repository")
  > h.run()
  > HGWEB

  $ chmod 755 hgweb.cgi

  $ cat >hgweb.config <<HGWEBDIRCONF
  > [paths]
  > test = test
  > HGWEBDIRCONF

  $ cat >hgwebdir.cgi <<HGWEBDIR
  > #!/usr/bin/env python
  > #
  > # An example CGI script to export multiple hgweb repos, edit as necessary
  > 
  > import cgitb, sys
  > cgitb.enable()
  > 
  > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
  > from mercurial import hgweb
  > 
  > # The config file looks like this.  You can have paths to individual
  > # repos, collections of repos in a directory tree, or both.
  > #
  > # [paths]
  > # virtual/path = /real/path
  > # virtual/path = /real/path
  > #
  > # [collections]
  > # /prefix/to/strip/off = /root/of/tree/full/of/repos
  > #
  > # collections example: say directory tree /foo contains repos /foo/bar,
  > # /foo/quux/baz.  Give this config section:
  > #   [collections]
  > #   /foo = /foo
  > # Then repos will list as bar and quux/baz.
  > 
  > # Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
  > # or use a dictionary with entries like 'virtual/path': '/real/path'
  > 
  > h = hgweb.hgwebdir("hgweb.config")
  > h.run()
  > HGWEBDIR

  $ chmod 755 hgwebdir.cgi

  $ . "$TESTDIR/cgienv"
  $ python hgweb.cgi > page1
  $ python hgwebdir.cgi > page2

  $ PATH_INFO="/test/"
  $ PATH_TRANSLATED="/var/something/test.cgi"
  $ REQUEST_URI="/test/test/"
  $ SCRIPT_URI="http://hg.omnifarious.org/test/test/"
  $ SCRIPT_URL="/test/test/"
  $ python hgwebdir.cgi > page3

  $ grep -i error page1 page2 page3
  [1]