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.