Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 20 Feb 2017 12:13:23 +0100] rev 31084
color: inline the 'showlabel' method
This function is quite simple and only have one call siteā¦ located a handful of line
under the definition. We inline the function for the sake of simplicity. One of
the motivation to do that now is that it reduce the amount of new method we
will have to add to the core 'ui' class for color support.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 20 Feb 2017 12:12:08 +0100] rev 31083
color: move '_colormode' to the core 'ui' class
Having all 'ui' objects aware of 'color' allows us to update the core code to
handle color. The mode will stay 'None' in the default case so that will not
introduce any changes.
Denis Laxalde <denis.laxalde@logilab.fr> [Tue, 17 Jan 2017 17:25:48 +0100] rev 31082
hgweb: explictly pass basectx in webutil.diffs
There's only one case where `basectx` parameter is None (over two usages), so
it's probably not worth handling the special case as it makes code-reading
harder.
Along the way, use ctx.p1() instead of checking for ctx.parents() being empty
which should not occur.
Jun Wu <quark@fb.com> [Wed, 22 Feb 2017 18:26:12 -0800] rev 31081
serve: mark --stdio and --cmdserver as "(ADVANCED)" flags
This will hide them from the default --help output.
Jun Wu <quark@fb.com> [Tue, 01 Nov 2016 14:50:45 +0000] rev 31080
help: hide command line options marked as "advanced"
Previously, we have keywords like "(DEPRECATED)" and "(EXPERIMENTAL)" to
hide command line options in non-verbose help output.
However, sometimes an option is neither deprecated nor experimental. It's
well-tested and working, but just not designed to average users. This patch
adds a keyword "(ADVANCED)" to fit in such use cases.
Thanks rom1dep for the suggestion of the word "advanced".
Yuya Nishihara <yuya@tcha.org> [Thu, 23 Feb 2017 21:27:25 +0900] rev 31079
pager: do not try to run an empty pager command
If pagercmd is explicitly set to '', the pager process would exit silently
and the output would be lost. We'd better disable the pager in such case.
Yuya Nishihara <yuya@tcha.org> [Thu, 23 Feb 2017 21:20:26 +0900] rev 31078
graphlog: restore pager lost at
1cec1d863008
Denis Laxalde <denis.laxalde@logilab.fr> [Wed, 22 Feb 2017 12:09:17 +0100] rev 31077
gitweb: add "more" and "less" navigation links in filelog template
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 16 Jan 2017 17:14:36 +0100] rev 31076
context: also return ancestor's line range in blockancestors
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 16 Jan 2017 17:08:25 +0100] rev 31075
context: add a followfirst flag to blockancestors
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 20 Feb 2017 18:40:42 +0530] rev 31074
py3: use pycompat.fsencode() to convert __file__ to bytes
__file__ returns unicodes on Python 3. This patch uses pycompat.fsencode() to
convert them to bytes.
Jun Wu <quark@fb.com> [Wed, 22 Feb 2017 10:14:18 -0800] rev 31073
wireproto: remove unused code
Removed an unused line introduced by
f3807a135e43.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 22 Dec 2016 06:18:45 +0100] rev 31072
color: set initial default value for 'colormode' to None
This should not introduce any behavior changes when using the color extension.
In practive, the colormode will be setup at early at run time to the proper
value (from config and environment).
We do this change as this gets us closer of a state were we can have all the
mechanisms associated to color in core with the feature disabled by default.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 22 Dec 2016 13:19:12 +0100] rev 31071
color: minor reversal of two conditional clause for clarity
Another minor cleanup while reading the code. The two branches of the conditional
have similar complexity so we go for the order that give us the simplest
condition (we drop the negation).
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 16 Feb 2017 10:52:27 +0100] rev 31070
color: merge two identical 'for' loops
The previous changeset made it clear that we are iterating twice on the same
items. We gather the two loops into a single one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 22 Dec 2016 13:06:53 +0100] rev 31069
color: minor simplification of some terminfo setup code
No logic change is introduced. The previous code were using a 'dict.update' with
a complex generator. That was a bit confusing to read and not so compact.
Instead we now use an explicit loop and conditional for the sake of clarity.
This also allow for more simplification coming in the next changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 22 Dec 2016 06:17:40 +0100] rev 31068
color: make a test for curse availability explicite
We won't use terminfo when curse failed to load. Before this change, we were
doing an indirect test, relying on the fact some variable ('_terminfo_params')
would be empty if curses failed to load. We update the code to be more explicit
and directly checks if we managed to load the curse module.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 22 Dec 2016 03:11:19 +0100] rev 31067
color: move 'win32' declaration to the core module
This is another part of moving color implementation into core. before we can
move the advance logic, we need to move the basic definition and building
bricks. This is one more step on that road.
Jun Wu <quark@fb.com> [Tue, 21 Feb 2017 16:29:31 -0800] rev 31066
smartset: preserve istopo for baseset operations
This is a follow-up of "smartset: use native set operations as fast paths".
It's more correct to just preserve the "istopo" information for "&" and "-"
operations, like what filteredset does.
eloimorlaas <eloimorlaas@fb.com> [Thu, 23 Feb 2017 11:23:17 -0800] rev 31065
record: update help to describe ui.interface
hg help record was not accurate if using another interface than the text one
Rishabh Madan <rishabhmadan96@gmail.com> [Sat, 25 Feb 2017 16:57:21 +0530] rev 31064
ui: replace obsolete default-push with default:pushurl (
issue5485)
Default-push has been deprecated in favour of default:pushurl. But "hg clone" still
inserts this in every hgrc file it creates. This patch updates the message by replacing
default-push with default:pushurl and also makes the necessary changes to test files.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 25 Feb 2017 01:07:52 +0900] rev 31063
worker: ignore meaningless exit status indication returned by os.waitpid()
Before this patch, worker implementation assumes that os.waitpid()
with os.WNOHANG returns '(0, 0)' for still running child process. This
is explicitly specified as below in Python API document.
os.WNOHANG
The option for waitpid() to return immediately if no child
process status is available immediately. The function returns
(0, 0) in this case.
On the other hand, POSIX specification doesn't define the "stat_loc"
value returned by waitpid() with WNOHANG for such child process.
http://pubs.opengroup.org/onlinepubs/
9699919799/functions/waitpid.html
CPython implementation for os.waitpid() on POSIX doesn't take any care
of this gap, and this may cause unexpected "exit status indication"
even on POSIX conformance platform.
For example, os.waitpid() with os.WNOHANG returns non-zero "exit
status indication" on FreeBSD. This implies os.kill() with own pid or
sys.exit() with non-zero exit code, even if no child process fails.
To ignore meaningless exit status indication returned by os.waitpid(),
this patch skips subsequent steps forcibly, if os.waitpid() returns 0
as pid.
This patch also arranges examination of 'p' value for readability.
FYI, there are some issues below about this behavior reported for
CPython.
https://bugs.python.org/
issue21791
https://bugs.python.org/
issue27808
Augie Fackler <augie@google.com> [Tue, 07 Feb 2017 17:13:25 -0500] rev 31062
pager: add a config knob to just globally turn off the pager
Augie Fackler <augie@google.com> [Tue, 07 Feb 2017 00:07:53 -0500] rev 31061
pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com> [Tue, 21 Feb 2017 14:20:05 -0500] rev 31060
dispatch: rearrange 'unknown command' code to better employ pager
dispatch calls help like a ninja if you give it a truly unknown
command, and that might want to be paged. If it gets paged, then the
'hg: unknown command' text gets eaten by a grue, unless we call the
pager first. This change rearranges the codepaths so we can safely
only invoke the pager in the case where we'll have long output from
the help command code, rather than just a short message like "did you
mean stat instead of start" or "fetch is provided by the fetch
extension".
Augie Fackler <augie@google.com> [Tue, 21 Feb 2017 14:17:31 -0500] rev 31059
help: move rst formatting of help documents into help.py
This slight refactor will help me improve the 'unknown command'
experience in our new glorious pager future.
Augie Fackler <augie@google.com> [Tue, 21 Feb 2017 11:06:02 -0500] rev 31058
outgoing: avoid running pager until we're actually showing changes
Consistent with the new behavior of incoming in the previous patch.
Augie Fackler <augie@google.com> [Tue, 21 Feb 2017 10:53:13 -0500] rev 31057
incoming: delay pager activation until right before printing changes
This prevents authentication and other brief status messages from
being paged.
Ben Schmidt <insightfuls@users.noreply.github.com> [Sat, 18 Feb 2017 21:30:28 +1100] rev 31056
histedit: modify rollup to discard date from the rollup commit (
issue4820)
This change adjusts and documents the new behaviour of 'roll'. It now fits nicely
with the behaviour of 'commit --amend' and the 'edit' action, by discarding the
date as well as the commit message of the second commit. Previously it used the
later date, like 'fold', but this often wasn't desirable, for example, in the
common use case of using 'roll' to add forgotten changes to a changeset
(because 'hg add' was previously forgotten or not all changes were identified
while using 'hg record').
Ben Schmidt <insightfuls@users.noreply.github.com> [Sat, 18 Feb 2017 21:30:28 +1100] rev 31055
histedit: improve documentation and behaviour of dates
This clarifies in the histedit documentation that the 'edit' action preserves
the date and that the 'fold' action uses the later date. The documentation was
previously silent on this issue which left users in doubt.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 21 Feb 2017 01:21:00 +0900] rev 31054
localrepo: check HG_PENDING strictly
Before this patch, checking HG_PENDING for changelog in localrepo.py
might cause unintentional reading unrelated '00changelog.i.a' in,
because HG_PENDING is checked by str.startswith().
An external hook spawned by inner repository in nested ones satisfies
this condition.
This patch uses txnutil.mayhavepending() to check HG_PENDING strictly.
BTW, this patch may cause failure of bisect in the repository of
Mercurial itself, if examination at bisecting assumes that an external
hook can see all pending changes while nested transactions across
repositories.
This invisibility issue will be fixed by subsequent patch, which
allows HG_PENDING to refer multiple repositories.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 21 Feb 2017 01:21:00 +0900] rev 31053
phases: check HG_PENDING strictly
Before this patch, checking HG_PENDING in phases.py might cause
unintentional reading unrelated 'phaseroots.pending' in, because it
just examines existence of HG_PENDING environment variable.
This patch uses txnutil.trypending() to check HG_PENDING strictly.
BTW, this patch may cause failure of bisect in the repository of
Mercurial itself, if examination at bisecting assumes that an external
hook can see all pending changes while nested transactions across
repositories.
This invisibility issue will be fixed by subsequent patch, which
allows HG_PENDING to refer multiple repositories.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 21 Feb 2017 01:21:00 +0900] rev 31052
bookmarks: check HG_PENDING strictly
Before this patch, checking HG_PENDING in bookmarks.py might cause
unintentional reading unrelated '.hg/bookmarks.pending' in, because it
just examines existence of HG_PENDING environment variable.
This patch uses txnutil.trypending() to check HG_PENDING strictly.
This patch also changes share extension.
Enabling share extension (+ bookmark sharing) makes
bookmarks._getbkfile() receive repo to be shared (= "srcrepo"). On the
other hand, HG_PENDING always refers current working repo (=
"currepo"), and bookmarks.pending is written only into currepo.
Therefore, we should try to read .hg/bookmarks.pending of currepo in
at first. If it doesn't exist, we try to read .hg/bookmarks of srcrepo
in.
Even after this patch, an external hook spawned in currepo can't see
pending changes in currepo via srcrepo, even though such changes
become visible after closing transaction, because there is no easy and
cheap way to know existence of pending changes in currepo via srcrepo.
Please see https://www.mercurial-scm.org/wiki/SharedRepository, too.
BTW, this patch may cause failure of bisect in the repository of
Mercurial itself, if examination at bisecting assumes that an external
hook can see all pending changes while nested transactions across
repositories.
This invisibility issue will be fixed by subsequent patch, which
allows HG_PENDING to refer multiple repositories.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 21 Feb 2017 01:20:59 +0900] rev 31051
tests: make directory to prevent test process from going out of $TESTTMP
Before this patch, test process for test-bookmarks.t goes out of
$TESTTMP at "cd .." before creation of "orderrepo" repository.
To prevent test process from going out of $TESTTMP, this patch makes
directory "repo" sub-directory and executes almost all test scenarios
in test-bookmarks.t under it.
This is preparation for new test added in subsequent patch.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 21 Feb 2017 01:20:59 +0900] rev 31050
txnutil: factor out the logic to read file in according to HG_PENDING
This patch adds new file txnutil.py, because:
- transaction.py is too large to import small utility logic
- scmutil.py or so causes cyclic importing in phases.py
mayhavepending() is defined separately for convenience in subsequent
patch.
Stanislau Hlebik <stash@fb.com> [Mon, 20 Feb 2017 01:54:07 -0800] rev 31049
repoview: separate cache hash computation from cache reading
This change will make it easier for extensions to use another cache hash.
Dr Rainer Woitok <rainer.woitok@gmail.com> [Mon, 20 Feb 2017 18:27:29 +0100] rev 31048
tests: make test suite more immune to environment variables
Plenty of tests break when "make tests" is run while environment
variables "HGPLAIN" or "HGPLAINEXCEPT" are set (test "test-obsolete-
checkheads.t" is just a single example).
This patch causes script "run-tests.py" to also remove these two
variables from the environment the tests are executed in.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:08:49 -0500] rev 31047
version: enable pager if --verbose is specified
`hg version` output is very short without --verbose, but with
--verbose it tends to scroll off the user's screen.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:07:16 -0500] rev 31046
tags: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:06:59 -0500] rev 31045
summary: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:06:32 -0500] rev 31044
status: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:06:10 -0500] rev 31043
resolve: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:06:01 -0500] rev 31042
paths: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:04:44 -0500] rev 31041
outgoing: enable pager
The structure here is similar to incoming, and requires similar treatment.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:04:26 -0500] rev 31040
manifest: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:04:10 -0500] rev 31039
locate: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:03:48 -0500] rev 31038
incoming: enable pager
The design of incoming means we have to activate the pager in several
places, depending on which codepath gets chosen.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:09:21 -0500] rev 31037
help: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:09:15 -0500] rev 31036
grep: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:02:48 -0500] rev 31035
files: enable pager
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:01:42 -0500] rev 31034
config: activate pager if not starting an editor
This demonstrates the power of the non-attend-based pager API.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 23:57:21 -0500] rev 31033
qdiff: migrate to modern pager API
This results in the default pager-attend list being empty. Sadly, we
can't let the code be that way, because some legacy extensions depend
on hooking the pager's attend list at import time (and we'd like to
not break them), and if the list is actually *empty* that triggers
magic behavior in the extension that attends everything. Instead, we
put a long, improbable command name as the only entry in the attend
list.
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 22:59:25 -0500] rev 31032
log: migrate to modern pager API
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 22:58:54 -0500] rev 31031
export: migrate to modern pager API
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 22:58:26 -0500] rev 31030
diff: migrate to modern pager API
Augie Fackler <augie@google.com> [Mon, 06 Feb 2017 22:57:52 -0500] rev 31029
cat: migrate to modern pager API
Augie Fackler <augie@google.com> [Sun, 19 Feb 2017 15:09:41 -0500] rev 31028
annotate: start pager after we're sure we wont abort
This avoids needlessly putting a short error message into the pager.
Augie Fackler <augie@google.com> [Sun, 19 Feb 2017 20:16:11 -0500] rev 31027
dispatch: consolidate pager flag handling to a single place
This makes a little more sense, thanks to Martin for suggesting it.
Augie Fackler <augie@google.com> [Sun, 19 Feb 2017 20:12:52 -0500] rev 31026
ui: rename neverpager to disablepager
I agree this is a clearer name for this method.
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Feb 2017 20:00:18 +0900] rev 31025
scmutil: proxy revrange() through repo to break import cycles
This was one of the hardest import cycles as scmutil is widely used and
revset functions are likely to depend on a variety of modules.
New repo.anyrevs() does not expand user aliases by default to copy the
behavior of the existing repo.revs(). I don't want to add new function to
localrepository, but this function is quite similar to repo.revs() so it
won't increase the complexity of the localrepository class so much.
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Feb 2017 18:19:33 +0900] rev 31024
revset: split language services to revsetlang module (API)
New revsetlang module hosts parser, tokenizer, and miscellaneous functions
working on parsed tree. It does not include functions for evaluation such as
getset() and match().
2288 mercurial/revset.py
684 mercurial/revsetlang.py
2972 total
get*() functions are aliased since they are common in revset.py.
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Feb 2017 18:16:09 +0900] rev 31023
revset: import set classes directly from smartset module
Follows up
1be65deb3d54.
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Feb 2017 18:00:01 +0900] rev 31022
help: add pointer how to narrow list of resolved/unresolved files (
issue5469)
liscju <piotr.listkiewicz@gmail.com> [Sun, 19 Feb 2017 10:56:08 +0100] rev 31021
shelve: add -n/--name option to unshelve (
issue5475)
This makes using shelve/unshelve more consistent because
shelving can be done using name option and unshelving as
well. Author of the idea of this improvement and solution is
joshgold.