Commit Graph

5537 Commits

Author SHA1 Message Date
Patrick Mezard
2d4a0ad972 graphlog: extract revset/support functions into cmdutil 2012-07-14 18:55:21 +02:00
Patrick Mezard
3743817d12 patchbomb: support --outgoing and revsets
With --outgoing, input revisions were passed to getoutgoing() before
being resolved.
2012-06-24 17:39:27 +02:00
Patrick Mezard
10fef3c556 patchbomb: make --outgoing ignore secret changesets
getoutgoing() is just rewritten almost like revset.outgoing(), a
follow-up will make it use revsets after the tests are adjusted.
2012-07-14 19:21:31 +02:00
Matt Mackall
c0bdd10df1 merge with stable 2012-07-15 14:48:50 -05:00
Pierre-Yves David
9e13d2931c obsolete: compute extinct changesets
`extinct` changesets are obsolete changesets with obsolete descendants only. They
are of no interest anymore and can be:

- exclude from exchange
- hidden to the user in most situation
- safely garbage collected

This changeset just allows mercurial to detect them.

The implementation is a bit naive, as for unstable changesets. We better use a
simple revset query and a cache, but simple version comes first.
2012-07-06 19:34:09 +02:00
Pierre-Yves David
3f157ec6fb push: refuse to push unstable changesets without force
User should resolve unstability locally before pushing the same way we encourage
user to merge locally instead of pushing a new remote head.

If we are to push obsolete changeset, at least one set of the pushed set will be
either obsolete or unstable. The check is narrowed to only heads.
2012-07-10 01:39:03 +02:00
Wagner Bruna
243b1101bd convert: make filemap renames consistently override revision renames
When the source repository had a revision renaming "$new -> $old",
but the filemap a "$old -> $new" rename, the converted revision could
use either $new (deleting the file) or $old (keeping the file) when
getting the file data, depending on the lexicographical order of
those names. So the resulting revision would leave some files
untouched (as expected), but delete others arbitrarely.
2012-07-06 01:14:02 -03:00
Pierre-Yves David
2444c95546 obsolete: compute unstable changeset
An unstable changeset is a changeset *not* obsolete but with some obsolete
ancestors.

The current logic to decide if a changeset is unstable is naive and very
inefficient. A better solution is to compute the set of unstable changeset with
a simple revset and to cache the result. But this require cache invalidation
logic. Simpler version goes first.
2012-07-06 00:18:09 +02:00
Pierre-Yves David
940b30d287 revset: add an obsolete symbol
This predicate matches obsolete changesets.

This is a naive implementation to be improved later.
2012-07-06 19:29:10 +02:00
Pierre-Yves David
34e21f9d79 push: refuse to push obsolete changesets
This is a first version. Simple but not very efficient.

Note that this changeset introduce the "obsolete" word in the UI.
2012-07-10 01:32:18 +02:00
Simon Heimberg
387ef4195f tests: do exclude what is expected 2012-07-04 08:55:16 +02:00
FUJIWARA Katsunori
204c7d4046 localrepo: use the path relative to "self.vfs" instead of "path" argument
As a part of migration to vfs, this patch uses "self.root", which can
be recognized as the path relative to "self.vfs", instead of "path"
argument.

This fix allows to make invocations of "util.makedirs()" and
"os.path.exists()" while ensuring repository directory in
"localrepository.__init__()" ones indirectly via vfs.

But this fix also raises issue 2528: "hg clone" with empty destination.

"path" argument is empty in many cases, so this issue can't be fixed
in the view of "localrepository.__init__()".

Before this patch, it is fixed by empty-ness check ("not name") of
exception handler in "util.makedirs()".

    try:
        os.mkdir(name)
    except OSError, err:
        if err.errno == errno.EEXIST:
            return
        if err.errno != errno.ENOENT or not name:
            raise

This requires "localrepository.__init__()" to invoke "util.makedirs()"
with "path" instead of "self.root", because empty "path" is treated as
"current directory" and "self.root" becomes valid path.

But "hg clone" with empty destination can be detected also in
"hg.clone()" before "localrepository.__init__()" invocation, so this
patch re-fixes issue2528 by checking it in "hg.clone()".
2012-07-06 18:45:27 +09:00
FUJIWARA Katsunori
54911ad11a mq: check subrepo synchronizations against parent of workdir or other appropriate context
Before this patch, MQ checks each subrepo synchronizations against the
working directory context, so ".hgsubstate" updating is not imported
into MQ revision correctly in cases below:

  - qrefresh when current ".hgsubstate" is already synchronized with
    each subrepos: you can reproduce this easily by just twice or more
    qrefresh invocations

  - qnew just after rollback of commit which updates ".hgsubstate"

This patch resolves this by checking subrepo states against:

  - the parent of "qtop" for qrefresh, or
  - the parent of working context otherwise
2012-06-27 22:03:27 +09:00
FUJIWARA Katsunori
8ecc1d9d04 mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
Even though the committed revision contains diff of ".hgsubstate", the
patch file created by qrefresh doesn't contain it, because:

  - ".hgsubstate" is not listed up as one of target files of the patch
    for reasons below, so diff of ".hgsubstate" is not imported into
    patch file

      - status of ".hgsubstate" in working directory is usually "clean"
      - ".hgsubstate" is not specified explicitly by users

  - the patch file is created before commit processing which updates
    or creates ".hgsubstate" automatically, so there is no diff for it
    at that time

This patch resolves this problem by:

  - putting ".hgsubstate" into target list of the patch, if needed:
    this allows "patch.diff()" to import diff of ".hgsubstate" into
    patch file.

  - creating the patch file after commit processing:
    this updates ".hgsubstate" before "patch.diff()" invocation.

For the former fixing, this patch introduces "putsubstate2changes()"
to share same implementation with qnew. This is invoked only once per
qnew/qrefresh at most, so there is less performance impact.

This patch also omits "match" argument for "patch.diff()" invocation,
because "patch.diff()" ignores "match" if "changes" is specified.
2012-06-27 22:03:27 +09:00
FUJIWARA Katsunori
fba032044a mq: add ".hgsubstate" to patch target list only if it is not listed up yet
If ".hgsubstate" is already listed up as one of commit targets, qnew
put diff of ".hgsubstate" twice into the patch file stored under
".hg/patches".

It causes rejections at applying such patches.

Other than the case like in added test script, this can also occur
when qnew is executed just after rolling back the committing updated
".hgsubstate".

This patch checks whether ".hgsubstate" is already listed up as one of
commit targets, and put it into the appropriate list only if it is not
listed up yet.
2012-06-27 22:03:22 +09:00
Martin Geisler
c52341ae3f merge with main 2012-07-12 10:03:50 +02:00
Bryan O'Sullivan
c15e05c67a test-clone: load extensions before doing anything
This makes it possible to run this test using
"--extra-config-opt=extensions.myext=" and have the extension be
loaded as intended.
2012-07-11 15:34:32 -07:00
Bryan O'Sullivan
48787abe47 Merge 2012-07-11 15:05:06 -07:00
Bryan O'Sullivan
158df87946 tests: reduce spurious failures when run with generaldelta
Quite a few tests fail in noisy but meaningless ways when the test suite
is run with generaldelta enabled:

  ./run-tests.py --extra-config-opt=format.generaldelta=1

This reduces the amount of noise introduced by the debugindex command,
the main source of differences.  In my environment, when testing with
generaldelta enabled, this change reduces the number of completely
failing tests from 21 to 8.
2012-07-11 15:03:10 -07:00
Augie Fackler
39b1dce60e histedit: don't crash if the result of fixing up a fold is empty 2012-07-06 11:39:02 -05:00
Mads Kiilerich
c60c80f534 graphlog: don't truncate template value at last \n
Most uses of templates requires a trailing newline to get vertical output.

Graphlog with a template without trailing newline did however not just create
horisontal output like other commands would but truncated the output at the
last \n. Template values without any \n were ignored completely.

Graphlog will now only eat one trailing newline before it lets the flow of the
graph add the necessary vertical space.
2012-07-06 00:30:18 +02:00
Pierre-Yves David
2fc08a6030 graphlog: display obsolete changeset as "x"
Changeset detected as obsolete will be displayed as "x" instead of 'o':

    o new rewritten changeset
    |
    | x old obsolete changeset
    |/
    |
    o base

This will be useful even when some obsolete changeset will be "hidden" because
not all obsolete changeset can be hidden. If an obsolete changeset have
non-obsolete descendant we can't simply hide it. And having a clear visual hint
that the changeset is obsolete is useful.

The main reason to make this minor change right now is to:

1) introduce an officiel user of the `ctx.obsolete()` method that will detect
   breakage earlier than third party code (mutable, hgview)

2) Do not display any vocabulary related to obsolete. Such vocabulary will
   require discussion.
2012-07-04 17:29:49 +02:00
Mads Kiilerich
43fde17e2d tests: ignore pax_global_header in test-subrepo-git.t
Failure seen on hgbuildbot 2.4 and 2.5 after a62fb0987502.

Hide '../archive_x/s/pax_global_header' with same strange trick as in
686775e575f3.
2012-07-05 02:25:49 +02:00
Mads Kiilerich
8ba44477e6 tests: remove GNU quoting in test-subrepo-deep-nested-change.t
Test failure on non-GNU systems introduced in a62fb0987502.
2012-07-05 01:47:17 +02:00
Mads Kiilerich
b5842551c2 tests: add '(glob)' for Windows paths in test-subrepo-deep-nested-change.t
Test failure was introduced in a62fb0987502.
2012-07-05 00:51:05 +02:00
Mads Kiilerich
2108c6e927 check-code: verify that 'saved backup bundle to ...' is '(glob)'ed
This is the most frequent trivial reason tests fail on Windows.
2012-07-05 00:49:26 +02:00
Mads Kiilerich
2a09e8d38f tests: fix test markup in test-merge-types.t
d727e5b3202b introduced some tests that because of incorrect indentation wasn't
run.
2012-07-05 00:35:42 +02:00
Adrian Buehlmann
7d6945259d test-hgweb-diffs: partially adapt for Windows
Since chmod isn't supported on Windows (or vfat), I'm importing a here-doc
instead (<<EOF ..).

Option --bypass on import of the here-doc is required on Windows (or vfat) to
bypass the working directory (see hg help import). Not using --bypass would
lose the mode changing bits.

I've had to insert a --bypass on the preexisting import call futher down in the
test, because importing a patch with --exact and mode changes will fail on
Windows (and vfat).

As the point of this test is not to test commit, I'm using the import
procedure for all platforms unconditionally, that is, I'm intentionally not
keeping the original sequence of hg and chmod calls for platforms that support
exec either, which saves us having to insert an #if exec ... #else ... #endif.
2012-07-04 12:43:13 +02:00
Pierre-Yves David
100b68ca2e obsolete: write obsolete marker inside a transaction
Marker are now written as soon as possible but within a transaction. Using a
transaction ensure a proper behavior on error and rollback compatibility.

Flush logic are not necessary anymore and are dropped from lock release.

With this changeset, the obsstore is open, written and closed for every single
added marker. This is expected to be highly inefficient and batched write should
be implemented "quickly".

Another issue is that every flush of the file will invalidate the obsstore
filecache and trigger a full re instantiation of the repo.obsstore attribute
(including, reading and parsing entry). This is also expected to be highly
inefficient and proper filecache operation should be implemented "quickly" too.

A side benefit of the filecache issue is that repo.obsstore  object is properly
invalidated on transaction abortion.
2012-07-04 02:21:04 +02:00
Idan Kamara
bcb7450401 amend: disable hooks when creating intermediate commit (issue3501) 2012-06-23 19:57:29 +03:00
David Schleimer
de4c701f51 bookmarks: correctly update current bookmarks on rebase (issue2277)
When you rebased with a currently active bookmark, that bookmark would
always point at the new tip, regardless of what revision it pointed at
before the rebase.

All bookmarks will now point at the equivalent post-rebase commit.
However, the currently active bookmark will cease to be active unless
it points at the new tip post-rebase.  Rebase will always leave the
new tip as the working copy parent, which is incompatible with having
an active bookmark that points at some other revision.  The common
case should be that the active bookmark will point at the new tip
post-rebase.
2012-06-22 11:40:31 -07:00
Matt Harbison
63a46b018b subrepo: propagate matcher to subrepos when archiving
Add a match object to subrepo.archive(). This will allow the -X and -I
options to be honored inside subrepos when archiving. They formerly
only affect the top level repo.
2012-06-16 22:34:06 -04:00
Matt Harbison
c16332f051 largefiles: fix the directory structure when archiving a subrepo in a subrepo
Previously, a repo consisting of main/sub/subsub archived sub and subsub as
siblings under main.
2012-06-18 23:02:51 -04:00
Matt Harbison
bf6dae387d largefiles: fix a traceback when archiving a subrepo in a subrepo
This regression was introduced in 310edb24b71f.
2012-06-17 21:57:48 -04:00
Patrick Mezard
e029e6740d convert: keep branch switching merges with ancestors (issue3340)
When running convert with a filemap, merge parents which are ancestors
of other parents are ignored. This is hardly a problem when parents
belong to the same branch, but the result could be confusing when named
branches are involved. With:

  -o-a1-a2-a3...     <- A
    \           \
     b1-b2-b3...-m-  <- B

If all b* revisions are discarded, it is useful to preserve 'm' even if
it is empty after filtering to record the branch switch.

This patch makes filemap preserve "ancestor parents" if there is no
"non-ancestor parent" on the same branch than the merge revision.

Remarks:
- I am not completely convinced by the reasons given above and those
  detailed by Matt in this thread:

http://selenic.com/pipermail/mercurial-devel/2012-May/040627.html

  The properties we try to preserve are not clearly defined. That said,
  I know this patch already helped someone on IRC and the tests output
  look reasonable.

- This is a new version of the original "convert: filemap must preserve
  fast-forward merges" patch. It has exactly the same output for 2
  parents merges, the additional complexity is here to handle more than
  two parents.
2012-06-18 18:19:28 +02:00
Yuya Nishihara
7714ac81fa graft: don't drop the second parent on unsuccessful merge (issue3498)
This replicates the strategy of rebase, which postpones setparents and
duplicatecopies after checking the merge stats.

Without the second parent, resolve cannot redo merge.
2012-06-16 17:05:55 +09:00
Thomas Arendsen Hein
90f293b489 convert/bzr: make tests work with bzr 2.0 again
bzr ci --commit-time was introduced in 2.1
bzr add without -q prints "adding" in 2.1, "added" in 2.0
2012-06-26 12:17:40 +02:00
Dan Villiom Podlaski Christiansen
4bc99faa5e rebase: improve error message on improper phases
The previous error message had two issues: The first issue was that it
wasn't, in fact, an error but a warning, even though it described a
fatal error condition preventing the successful completion of the
command. The second was that it didn't mention the immutable
changesets, leaving the user guessing at the true cause of the error.

The main downside to this change is that we now get an 'abort: can't
abort...' message which technically contradicts itself. In this case,
I blame that on the two uses we have for the word; if it weren't for
backwards compatibility, we could make util.Abort print out 'error:
<whatever>'.
2012-06-18 11:16:24 +02:00
Adrian Buehlmann
37d14413ec test-commit: remove extra cd ..
This specific cd .. leaves the base directory of the test ($TESTTMP).

Removing it avoids that test artifacts (e.g. files) are created
outside of the base directory.
2012-06-09 14:20:25 +02:00
Bryan O'Sullivan
513bd920fa revset: ensure we are reversing a list (issue3530) 2012-07-04 09:38:07 -07:00
Adrian Buehlmann
0375fd2e33 test-keyword: adapt for Windows 2012-07-03 18:02:07 +02:00
Mads Kiilerich
1f1159f6c1 tests: don't use dates before epoch in test-keyword.t
Timezone offsets of less than a minute is not shown but can cause displayed
dates to be before epoch start - and dates before epoch start is not shown
correctly on Windows (see also e68101a876a4).

These 'negative' dates could be considered undefined behaviour so we don't care
and swap the tests values for timestamp and timezone.
2012-07-04 02:04:58 +02:00
Mads Kiilerich
c5b3c2bb33 tests: make test-convert-bzr.t more stable
The test would occasionally fail because datesort don't have sub-second
granularity and thus can't sort commits made in the same second.

The test is made more stable by adding 1 second of sleep to make sure the bzr
commits are done with different timestamps.
2012-07-04 01:45:28 +02:00
Joshua Redstone
07547a08a2 casecollision: add tests
Add more tests to exercise the case collion detection code
2012-06-27 12:37:01 -07:00
Joshua Redstone
5d6b6b4a44 dirstate: add dir/file collision test
Add a test exercising collisions in add between files and directories of the
same name.
2012-06-27 12:28:26 -07:00
Adrian Buehlmann
d0ed8e9722 test-subrepo-relative-path: partially adapt for Windows 2012-07-02 16:54:01 +02:00
Mads Kiilerich
e3835ef5ff tests: make rm of usercache in test-largefiles.t more robust
Recursive removal of a different path could be fatal - better avoid recursive
rm completely.
2012-07-03 01:49:51 +02:00
Matt Mackall
12d4bcf86f merge with crew 2012-07-01 21:19:57 -05:00
Mads Kiilerich
0585ab3757 tests: enable test-largefiles.t on Windows MSYS
The 'serve' requirement is moved to the sections that really need it.

$USERCACHE needs quoting.
2012-07-02 01:48:12 +02:00
Adrian Buehlmann
4c34d29e62 test-largefiles: partially adapt for Windows
The adaption is partial, because "serve" is not yet officially supported in
tests on Windows.

The test passes on Windows with an experimental testbed that supports
hg serve in tests on Windows - except for some USERCACHE issues.

The added (glob)'s are needed because of backslash <-> shlash issues in paths.
2012-06-30 19:31:03 +02:00