--- a/Makefile Sat Oct 23 15:04:05 2010 +0200
+++ b/Makefile Sat Oct 23 16:24:07 2010 +0200
@@ -98,7 +98,7 @@
xgettext --package-name "Mercurial" \
--msgid-bugs-address "<mercurial-devel@selenic.com>" \
--copyright-holder "Matt Mackall <mpm@selenic.com> and others" \
- --from-code ISO-8859-1 --join --sort-by-file \
+ --from-code ISO-8859-1 --join --sort-by-file --add-comments=i18n: \
-d hg -p i18n -o hg.pot
$(PYTHON) i18n/posplit i18n/hg.pot
--- a/doc/gendoc.py Sat Oct 23 15:04:05 2010 +0200
+++ b/doc/gendoc.py Sat Oct 23 16:24:07 2010 +0200
@@ -79,7 +79,7 @@
# print options
section(ui, _("Options"))
for optstr, desc in get_opts(globalopts):
- ui.write("%s\n%s\n\n" % (optstr, desc))
+ ui.write("%s\n %s\n\n" % (optstr, desc))
# print cmds
section(ui, _("Commands"))
@@ -97,7 +97,7 @@
ui.write("\n")
section(ui, _("Extensions"))
- ui.write(_("This section contains help for extensions that is distributed "
+ ui.write(_("This section contains help for extensions that are distributed "
"together with Mercurial. Help for other extensions is available "
"in the help system."))
ui.write("\n\n"
@@ -130,8 +130,13 @@
d = get_cmd(h[f], cmdtable)
sectionfunc(ui, d['cmd'])
# synopsis
- ui.write("``%s``\n" % d['synopsis'].replace("hg ","", 1))
- ui.write("\n")
+ ui.write("::\n\n")
+ synopsislines = d['synopsis'].splitlines()
+ for line in synopsislines:
+ # some commands (such as rebase) have a multi-line
+ # synopsis
+ ui.write(" %s\n" % line)
+ ui.write('\n')
# description
ui.write("%s\n\n" % d['desc'][1])
# options
--- a/hg Sat Oct 23 15:04:05 2010 +0200
+++ b/hg Sat Oct 23 16:24:07 2010 +0200
@@ -14,7 +14,8 @@
if libdir != '@' 'LIBDIR' '@':
if not os.path.isabs(libdir):
- libdir = os.path.join(os.path.dirname(__file__), libdir)
+ libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+ libdir)
libdir = os.path.abspath(libdir)
sys.path.insert(0, libdir)
--- a/hgext/color.py Sat Oct 23 15:04:05 2010 +0200
+++ b/hgext/color.py Sat Oct 23 16:24:07 2010 +0200
@@ -226,6 +226,8 @@
def extsetup(ui):
commands.globalopts.append(
('', 'color', 'auto',
+ # i18n: 'always', 'auto', and 'never' are keywords and should
+ # not be translated
_("when to colorize (boolean, always, auto, or never)"),
_('TYPE')))
--- a/hgext/eol.py Sat Oct 23 15:04:05 2010 +0200
+++ b/hgext/eol.py Sat Oct 23 16:24:07 2010 +0200
@@ -51,7 +51,7 @@
behavior. There are two settings:
- ``eol.native`` (default ``os.linesep``) can be set to ``LF`` or
- ``CRLF`` override the default interpretation of ``native`` for
+ ``CRLF`` to override the default interpretation of ``native`` for
checkout. This can be used with :hg:`archive` on Unix, say, to
generate an archive where files have line endings for Windows.
--- a/mercurial/commands.py Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/commands.py Sat Oct 23 16:24:07 2010 +0200
@@ -278,7 +278,11 @@
revert_opts['no_backup'] = None
revert(ui, repo, **revert_opts)
if not opts.get('merge') and op1 != node:
- return hg.update(repo, op1)
+ try:
+ ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
+ return hg.update(repo, op1)
+ finally:
+ ui.setconfig('ui', 'forcemerge', '')
commit_opts = opts.copy()
commit_opts['addremove'] = False
@@ -295,7 +299,11 @@
hg.clean(repo, op1, show_stats=False)
ui.status(_('merging with changeset %s\n')
% nice(repo.changelog.tip()))
- return hg.merge(repo, hex(repo.changelog.tip()))
+ try:
+ ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
+ return hg.merge(repo, hex(repo.changelog.tip()))
+ finally:
+ ui.setconfig('ui', 'forcemerge', '')
return 0
def bisect(ui, repo, rev=None, extra=None, command=None,
@@ -2438,7 +2446,7 @@
ancestors or descendants of the starting revision. --follow-first
only follows the first parent of merge revisions.
- If no revision range is specified, the default is tip:0 unless
+ If no revision range is specified, the default is ``tip:0`` unless
--follow is set, in which case the working directory parent is
used as the starting revision. You can specify a revision set for
log, see :hg:`help revsets` for more information.
@@ -2943,7 +2951,7 @@
The resolve command can be used in the following ways:
- - :hg:`resolve [--tool] FILE...`: attempt to re-merge the specified
+ - :hg:`resolve [--tool TOOL] FILE...`: attempt to re-merge the specified
files, discarding any previous merge attempts. Re-merging is not
performed for files already marked as resolved. Use ``--all/-a``
to selects all unresolved files. ``--tool`` can be used to specify
@@ -4005,6 +4013,8 @@
_('merge with old dirstate parent after backout')),
('', 'parent', '',
_('parent to choose when backing out merge'), _('REV')),
+ ('t', 'tool', '',
+ _('specify merge tool')),
('r', 'rev', '',
_('revision to backout'), _('REV')),
] + walkopts + commitopts + commitopts2,
--- a/mercurial/demandimport.py Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/demandimport.py Sat Oct 23 16:24:07 2010 +0200
@@ -45,7 +45,7 @@
if not self._module:
head, globals, locals, after, level = self._data
if level is not None:
- mod = _origimport(head, globals, locals, level=level)
+ mod = _origimport(head, globals, locals, level)
else:
mod = _origimport(head, globals, locals)
# load submodules
--- a/mercurial/dispatch.py Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/dispatch.py Sat Oct 23 16:24:07 2010 +0200
@@ -24,7 +24,7 @@
except util.Abort, inst:
sys.stderr.write(_("abort: %s\n") % inst)
if inst.hint:
- sys.stderr.write("(%s)\n" % inst.hint)
+ sys.stderr.write(_("(%s)\n") % inst.hint)
return -1
except error.ParseError, inst:
if len(inst.args) > 1:
--- a/mercurial/help/merge-tools.txt Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/help/merge-tools.txt Sat Oct 23 16:24:07 2010 +0200
@@ -5,23 +5,38 @@
ancestor of the two file versions, so they can determine the changes
made on both branches.
-The merge tools are used both for :hg:`resolve` and :hg:`merge`.
+Merge tools are used both for :hg:`resolve`, :hg:`merge`, :hg:`update`,
+:hg:`backout` and in several extensions.
-Usually, the merge tool tries to automatically, by combining all the
-non-overlapping changes that occurred separately in the two different
-evolutions of the same initial base file. Furthermore, some
+Usually, the merge tool tries to automatically reconcile the files by
+combining all non-overlapping changes that occurred separately in
+the two different evolutions of the same initial base file. Furthermore, some
interactive merge programs make it easier to manually resolve
conflicting merges, either in a graphical way, or by inserting some
conflict markers. Mercurial does not include any interactive merge
-programs but relies on external tools for that. External merge tools
-and their properties and usage is configured in merge-tools section -
-see hgrc(5).
+programs but relies on external tools for that.
+
+Available merge tools
+"""""""""""""""""""""
+
+External merge tools and their properties and usage is configured in the
+merge-tools configuration section - see hgrc(5) - but they can often also just
+be named by their executable.
+
+A merge tool is generally usable if its executable can be found on the
+system and if it can handle the merge. The executable can be found on the
+system if it either is an absolute or relative executable path or the name of
+an application in the executable search path. The tool is assumed to be able
+to handle the merge if it can handle symlinks if the file is a symlink, if it
+can handle binary files if the file is binary, and if a GUI is available if the
+tool requires a GUI.
There are a some internal merge tools which can be used. The internal
merge tools are:
``internal:merge``
- Uses the internal non-interactive merge tool for merging files.
+ Uses the internal non-interactive simple merge algorithm for merging files.
+ It will fail if there are any conflicts.
``internal:fail``
Rather than attempting to merge files that were modified on both
@@ -32,7 +47,7 @@
Uses the local version of files as the merged version.
``internal:other``
- Uses the remote version of files as the merged version.
+ Uses the other version of files as the merged version.
``internal:prompt``
Asks the user which of the local or the other version to keep as
@@ -41,45 +56,54 @@
``internal:dump``
Creates three versions of the files to merge, containing the
contents of local, other and base. These files can then be used to
- perform a merge manually. If the file merged is name ``a.txt``,
- these files will accordingly be named ``a.txt.local``,
+ perform a merge manually. If the file to be merged is named
+ ``a.txt``, these files will accordingly be named ``a.txt.local``,
``a.txt.other`` and ``a.txt.base`` and they will be placed in the
- same directory as the file to merge.
+ same directory as ``a.txt``.
+
+Internal tools are always available and do not require a GUI but will by default
+not handle symlinks or binary files.
-How Mercurial decides which merge program to use
+Choosing a merge tool
+"""""""""""""""""""""
+
+Mercurial uses these rules when decing which merge tool to use:
-1. If the ``HGMERGE`` environment variable is present, it is used. If
- specified it must be either an executable path or the name of an
- application in your executable search path.
+0. If a tool has been specified with the --tool option to merge or resolve, it
+ is used. If it is the name of a tool in the merge-tools configuration, its
+ configuration is used. Otherwise the specified tool must be executable by
+ the shell.
-2. If the filename of the file to be merged matches any of the
- patterns in the merge-patterns configuration section, then the
- corresponding merge tool is used, unless the file to be merged is a
- symlink. Here binary capabilities of the merge tool are not
- considered.
+1. If the ``HGMERGE`` environment variable is present, its value is used and
+ must be executable by the shell.
+
+2. If the filename of the file to be merged matches any of the patterns in the
+ merge-patterns configuration section, the first usable merge tool
+ corresponding to a matching pattern is used. Here, binary capabilities of the
+ merge tool are not considered.
-3. If ui.merge is set, it is used.
+3. If ui.merge is set it will be considered next. If the value is not the name
+ of a configured tool, the specified value is used and must be executable by
+ the shell. Otherwise the named tool is used if it is usable.
-4. If any merge tools are present in the merge-tools configuration
- section, and any of the tools can be found on the system, the
- priority settings are used to determine which one to use. Binary,
- symlink and GUI capabilities do also have to match.
+4. If any usable merge tools are present in the merge-tools configuration
+ section, the one with the higest priority is used.
-5. If a program named ``hgmerge`` exists on the system, it is used.
+5. If a program named ``hgmerge`` can be found on the system, it is used - but
+ it will by default not be used for symlinks and binary files.
6. If the file to be merged is not binary and is not a symlink, then
``internal:merge`` is used.
-7. The merge fails.
+7. The merge of the file fails and must be resolved before commit.
.. note::
After selecting a merge program, Mercurial will by default attempt
- to merge the files using a simple merge algorithm first, to see if
- they can be merged without conflicts. Only if there are conflicting
- changes Mercurial will actually execute the merge program. Whether
- to use the simple merge algorithm first can be controlled be the
- premerge setting of the merge tool, which is enabled by default
- unless the file is binary or symlink.
+ to merge the files using a simple merge algorithm first. Only if it doesn't
+ succeed because of conflicting changes Mercurial will actually execute the
+ merge program. Whether to use the simple merge algorithm first can be
+ controlled by the premerge setting of the merge tool. Premerge is enabled by
+ default unless the file is binary or a symlink.
-See the merge-tools and ui sections of hgrc(5) for details on
+See the merge-tools and ui sections of hgrc(5) for details on the
configuration of merge tools.
--- a/mercurial/help/revsets.txt Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/help/revsets.txt Sat Oct 23 16:24:07 2010 +0200
@@ -178,26 +178,26 @@
- Changesets on the default branch::
- hg log -r 'branch(default)'
+ hg log -r "branch(default)"
- Changesets on the default branch since tag 1.5 (excluding merges)::
- hg log -r 'branch(default) and 1.5:: and not merge()'
+ hg log -r "branch(default) and 1.5:: and not merge()"
- Open branch heads::
- hg log -r 'head() and not closed()'
+ hg log -r "head() and not closed()"
- Changesets between tags 1.3 and 1.5 mentioning "bug" that affect
``hgext/*``::
- hg log -r '1.3::1.5 and keyword(bug) and file("hgext/*")'
+ hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
- Changesets in committed May 2008, sorted by user::
- hg log -r 'sort(date("May 2008"), user)'
+ hg log -r "sort(date('May 2008'), user)"
- Changesets mentioning "bug" or "issue" that are not in a tagged
release::
- hg log -r '(keyword(bug) or keyword(issue)) and not ancestors(tagged())'
+ hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tagged())"
--- a/mercurial/subrepo.py Sat Oct 23 15:04:05 2010 +0200
+++ b/mercurial/subrepo.py Sat Oct 23 16:24:07 2010 +0200
@@ -490,7 +490,7 @@
doc = xml.dom.minidom.parseString(output)
entries = doc.getElementsByTagName('entry')
if not entries:
- return 0
+ return '0'
return str(entries[0].getAttribute('revision')) or '0'
def _wcchanged(self):
--- a/tests/test-backout.t Sat Oct 23 15:04:05 2010 +0200
+++ b/tests/test-backout.t Sat Oct 23 16:24:07 2010 +0200
@@ -1,5 +1,3 @@
- $ HGMERGE=true; export HGMERGE
-
$ hg init basic
$ cd basic
@@ -20,7 +18,7 @@
$ echo b >> a
$ hg commit -d '1 0' -m b
- $ hg backout -d '2 0' tip
+ $ hg backout -d '2 0' tip --tool=true
reverting a
changeset 2:2929462c3dff backs out changeset 1:a820f4f40a57
$ cat a
@@ -39,7 +37,7 @@
$ hg rm a
$ hg commit -d '1 0' -m b
- $ hg backout -d '2 0' tip
+ $ hg backout -d '2 0' tip --tool=true
adding a
changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372
$ cat a
@@ -47,7 +45,7 @@
backout of backout is as if nothing happened
- $ hg backout -d '3 0' --merge tip
+ $ hg backout -d '3 0' --merge tip --tool=true
removing a
changeset 3:7f6d0f120113 backs out changeset 2:de31bdc76c0d
$ cat a 2>/dev/null || echo cat: a: No such file or directory
@@ -102,7 +100,7 @@
$ echo line 3 >> a
$ hg commit -d '2 0' -m c
- $ hg backout --merge -d '3 0' 1
+ $ hg backout --merge -d '3 0' 1 --tool=true
reverting a
created new head
changeset 3:26b8ccb9ad91 backs out changeset 1:5a50a024c182
@@ -133,7 +131,7 @@
adding b
without --merge
- $ hg backout -d '3 0' 1
+ $ hg backout -d '3 0' 1 --tool=true
reverting a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg locate b
@@ -144,7 +142,7 @@
b
with --merge
- $ hg backout --merge -d '3 0' 1
+ $ hg backout --merge -d '3 0' 1 --tool=true
reverting a
created new head
changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5
@@ -201,7 +199,7 @@
backout with valid parent should be ok
- $ hg backout -d '5 0' --parent 2 4
+ $ hg backout -d '5 0' --parent 2 4 --tool=true
removing d
changeset 5:10e5328c8435 backs out changeset 4:b2f3bb92043e
@@ -210,7 +208,7 @@
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg backout -d '6 0' --parent 3 4
+ $ hg backout -d '6 0' --parent 3 4 --tool=true
removing c
changeset 5:033590168430 backs out changeset 4:b2f3bb92043e
@@ -236,7 +234,7 @@
adding file2
without --merge
- $ hg backout -r 1
+ $ hg backout -r 1 --tool=true
removing file1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch
@@ -248,7 +246,7 @@
with --merge
$ hg update -qC
- $ hg backout --merge -d '3 0' -r 1 -m 'backout on branch1'
+ $ hg backout --merge -d '3 0' -r 1 -m 'backout on branch1' --tool=true
removing file1
created new head
changeset 3:d4e8f6db59fb backs out changeset 1:bf1602f437f3
--- a/tests/test-debugcomplete.t Sat Oct 23 15:04:05 2010 +0200
+++ b/tests/test-debugcomplete.t Sat Oct 23 16:24:07 2010 +0200
@@ -196,7 +196,7 @@
update: clean, check, date, rev
addremove: similarity, include, exclude, dry-run
archive: no-decode, prefix, rev, type, subrepos, include, exclude
- backout: merge, parent, rev, include, exclude, message, logfile, date, user
+ backout: merge, parent, tool, rev, include, exclude, message, logfile, date, user
bisect: reset, good, bad, skip, command, noupdate
branch: force, clean
branches: active, closed
--- a/tests/test-transplant.t Sat Oct 23 15:04:05 2010 +0200
+++ b/tests/test-transplant.t Sat Oct 23 16:24:07 2010 +0200
@@ -59,6 +59,15 @@
1 r2
0 r1
+test transplanted revset
+
+ $ hg log -r 'transplanted()' --template '{rev} {parents} {desc}\n'
+ 5 1:d11e3596cc1a b1
+ 6 b2
+ 7 b3
+ $ hg help revsets | grep transplanted
+ "transplanted(set)"
+
$ hg clone ../t ../prune
updating to branch default
4 files updated, 0 files merged, 0 files removed, 0 files unresolved