Augie Fackler <augie@google.com> [Tue, 01 Mar 2016 18:39:25 -0500] rev 28436
peer: add an iterbatcher interface
This is very much like ordinary batch(), but it will let me add a mode
for batch where we have pathologically large requests which are then
handled streamily. This will be a significant improvement for things
like remotefilelog, which may want to request thousands of entities at
once.
Augie Fackler <augie@google.com> [Wed, 02 Mar 2016 14:18:43 -0500] rev 28435
wireproto: document quirk of _callstream between http and ssh
This tripped me up when trying to use it, so it feels like we should
document this to avoid future pain.
Augie Fackler <augie@google.com> [Tue, 01 Mar 2016 16:37:56 -0500] rev 28434
peer: raise NotImplementedError for abstract submit() method
Nothing should ever call this submit method directly as it should be
overridden by concrete batcher implementations.
Martijn Pieters <mjpieters@fb.com> [Thu, 03 Mar 2016 14:29:19 +0000] rev 28433
fsmonitor: new experimental extension
Extension to plug into a Watchman daemon, speeding up hg status calls by
relying on OS events to tell us what files have changed.
Originally developed at https://bitbucket.org/facebook/hgwatchman
Martijn Pieters <mjpieters@fb.com> [Wed, 02 Mar 2016 16:25:12 +0000] rev 28432
fsmonitor: dependencies for new experimental extension
In preparation for the filesystem monitor extension, include the pywatchman
library. The fbmonitor extension relies on this library to communicate with
the Watchman service. The library is BSD licensed and is taken from
https://github.com/facebook/watchman/tree/master/python.
This package has not been updated to mercurial code standards.
timeless <timeless@mozdev.org> [Tue, 12 Jan 2016 04:45:29 +0000] rev 28431
setup: show how to set the module policy for imports
This is not technically needed, since mercurial.__version__
does not exist as a native module, but, without this style wrappings,
if something else had a native flavor, the module loader would get
upset.
In principle, the `env` object is trying to set HGMODULEPOLICY for
children, so, conceptually we should set it for this in-process
child.
timeless <timeless@mozdev.org> [Wed, 09 Mar 2016 15:47:01 +0000] rev 28430
setup: create a module for the modulepolicy
Instead of rewriting __init__ to define the modulepolicy,
write out a __modulepolicy__.py file like __version__.py
This should work for both system-wide installation and in-place build. Therefore
we can avoid relying on two separate modulepolicy rules, '@MODULELOADPOLICY@'
and 'mercurial/modulepolicy'.
Kostia Balytskyi <ikostia@fb.com> [Wed, 09 Mar 2016 08:08:27 -0800] rev 28429
rebase: turn rebaseskipobsolete on by default
Consider the following use case. User has a set of commits he wants to rebase
onto some destination. Some of the commits in the set are already rebased
and their new versions are now among the ancestors of destination. Traditional
rebase behavior would make the rebase and effectively try to apply older
versions of these commits on top of newer versions, like this:
a` --> b --> a`
(where both 'a`' and 'a``' are rebased versions of 'a')
This is not desired since 'b' might have made changes to 'a`' which can now
result in merge conflicts. We can avoid these merge conflicts since we know
that 'a``' is an older version of 'a`', so we don't even need to put it on top
of 'b'. Rebaseskipobsolete allows us to do exactly that.
Another undesired effect of a pure rebase is that now 'a`' and 'a``' are both
successors to 'a' which is a divergence. We don't want that and not rebasing
'a' the second time allows to avoid it.
This was not enabled by default initially because we wanted to have some more
experience with it. After months of painless usages in multiple places, we are
confident enough to turn it on my default.
Yuya Nishihara <yuya@tcha.org> [Wed, 09 Mar 2016 23:57:15 +0900] rev 28428
graphlog: bring back color to node symbol template
Follows up 3356bf61fa25. A ui object is required to render labels.
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Feb 2016 21:44:13 +0900] rev 28427
revset: add inspection data to max() and min() functions
We are likely to be interested in how these functions build a result set.
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Feb 2016 21:43:51 +0900] rev 28426
revset: add inspection data to limit() and last() functions
We are likely to be interested in how these functions calculate a result set.
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Feb 2016 21:32:00 +0900] rev 28425
revset: stub to add extra data to baseset for better inspection
We sometimes construct a baseset from filtering result. In that case, a
baseset can provide more precise information how it is constructed.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Feb 2016 20:05:57 +0900] rev 28424
revset: add inspection data to all filter() calls
This is useful for debugging revset construction.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Feb 2016 19:25:11 +0900] rev 28423
revset: add extra data to filteredset for better inspection
A filteredset is heavily used, but it cannot provide a printable information
how given set is filtered because a condition is an arbitrary callable object.
This patch adds an optional "condrepr" object that is used only by repr(). To
minimize the maintaining/runtime overhead of "condrepr", its type is overloaded
as follows:
type example
-------- ---------------------------------
tuple ('<not %r>', other)
str '<branch closed>'
callable lambda: '<branch %r>' % sorted(b)
object other
timeless <timeless@mozdev.org> [Tue, 01 Mar 2016 10:18:47 +0000] rev 28422
zeroconf: replace reduce+add with itertools.chain
timeless <timeless@mozdev.org> [Tue, 01 Mar 2016 10:22:10 +0000] rev 28421
zeroconf: replace has_key with in
timeless <timeless@mozdev.org> [Tue, 01 Mar 2016 09:59:58 +0000] rev 28420
zeroconf: compare singleton using is
timeless <timeless@mozdev.org> [Tue, 01 Mar 2016 09:57:45 +0000] rev 28419
zeroconf: remove camelcase in identifiers
timeless <timeless@mozdev.org> [Wed, 09 Mar 2016 15:35:57 +0000] rev 28418
setup: switch to with open as
We're leaving the modulepolicy bit alone, because it's being
rewritten in the next commit.
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:50:35 +0000] rev 28417
win32mbcs: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:48:08 +0000] rev 28416
notify: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:42:42 +0000] rev 28415
patchbomb: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:34:43 +0000] rev 28414
convert: __init__ use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:41:35 +0000] rev 28413
convert: cvs use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:37:50 +0000] rev 28412
convert: transport use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:32:52 +0000] rev 28411
convert: bzr use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:26:35 +0000] rev 28410
convert: common use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:23:28 +0000] rev 28409
convert: convcmd use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 16:13:05 +0000] rev 28408
convert: subversion use absolute_import
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 20:34:59 +0000] rev 28407
blackbox: guard against recursion from dirty check
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 20:52:57 +0000] rev 28406
tests: divorce blackbox test from test-dispatch.py
I used test-dispatch.py to demonstrate what would happen if
a log file changed from being readonly to writable, by
having it replace a directory (proxy for readonly/not-writable)
with a log file in between transactions of a running python
process (proxy for Mercurial).
This commit makes it easier for people to follow what the test
is doing, by creating a real file that people can read.
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 20:57:40 +0000] rev 28405
tests: test-dispatch use print_function
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 20:57:15 +0000] rev 28404
tests: test-dispatch use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 05:27:07 +0000] rev 28403
templater: ignore orig/rej files
If your mercurial/templates/ directory is dirty, then the template system would
otherwise import duplicate templates from the .orig files and potentially try to
parse .rej files.
Since editing/reverting these templates isn't an unexpected action, and since
they're in .hgignore, it's best that the template system know to skip them."
timeless <timeless@mozdev.org> [Thu, 24 Dec 2015 04:31:34 +0000] rev 28402
resolve: when pats do not match, hint about path:
Suggest a command that would probably work.
liscju <piotr.listkiewicz@gmail.com> [Wed, 09 Mar 2016 08:21:57 +0100] rev 28401
shelve: changes getting opts values by get method
When shelve is used by another extension that doesn't
provide all necessary values in opts shelve raises
KeyError exception. This patch fixes this by getting
values from opts dictionary with get method.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Feb 2016 21:15:16 -0800] rev 28400
contrib: remove references to 2to3
The custom porting fixers are removed. A comment related to 2to3
has been removed from the import checker.
After this patch, no references to 2to3 remain.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Feb 2016 21:14:17 -0800] rev 28399
check-code: remove redundant import style check
We have a dedicated tool that checks for import conventions. Remove
a redundant and less powerful check.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Feb 2016 21:11:24 -0800] rev 28398
setup: remove support for 2to3
We want to run unaltered source on multiple Python versions. We
won't be using 2to3 for Python 3 support.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Feb 2016 21:08:37 -0800] rev 28397
run-tests: remove 2to3 support
Our goal is to have 1 code base that works on 2.6, 2.7, and 3.5+.
2to3 won't be used. Stop passing it to setup.py.
liscju <piotr.listkiewicz@gmail.com> [Tue, 08 Mar 2016 21:59:06 +0100] rev 28396
histedit: adds hint how to reorder changesets at editor (issue3766)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 08 Mar 2016 23:04:53 +0900] rev 28395
revset: replace predicate by revsetpredicate of registrar
To make all built-in predicates be known to hggettext, loading
built-in predicates by loadpredicate() should be placed before fixing
i18nfunctions but after all of predicate decorating.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 08 Mar 2016 23:04:53 +0900] rev 28394
revset: replace extpredicate by revsetpredicate of registrar
This patch consists of changes below (these can't be applied
separately).
- replace revset.extpredicate by registrar.revsetpredicate in
extensions
- remove setup() on an instance named as revsetpredicate in
uisetup()/extsetup() of each extensions
registrar.revsetpredicate doesn't have setup() API.
- put new entry for revsetpredicate into extraloaders in dispatch
This causes implicit loading predicate functions at loading
extension.
This loading mechanism requires that an extension has an instance
named as revsetpredicate, and this is reason why
largefiles/__init__.py is also changed in this patch.
Before this patch, test-revset.t tests that all decorated revset
predicates are loaded by explicit setup() at once ("all or nothing").
Now, test-revset.t tests that any revset predicate isn't loaded at
failure of loading extension, because loading itself is executed by
dispatch and it can't be controlled on extension side.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 08 Mar 2016 23:04:53 +0900] rev 28393
registrar: define revsetpredicate to decorate revset predicate
revsetpredicate is used to replace revset.predicate and
revset.extpredicate in subsequent patches.
This patch also adds loadpredicate() to revset, because this
combination helps to figure out how the name of safe predicate is put
into safesymbols.
This patch still uses safesymbols set to examine whether the predicate
corresponded to the 'name' is safe from DoS attack or not, because
just setting func._safe property needs changes below for such
examination.
before:
name in revset.safesymbols
after:
getattr(revset.symbols.get(name, None), '_safe', False)
"automatic registration" described in help doc of revsetpredicate
class will be achieved by the subsequent patch, which lists
loadpredicate() up in dispatch.extraloaders.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 08 Mar 2016 23:04:53 +0900] rev 28392
registrar: introduce new class for registration to replace funcregistrar
_funcregistrarbase differs from funcregistrar in points below:
- every code paths should use same class derived from
_funcregistrarbase to register functions in a same category
funcregistrar expects (3rd party) extensions to use (a class
derived from) delayregistrar.
- actual extra setup should be executed in another function
For example, marking revset predicate as "safe" is executed in a
class derived from _funcregistrarbase, but putting name of "safe"
predicate into safesymbols is executed in another function for it.
funcregistrar expects derived classes to do so.
New class is named as module private one, because code paths, which
register functions, should use not it directly but one derived from
it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 08 Mar 2016 23:04:53 +0900] rev 28391
dispatch: make loading extra information from extension extensible
This patch makes loading extra information from extension module at
dispatching extensible. Factoring 'loadcmdtable()' into commands.py is
a part of generalization of loading extra information.
This extensibility assumes registration of new function like below,
for example:
- revset predicate
- fileset predicate
- template keyword
- template filter
- template function
- internal merge tool
- web command
This patch requires not loader function itself but container module
and the name of it, because listing loader function directly up
implies actual loading module of it, even if it isn't used at runtime
(for example, extensions don't always define revset predicate)
Durham Goode <durham@fb.com> [Thu, 04 Feb 2016 15:38:04 -0800] rev 28390
obsolete: fix n^2 marker computation behavior
Previously, if you ran obsolete.createmarkers with a bunch of markers that did
not have successors (like when you do a prune), it encountered a n^2 computation
behavior because the loop would read the changelog (to get ctx.parents()), then
add a marker, in a loop. Adding a marker invalidated the computehidden cache,
and reading the changelog recomputed it.
This resulted in pruning 150 commits taking 150+ seconds in a large repo.
The fix is to break the reading part of the loop to be separate from the writing
part.
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 17:26:12 +0000] rev 28389
bdiff: (pure) support array.array arrays (issue5130)
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 09 Mar 2016 22:21:08 +0000] rev 28388
mq: restrict generated patch name to 75 characters (issue5117)
Super long first line in description lead to very long file name that
windows is unhappy about. We restrict the name to 75 char to avoid the
issue.
75 seems fine and leave some extra room for '__#' suffix in case of conflict.
I does not seems worthwhile to add a dedicated config option to configure the
length. It can be done in the future if there is an actual user demand for it.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 06 Mar 2016 14:30:34 -0500] rev 28387
files: don't recurse into subrepos without a path or -S (issue5127)
The 'm.always()' check was needed for when a path to 'sub1' is given, and 'sub1'
contains a subrepo itself. But that also caused the automatic recursion when no
path was given. Instead, force -S when printing a subrepo if the subpath is an
exact match (which will unconditionally recurse once in the nested subrepo).
Durham Goode <durham@fb.com> [Tue, 08 Mar 2016 00:20:08 -0800] rev 28386
parsers: optimize filtered headrevs logic
The old native head revs logic would iterate over every node, starting from 0,
and check if every node was filtered (by testing it against the filteredrevs
python set). On large repos with hundreds of thousands of commits, this could
take 150ms.
This new logic iterates over the nodes in reverse order, and skips the filtered
check if we've seen an unfiltered child of the node. This saves approximately a
bagillion filteredrevs set checks, which shaves the time down from 150ms to
20ms during every branch cache write.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 07 Mar 2016 03:14:19 +0900] rev 28385
destutil: choose non-closed branch head at first (BC)
Before this patch, destupdate() returns the tipmost (descendant)
branch head regardless of closed or not. But updating to closed branch
head isn't reasonable for ordinary workflow, because:
- "hg heads" doesn't show closed heads (= updated parent itself) by
default
- subsequent committing on it re-opens closed branch
even if inactivation of closed head is needed, update destination
isn't it, because it should be merged into to another branch in
such case.
This patch chooses non-closed descendant branch head as default update
destination at first. If all descendant branch heads are closed,
destupdate() returns the tipmost closed branch head.
For simplicity, this patch chooses adding _destupdatebranchfallback()
instead largely changing _destupdatebranch().
This patch changes not only normal lookup code path, but also the "no
default branch" code path, for consistency.
Kostia Balytskyi <ikostia@fb.com> [Tue, 08 Mar 2016 04:08:33 -0800] rev 28384
formatter: make labels work with templated output
To describe the bug this fix is addressing, one can do
``$ hg status -T "{label('red', path)}\n" --color=debug``
and observe that the label is not applied before my fix and applied with it.
timeless <timeless@mozdev.org> [Tue, 08 Mar 2016 14:32:03 +0000] rev 28383
hghave: improve description of Hypothesis
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:39:55 +0000] rev 28382
purge: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:38:32 +0000] rev 28381
record: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:36:14 +0000] rev 28380
relink: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:33:55 +0000] rev 28379
schemas: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:30:51 +0000] rev 28378
shelve: use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 21:26:36 +0000] rev 28377
strip: use absolute_import
Martijn Pieters <mjpieters@fb.com> [Fri, 04 Mar 2016 14:44:32 +0000] rev 28376
graphmod: augment the graph to include more information about the edges
The walker knows when an edge leads to a direct parent, a grandparent (skipping
revisions not part of the revset) and parents that are missing altogether
(neither it nor a grandparent is in the revset). Add this information to the
parents sequence yielded.
Martijn Pieters <mjpieters@fb.com> [Fri, 04 Mar 2016 14:44:32 +0000] rev 28375
graphmod: refactor state handling
Move ASCII graph state to a dictionary, to clarify what is being tracked. Move
the 'seen' state (tracking currently active edges) into this structure.
Yuya Nishihara <yuya@tcha.org> [Thu, 11 Jun 2015 23:04:14 +0900] rev 28374
templater: move label() function from color extension
ui.label() is no-op by default, so we can just call ui.label() by label()
template function no matter if the color is enabled or not.
Yuya Nishihara <yuya@tcha.org> [Thu, 11 Jun 2015 22:58:27 +0900] rev 28373
templater: make label() take unknown symbol as color literal
Instead of the mapping hack introduced by b775a2029e8d, this patch changes the
way how a label symbol is evaluated. This is still hackish, but should be more
predictable in that it doesn't depend on the known color effects.
This change is intended to eliminate the reference to color._effects so that
color.templatelabel() can be merged with templater.label().
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 15:50:34 +0000] rev 28372
convert: monotone use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 15:31:15 +0000] rev 28371
convert: p4 use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 15:26:49 +0000] rev 28370
convert: hg use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 14:56:29 +0000] rev 28369
convert: cvsps use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 14:23:23 +0000] rev 28368
convert: darcs use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 09:00:58 +0000] rev 28367
convert: filemap use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 08:58:01 +0000] rev 28366
convert: gnuarch use absolute_import
timeless <timeless@mozdev.org> [Wed, 02 Mar 2016 20:42:13 +0000] rev 28365
convert: git use absolute_import
Durham Goode <durham@fb.com> [Mon, 07 Mar 2016 17:26:47 -0800] rev 28364
branchmap: check node against changelog instead of repo
Testing 'node in repo' requires constructing a changectx, which is a little
expensive. Testing 'repo.changelog.hasnode(node)' is notably faster. This
saves 10-20ms off of every command, when testing a few thousand nodes from the
branch cache.
I considered changing the implementation of localrepository.__contains__ so
every place would benefit from the change, but since
localrepository.__contains__ uses changectx to check if the commit exists, it
means it supports a wider range of possible inputs (like revs, hashes, '.',
etc), so it seemed unnecessarily risky.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 29 Feb 2016 09:26:43 -0800] rev 28363
changegroup: clear progress callback after changelog processing
The progress callback is replaced by one for manifests after changelog
processing is done, but let's not depend on manifests replacing the
value and instead explicitly clear it.
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 22:44:29 +0900] rev 28362
tests: adjust for code move in Hypothesis 2.0.0
It appears that the Settings class was renamed to settings, and because
of this, the settings module was renamed to configuration.
https://github.com/DRMacIver/hypothesis/commit/a0e663b
Martin von Zweigbergk <martinvonz@google.com> [Sun, 28 Feb 2016 22:51:07 -0800] rev 28361
changegroup: progress for added files is not measured in "chunks"
The "prog" class cg1unpacker.apply() has the unit set to
"chunks". This is not correct for files, where the file itself is the
unit. The unit is not usually printed, which is probably why this has
not been fixed yet. It can be show with e.g. "--config
progress.format='topic number unit'".
Martin von Zweigbergk <martinvonz@google.com> [Sun, 28 Feb 2016 21:15:06 -0800] rev 28360
changegroup: exclude submanifests from manifest progress
The progress callback for manifests is cleared outside of
_unpackmanifests(), which means it will remain in effect while pulling
subdirectory manifests when using treemanifests. Since the total
number of revisions used for the progress is the number of changesets,
the total number of treemanifest revisions is usually larger than
that. One effect of this is that the ETA is negative. It's hard to
estimate the number of subdirectory revisions, so let's just exclude
them from progress for now.
timeless <timeless@mozdev.org> [Sun, 14 Feb 2016 07:35:50 +0000] rev 28359
commit: block amend while histedit is in progress (issue4800)
Jun Wu <quark@fb.com> [Wed, 02 Mar 2016 10:42:58 +0000] rev 28358
chg: limit reconnect attempts
Some users may have hg as a wrapper script which sets sensitive environment
variables (like setting up virtualenv). This will make chg redirect forever
because the environment variables are never considered up to date.
This patch adds a limit (10) for reconnect attempts and warn the user with
a possible solution if the limit is exceeded.
Jun Wu <quark@fb.com> [Sun, 06 Mar 2016 14:22:37 +0000] rev 28357
chg: use validate to make sure the server is up to date
This patch uses the newly added validate method to make sure the server has
loaded the up-to-date config and extensions. If the server cannot validate
itself, the client will receive instructions and follow them to try to reach
another server that is more likely to validate itself. The instructions can
be a redirect (connect to another server address) and/or an unlink (stops an
out-dated server).
Jun Wu <quark@fb.com> [Sun, 06 Mar 2016 14:21:52 +0000] rev 28356
chg: implement validate in hgclient
This patch implements the corresponding validate method in hgclient.
It will return instruction strings as is without taking any real action.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 06 Mar 2016 03:15:45 +0530] rev 28355
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 06 Mar 2016 03:10:17 +0530] rev 28354
fixpax: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 06 Mar 2016 03:06:09 +0530] rev 28353
debugcmdserver: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 06 Mar 2016 03:01:46 +0530] rev 28352
check-config: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 06 Mar 2016 02:25:50 +0530] rev 28351
casesmash: use absolute_import
Jun Wu <quark@fb.com> [Sat, 05 Mar 2016 13:56:59 +0000] rev 28350
chgserver: implement validate command
validate will load the repo config and check if the server has up-to-date
config to continue serve the client. In case it does not, the server will
send instructions to the client about what to do next, including to retry
with a different address or to unlink an outdated socket file to stop an
old server.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 13:58:46 +0900] rev 28349
templater: handle exception when applying map operator to non-iterable object
Before this, "{noniterable % template}" raised an exception. This tries to
provide a better indication for the common case, where a left-hand-side
expression is a keyword.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 13:30:32 +0900] rev 28348
templater: factor out thin helper that evaluates argument as string
This function is trivial, but it can make it clear that args[i] is a
(func, data) pair.
Yuya Nishihara <yuya@tcha.org> [Sat, 05 Mar 2016 00:01:36 +0900] rev 28347
color: make label() template function stringify "expr" argument first
Since label() should return a string (or a thunk to be evaluated to a string),
this change is okay. This helps porting to evalstring() helper. See the next
patch for details.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 13:09:17 +0900] rev 28346
templater: fix shortest() to evaluate int argument and handle error
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 13:05:09 +0900] rev 28345
templater: fix pad() to evaluate int argument and handle error
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 12:48:14 +0900] rev 28344
templater: drop redundant type conversion when evaluating integer argument
A function argument may be an integer. In this case, it isn't necessary to
convert a value to string and back to integer.
Because an argument may be an arbitrary object (e.g. date tuple), TypeError
should be caught as well.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Feb 2016 12:42:25 +0900] rev 28343
templater: factor out function that evaluates argument as integer
We have more bare int()s that may raise ValueError or TypeError. This function
will be used to fix them.
Jun Wu <quark@fb.com> [Fri, 04 Mar 2016 13:18:02 +0000] rev 28342
chgserver: use basename for socket symlink
Previously we use full path and the symlink may point to outside (unsafe)
world if the directory is moved. This patch fixes it by only linking to
basename of the target. Therefore the symbolic link and socket files will
always stay in the same directory.
Julien Cristau <julien.cristau@logilab.fr> [Thu, 03 Mar 2016 18:34:19 +0100] rev 28341
patch: when importing from email, RFC2047-decode From/Subject headers
Reported at https://bugs.debian.org/737498