subrepos: prompt on conflicts on update with dirty subrepos
Consider a repository with a single subrepository. The changesets in
the main repository reference the subrepository changesets like this:
m0 -> s0
m1 -> s1
m2 -> s2
Starting from a state (m1, s0), doing 'hg update m2' in the main
repository will yield a conflict: the subrepo is at revision s0 but
the target revision says it should be at revision s2.
Before this change, Mercurial would do (m1, s0) -> (m2, s2) and thus
ignore the conflict between the working copy and the target revision.
With this change, the user is prompted to resolve the conflict by
choosing which revision he wants. This is consistent with 'hg merge',
which also prompts the user when it detects conflicts in the merged
.hgsubstate files.
The prompt looks like this:
$ hg update tip
subrepository sources for my-subrepo differ
use (l)ocal source (
fc627a69481f) or (r)emote source (
12a213df6fa9)?
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]