Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:39:00 -0400] rev 21161
Added tag 3.0-rc for changeset 564f55b25122
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:36:17 -0400] rev 21160
merge default into stable for 3.0 code freeze
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:56:15 -0400] rev 21159
bundle2: allow extensions to extend the getbundle request
We want extensions to be able to request extra parts.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:32:34 -0400] rev 21158
bundle2: add a way to add parts during a `getbundle` request
We add a hook function to let extensions add parts to the bundle.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:25:50 -0400] rev 21157
getbundle: pass arbitrary arguments all along the call chain
The wireprotocol command accepts arbitrary arguments, we are now passing such
arguments down the call chain.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:59:28 -0400] rev 21156
bundle2: call a hook after the transaction is closed
We call a dedicated hook right after closing the transaction. This will let
people react to the transaction with all the information in hand. This hook is
experimental and will not survive in future versions.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:21:39 -0400] rev 21155
bundle2: call a hook prior to closing the transaction
We call a dedicated hook right before closing the transaction. This will let
people abort unbundling with all the information in hand. This hook is
experimental and will not survive in future versions.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:16:21 -0400] rev 21154
bundle2: inform transaction that we are in a bundle2 unbundle
That way, hooks called during the unbundle process are aware that a bigger picture
is going on.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:46:26 -0400] rev 21153
changegroup: use tr.hookargs when calling changegroup hooks
So that other parties using the transaction can put information in our hook
calls.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:15:02 -0400] rev 21152
changegroup: use tr.hookargs when calling pretxnchangegroup hooks
So that other parties using the transaction can put information in our hook
calls.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:09:20 -0400] rev 21151
addchangegroup: register data in tr.hookargs
We are registering data related to the process into the transaction hook data.
This lets other parties using the same transaction get informed of the
addchangegroup result.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:04:59 -0400] rev 21150
transaction: add a notion of hook arguments
It is now possible to register parameters to be used when invoking hooks in this
transaction. This will cope with the fact that bundle2 adds multiple data types
in a single transaction.
Do not expect any wide and consistent usages of this in the next release. This
will be used by bundle2 experiments first. It will be made better for the release
after.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:54:15 -0400] rev 21149
bundle2: allow extensions to plug into the push process
Extensions are offered functions to add parts and process their results.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:04:58 -0400] rev 21148
bundle2: require both client and server to opt in
Even if the server is bundle2-enabled, the client now has to opt-in in the
config too.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:01:58 -0400] rev 21147
bundle2: move bundle2 config option to section "experimental"
We highlight the fact that this is experimental by moving it to an "experimental"
section, and we match the config name with the server capability name
`bundle2-exp`.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:45:12 -0400] rev 21146
bundle2: move all parts into a `bx2` namespace
All currently core parts are moved to a `bx2` namespace (for "bundle 2
experimental"). This should avoid conflicts between the final stable
format and the one about to be released.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:33:17 -0400] rev 21145
bundle2: rename server capability to bundle2-exp
For the same reason, we advertise this bundle2 implementation and format as
experimental. This will leave room for field testing in 3.0 but won't conflict
with a stable implementation in 3.1.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:27:54 -0400] rev 21144
bundle2: use HG2X in the header
The current implementation of bundle2 is still very experimental and the 3.0
freeze is yesterday. The current bundle2 format has never been field-tested, so
we rename the header to HG2X. This leaves the HG20 header available for real
usage as a stable format in Mercurial 3.1.
We won't guarantee that future mercurial versions will keep supporting this
`HG2X` format.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 02:01:38 -0400] rev 21143
bundle2: transmit capabilities to getbundle during pull
Bundle2 capabilities of the client are sent to the server in the bundlecaps
argument of `getbundle`.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 14:37:24 -0400] rev 21142
bundle2: include client capabilities in the pushed bundle
The necessary data is now included in the `replycaps` part.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:49:20 -0400] rev 21141
bundle2: advertise bundle2 caps in server capabilities
We can now retrieve them from the server during push. The capabilities are
encoded the same way as in `replycaps` part (with an extra layer of urlquoting
to escape separators).
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:50:28 -0400] rev 21140
bundle2: add bundle2caps dict on localrepo object
This dictionary will hold bundle2-related capabilities.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:44:53 -0400] rev 21139
bundle2: capabilities encoding
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:09:05 -0400] rev 21138
bundle2: extract capabilities decoding
We'll need to reuse this in more places (at least pull and push).
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:03:33 -0400] rev 21137
bundle2: protect capabilities name and values with url quoting
This lift limitations of the text based encoding.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 11:44:49 -0400] rev 21136
bundle2: support for capabilities with values
The capabilities attributes of `bundle20` is now a dictionary and the reply caps
can encode capabilities with values.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 11:32:30 -0400] rev 21135
bundle2: add capabilities support in `replycaps` part
This part now contains a list of supported capabilities.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:55:59 -0400] rev 21134
bundle2: adds a capabilities attribute on bundler20
This attribute conveys the capabilities supported by the destination of the
bundle. It is used to decide which parts to include in the bundle.
This is currently a set but will probably be turned into a dictionary to allow
capabilities with values.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:18:27 -0400] rev 21133
bundle2: include stderr when capturing handlers output
We do not discriminate between stdout and stderr yet. But this will do for now.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:36:57 -0400] rev 21132
ui: pushbuffer can now also capture stderr
We need an easy way to capture both stderr and stdout during bundle2 processing
of a remote bundle. This changeset adds simple changes to the `ui` class to make
this possible.
I expect the interface to change in future releases as bundle2 will probably want to
distinguish stdout and stderr. The current change will, however, do for now.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 14:22:24 -0400] rev 21131
bundle2: capture remote stdout while unbundling
When a reply is built, the bundle processing will capture the output of each
handler and sends it to the client in a dedicated part.
As a side effect, this add a "remote: " prefix to destination output on local
push. This is considered okay for now as:
1. bundle2 is still experimental,
2. Matt said he could be okay to change output for bundle2,
3. This keeps the implementation simple.
This changeset does it for stdout only. stderr will be done in a future changeset.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 14:09:35 -0400] rev 21130
bundle2: introduce `replycaps` part for on-demand reply
The bundle2 processing does not create a bundle2 reply by default anymore. It
is only done if the client requests it with a `replycaps` part. This part is
called `replycaps` as it will eventually contain data about which bundle2
capabilities are supported by the client.
We have to add a flag to the test command to control whether a reply is
generated or not.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 18:41:48 -0400] rev 21129
bundle2: use an official iterparts method to unbundle parts
Explicit is better than implicit.
Mads Kiilerich <madski@unity3d.com> [Fri, 28 Feb 2014 02:52:32 +0100] rev 21128
merge: with merge.preferancestor=*, run an auction with bids from ancestors
The basic idea is to do the merge planning with all the available ancestors,
consider the resulting actions as "bids", make an "auction" and
automatically pick the most favourable action for each file.
This implements the basic functionality and will only consider "keep" and
"get" actions. The heuristics for picking the best action can be tweaked later
on.
By default it will only pass ctx.ancestor as the single ancestor to
calculateupdates. The code path for merging with a single ancestor is not
changed.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 28 Feb 2014 15:10:56 -0800] rev 21127
log: changed implementation to use graphlog code
Now that revsets work in a lazy way, log code can be changed to parse every
option into a revset and then evaluate it lazily.
Now expressions like
"hg log -b default -b ."
are converted into a revset using the same code as graphlog.
Mads Kiilerich <madski@unity3d.com> [Mon, 24 Feb 2014 22:42:14 +0100] rev 21126
context: introduce merge.preferancestor for controlling which ancestor to pick
Multiple revisions can be specified in merge.preferancestor, separated by
whitespace. First match wins.
This makes it possible to overrule the default of picking the common ancestor
with the lowest hash value among the "best" (introduced in 3605d4e7e618).
This can for instance help with some merges where the 'wrong' ancestor is used.
There will thus be some overlap between this and the problems that can be
solved with a future 'consensus merge'.
Mercurial will show a note like
note: using 40663881a6dd as ancestor of 3b08d01b0ab5 and adfe50279922
alternatively, use --config merge.preferancestor=0f6b37dbe527
when the option is available, listing all the alternative ancestors.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 17:32:04 +0200] rev 21125
context: tell when .ancestor picks one of multiple common ancestors heads
Show a message like
note: using 0f6b37dbe527 as ancestor of adfe50279922 and cf89f02107e5
So far this is just a warning - there is nothing the user can do to select
another ancestor.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:09 +0900] rev 21124
hgweb: align entries in "changelog" and "revisions" pages of "spartan" style
Before this patch, each log entries in "changelog" and "revisions"
pages of "spartan" style are not aligned by column, because:
- each log entries are separated "<table>" entries, and
- there are no fixed "width" information for each "<th>"/"<td>" entries
This patch aligns entries in "changelog" and "revisions" pages of
"spartan" style by:
- adding 'label' class to '<th>' for 'age' information, and
- setting 'width' of '<th class="label">' with fixed size
'class="age"' is not used for this purpose, because it is also used to
set "bold" font-weight
"16em" seems to be wide enough to show date information fully, when
web browser disables (or doesn't support) javascript.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:09 +0900] rev 21123
hgweb: show revisions and hashes gotten from changelog in "comparison" page
Before this patch, revision numbers and hash values in "comparison"
page are gotten from not changelog but filelog.
Such filelog information is useful only for hgweb debugging, and may
confuse users.
This patch shows revision numbers and hash values gotten from
changelog in "comparison" page.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21122
hgweb: show as same parents as "hg parents -r REV FILE" in pages for file
Before this patch, "parents" in pages for file doesn't show as same
parents as "hg parents -r REV FILE", when the specified file is not
modified in the specified revision.
For example, it is assumed that revision A, B and D change file "f".
changelog (A) ---> (B) ---> (C) ---> (D)
filelog "f" (x) ---> (y) ------------> (z)
"/file/D/f" invokes "webutil.parents()" with filectx(z) gotten from
changectx(D), and it returns changectx(B). This is as same result as
"hg parents -r D f".
In the other hand, "/file/C/f" invokes "webutil.parents()" with
filectx(y') gotten from changectx(C), and it returns changectx(A),
because filectx(y') is linked to changectx(B), and works like
filectx(y) in some cases.
In this case, revision B is hidden from users browsing file "f" in
revision C.
This patch shows as same parents as "hg parents -r REV FILE" in pages
for file, by making "webutil.parents()" return:
- "linkrev()"-ed revision only, if:
- specified context instance is "filectx" (because
"webutil.parents()" is invoked with changectx, too), and
- (1) the revision from which filectx is gotten and (2) the one to
which filectx is linked are different from each other
- revision gotten from "ctx.parents()", otherwise
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21121
hgweb: make "comparison" get parent from not filelog but changelog
Before this patch, "comparison" shows unexpected result, when the
specified file is not modified in the specified revision, even though
"diff" shows empty result.
When REV doesn't change specified FILE, "diff" shows:
"hg diff -c REV FILE"
but "comparison" shows:
"hg diff -c `hg parents -r REV FILE` FILE"
In other words, the former gets parent from changelog, but the latter
gets one from filelog.
This may confuse users browsing (and switching "diff" and
"comparison" of) files in the specified revision.
This patch makes "comparison" get parent from not filelog but
changelog, to show "hg diff -c REV FILE" in both "diff" and
"comparison" pages.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21120
hgweb: fix lack of "bookmarks" link in "/file" page of "paper" style
This patch also fixes same problem of "coal" style, because it re-uses
"filerevision.tmpl" of "paper" style.
"gitweb" and "monoblue" styles don't have such problems.
"spartan" style doesn't have "bookmarks" page definition itself.
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:48:22 -0700] rev 21119
hgweb: adding article link to rss feed
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:47:49 -0700] rev 21118
hgweb: adding branch names from inbranch template to rss feed
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:45:43 -0700] rev 21117
hgweb: adding branch names from inbranch template to atom feed
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21116
dirstate: report bad subdirectories as match.bad, not just a warning (BC)
This seems simpler and more correct.
The only test coverage for this is test-permissions.t when it says:
dir: Permission denied
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21115
dirstate: improve documentation and readability of match and ignore in the walker
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21114
context: remove redundant handling of match.bad return value
The 'bad' function is for reporting - it never returns anything.
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21113
match: remove last traces of unused .missing callback
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 22:00:08 +0200] rev 21112
match: _globre doctests
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21111
match: improve documentation - docstrings and more descriptive variable naming
No real changes.
pattern: 'kind:pat' as specified on the command line
patterns, pats: list of patterns
kind: 'path', 'glob' or 're' or ...
pat: string in the corresponding 'kind' format
kindpats: list of (kind, pat) tuples
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 05 Mar 2014 15:55:09 -0800] rev 21110
largefiles: changed overridelog to work with graphlog
Log for largefiles was failing for graph log since it was overriding match
instead of matchandpats.
[Mads Kiilerich modified this patch to address his review comments and ended up
rewriting/removing most of it.]
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 06 Mar 2014 14:52:07 -0800] rev 21109
largefiles: added test coverage for graph log
[Mads Kiilerich placed this patch before the patch that makes graphlog actually
work correctly for largefiles. As it is introduced here it just adds test
coverage and the actual bugfix patch will show the actual change.]
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 25 Feb 2014 10:40:04 -0800] rev 21108
cmdutil: changed _makegraphlogrevset to _makelogrevset
This method will now be used to build both graphlog and log revset after this
series of patches.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21107
revlog: backout 514d32de6646 - commonancestors
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21106
localrepo: use commonancestorsheads for checking linear heritage in file commit
If two revisions are linearly related, there will only be one ancestor, and
commonancestors and commonancestorsheads would give the same result.
commonancestorsheads is however slightly simpler, faster and more correct.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21105
backout: use commonancestorsheads for checking linear heritage
If two revisions are linearly related, there will only be one ancestor, and
commonancestors and commonancestorsheads would give the same result.
commonancestorsheads is however slightly simpler, faster and more correct.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:35 +0200] rev 21104
revlog: introduce commonancestorsheads method
Very similar to commonancestors but giving all the common ancestors heads.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:58:08 +0200] rev 21103
parsers: remove unnecessary gca variable in index_commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Mon, 24 Feb 2014 22:42:14 +0100] rev 21102
parsers: introduce index_commonancestorsheads
This is an exact copy of index_ancestors but without the final "deepest"
pruning.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:49:56 +0200] rev 21101
ancestors: extract candidates function as commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 14:54:46 +0200] rev 21100
filemerge: better handling of failing remove of temporary files
We have seen some failures on Windows that could seem like the unlinks of
temporary files were failing. That could perhaps be because the merge tool
somehow still held the files open.
Instead of the bare bone os.unlink, use our util.unlink with special
rename/retry handling on Windows.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 14:54:46 +0200] rev 21099
contrib: remove mergetools.hgrc premerge=False for Beyond Compare and Araxis
There can be good reasons to disable premerge no matter which merge tool is
used. Most tools will do just fine without premerge and handle the simple
merges more or less automatic and silent. We _could_ thus disable premerge for
most tools. But without premerge, the merge tool will be launched for each file
- that makes it a slow and expensive process to perform big simple merges. It
is thus better to consistently stick to the default premerge=True.
The mergetools.hgrc configuration for most tools implicitly use the default
premerge=True but Araxis and the Linux entry for Beyond Compare had
premerge=False. These lines has been removed.
These settings were introduced by 6b354a763617 without further explanation of
why they should be good.
(We have seen some crashes on Windows with Araxis where a merge failed after a
lot of Araxis flashing. I haven't been able to reproduce it and do not know
exactly what happened. Enabling premerge avoids the problems.)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21098
obsolete: add '%' specifier to the format string to avoid TypeError at runtime
Mapping operation on the format string not including any '%'
specifiers causes TypeError at runtime.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21097
check-code: detect "% inside _()" when there are leading whitespaces
Before this patch, "contrib/check-code.py" can't detect "% inside _()"
correctly, when there are leading whitespaces before the format
string, like below:
_(
"format string %s" % v)
This patch adds regexp pattern "[ \t\n]*" before the pattern matching
against the format string.
"[\s\n]" can't be used in this purpose, because "\s" is automatically
replaced with "[ \t]" by "_preparepats()" and "\s" in "[]" causes
nested "[]" unexpectedly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21096
i18n: fix "% inside _()" problem
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21095
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Apr 2013 13:18:25 +0200] rev 21094
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21093
largefiles: remove dummy assignments for creating an already existing closure
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21092
largefiles: remove silent handling of incorrect invocation of restorematchfn
It is better to get a crash than to continue without noticing errors.
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21091
largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21090
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21089
largefiles: use more reasonable locking for update
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21088
largefiles: full debugdirstate functionality for largefiles
- just reusing the original command with a mockup repo.
This makes it possible to see dates in the lfdirstate and gives less code
duplication.
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21087
largefiles: make cat on standins do something
cat of a standin would silently fail.
The use of standins is mostly an implementation detail, but it is already a bit
leaking. Being able to see the content of standins might be convenient for
debugging.
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21086
largefiles: remove confusing handling of .bad return value - it is void
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21085
largefiles: fix profile of unused largefilesdirstate._ignore
Mads Kiilerich <madski@unity3d.com> [Tue, 08 Apr 2014 00:48:36 +0200] rev 21084
largefiles: import whole modules instead of importing parts of them
Be more friendly to demandimport.
Mads Kiilerich <madski@unity3d.com> [Thu, 18 Apr 2013 18:56:18 +0200] rev 21083
largefiles: update should only create a .orig backup of a largefile once
A .orig of a standin after the update do that a .orig of the actual largefile
is created. The .orig standin was however never removed again and the largefile
.orig was thus overwritten again and again.
The fix: remove the standin .orig when it is used.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 02:12:28 +0200] rev 21082
merge: let manifestmerge emit 'keep' actions when keeping wd version
Such a 'keep' action will later be the preferred (non)action when there
is multiple ancestors. It is thus very convenient to have it explicitly.
The extra actions will only be emitted in the case where the local file has
changed since the ancestor but the other hasn't. That is the symmetrical
operation to a 'get' action.
This will create more action tuples that not really serve a purpose. The number
of actions will however have the number of changed files as upper bound and it
should thus not increase the memory/cpu use significantly.
Mads Kiilerich <madski@unity3d.com> [Sun, 06 Apr 2014 13:39:51 +0200] rev 21081
merge: pass merge ancestor to calculateupdates as a list
The list will so far always have one element.
Mads Kiilerich <madski@unity3d.com> [Sun, 06 Apr 2014 13:39:51 +0200] rev 21080
merge: move ancestor selection tweaking from manifestmerge to update function
- passing it through calculateupdates.
This will make sure manifestmerge actually use the ancestor it is given.
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21079
match: make it more clear what _roots do and that it ends up in match()._files
Matt Harbison <matt_harbison@yahoo.com> [Tue, 15 Apr 2014 23:29:19 -0400] rev 21078
cat: explicitly document the supported formatter rules
The previous documentation pointed to the export command, but even if the user
recognized that instead of only reading the cat specific list of rules, not all
of the export rules applied anyway (specifically %N, %n and %m). The new items
are a copy/paste from export's list. These rules have existed since at least
version 0.5.
Note that %m gets substituted with 'None' because the commit message isn't
passed to cmdutil.makefilename(). %R and %r are currently effectively the same,
since no revwidth is passed, however they both work.
There aren't any existing tests for these rules, so they are added to prevent
future regression.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Apr 2014 01:10:08 +0200] rev 21077
convert: backout 81cf597dafa9 and a3545c3104aa -closemap
Closemap solves a very specific use case. It would be better to have a more
generic solution than to have to maintain this forever.
Closemap has not been released yet and removing it now will not break any
backward compatibility contract.
There is no test coverage for closemap but it seems like the same can be
achieved with a simple and much more powerful custom extension:
import hgext.convert.hg
class source(hgext.convert.hg.mercurial_source):
def getcommit(self, rev):
c = super(source, self).getcommit(rev)
if rev in ['''
d643f67092ff123f6a192d52f12e7d123dae229f
9117c6561b0bd7792fa13b50d28239d51b78e51f
f368a1c302d5b87506f7edb13769e591e063d7ea
''']:
c.extra = c.extra.copy()
c.extra['close'] = '1'
return c
hgext.convert.hg.mercurial_source = source
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Apr 2014 01:09:49 +0200] rev 21076
convert: backout b75a04502ced and 9616b03113ce - tagmap
Tagmap solves a very specific use case. It would be better to have a more
generic solution than to have to maintain this forever.
Tagmap has not been released yet and removing it now will not break any
backward compatibility contract.
There is no test coverage for tagmap but it seems like the same can be achieved
with a (relatively) simple and much more powerful custom extension:
import hgext.convert.hg
def f(tag):
return tag.replace('some', 'other')
class source(hgext.convert.hg.mercurial_source):
def gettags(self):
return dict((f(tag), node)
for tag, node in in super(source, self).gettags().items())
def getfile(self, name, rev):
data, flags = super(source, self).getfile(name, rev)
if name == '.hgtags':
data = ''.join(l[:41] + f(l[41:]) + '\n' for l in data.splitlines())
return data, flags
hgext.convert.hg.mercurial_source = source
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 11:53:10 -0400] rev 21075
bundle2: support for push over the wire
We use the new method defined in the past changeset to send a bundle2 stream and
receive one in reply. The http version is missing remote output support. This
will be done later using a bundle part.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:53:52 -0400] rev 21074
httppeer: support for _calltwowaystream
This new method is now supported by http too.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:18:35 -0400] rev 21073
sshpeer: add implementation of _calltwowaystream
This implements the call needed by bundle2. The error handling is a bit flaky
right now, but bundle2 error handling in general is still flaky anyway. Bundle2
is still disabled by default, I do not expect this to be a problem.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:19:46 -0400] rev 21072
wireproto: add a _calltwowaystream method on wirepeer
This method will be used by bundle2 pushes. It calls a command, feeds it with a
stream and receives another stream in reply.
Actual implementation for ssh and http will be done in later changesets.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 16:49:30 -0400] rev 21071
bundle2: return a bundle20 object from exchanges.unbundle
When a bundle2 is pushed we return a bundle instead of an integer. We use to
return a binary stream. We now return a `bundle20` bundler to make the life of
wireprotocol implementation simpler.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 16:42:52 -0400] rev 21070
bundle2: feed a binary stream to `peer.unbundle`
This input will have to travel over the wire anyway, so we feed the peer method
with a simple binary stream and rely on the server side to use `readbundle`
to create the python object.
The test output changes because the bundle is created marginally sooner and the
debug output interleaves in a different way.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 15:20:33 -0400] rev 21069
bundle2: allow bundle2 for pulling over the wire
This changeset makes `wireprotocol` peers advertise bundle2 capability and
comply with bundle2 `getbundle` requests.
Note that advertising bundle2 could make a client try to use it for push. Such
pushes would fail. However, I do not expect any human being to have enabled
bundle2 on their server yet.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 11:27:55 -0400] rev 21068
bundle2: return a stream from exchange.getbundle
For friendliness with the wire protocol implementation, the `exchange.getbundle` now
returns a binary stream when asked for a bundle2. We detect a bundle2 request and
upgrade the binary stream to an unbundler object.
In the future the unbundler may gain feature to look like a binary stream, but
we are not quite there yet.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:57:15 -0400] rev 21067
bundle2: let readbundle return unbundle20
The `readbundle` function can now recognize a bundle2 stream and return the
appropriate unbundler. This is required for proper bundle2 support over the
wire.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:54:54 -0400] rev 21066
bundle2: make header reading optional
The `readbundle` function will consume the 4 first bytes to dispatch between
various unbundler. We introduce a way to inform `unbundle20` that the header
has been read and it can be trusted.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:42:45 -0400] rev 21065
bundle2: prepare readbundle to return more that one type of bundle
We first read 4 bytes to get the `HG10` bytes then we read the compression scheme
if this is `HG10`. This prepares the code for the arrival of `HG20` handling.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 15:45:30 -0400] rev 21064
bundle2: add a ui argument to readbundle
The bundle2 unbundler needs a ui argument. We are now passing this information
to `readbundle`.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 15:33:50 -0400] rev 21063
bundle2: move `readbundle` into the `exchange` module
The `readbundle` function is going to understand the bundle2 header. We move the
function to a more suitable place before making any other changes.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 14:46:32 -0400] rev 21062
bundle2: use headerless HG10UN stream in changegroup
Using `readbundle` in the part handlers creates a circular import hell. We are
now using a simple `HG10UN` stream with no header. Some parameters may
later be introduced on the part to change parameter.
Producers are updated as well.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 10 Apr 2014 10:53:43 -0700] rev 21061
bundle2: allow using bundle2 for push
We now support bundle2 for local push. The unbundle function has to detect
which version of the bundle to use since the return type is different.
Note that push error handling is currently nonexistent. This is one of the
reasons why bundle2 is still disabled by default.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 06:43:01 -0700] rev 21060
bundle2: add a "check:heads" handler
This part is intended to hold the same role as the `heads` argument of the
unbundle function. The client fill it with the known heads at bundle time and
the server will abort if its heads changed.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 13 Apr 2014 16:36:51 -0400] rev 21059
repoview: make the conversion from node to rev explicit while computing hidden
You cannot use `repo[...]` lookup here. 1. It is slow 2. It is very likely to
trigger a hidden computation itself, entering an infinite loop.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 13 Apr 2014 16:39:31 -0400] rev 21058
repoview: drop duplicated lookup
We are already looking for local tags on the line above. We can safely drop
this extra lookup.
Aaron Jensen <ajensen@webmd.net> [Wed, 16 Apr 2014 09:32:04 -0700] rev 21057
hgweb: adding branch, tags, bookmarks, user, and file list to rss feed entries
Aaron Jensen <ajensen@webmd.net> [Wed, 16 Apr 2014 09:31:37 -0700] rev 21056
hgweb: adding branch, tags, bookmarks, user, and file list to atom feed entries
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 21055
patchbomb: warn when emailing a dirty working directory parent
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:19:54 +0100] rev 21054
tests: coverage of convert and filemap include and the default of include all
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21053
largefiles: remove no more referred "getoutgoinglfiles()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21052
largefiles: use "outgoinghooks" to avoid redundant outgoing check
Before this patch, "hg outgoing" invokes "findcommonoutgoing()" not
only in "commands.outgoing()" but also in
"overrides.overrideoutgoing()" (via "getoutgoinglfiles()"), when
largefiles is enabled. The latter is redundant.
This patch uses "outgoinghooks" to avoid redundant outgoing check.
Newly introduced function "overrides.outgoinghook()" is registered
into "outgoinghooks" to get the result of outgoing check in
"commands.outgoing()".
It invokes "lfutil.getlfilestoupload()" directly with the result of
outgoing check to avoid redundant outgoing check in
"getoutgoinglfiles()": "sort()" is needed, because
"lfutil.getlfilestoupload()" doesn't sort the result of it.
This patch also omits "if toupload is None" ("No remote repo") case,
because failure of looking remote repository up should raise exception
in "commands.outgoing()" before invocation of "outgoinghooks".
Newly added "hg outgoing --large --graph" tests examine
"outgoinghooks" invocations in "hg outgoing --graph" code path.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21051
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
This patch introduces "outgoinghooks" to avoid redundant outgoing
check for "hg outgoing" in other than "commands.outgoing" (or utility
functions used by it).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21050
hg: make "_outgoing()" return peer object for remote repository
This patch makes "_outgoing()" return peer object for remote
repository, to avoid re-execution "expandpath()", "parseurl()", and
"peer()" on caller side for specified URL.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21049
hg: make "_outgoing()" return empty list instead of "None"
This patch makes "_outgoing()" return empty list instead of "None", if
there are no outgoing changesets, because:
- returning "None" requires callers to examine whether returned
value is "None" or not explicitly, if callers want to execute loop
on returned value, but
- there are no explicit needs to return "None"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21048
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
Before this patch, "hg summary --remote --large" invokes
"findcommonoutgoing()" not only in "commands.summary()" but also in
"overrides.overridesummary()" (via "getoutgoinglfiles()"). The latter
is redundant.
This patch uses "summaryremotehooks" to avoid redundant outgoing check.
Newly introduced function "overrides.summaryremotehook()" is
registered into "summaryremotehooks" to get the result of outgoing
check in "commands.summary()".
It invokes "lfutil.getlfilestoupload()" directly with the result of
outgoing check to avoid redundant outgoing check in
"getoutgoinglfiles()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21047
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
This patch introduces "summaryremotehooks" to avoid redundant
incoming/outgoing check for "hg summary" in other than
"commands.summary".
Only if "--remote" is not specified for "hg summary", hooks registered
in "summaryremotehooks" are invoked with "None" as "changes" argument
at first, and they should return tuple of two booleans meaning
"whether incomings are needed" and "whether outgoings are needed".
If no hooks return tuple containing "True", "hg summary" does nothing
any more, because incoming/outgoing check is not needed.
Otherwise, hooks are invoked again: at this time, "changes" argument
refers the result of incoming/outgoing check.
This patch also prevents RepoError from being raised if "--remote" is
not specified for "hg summary", because of backward compatibility for
"hg summary --large" without "--remote".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21046
util: enable "hooks" to return list of the values returned from each hooks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21045
summary: separate checking incoming/outgoing and showing remote summary
This patch separates checking incoming/outgoing and showing remote
summary, as a preparation for refactoring in succeeding patches,
because:
- checking incoming/outgoing may be needed, even if "--remote" is
not specified for "hg summary"
- checking incoming/outgoing may not be needed simultaneously
"hg summary --large" without "--remote" is typical case for these.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21044
largefiles: reuse "findcommonoutgoing()" result at "hg push"
Before this patch, "hg push" invokes "findcommonoutgoing()" not only
in "exchange.push()" but also in "lfilesrepo.push()", when largefiles
is enabled. The latter is redundant.
This patch registers own "prepushoutgoinghook" function into
"prepushoutgoinghooks" of "localrepository" to reuse
"findcommonoutgoing()" result.
"prepushoutgoinghook" omits "changelog.nodesbetween()" invocation,
because "findcommonoutgoing()" invocation in "exchange.push()" takes
"onlyheads" argument and it considers "nodesbetween()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21043
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
This patch introduces "prepushoutgoinghooks" to extend outgoing check
before pushing changesets to remote easily.
This chooses the function returning "util.hooks" instead of the one to
be overridden.
The latter may cause problems silently, if one of overriders forgets
(or fails) to execute a kind of "super(xxx, self).overridden(...)". In
the other hand, the former can ensure that all registered functions
are invoked, unless one of them raises an exception.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21042
largefiles: centralize the logic to get outgoing largefiles
Before this patch, "overrides.getoutgoinglfiles()" (called by
"overrideoutgoing()" and "overridesummary()") and "lfilesrepo.push()"
implement similar logic to get outgoing largefiles separately.
This patch centralizes the logic to get outgoing largefiles in
"lfutil.getlfilestoupload()".
"lfutil.getlfilestoupload()" takes "addfunc" argument, because each
callers need different information (and it is useful for enhancement
in the future).
- "overrides.getoutgoinglfiles()" needs only filenames
- "lfilesrepo.push()" needs only hashes of largefiles