Mike Edgar <adgar@google.com> [Sat, 28 Nov 2015 04:11:57 -0500] rev 27148
commit: preserve extra when amending with commit --amend
The new extra propagation needs to be accounted for in cmdutil.amend,
when checking for a no-changes fast-path.
Mike Edgar <adgar@google.com> [Sat, 28 Nov 2015 04:11:38 -0500] rev 27147
graft: copy extra (except branch) when copying changesets
Mike Edgar <adgar@google.com> [Sat, 28 Nov 2015 04:11:14 -0500] rev 27146
rebase: propagate extra dict from rebase source changeset
This corrects extra propagation for the rebase command and the shelve command.
Mathias De Maré <mathias.demare@gmail.com> [Wed, 25 Nov 2015 18:26:48 +0100] rev 27145
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com> [Wed, 25 Nov 2015 18:10:59 +0100] rev 27144
commands: add examples for 'addremove'
Mathias De Maré <mathias.demare@gmail.com> [Wed, 25 Nov 2015 18:10:31 +0100] rev 27143
commands: add example for 'hg add'
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Nov 2015 15:16:25 -0800] rev 27142
extensions: refuse to load extensions if minimum hg version not met
As the author of several 3rd party extensions, I frequently see bug
reports from users attempting to run my extension with an old version
of Mercurial that I no longer support in my extension. Oftentimes, the
extension will import just fine. But as soon as we run extsetup(),
reposetup(), or get into the guts of a wrapped function, we encounter
an exception and abort. Today, Mercurial will print a message about
extensions that don't have a "testedwith" declaring explicit
compatibility with the current version.
The existing mechanism is a good start. But it isn't as robust as I
would like. Specifically, Mercurial assumes compatibility by default.
This means extension authors must perform compatibility checking in
their extsetup() or we wait and see if we encounter an abort at
runtime. And, compatibility checking can involve a lot of code and
lots of error checking. It's a lot of effort for extension authors.
Oftentimes, extension authors know which versions of Mercurial there
extension works on and more importantly where it is broken.
This patch introduces a magic "minimumhgversion" attribute in
extensions. When found, the extension loading mechanism will compare
the declared version against the current Mercurial version. If the
extension explicitly states we require a newer Mercurial version, a
warning is printed and the extension isn't loaded beyond importing
the Python module. This causes a graceful failure while alerting
the user of the compatibility issue.
I would be receptive to the idea of making the failure more fatal.
However, care would need to be taken to not criple every hg command.
e.g. the user may use `hg config` to fix the hgrc and if we aborted
trying to run that, the user would effectively be locked out of `hg`!
A potential future improvement to this functionality would be to catch
ImportError for the extension/module and parse the source code for
"minimumhgversion = 'XXX'" and do similar checking. This way we could
give more information about why the extension failed to load.
timeless <timeless@mozdev.org> [Wed, 25 Nov 2015 00:39:05 +0000] rev 27141
run-tests: add --slowtimeout and use it for slow tests
Yuya Nishihara <yuya@tcha.org> [Sat, 31 Oct 2015 22:17:05 +0900] rev 27140
serve: unify cmdutil.service() calls of commandserver and hgweb
Yuya Nishihara <yuya@tcha.org> [Sat, 31 Oct 2015 22:15:16 +0900] rev 27139
hgweb: extract factory function of httpservice object
The next patch will merge the cmdutil.service() calls of both commandserver
and hgweb. Before doing it, this patch wipes out the code specific to hgweb
from commands.serve().
Yuya Nishihara <yuya@tcha.org> [Sat, 31 Oct 2015 21:57:45 +0900] rev 27138
hgweb: move httpservice object from commands module
This avoids the deep import of hgweb.server at the commands module.
Siddharth Agarwal <sid0@fb.com> [Wed, 25 Nov 2015 14:25:33 -0800] rev 27137
merge: move almost all change/delete conflicts to resolve phase (BC) (API)
We have finally laid all the groundwork to make this happen.
The only change/delete conflicts that haven't been moved are .hgsubstate
conflicts. Those are trickier to deal with and well outside the scope of this
series.
We add comprehensive testing not just for the initial selections but also for
re-resolves and all possible dirstate transitions caused by merge tools. That
testing managed to shake out several bugs in the way we were handling dirstate
transitions.
The other test changes are because we now treat change/delete conflicts as
proper merges, and increment the 'merged' counter rather than the 'updated'
counter. I believe this is the right approach here.
For third-party extensions, if they're interacting with filemerge code they
might have to deal with an absentfilectx rather than a regular filectx.
Still to come:
- add a 'leave unresolved' option to merges
- change the default for non-interactive change/delete conflicts to be 'leave
unresolved'
- add debug output to go alongside debug outputs for binary and symlink file
merges
Siddharth Agarwal <sid0@fb.com> [Wed, 25 Nov 2015 14:26:46 -0800] rev 27136
test-merge-changedelete.t: print out debugmergestate
We're going to use this to verify the merge state in upcoming patches.
Siddharth Agarwal <sid0@fb.com> [Tue, 24 Nov 2015 18:26:21 -0800] rev 27135
debugmergestate: also recognize change/delete conflicts in the merge state
We're going to use this for tests in upcoming patches.
Siddharth Agarwal <sid0@fb.com> [Mon, 30 Nov 2015 10:26:37 -0800] rev 27134
debugmergestate: print out null nodes as 'null'
This is so much easier to read than a long string of zeroes, and we're going to
have a lot more of these nodes once change/delete conflicts are part of the
merge state.
Siddharth Agarwal <sid0@fb.com> [Tue, 24 Nov 2015 15:03:00 -0800] rev 27133
test-merge-force.t: check .orig files separately
We're going to soon compare the output of all the non-orig files before and
after a resolve, and this makes that more convenient. The .orig files are
obviously going to differ between the two.
Siddharth Agarwal <sid0@fb.com> [Tue, 24 Nov 2015 15:26:51 -0800] rev 27132
merge.recordupdates: mark 'a' files as added unconditionally
See the previous patch for why we do this.
Siddharth Agarwal <sid0@fb.com> [Mon, 30 Nov 2015 10:19:39 -0800] rev 27131
merge: add a new action type representing files to add/mark as modified
This is somewhat different from the currently existing 'a' action, for the
following case:
- dirty working copy, with file 'fa' added and 'fm' modified
- hg merge --force with a rev that neither has 'fa' nor 'fm'
- for the change/delete conflicts we pick 'changed' for both 'fa' and 'fm'.
In this case 'branchmerge' is true, but we need to distinguish between 'fa',
which should ultimately be marked added, and 'fm', which should be marked
modified.
Our current strategy is to just not touch the dirstate at all. That works for
now, but won't work once we move change/delete conflicts to the resolve phase.
In that case we may perform repeated re-resolves, some of which might mark the
file removed or remove the file from the dirstate. We'll need to re-add the
file to the dirstate, and we need to be able to figure out whether we mark the
file added or modified. That is what the new 'am' action lets us do.
Siddharth Agarwal <sid0@fb.com> [Mon, 30 Nov 2015 10:03:21 -0800] rev 27130
mergestate: add a cached property accessor for the local context
This is going to be useful in an upcoming patch. We make this a public accessor
because this is also going to be useful for custom merge drivers.
Siddharth Agarwal <sid0@fb.com> [Mon, 30 Nov 2015 10:05:09 -0800] rev 27129
mergestate: raise exception if otherctx is accessed but _other isn't set
We don't want to inadvertently return the workingctx (self._repo[None]).
timeless <timeless@mozdev.org> [Mon, 30 Nov 2015 18:47:33 +0000] rev 27128
pager: improve help for --pager=
try to clarify how to enable/disable the pager
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Nov 2015 21:17:26 -0800] rev 27127
setup: remove unused py_modules argument to setup()
It is never populated and is useless clutter.
Siddharth Agarwal <sid0@fb.com> [Mon, 23 Nov 2015 13:45:56 -0800] rev 27126
test-merge-changedelete.t: add resolve --list output
We're going to move change/delete conflicts to the resolve phase, and the
resolve --list output is one of the things that will be important to test.
Siddharth Agarwal <sid0@fb.com> [Mon, 23 Nov 2015 13:43:14 -0800] rev 27125
test-merge-changedelete.t: add a file with regular merge conflicts
In upcoming patches we're going to move change/delete conflicts to the resolve
phase -- it will be important to see how regular conflicts interact with
change/delete ones.
Siddharth Agarwal <sid0@fb.com> [Tue, 24 Nov 2015 10:58:35 -0800] rev 27124
filemerge: in ':prompt', use ':fail' tool rather than returning directly
The ':fail' tool now knows to write out the changed side for change/delete
conflicts.
This has no impact right now but will make things better when we move
change/delete conflicts in here.
Siddharth Agarwal <sid0@fb.com> [Tue, 24 Nov 2015 10:57:01 -0800] rev 27123
filemerge: in ':fail' tool, write out other side if local side is deleted
We do this because we don't want to modify the dirstate for failures, and don't
just want to leave the file missing from disk. Plus it's more useful for the
user if the changed side is written out -- it is easier to delete a file than
to get it back via hg revert.
Siddharth Agarwal <sid0@fb.com> [Mon, 23 Nov 2015 18:03:25 -0800] rev 27122
mergestate: explicitly forget 'dc' conflicts where the deleted side is picked
Once we move change/delete conflicts into the resolve phase, a 'dc' file might
first be resolved by picking the other side, then later be resolved by picking
the local side. For this transition we want to make sure that the file goes
back to not being in the dirstate.
This has no impact on conflicts during the initial merge.
Siddharth Agarwal <sid0@fb.com> [Mon, 23 Nov 2015 19:06:15 -0800] rev 27121
merge.applyupdates: add all actions returned from merge state
At the moment this is a no-op (the only actions defined are 'r', 'a' and 'g'),
but soon we're going to add other sorts of actions to the dictionary returned
from mergestate.actions().
Mathias De Maré <mathias.demare@gmail.com> [Fri, 27 Nov 2015 20:23:23 +0100] rev 27120
identify: refer to log to be able to view full hashes
Mathias De Maré <mathias.demare@gmail.com> [Fri, 27 Nov 2015 20:23:02 +0100] rev 27119
log: add 'hg log' example for full hashes
Mathias De Maré <mathias.demare@gmail.com> [Fri, 02 Oct 2015 07:48:23 +0200] rev 27118
backout: add examples to clarify basic usage
timeless <timeless@mozdev.org> [Wed, 25 Nov 2015 06:10:54 +0000] rev 27117
gpg: rename sigcheck function
I see no reason for the function not to be sigcheck ...
Augie Fackler <augie@google.com> [Tue, 24 Nov 2015 18:40:16 -0500] rev 27116
extensions: properly mark progress as part of core
This should have been done as part of or as an immediate follow-up to
f5c906878a47, but presumably this feature of extensions.py was
forgotten at that time.
Yuya Nishihara <yuya@tcha.org> [Fri, 27 Nov 2015 23:10:48 +0900] rev 27115
test-help: don't use progress extension for the test of argument parsing
The next patch will remove the progress extension completely, so we have
to pick another extension. The schemes is picked arbitrary.
This test was introduced at 69da16b366ad.
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 22:31:56 +0000] rev 27114
hghave.py: fix matchoutput documentation
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Nov 2015 14:23:46 -0800] rev 27113
dispatch: use versiontuple()
We have a new generic function for this. Use it.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Nov 2015 14:23:51 -0800] rev 27112
util: add versiontuple() for returning parsed version information
We have similar code in dispatch.py. Another consumer is about to be
created, so establish a generic function in an accessible location.
Bryan O'Sullivan <bos@serpentine.com> [Tue, 24 Nov 2015 16:38:54 -0800] rev 27111
extensions: rename _ignore to _builtin, add descriptive comment
It was previously not at all obvious what this was for.
We also change it to a set to avoid iterating over an admittedly
small list repeatedly at startup time.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 22 Nov 2015 14:44:55 -0800] rev 27110
ui: avoid needless casting to a str
In many cases, we don't need to cast to a str because the object will
be cast when it is eventually written.
As part of testing this, I added some code to raise exceptions when a
non-str was passed in and wasn't able to trigger it. i.e. we're already
passing str into this function everywhere, so the casting isn't
necessary.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Nov 2015 11:23:10 -0800] rev 27109
ui: remove labeled argument from popbuffer
It was moved to pushbuffer and currently does nothing.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 22 Nov 2015 14:18:42 -0800] rev 27108
color: evaluate labels at write time
Previously, we stored 2-tuples of text and label in a list and then
evaluated the labels when the buffer was popped. After this patch,
we evaluate the labels at write time and do a simple join when the
buffer is popped.
This patch appears to have no impact on performance, despite creating
fewer 2-tuples and having fewer strings hanging around in memory.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 22 Nov 2015 14:13:25 -0800] rev 27107
cmdutil: pass labeled=True to pushbuffer()
This doesn't yet change behavior because labeling is still performed
at popbuffer time.
Surprisingly, this is the only in-tree consumer that passes
labeled=True.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 22 Nov 2015 14:10:48 -0800] rev 27106
ui: track label expansion when creating buffers
As part of profiling `hg log` performance, I noticed a lot of time
is spent in buffered writes to ui instances. This patch starts a series
that refactors buffered writes with the eventual intent to improve
performance.
Currently, labels are expanded when buffers are popped. This means
we have to preserve the original text and the label until we render
the final output. This is avoidable overhead and adds complexity
since we're retaining state.
This patch adds functionality to ui.pushbuffer() to declare whether
label expansion should be active for the buffer. Labels are still
evaluated during buffer pop. This will change in a subsequent
patch.
Since we'll need to access the "expand labels" flag on future write()
operations, we prematurely optimize how the current value is stored
to optimize for rapid retrieval.
Matt Mackall <mpm@selenic.com> [Tue, 01 Dec 2015 20:18:28 -0600] rev 27105
Added signature for changeset 2d437a0f3355
Matt Mackall <mpm@selenic.com> [Tue, 01 Dec 2015 20:18:27 -0600] rev 27104
Added tag 3.6.2 for changeset 2d437a0f3355
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 24 Nov 2015 18:13:25 -0800] rev 27103
docker: match more version of 'hg docker version' (issue4967)
My version of docker (1.8.3) have a different formating for 'docker version'
that broke the build script. We make the version matching more generic in to
work with both version.
Siddharth Agarwal <sid0@fb.com> [Mon, 30 Nov 2015 16:31:28 -0800] rev 27102
localrepo.commit: check all files for resolve state (issue4972)
Previously we were only checking modified files for their resolve state. But a
file might be unresolved yet not in the modified state. Handle all such cases
properly.
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 21:41:12 +0000] rev 27101
test-contrib-perf: add smoke tests for perf.py
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 21:36:20 +0000] rev 27100
contrib/perf: perfparents handle filtered repos
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 20:54:14 +0000] rev 27099
contrib/perf: perfparents handle tiny repos
refuse to run if there are not enough commits
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 21:44:16 +0000] rev 27098
contrib/perf: fix perfmergecalculate
merge.calculateupdates requires an array of ancestors and followcopies
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 22:01:11 +0000] rev 27097
contrib/perf: fix perffncachewrite
fncache.write requires a transaction (and thus a lock)
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 20:05:15 +0000] rev 27096
contrib/perf: omit duplicated function
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 20:08:21 +0000] rev 27095
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org> [Tue, 24 Nov 2015 22:26:43 +0000] rev 27094
hghave.py: remove execute bit
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 02 Nov 2015 17:33:18 +0000] rev 27093
format: create new repository as 'generaldelta' by default
Since we have pushed back the performance issue related to general delta behind
another configuration (Still off by default), we can safely create new
repository with general delta support. As client are compatible with it since
Mercurial 1.9 (4.5 years ago) I do no expect any significant compatibility
issues.
Siddharth Agarwal <sid0@fb.com> [Sun, 22 Nov 2015 21:40:23 -0800] rev 27092
shelve: use colon instead of quotes in 'changes to' description
If detailed conflict markers are enabled and the closing quote gets truncated,
editors will often screw syntax highlighting up from that point because they'll
see an opening quote and think it's the beginning of a string.
In tests, the hashes change because the commit messages of the shelved bundles
also change.
Siddharth Agarwal <sid0@fb.com> [Sun, 22 Nov 2015 21:58:28 -0800] rev 27091
merge.applyupdates: create absentfilectxes for change/delete conflicts
At the moment no change/delete conflicts get to this point -- we're going to
make that happen in an upcoming patch.
Siddharth Agarwal <sid0@fb.com> [Sun, 22 Nov 2015 21:59:52 -0800] rev 27090
mergestate: add methods to queue files to remove, add or get
These are meant for use by custom merge drivers that might want to modify the
dirstate. Dirstate internal consistency rules require that all removes happen
before any adds -- this means that custom merge drivers shouldn't be modifying
the dirstate directly.
Siddharth Agarwal <sid0@fb.com> [Sun, 15 Nov 2015 21:27:22 -0800] rev 27089
resolve: record dirstate actions after performing resolutions
Some resolutions might lead to pending actions we need to perform in the
dirstate -- so perform them.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:55:01 -0800] rev 27088
mergestate: add a way to record pending dirstate actions
We're going to use this in resolve in the next patch.
Siddharth Agarwal <sid0@fb.com> [Sun, 15 Nov 2015 21:55:46 -0800] rev 27087
merge.recordupdates: don't require action keys to be present in dict
We're going to use this function for a much smaller set of actions in the next
patch. It's easier to do this than to backfill the dict we pass in.
Augie Fackler <augie@google.com> [Mon, 23 Nov 2015 10:13:05 -0500] rev 27086
histedit: constant-ify the constraints list
Used a class as a namespace, and then wired up a classmethod to return
all known constraints. I'm mostly happy with this, even though it's
kind of weird for hg.
Mateusz Kwapich <mitrandir@fb.com> [Tue, 17 Nov 2015 15:04:31 -0800] rev 27085
histedit: add an experimental base action
This is a first (very simple) version of the histedit base action.
It works well in common usecases like rebasing the whole stack and
spliting the stack.
I don't see any obvious edge cases - but probably there is more than one.
That's why I want to keep it behind experimental.histeditng config knob
for now. I think on knob for all new histedit behaviors is better because
we will test all of them together and testers will need to turn it on only
once to get all new nice things.
Mateusz Kwapich <mitrandir@fb.com> [Tue, 17 Nov 2015 17:53:52 -0800] rev 27084
histedit: add abortdirty function
Small helper function for aborting histedit when left with dirty working
directory.
Mateusz Kwapich <mitrandir@fb.com> [Thu, 12 Nov 2015 16:40:33 -0800] rev 27083
histedit: add forceother constraint
For the future 'base' action in histedit we need a verification
constraint which will not allow using this action with changes
that are currently edited.
Mateusz Kwapich <mitrandir@fb.com> [Tue, 17 Nov 2015 16:37:26 -0800] rev 27082
histedit: make verification configurable
Before we can add a 'base' action to histedit need to change verification
so that action can specify which steps of verification should run for it.
Also it's everything we need for the exec and stop actions implementation.
I thought about baking verification into each histedit action (so each
of them is responsible for verifying its constraints) but it felt wrong
because:
- every action would need to know its context (eg. the list of all other
actions)
- a lot of duplicated work will be added - each action will iterate through
all others
- the steps of the verification would need to be extracted and named anyway
in order to be reused
The verifyrules function grows too big now. I plan to refator it in one of
the next series.
Anton Shestakov <av6@dwimlabs.net> [Fri, 13 Nov 2015 18:31:58 +0800] rev 27081
paper: show current revision on file log page
Most of the pages in paper (and coal) style show the current revision and its
branch, tags and bookmarks. Let's also show all this on file log page.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 11:26:31 -0800] rev 27080
merge.applyupdates: extend action queues with ones returned from mergestate
These queues will always be empty at the moment -- we're going to fill them up
in upcoming patches.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:43:25 -0800] rev 27079
mergestate: add a method to compute actions to perform on dirstate
We're going to use this to extend the action lists in merge.applyupdates.
The somewhat funky return value is to make passing this dict directly into
recordactions easier. We're going to exploit that in an upcoming patch.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:37:39 -0800] rev 27078
merge.applyupdates: use counters from mergestate
This eliminates a whole bunch of duplicate code and allows us to update the
removed count for change/delete conflicts where the delete action was chosen.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:18:51 -0800] rev 27077
mergestate: add a function to return the number of unresolved files
Note that unlike the other functions, this is based on the persistent
mergestate.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:17:54 -0800] rev 27076
mergestate: add a method to return updated/merged/removed counts
This will not only allow us to remove a bunch of duplicate code in applyupdates
in an upcoming patch, it will also allow the resolve interface to be a lot
simpler: it doesn't need to return the dirstate action to applyupdates.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:32:47 -0800] rev 27075
mergestate._resolve: don't return the action any more
This is a partial backout of an earlier diff -- now that we're storing the
results in a dict, we don't actually need this any more.
Siddharth Agarwal <sid0@fb.com> [Fri, 20 Nov 2015 16:08:22 -0800] rev 27074
mergestate._resolve: store return code and action for each file
We're going to need this to compute (a) updated/merged/unresolved counts, and
(b) actions to perform on the dirstate.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 15:43:04 -0800] rev 27073
revsetbenchmarks: support benchmarking changectx loading
Many revset consumers construct changectx instances for each returned
result. Add support for benchmarking this to our revset benchmark
script.
In the future, we might want to have some kind of special syntax in
the parsed revset files to engage this mode automatically. This would
enable us to load changectxs for revsets that do that in the code and
would more accurately benchmark what's actually happening. For now,
running all revsets with or without changectxs is sufficient.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 15:39:18 -0800] rev 27072
perf: support obtaining contexts from perfrevset
Previously, perfrevset called repo.revs(), which only returns integer
revisions. Many revset consumers call repo.set(), which returns
changectx instances. Or they obtain a context manually later.
Since obtaining changectx instances when evaluating revsets is common,
this patch adds support for benchmarking this use case.
While we added an if conditional for every benchmark loop, it
doesn't appear to matter since revset evaluation dwarfs the cost
of a single if.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 11:07:30 -0800] rev 27071
localrepo: improve docstring for revset methods
revs() doesn't return a list. Also document what its arguments do.
Also clarify that set() is just a convenience wrapper around revs().
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 22 Nov 2015 16:23:20 -0800] rev 27070
revlog: improve documentation
There are a lot of functions and variables doing similar things.
Document the role and functionality of each to make it easier to
grok.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 22:28:01 -0800] rev 27069
demandimport: don't enable when running under PyPy
On demand importing doesn't work with PyPy for some reason. Don't honor
requests to enable demand importing when running under PyPy.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 14 Nov 2015 17:14:14 -0800] rev 27068
ui.write: don't clear progress bar when writing to a buffer
ui.write() has 2 modes: buffered and unbuffered. In buffered mode, we
capture output before writing it. This is how changeset printing works,
for example.
Previously, we were potentially clearing the progress bar for every
call to ui.write(). In buffered mode, this clearing was useless because
the clearing function would be called again before actually writing
the buffered data.
This patch stops the useless calling of _progclear() unless we are
actually writing data. During changeset printing with the default
template, this removes ~6 function calls per changeset, making
changeset printing slightly faster.
before: 23.76s
after: 23.35s
delta: -0.41s (98.3% of original)
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Nov 2015 21:20:08 -0500] rev 27067
test-resolve: fix '--tool f' invocation for Windows
Windows can't invoke a python script directly, so invoke sh.exe instead.
According to sid0, the output changes are due to the fact that 'f' is no longer
being passed all of the args that it was, but these changes aren't essential to
the test [1].
[1] https://selenic.com/pipermail/mercurial-devel/2015-November/075768.html
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 14 Nov 2015 17:30:10 -0800] rev 27066
util.datestr: use divmod()
We were computing the quotient and remainder of a division operation
separately. The built-in divmod() function allows us to do this with
a single function call. Do that.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 14 Nov 2015 17:44:01 -0800] rev 27065
cmdutil.changeset_printer: pass context into showpatch()
Before, we passed the node then subsequently performed a lookup on
repo.changelog. We already has the context available, so just pass it
in.
This does result in a small performance win. But I doubt it will show
up anywhere because diff[stat] calculation will dwarf the time spent
to create a changectx. Still, we should be creating fewer changectx
out of principle.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 19:21:01 -0800] rev 27064
context: avoid extra parents lookups
Resolving parents requires reading from the changelog, which is a few
attributes and function calls away. Parents lookup occurs surprisingly
often. Micro optimizing the code to avoid redundant lookups of parents
appears to make `hg log` on my Firefox repo a little faster:
before: 24.91s
after: 23.76s
delta: -1.15s (95.4% of original)
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 19:04:12 -0800] rev 27063
context: optimize _parents()
This patch avoids some extra attribute lookups and list mutations.
This micro-optimization seems to result in a minor speedup for `hg log`
on my Firefox repo:
before: 25.35s
after: 24.91s
delta: -0.44s (98% of original)
Not the biggest gain. But every little bit helps.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Nov 2015 13:05:21 -0500] rev 27062
test-histedit: $TESTTMP quoting fixes for Windows
Without this, C:\path\to\test is converted into C:pathtotest.
Since $TESTTMP appears in output, seems to work in some places without quotes,
and is also used within a larger quote block (see test-rebase-collapse.t, ~line
160), I'm not sure what a check-code rule would look like (or even if it is
feasible).
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 21 Nov 2015 23:26:22 -0800] rev 27061
lsprof: support PyPy (issue4573)
PyPy's _lsprof module doesn't export a "profiler_entry" symbol. This
patch treats the symbol as optional and falls back to verifying the
attribute is present on the first entry in the collected data as
part of validation.
There is a chance not every entry will contain the requested sort
attribute. But, this patch does unbust lsprof on PyPy for the hg
commands I've tested, so I assume it is sufficient. It's certainly
better than the ImportError we encountered before.
As part of the import refactor, I snuck in the addition of
absolute_import.
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 19:10:45 -0500] rev 27060
base85: clean up function definition style
Cleanup performed with clang-format.
Laurent Charignon <lcharignon@fb.com> [Fri, 20 Nov 2015 14:06:31 -0800] rev 27059
rebase: use bookmarks.recordchange instead of bookmarks.write
Before this patch we were using the old api bookmarks.write instead of
bookmarks.recordchange at the end of rebase operations.
We move clearstatus within the transaction to make it easier for extensions
that wrap transactions operations.
Laurent Charignon <lcharignon@fb.com> [Fri, 20 Nov 2015 11:36:05 -0800] rev 27058
rebase: indentation change to make the next patch more legible
We put the code to be indented in the next patch in a "if True:" block to make
it easier to review.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Nov 2015 16:56:00 -0500] rev 27057
test-run-tests: conditionalize the $TESTDIR check for Windows separator
The variable uniformly uses '\' separators, so the straight equality check with
'/' separating the last component fails. It also doesn't like having the quote
appear in the middle of the string when testing.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 09 Nov 2015 17:15:36 -0500] rev 27056
test-context: conditionalize the workingfilectx date printing for Windows
Starting with 13272104bb07, the output changed on Windows:
--- e:/Projects/hg/tests/test-context.py.out
+++ e:/Projects/hg/tests/test-context.py.err
@@ -1,4 +1,4 @@
-workingfilectx.date = (1000, 0)
+workingfilectx.date = (1000L, 0)
ASCII : Gr?ezi!
Latin-1 : Grⁿezi!
UTF-8 : Gr├╝ezi!
Since int and long are both 32 bit on Windows, this seems harmless in practice
other than the previous test failure.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Nov 2015 14:37:03 -0500] rev 27055
test-mq-qrefresh: drop single quoting of HGEDITOR value for Windows
This was failing with:
sh: $TESTTMP/checkvisibility.sh: No such file or directory
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Nov 2015 14:12:27 -0500] rev 27054
test-import: don't use printf to append an extension to $HGRCPATH
The extension was failing to load on Windows because $TESTTMP contains a path
component 'test', prefixed by a path separator '\'. That combination ends up
converted to "...<tab>est...".
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Nov 2015 13:44:27 -0500] rev 27053
test-ssh: stop quoting dummyssh invocation for Windows
The other invocations aren't quoted, and Windows doesn't like the single quotes:
diff --git a/tests/test-ssh.t b/tests/test-ssh.t
--- a/tests/test-ssh.t
+++ b/tests/test-ssh.t
@@ -520,20 +520,8 @@ remote hook failure is attributed to rem
$ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc
$ hg -q --config ui.ssh="python '$TESTDIR/dummyssh'" clone ssh://user@dummy/remote hookout
+ abort: no suitable response from remote hg!
+ [255]
$ cd hookout
+ $TESTTMP.sh: line 264: cd: hookout: No such file or directory
$ touch hookfailure
- $ hg -q commit -A -m 'remote hook failure'
....