Matt Mackall <mpm@selenic.com> [Fri, 01 Feb 2013 15:14:05 -0600] rev 18525
merge with crew
Kevin Bullock <kbullock@ringworld.org> [Fri, 01 Feb 2013 10:12:41 -0600] rev 18524
hgweb: rename 'currentbaseline' template keyword to 'basenode'
Shorter and clearer. This keyword represents the node we're currently
diffing against.
Kevin Bullock <kbullock@ringworld.org> [Fri, 01 Feb 2013 09:58:25 -0600] rev 18523
hgweb: rename 'changesetbaseline' template to 'difffrom'
More accurately reflects what it will be used for, and is also shorter.
This template is used to change which rev the current rev is diff'd
against. For example, if you're at '/rev/P1:REV', this would link to a
path like '/rev/P2:REV'.
Example usage in a template:
{parent%difffrom}
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 31 Jan 2013 19:56:55 +0100] rev 18522
hgweb: add a `web.view` to control filtering
This options add a new `web.view` to control filter level of hgweb.
This option have two purposes:
1) Allow fall back to unfiltered version in case a yet undetected by critical
bug is found in filtering after 2.5 release
2) People use hgweb as a local repoviewer. When they have secret changesets,
they wants to use "visible" filter not "served"
(modified by mpm, documentation deferred)
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 31 Jan 2013 22:30:52 +0100] rev 18521
hgweb: returns 404 for unknow revision instead of 500
I noticed that access to filtered revision returned HTTP 500 code (internal
server error). Investigation shown that it was the case for unknown revision
too. That wrong and we now properly return a 404 for revision not found.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 31 Jan 2013 01:44:29 +0100] rev 18520
subrepo: allows to drop courtesy phase sync (issue3781)
Publishing server may contains draft changeset when they are created locally. As
publishing is the default, it is actually fairly common. Because of this
"inconsistency" phases synchronization may be done even to publishing server.
This may cause severe issues for subrepo. It is possible to reference read-only
repository as subrepo. Push in a super repo recursively push subrepo. Those
pushes to potential read only repo are not optional, they are "suffered" not
"choosed". This does not break because as the repo is untouched the push is
supposed to be empty. If the reference repo locally contains draft changesets, a
courtesy push is triggered to turn them public. As the repo is read only, the
push fails (after possible prompt asking for credential). Failure of the
sub-push aborts the whole subrepo push. This force the user to define a custom
default-push for such subrepo.
This changeset introduce a prevention of this error client side by skipping the
courtesy phase synchronisation in problematic situation. The phases
synchronisation is skipped when four conditions are gathered:
- this is a subrepo push, (normal push to read-only repo)
- and remote support phase
- and remote is publishing
- and no changesets was pushed (if we pushed changesets, repo is not read only)
The internal config option used in this version is not definitive. It is here to
demonstrate a working fix to the issue.
In the future we probably wants to track subrepo changes and avoid pushing to
untouched one. That will prevent any attempt to push to read-only or unreachable
subrepo.
Another fix to prevent courtesy push from older clients to push to newer server
is also still needed.
Mads Kiilerich <madski@unity3d.com> [Thu, 31 Jan 2013 19:13:13 +0100] rev 18519
tests: fix toctou race in tinyproxy.py (issue3795)
test-http-proxy.t sometimes failed with:
File ".../tests/tinyproxy.py", line 110, in _read_write
data = i.recv(8192)
error: (104, 'Connection reset by peer')
This might have started showing up with a9fd11ffa13f ... but it has apparently
also been seen before. I don't see anything in a9fd11ffa13f that can explain
it. It seems to be a race in test, in the tinyproxy helper:
Tinyproxy found an incoming socket using select(). It would break the loop if
an error had been detected on the socket, but there was no error and it tried
to recv() from the socket. That failed - apparently because it had been reset
after select().
Errors in the recv() will now be caught and will break the loop like errors
detected by select() would.
(send() could also fail in a similar way ... but using the same solution there
and losing data we have read doesn't feel right.)
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 01 Feb 2013 02:01:11 +0100] rev 18518
rebase: mention --rev in the help
This changeset adds a small mention of it in the help to prevent
confusion. This small addition references online help that is easier to
update and improve at release time.
Following Wagner Bruna's advice, this is added in a plain new paragraph
to not invalidate current translation this close to the release.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 01 Feb 2013 05:40:06 +0100] rev 18517
hgweb: remove baseline info from paper template
The user interface introduced in d605a82cf189 is not considered ready
for prime time yet. The internal code stays in place for custom template
usage. The feature is ultimately wanted and will be re-enabled soon. The
current issue is only related to the visual of the current interface.
Kevin Bullock <kbullock@ringworld.org> [Thu, 31 Jan 2013 20:01:26 -0600] rev 18516
rebase: mention phases in the help
Mention that Mercurial helps you not do what you've just been warned not
to do, with a reference to the 'phases' help topic (not the 'phase'
command help).
Thanks to Pierre-Yves David <pierre-yves.david@ens-lyon.org> for
motivating this change and Wagner Bruna
<wagner.bruna+mercurial@gmail.com> for advising on how to do it in an
i18n-friendly way.
Angel Ezquerra <angel.ezquerra@gmail.com> [Thu, 31 Jan 2013 22:36:22 +0100] rev 18515
hgwebdir: use web.prefix when creating url breadcrumbs (issue3790)
The web.prefix setting was being ignored when creating the index URL
breadcrumbs.
We only need to fix hgwebdir and not hgweb because hgweb gets the complete URL
request, including the prefix, while hgwebdir gets a "subdir" which does not
include the prefix.
This fix is slightly different of what was suggested on the bug tracker. In
there it was suggested to hide the prefix itself from the breadcrumb. I think
that would be a better solution, but it would require changing all the index
templates and passing the prefix to the template engine, which may be too big
a change for stable during the freeze. For now this fixes the problem, and the
fix could be improved during the next cycle.
Siddharth Agarwal <sid0@fb.com> [Wed, 30 Jan 2013 16:08:32 -0800] rev 18514
rebase: delete divergent bookmarks on destination (issue3685)
Similar to merge, divergent bookmarks are only deleted when the bookmark is on
the destination parent.
Siddharth Agarwal <sid0@fb.com> [Wed, 30 Jan 2013 15:35:00 -0800] rev 18513
bookmarks: factor out delete divergent code
Deleting divergent bookmarks is more generally useful than just in
bookmarks.update.
Siddharth Agarwal <sid0@fb.com> [Wed, 30 Jan 2013 17:49:54 -0800] rev 18512
rebase: remove bogus nullmerge check in updatebookmarks
nstate[v] is a node, not an int, and the nullmerge check was done while
building nstate anyway.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 27 Nov 2012 21:31:59 -0500] rev 18511
share: backout fd903f89e42b, except the test
Locating the share source when no default path is available is now handled in
subrepo._abssource(), so unconditionally setting a default path (and the
associated problems) can be avoided.
The test change reflects the fact that a default path is no longer set on the
resulting share.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 27 Nov 2012 20:56:27 -0500] rev 18510
subrepo: use sharepath if available when locating the source repo
This is an alternative fix for issue3518, enabling sharing of repositories with
subrepos, without unconditionally setting the default path in the resulting
repo's hgrc file. Better test coverage is added here, but won't prove this code
is working until fd903f89e42b is backed out.
The problem with the original fix is, if a default path is not available to be
copied over from the share source, the default path on the resulting repo is set
to the source location. Since that's where the actual repository is stored, the
path is essentially self-referential, so push, pull, incoming and outgoing
effectively operate on itself. While incoming and outgoing make it look like
nothing was changed, push currently hangs (see issue3657). In this case where
there is not a real default path, these operations should abort with
"default(-push) not found", like the source repo would. Note this problem with
the original fix affected repos without subrepos too.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 22 Jan 2013 14:33:17 +0100] rev 18509
test-histedit: add tests for dropping head changeset
I got bug report from user in this specific case. I was unable to reproduce in
test situation. Testing this situation is still valuable.
Mads Kiilerich <mads@kiilerich.com> [Thu, 31 Jan 2013 02:39:55 +0100] rev 18508
tests: use `pwd` instead of ${PWD} in test-convert-git.t - because of Solaris
Augie Fackler <raf@durin42.com> [Wed, 30 Jan 2013 10:57:28 -0500] rev 18507
histedit: prevent parent guessed via --outgoing from being a revset (issue3770)
If the binary hash of the parent node guessed via --outgoing happened
to contain a special revset character (":" was specified in the bug),
the revset parser would abort. Hexlifying the node before passing it
to the revsingle call should fix that.
Mads Kiilerich <madski@unity3d.com> [Wed, 30 Jan 2013 19:40:07 +0100] rev 18506
tests: fix for windows - slashes and no serve
Mads Kiilerich <madski@unity3d.com> [Wed, 30 Jan 2013 19:29:36 +0100] rev 18505
merge: fix UnboundLocalError (issue3791)
A wrong variable name was introduced in 384df4db6520 for a case without test
coverage.
The variable name is fixed and a test case is introduced.
Yuya Nishihara <yuya@tcha.org> [Mon, 28 Jan 2013 19:05:35 +0900] rev 18504
parsers: fix memleak of revlog cache entries on strip
Since 12a852c7c763, raw_length can be reduced on strip, but corresponding cache
entries still have refcount. They are not dereferenced by _index_clearcache(),
and never freed.
To reproduce the problem, run "hg pull" and "hg strip null" several times
in the same process.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 30 Jan 2013 17:32:17 +0100] rev 18503
hgweb: fix navigation label (issue3792)
Latest refactoring (6da1e979340a) was buggy and used a variable from
another loop. Tests are run on repo too small to cache that.
Mads Kiilerich <madski@unity3d.com> [Tue, 29 Jan 2013 20:03:51 +0100] rev 18502
profiling: add documentation of lsprof 'sort' and 'nested'
Mads Kiilerich <madski@unity3d.com> [Tue, 29 Jan 2013 17:01:41 +0100] rev 18501
OS X: try cheap ascii .lower() in normcase before making full unicode dance
This is similar to what is done in encoding.lower, introduced in c481761033bd.
This has been seen making 'hg up' and 'hg st' in a 50000+ files repo 13%
faster.
This might make Mercurial slightly slower for users who mainly use non-ASCII
filenames. That is a reasonable trade-off.
Mads Kiilerich <madski@unity3d.com> [Tue, 29 Jan 2013 20:03:51 +0100] rev 18500
run-tests.py: inherit PYTHONHASHSEED from environment if set
This makes it possible to fix the seed by using for instance
PYTHONHASHSEED=7 ./run-tests.py ...
This can be very convenient when trying to debug problems that are influenced
by hash values. Try different seed values until you find one that triggers the
bad behaviour and then keep that while debugging.
The value 0 will restore default Python behavior and disable randomization.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 29 Jan 2013 15:25:33 +0100] rev 18499
test-obsolete: validate that bundle is not affected by issue3788
Bundle might have been affected by the same kind of error than pull (issue3788).
Testing show it is not the case.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 29 Jan 2013 15:26:10 +0100] rev 18498
pull: fix crash when pulling changeset that get hidden locally (issue3788)
When you have obsolescence marker that apply to a pulled changesets, the added
changeset is immediately filtered. Then the list of added changeset needs to be
build against and unfiltered repo.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 29 Jan 2013 16:44:51 +0100] rev 18497
hgweb: prevent traceback during search when filtered (issue3783)
The search needs to iterate over the repo using changelog.revs like the rest of
the Mercurial code.
Kevin Bullock <kbullock@ringworld.org> [Sun, 27 Jan 2013 15:13:53 -0600] rev 18496
bookmarks: hide bookmarks on filtered revs from listkeys
Don't expose unserved changesets to remote repos. Thanks to Sean Farley
<sean.michael.farley@gmail.com> for tracking down the issue and
Pierre-Yves David <pierre-yves.david@ens-lyon.org> for the fix.
Kevin Bullock <kbullock@ringworld.org> [Sun, 27 Jan 2013 14:24:37 -0600] rev 18495
bookmarks: don't use bookmarks.listbookmarks in local computations
bookmarks.listbookmarks is for wire-protocol use. The normal way to get
all the bookmarks on a local repository is repo._bookmarks.
Kevin Bullock <kbullock@ringworld.org> [Mon, 28 Jan 2013 20:25:56 -0600] rev 18494
filtering: test that bookmarks prevent hiding of changesets
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 28 Jan 2013 13:56:11 +0100] rev 18493
discovery: outgoing pass unfiltered repo to findcommonincoming (issue3776)
We noa pass an unfiltered repo in the same way `localrepo.push` does. This does
not alter outgoing behavior and prevents possible crash with computing
common/missing.
The `findcommonincoming` code could be simplified to make this unnecessary, but
this is too much change for the freeze.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 28 Jan 2013 13:44:44 +0100] rev 18492
test: minor documentation fix
The related test check push, not pull.
Mads Kiilerich <madski@unity3d.com> [Fri, 25 Jan 2013 18:20:13 +0100] rev 18491
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com> [Fri, 25 Jan 2013 16:59:34 +0100] rev 18490
largefiles: fix commit when using relative paths from subdirectory
Remove cwd handling from getstandinmatcher - it did not belong there, as proven
by the tests.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18489
largefiles: allow use of urls with #revision
largefiles tried to create a peer directly with the specified url. That caused
abort: unsupported URL component: "..."
if a revision was specified in the url.
The branch name do not matter for largefiles' use of remote peers. Largefiles
will be shared among all branches anyway.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18488
largefiles: don't verify largefile hashes on servers when processing statlfile
When changesets referencing largefiles are pushed then the corresponding
largefiles will be pushed too - unless the target already has them. The client
will use statlfile to make sure it only sends largefiles that the target
doesn't have. The server would however on every statlfile check that the
content of the largefile had the expected hash. What should be cheap thus
became an expensive operation that trashed the disk and the cache.
Largefile hashes are already checked by putlfile before being stored on the
server. A server should thus be able to keep its largefile store free of
errors - even more than it can keep revlogs free of errors. Verification should
happen when running 'hg verify' locally on the server. Rehashing every
largefile on every remote stat is too expensive.
Clients will also stat lfiles before downloading them. When the server verified
the hash in stat it meant that it had to read the file twice to serve it.
With this change the server will assume its own hashes are ok without checking
them on every statlfile.
Some consequences of this change:
- in case of server side corruption the problem will be detected by the
existing check on the client side - not on server side
- clients that could upload an uncorrupted largefile when pushing will no
longer magically heal the server (and break hardlinks) - a client will now
only upload its uncorrupted files after the corrupted file has been removed
on the server side
- client side verify will no longer report corruption in files it doesn't have
(Issue3123 discussed related problems - and how they have been fixed.)
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18487
tests: clarify test for pushing corrupted largefile
The test no longer tested that the server prevented pushing a corrupt
largefile. At the same time it tested what happened when the server already had
a corrupt largefile.
These two cases are now separated.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18486
largefiles: verify all files in each revision and report errors in any revision
Verify used 'any' and would stop verifying after the first failure in each
changeset.
The exit code only reported the result from the last changeset.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18485
tests: better test coverage of largefiles localstore verify
This demonstrates problems that will be fixed later.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18484
largefiles: adapt remotestore._getfile to batched statlfile
9e1616307c4c introduced batching of statlfile, but not all codepaths got
converted.
_getfile gave _stat garbage and got garbage back. The garbage didn't match the
expected error codes and was thus interpreted as success. It could thus end up
trying to fetch a largefile that didn't exist.
Instead we now pass _stat valid input and handle both correct and invalid
output correctly.
This makes the code work as intended ... but it would probably be better if it
didn't abort on missing largefiles, just like it happened to do before.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18483
largefiles: don't allow corruption to propagate after detection
basestore.get uses util.atomictempfile when checking and receiving a new
largefile ... but the close/discard logic was too clever for largefiles.
Largefiles relied on being able to discard the file and thus prevent it from
being written to the store. That was however too brittle. lfutil.copyandhash
closes the infile after writing to it ... with a 'blecch' comment. The discard
was thus a silent noop, and as a result of that corruption would be detected
... and then the corrupted files would be used anyway.
Instead we now use a tmp file and rename or unlink it after validating it.
A better solution should be implemented ... but not now.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18482
largefiles: adapt verify to batched remote statlfile (issue3780)
9e1616307c4c introduced batching of statlfile, but not all codepaths got
converted.
'hg verify' with a remotestore could thus crash with
TypeError: 'builtin_function_or_method' object is not iterable
Also, the 'hash' variable was used without assigning to it. Don't use variable
names that collide with Python built-in functions. Instead we use 'expecthash'
as in localstore.
The tests for this issue covers an untested area. The tests happens to also
reveal incorrect attempts at getting non-existing largefiles, bad server side
handling of that, and corruption issues - all to be fixed later.
Mads Kiilerich <madski@unity3d.com> [Mon, 28 Jan 2013 15:19:44 +0100] rev 18481
largefiles: let wirestore._stat return stats as expected by remotestore verify
- preparing for fixing verify crash.
Kevin Bullock <kbullock@ringworld.org> [Sun, 27 Jan 2013 11:39:51 -0600] rev 18480
tests: improve description of hgweb secret bookmarks test
Added in 886936ecc21b with only an issue number to describe it.
Kevin Bullock <kbullock@ringworld.org> [Sun, 27 Jan 2013 11:29:14 -0600] rev 18479
bookmarks: show active bookmark even if not at working dir
If the active bookmark doesn't point at a parent of the working dir
(e.g. a pull moved it out from under us), we nonetheless show it as
active. This follows on 2096e025a728 in removing the dichotomy (at least
in the UI) between "current" and "active" bookmarks.
Kevin Bullock <kbullock@ringworld.org> [Fri, 25 Jan 2013 11:43:54 -0600] rev 18478
hgweb: don't attempt to show hidden bookmarks (issue3774)
localrepository._bookmarks is unfiltered, but hgweb gets a filtered
repo. This fixes the resulting traceback on the 'bookmarks' page.
Kevin Bullock <kbullock@ringworld.org> [Fri, 25 Jan 2013 14:50:18 -0600] rev 18477
hgweb: fetch tipmost unfiltered rev thru the changelog
This fixes a traceback when tip is filtered (e.g. because it's secret).
See issue3783, for which this is a partial fix.
Kevin Bullock <kbullock@ringworld.org> [Fri, 25 Jan 2013 16:11:16 -0600] rev 18476
help: update verbose 'clone' help to include '@' bookmark
Kevin Bullock <kbullock@ringworld.org> [Fri, 25 Jan 2013 11:38:54 -0600] rev 18475
tests: fix test-help.t for '@' bookmark documentation
e031e10cdc06 unexpectedly introduced bookmarks into the results for 'hg
help -k clone'. Mea culpa, miserere &c.
Kevin Bullock <kbullock@ringworld.org> [Fri, 25 Jan 2013 11:06:30 -0600] rev 18474
help: document '@' bookmark in 'help bookmarks' and 'help clone'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 23 Jan 2013 22:52:55 +0900] rev 18473
revset: evaluate sub expressions correctly (issue3775)
Before this patch, sub expression may return unexpected result, if it
is joined with another expression by "or":
- "^"/parentspec():
"R or R^1" is not equal to "R^1 or R". the former returns only "R".
- "~"/ancestorspec():
"R or R~1" is not equal to "R~1 or R". the former returns only "R".
- ":"/rangeset():
"10 or (10 or 15):" is not equal to "(10 or 15): or 10". the
former returns only 10 and 15 or grater (11 to 14 are not
included).
In "or"-ed expression "A or B", the "subset" passed to evaluation of
"B" doesn't contain revisions gotten from evaluation of "A", for
efficiency.
In the other hand, "stringset()" fails to look corresponding revision
for specified string/symbol up, if "subset" doesn't contain that
revision.
So, predicates looking revisions up indirectly should evaluate sub
expressions of themselves not with passed "subset" but with "entire
revisions in the repository", to prevent "stringset()" from unexpected
failing to look symbols in them up.
But predicates in above example don't so. For example, in the case of
"R or R^1":
1. "R^1" is evaluated with "subset" containing revisions other than
"R", because "R" is already gotten by the former of "or"-ed
expressions
2. "parentspec()" evaluates "R" of "R^1" with such "subset"
3. "stringset()" fails to look "R" up, because "R" is not contained
in "subset"
4. so, evaluation of "R^1" returns no revision
This patch evaluates sub expressions for predicates above with "entire
revisions in the repository".
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sat, 19 Jan 2013 04:08:16 +0100] rev 18472
test-rebase: add another test for rebase with multiple roots
This test the case when a Merge is dropped.
Kevin Bullock <kbullock@ringworld.org> [Mon, 21 Jan 2013 13:47:10 -0600] rev 18471
update: update to current bookmark if it moved out from under us (issue3682)
If the current bookmark (the one listed in .hg/bookmarks.current)
doesn't point to a parent of the working directory, e.g. if it was moved
by a pull, use that as the update target instead of the tipmost
descendent.
A small predicate is (finally) added to the bookmarks module to check
whether the current bookmark is also active.
Kevin Bullock <kbullock@ringworld.org> [Mon, 21 Jan 2013 12:58:59 -0600] rev 18470
test-bookmarks-pushpull.t: don't set bookmark active unnecessarily
The test in question doesn't have anything to do with having an active
bookmark. This change makes the test change the two bookmarks it affects
without making them active. It clears the way for adding a test for
updating to an active bookmark that moved out from under us.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 24 Jan 2013 00:21:22 +0900] rev 18469
doc: use "tag" revset predicate instead of "tagged" for example in help
"tag" predicate is officially described in help, but "tagged" is not,
even though the latter works as same as the former.
Kevin Bullock <kbullock@ringworld.org> [Wed, 23 Jan 2013 11:55:39 -0600] rev 18468
tests: add regression tests for another revrange edge case
These tests would've passed before ac0c12123743 and e441657b372b.
Inserting them to make sure that continues to be the case.
Bryan O'Sullivan <bryano@fb.com> [Wed, 23 Jan 2013 00:20:26 -0600] rev 18467
graphmod: don't try to visit nullrev (issue3772)
Sean Farley <sean.michael.farley@gmail.com> [Wed, 23 Jan 2013 00:12:52 -0600] rev 18466
log: remove any ancestors of nullrev (issue3772)
For the special case, ":null" we remove the implied revision 0 since that
wouldn't make any sense here. A test case is added to make sure only nullrev is
shown.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 22 Jan 2013 18:40:23 -0600] rev 18465
help: add documentation for new template functions
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 22 Jan 2013 11:39:14 +0100] rev 18464
changectx: fix the handling of `tip`
We can not use `len(repo,changelog)`, it may be a filtered revision. We now use
`repo,changelog.tip()` to fetch this information.
The `tip` command is also fixed and tested
Thanks goes to Idan Kamara for the initial report.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 22 Jan 2013 03:23:02 +0100] rev 18463
bisect: use changelog for iteration
With changelog filtering, we can not use xrange anymore. We have to use the
changelog to do the iteration. This way, the changelog excludes filtered
revision and we can safely use what we iterate over.
Without this changes, bisect crash with a traceback if there is filtered
revision in the repo. Tests have been updated.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 21 Jan 2013 19:40:15 +0100] rev 18462
documentation: update to new filter names
Changeset f3b21beb9802 change filter names but forgot some documentation
updates.
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 21 Jan 2013 13:42:04 -0200] rev 18461
largefiles: enhance error message to make it more i18n-friendly
Matt Mackall <mpm@selenic.com> [Tue, 22 Jan 2013 17:55:14 -0600] rev 18460
merge with i18n
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Wed, 23 Jan 2013 00:51:53 +0100] rev 18459
largefiles: fix largefiles+subrepo update (issue3752)
Override updaterepo() instead of individual methods that may not be called for
each subrepo. Add test.
Based on patch from Matt Harbison.
Changes the order of update-related messages (now largefiles comes before the
global status).
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 21 Jan 2013 13:47:14 -0200] rev 18458
debugsuccessorssets: fix typos in docstring
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 21 Jan 2013 13:30:53 -0200] rev 18457
i18n-pt_BR: synchronized with f5fbe15ca744
Matt Mackall <mpm@selenic.com> [Sun, 20 Jan 2013 17:18:00 -0600] rev 18456
merge: only sort manifests in debug mode (issue3769)
Matt Mackall <mpm@selenic.com> [Sat, 19 Jan 2013 17:26:19 -0600] rev 18455
Added signature for changeset f5fbe15ca744
Matt Mackall <mpm@selenic.com> [Sat, 19 Jan 2013 17:26:16 -0600] rev 18454
Added tag 2.5-rc for changeset f5fbe15ca744
Matt Mackall <mpm@selenic.com> [Sat, 19 Jan 2013 17:24:33 -0600] rev 18453
merge default into stable for 2.5 code freeze
Matt Mackall <mpm@selenic.com> [Sat, 19 Jan 2013 17:20:39 -0600] rev 18452
pathencode: don't use alloca() for safety/portability
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sat, 19 Jan 2013 02:29:56 +0100] rev 18451
branchmap: display filtername when `updatebranch` fails to do its jobs
We have a very handy assert at the ends of `branchmap.updatecache` that check
the resulting branchmap is actually valid.
I know we do not like assert in mercurial but this one is very handy for
debugging. There is really not reason for `branchmap.updatecache` to have this
kind of issue but this happened and handful of time during the development of
this or introduction of other related feature. I advice to keep it around until
we are a bit more confident with the new code.
Mads Kiilerich <madski@unity3d.com> [Fri, 18 Jan 2013 01:24:29 +0100] rev 18450
scmutil: localize and improve 'not under root' message
Mads Kiilerich <madski@unity3d.com> [Fri, 18 Jan 2013 01:23:51 +0100] rev 18449
run-tests.py: don't let hg run interactively in debug mode
In normal test mode stdin is closed and hg is thus not interactive. In --debug
mode stdin is inherited from the running console and to the tests, and hg could
thus wait in prompts when running on Windows.
See http://selenic.com/pipermail/mercurial-devel/2013-January/047548.html .
Instead set ui.interactive=False to make Mercurial non-interactive. Other
commands might still work differently in the --debug environment.
This should solve the problem with hg waiting for input but still make it
possible to add --debugger to hg in a test and run run-tests.py with --debug.
Mads Kiilerich <madski@unity3d.com> [Fri, 18 Jan 2013 01:16:16 +0100] rev 18448
run-tests.py: backout "don't use console for stdin when running in debug mode"
f5842787a958 caused that some kind of interactive debugging no longer was
possible - such as running hg with --debugger in a test run with run-tests.py
--debug .
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 18 Jan 2013 23:41:48 +0100] rev 18447
rebase: properly handle unrebased revision between rebased one
With rebase taking multiple roots it is possible to have revision in the "rebase
domain" not rebased themself. We do not want rebased revision above them to be
detached. We want such revision to be rebased on the nearest rebased ancestors.
This allows to preserve the topology of the rebase set as much a possible
To achieve this we introduce a new state `revignored` which informs
`defineparents` of the situation.
The test in `test-rebase-obsolete.t` was actually wrote and his now fixed.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 18 Jan 2013 23:21:32 +0100] rev 18446
rebase: lose the comparison to `nullmerge`
For a proper behavior of the `--rev` revision we will need another possible
state for revision ignored by rebase. We alter the comparison to `nullmerge`
to match this future lower state too.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 18 Jan 2013 23:43:32 +0100] rev 18445
repoview: cache filtered changelog
Creating a new changelog object for each access is costly and prevents efficient
caching changelog side. This introduced a x5 performance regression in log
because chunk read from disk were never reused. We were jumping from about 100
disk read to about 20 000.
This changeset introduce a simple cache mechanism that help the last changelog
object created by a repoview. The changelog is reused until the changelog or the
filtering changes.
The cache invalidation is much more complicated than it should be. But MQ test
show a strange cache desync. I was unable to track down the source of this
desync in descent time so I'm not sure if the issue is in MQ or core. However
given the proximity to the 2.5 freeze, I'm choosing the inelegant but safe route
that makes the cache mechanism safer.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 18 Jan 2013 14:15:32 +0100] rev 18444
rebase: do not invent successor to skipped changeset
When rebase results in an empty a changeset it is "skipped" and no related
changeset is created at all. When we added obsolescence support to rebase (in
fc2a6114f0a0) it seemed a good idea to use its parent successor as the
successors for such dropped changesets. (see old version of the altered test).
This option was chosen because it seems a good way to hint about were the
dropped changeset "intended" to be. Such hint would have been used by automatic
evolution mechanism to rebase potential unstable children.
However, field testing of this version are not conclusive. It very often leads
to the creation of (totally unfounded) evolution divergence. This changeset
changes this behavior and mark skipped changesets as pruned (obsolete without
successors). This prevents the issue and seems semantically better probably a
win for obsolescence reading tool.
See example bellow for details:
User Babar has five changesets of interest:
- O, its current base of development.
- U, the new upstream
- A and C, some development changesets
- B another development changeset independent from A
O - A - B - C
\
U
Babar decides that B is more critical than the A and C and rebase it first
$ hg rebase --rev B --dest U
B is now obsolete (in lower case bellow). Rebase result, B', is its
successors.(note, C is unstable)
O - A - b - C
\
U - B'
Babar is now done with B', and want to rebase the rest of its history:
$ hg rebase --source A --dest B'
hg rebase process A, B and C. B is skipped as all its changes are already contained
in B'.
O - U - B' - A' - C'
Babar have the expected result graph wise, obsolescence marker are as follow:
B -> B' (from first rebase)
A -> A' (from second rebase)
C -> C' (from second rebase)
B -> ?? (from second rebase)
Before this changeset, the last marker is `B -> A'`. This cause two issues:
- This is semantically wrong. B have nothing to do with A'
- B has now two successors sets: (B',) and (A',). We detect a divergent
rewriting. The B' and A' are reported as "divergent" to Babar, confusion
ensues. In addition such divergent situation (divergent changeset are children
to each other) is tricky to solve.
With this changeset the last marker is `B -> ΓΈ`:
- This is semantically better.
- B has a single successors set (B',)
This scenario is added to the tests suite.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 17 Jan 2013 17:51:30 +0100] rev 18443
repoview: protect `base` computation from weird phase root
If for some reason the phase roots contains nullid, the set of filtered revs
will contains -1. That confuse Mercurial a lot. In particular this corrupt the
branchcache.
Standard code path does not result in nullid phase root. It can only result from
altered `.hg/store/phaseroots` or buggy extension. However better safe than
sorry.
Siddharth Agarwal <sid0@fb.com> [Fri, 18 Jan 2013 15:55:16 -0800] rev 18442
posix: don't compare atime when determining if a file has changed
A file's atime might change even if the file itself doesn't change. This might
cause us to invalidate caches more often than necessary.
Before this change, hg add often resulted in the dirstate being parsed twice
on systems that track atime. After this change, it is only parsed once. For a
repository with over 180,000 files, this speeds up hg add from 1.2 seconds to
1.0.
Augie Fackler <raf@durin42.com> [Fri, 05 Oct 2012 18:10:56 -0500] rev 18441
hg: replace DirCleanup class with normal try/finally use
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 19:21:03 +0100] rev 18440
histedit: proper phase conservation (issue3724)
Before this changeset, histedit created all new changesets according
phases.new-commit option without any regards for the phases of the original
changesets.
This changeset fix that using the phase of rewritten changeset to decide the
phase of the resulting changeset. In case of reordering or folding, we keep
secret item secret as it seems the safer path.
temporary commit creation are not affected. They are head only and stripped at
the end of the histedit.
As for the resolution of issue3681 (obsolescence cycle prevention), we do not
handle changesets created by edit command.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 19:19:56 +0100] rev 18439
test-histedit: reorder phases test and prepare for more
We are going to add a lot regarding phase of test while fixing issue3724.
This movement allows to put them after this first phase test.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 19:17:36 +0100] rev 18438
test-histedit: fix instability creation test
The current test does not rewrite anything and therefor does not create any
instability.
We also clean up the repo state after the test. This required the rebase
extension.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 19:14:22 +0100] rev 18437
histedit: record histedit source (issue3681)
Have histedit record the hex of the original changeset as already done by:
- graft
- commit --amend
- rebase
My main motivation for adding this is to prevent the creation of obsolescence cycle
(see issue3681).
Note that commit created during edit are not affected yet.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 16 Jan 2013 19:11:06 +0100] rev 18436
histedit: factor most commit creation in a function
Later commits add two important items to histedit:
- Obsolescence cycle prevention
- Proper phase conservation
Those logics must be applied to all simple operations (pick, edit, mess) and
will require verbose code.
So we introduce a new function that will provide an entry point for this new.
logic.
The function build a closure to have a clear distinction between commit
arguments and data provided to the function to fulfil its logic.
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:37 -0800] rev 18435
store: switch to C-based hashed path encoding
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:36 -0800] rev 18434
pathencode: implement both basic and hashed encoding in C
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:36 -0800] rev 18433
pathencode: implement hashed encoding in C
This will be used by an upcoming patch.
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:35 -0800] rev 18432
pathencode: implement the "mangling" part of hashed encoding in C
This will be used by an upcoming patch.
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:34 -0800] rev 18431
pathencode: add a SHA-1 hash function
This will be used by an upcoming patch.
This calls out to the Python hash implementation.
An earlier version of this function implemented SHA-1 directly, but
the amount of extra code didn't seem like a good tradeoff compared
to the small big-picture increase in performance (long paths are
uncommon).
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 13:09:33 -0800] rev 18430
store: implement lowerencode in C
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 15 Jan 2013 22:34:56 +0100] rev 18429
hgweb: run with "served" filter
This changeset enable the "served" filter on all repo used by hgweb.
Hgweb misbehave in a lot of when filtering changeset are present but I do not
expect normal people to have secret or obsolete changeset on they server.
Misbehavior will be gradually fixed later.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 16 Jan 2013 14:22:43 +0100] rev 18428
hgweb: walk the graph through the changelog
This is necessary to enforce filtering. The result is a bit buggy (may provide
less changeset than expected, but it will stop crashing on filtered revision
access.
Note that changelog.revs can not represents empty iteration like xrange did. So
we have to explicitly prevent call when there is nothing to do.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 11 Jan 2013 01:08:00 +0100] rev 18427
hgweb: use changelog for iteration
Iterating through changelog is necessary to enforce filtering.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 14:19:28 +0100] rev 18426
hgweb: ignore filtered revision in revnav
This changeset checks that a revision is known before adding it to the
navigation.
This will prevent traceback on filtered repository. This changeset result in an
incorrect behaviors, Navigation link may be dropped without any replacement.
However this bad navigation generation is much better than a crash
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 10 Jan 2013 19:29:48 +0100] rev 18425
hgweb: generate revnav in two phase
We first generate revision to link. Then we dispatch them in before, after list.
This will help filtering of unknown revision.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 17 Jan 2013 00:35:01 +0100] rev 18424
rebase: support multiple roots for rebaseset
We have all the necessary mechanism to rebase a set with multiple roots, we only
needed a proper handling of this case we preparing and concluding the rebase.
This changeset des that.
Rebase set with multiple root allows some awesome usage of rebase like:
- rebase all your draft on lastest upstream
hg rebase --dest @ --rev 'draft()'
- exclusion of specific changeset during rebase
hg rebase --rev '42:: - author(Babar)'
- rebase a set of revision were multiple roots are later merged
hg rebase --rev '(18+42)::'
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 16 Jan 2013 05:21:11 +0100] rev 18423
clfilter: stronger detection of filtered changeset in changectx.__init__
We previously let some IndexError spill out of this function.
A new tests is added to check the command that spotted the error.
Sune Foldager <cryo@cyanite.org> [Tue, 11 Dec 2012 20:13:21 +0100] rev 18422
validate: check for spurious incoming filelog entries
Accepting those will lead to "mild corruption", correctly reported as
an error by hg verify, but often not a problem in practice.
Enabled when server.validate is switched on.
Johannes Schlatow <johannes@schlatow.name> [Thu, 17 Jan 2013 01:06:00 +0100] rev 18421
zsh_completion: add descriptive branch names to head revisions
Johannes Schlatow <johannes@schlatow.name> [Thu, 17 Jan 2013 00:54:49 +0100] rev 18420
zsh_completion: add completion of branch names
Johannes Schlatow <johannes@schlatow.name> [Thu, 17 Jan 2013 01:55:50 +0100] rev 18419
zsh_completion: fix issue with overlong branch/tag names
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:52:56 +0100] rev 18418
bundlerepo: remove old style check of file names
The old check is no longer needed:
The checked paths will be passed on to filelog.__init__ which will prefix the
path with 'data/'. A leading '/' will thus not do any harm.
And: The paths will be used by an opener which will use a pathauditor.
And finally: The old check did not consider Windows paths and was thus
insufficient.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18417
bundlerepo: use revlog._checkhash
The error message will mention datafile instead of indexfile.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18416
bundlerepo: store validated deltabase rev in basemap instead of node
This avoids some lookups and aligns bundlerepo more with what revlog do.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18415
bundlerepo: use rev instead of node for iteration in revision()
Avoids some lookups and avoids using rev while iterating.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18414
bundlerepo: inline inbundle()
It didn't make it faster, it didn't make the code smaller, it didn't make the
code simpler.
-1 is never in basemap.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18413
bundlerepo: drop bundlebase wrapper function for basemap
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:41 +0100] rev 18412
bundlerepo: remove unused disktiprev attribute
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:34 +0100] rev 18411
bundlerepo: improve performance for bundle() revset expression
Create the set of revision numbers directly instead of creating a list of nodes
first.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Jan 2013 20:41:32 +0100] rev 18410
bundlerepo: fix outdated comment
Comment was made invalid by 01ee43dda681.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 16 Jan 2013 13:18:22 +0100] rev 18409
hgweb: pass repo object to revnav construction
For compatibility with changelog filtering we need access to the changelog, a
simple nodefunc is not sufficient, only the changelog and repo have access the
filteredrevs information.
For the filerevnav version, we use an unfiltered changelog. Linkrev is currently
broken with filtering and we need some failsafe to prevent traceback. This is
the same approach as the one used in 518c1403838f. The use of
filectx.changectx() allowed the previous code to use the 518c1403838f hack.
This changeset may result in an incorrect behaviors, Navigation
link may point to missing revision. However this bad navigation
generation is much better than a plain crash
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 14 Jan 2013 16:55:48 +0100] rev 18408
hgweb: introduction a filerevnav subclass
It'll be use to implement the file specific behavior.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 10 Jan 2013 19:09:32 +0100] rev 18407
hgweb: simplify addition of "(0) navigation entry"
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 14 Jan 2013 16:30:06 +0100] rev 18406
hgweb: simplify the handling of empty repo
This abstraction have two advantages:
- If the revlog is empty, None of the code bellow is relevant,
early returns seems a win.
- Abtraction of the 'emptiness' check will help later when we stop relying on
nodefunc.
A bonus, with filtering, a non-empty revlog may not have '0' revision
accessible. It'll be easier to handle with the emptiness test in a dedicated
function