Jim Hague <jim.hague@acm.org> [Wed, 08 Feb 2012 16:56:00 +0000] rev 16098
tests: tighten checks for octal escapes in shell printf.
printf on AIX default shell ksh (89) says \1 is an invalid escape. It insists
on at least 2 digits. This causes failures in test-keyword.t and test-status.t.
check-code.py already looks out for \NNN and recommends using Python
for outputting octal values. Extend the check to \NN and \N and fix up
resulting failures.
Patrick Mezard <patrick@mezard.eu> [Wed, 08 Feb 2012 20:00:52 +0100] rev 16097
phase: when phase cannot be reduced, hint at --force and return 1 (BC)
Before, trying to change the phase of a "public" node to "draft" would result
in:
$ hg phase --draft .
no phases changed
[0]
With this patch:
$ hg phase --draft .
cannot move 1 changesets to a more permissive phase, use --force
no phases changed
[1]
On partial failures, the exit status is now 1 instead of 0 and the number of
changed nodes is displayed while it was only with --verbose. It seems useful to
tell the user that despite the apparent failure, something changed.
$ hg phase --draft '5 or 7'
cannot move 1 changesets to a more permissive phase, use --force
phase changed for 1 changesets
[1]
Patrick Mezard <patrick@mezard.eu> [Thu, 09 Feb 2012 21:03:07 +0100] rev 16096
revset: fix alias substitution recursion (
issue3240)
The revset aliases expansion worked like:
expr = "some revset"
for alias in aliases:
expr = alias.process(expr)
where "process" was replacing the alias with its *unexpanded* substitution,
recursively. So it only worked when aliases were applied in proper dependency
order.
This patch rewrites the expansion process so all aliases are expanded
recursively at every tree level, after parent alias rewriting and variable
expansion.
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 17:54:47 -0600] rev 16095
update: just merge unknown file collisions
The unknown file collision rule was introduced as an extension of the
"should be clean when merging" rule. Unfortunately, it got applied to
the normal update path, which should be happy to merge local changes.
This patch gives us merges for unknown file collisions on update,
while preserving abort for merge and update -c.
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 17:04:17 -0600] rev 16094
merge: don't use unknown()
This removes use of unknown files for building the synthetic working
directory manifest used by manifestmerge. Instead, we adopt the
strategy used by _checkunknown.
Side-effect: unknown files are no longer moved by remote directory
renames, and now are left alone like ignored files.
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 16:50:19 -0600] rev 16093
merge: refactor unknown file conflict checking
Previously, we would do a full working directory walk including
unknown files to perform a merge. In many cases, this was painful
because unknown files greatly outnumbered tracked files and generally
had no useful effect on the merge.
Here we instead wait until we find a file in the destination that's
not tracked locally and detect if it exists and is not ignored. This
is usually cheaper but can be -more- expensive in the case where we're
adding a huge number of files. On the other hand, the cost of statting
the new files should be dwarfed by the cost of eventually writing
them.
In this version, case collisions are detected implicitly by
os.path.exists and wctx[f] lookup.
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 13:16:20 -0600] rev 16092
update: use normal update path with --check (
issue2450)
This avoids clobbering unknown files on update by not using overwrite mode.
Matt Mackall <mpm@selenic.com> [Mon, 06 Feb 2012 16:35:14 -0600] rev 16091
fetch: use update rather than clean when updating (
issue3246)
We already verify the working directory is "clean" before starting so
there's no advantage to clobbering the working directory.
Matt Mackall <mpm@selenic.com> [Mon, 06 Feb 2012 15:36:44 -0600] rev 16090
merge with stable
Patrick Mezard <patrick@mezard.eu> [Mon, 06 Feb 2012 21:17:50 +0100] rev 16089
mdiff: adjust hunk offsets with --ignore-blank-lines (
issue3234)
When diffing the following documents with --ignore-blank-lines (-B):
$ cat > a <<EOF
>
>
>
> b
> x
> d
> EOF
and:
$ cat > b <<EOF
> b
> y
> d
> EOF
the context lines are taken from the first document, even if the lines differ
(with -w or -b) or if the number of lines differ (with -B). In the second case,
we have to adjust the hunk new lines offsets or we end with inconsistent diffs
like (see the @@ offsets):
diff -r
0e66aa54f318 a
--- a/a
+++ b/a
@@ -1,4 +1,3 @@
b
-x
+y
d
Note that having different context lines in a and b means the diff can be
applied but is not invertible.
Reported by Nicholas Riley <com-selenic@sabi.net>