FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27587
revset: use decorator to mark a predicate as safe
Using decorator can localize changes for adding (or removing) a "safe"
revset predicate function in source code.
To avoid accidentaly treating unsuitable predicates as safe, this
patch uses False as default value of "safe" argument. This forces safe
predicates to be decorated with explicit 'safe=True'.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27586
revset: use delayregistrar to register predicate in extension easily
Previous patch introduced 'revset.predicate' decorator to register
revset predicate function easily.
But it shouldn't be used in extension directly, because it registers
specified function immediately. Registration itself can't be restored,
even if extension loading fails after that.
Therefore, registration should be delayed until 'uisetup()' or so.
This patch uses 'extpredicate' decorator derived from 'delayregistrar'
to register predicate in extension easily.
This patch also tests whether 'registrar.delayregistrar' avoids
function registration if 'setup()' isn't invoked on it, because
'extpredicate' is the first user of it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27585
registrar: add delayregistrar class to register function in extensions
'delayregistrar' delays actual registration of function until
'setup()' invocation on it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27584
revset: use decorator to register a function as revset predicate
Using decorator can localize changes for adding (or removing) a revset
predicate function in source code.
It is also useful to pick predicates up for specific purpose. For
example, subsequent patch marks predicates as "safe" by decorator.
This patch defines 'parsefuncdecl()' in 'funcregistrar' class, because
this implementation can be uesd by other decorator class for fileset
predicate and template function.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27583
registrar: add funcregistrar class to register function for specific purpose
This class centralizes the common logic to register function for
specific purpose like below:
- template keyword, filter and function
- revset predicate
- fileset predicate
- webcommand
'funcregistrar' also formats help document of the function with the
'decl'(aration) specified at the construction.
This can avoid (1) redundancy between 'decl' and help document, and
(2) accidental typo of help document. For example, 'foo' should appear
twice like below, if without such formatting:
@keyword('foo')
def foo(....):
""":foo: Explanation of keyword foo ..."""
Almost all cases needs very simple document formatting like below:
- "``DECL``\n EXPLANATION"
- ":DECL: EXPLANATION"
But webcommand needs a little complicated formatting like:
/PATH/SPEC
----------
EXPLANATION ....
To make minirst recognize the section header, hyphen line should be as
long as "/PATH/SPEC". It should be arranged by program.
Implementing 'formatdoc()' in derived class can support complicated
formatting in the latter case. But it seems redundant for simple one
in the former case.
Therefore, 'funcregistrar' does:
- invoke 'self.formatdoc', if it is callable (for the latter case)
- use it as the format string, otherwise (for the former case)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:15:10 -0700] rev 27582
hgweb: support rendering a sub-topic
If the requested topic contains a "." we assume a sub-topic is
requested and display it.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:34:51 -0700] rev 27581
hgweb: support rendering sub-topic indexes
If the requested topic name is the name of a sub-topic, we now render
an index of topics within that sub-topic.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:26:33 -0700] rev 27580
templates: support linking to main help page
Currently, the "helptopics" template assumes it is only used as the
main index and therefore doesn't hyperlink "help" in the navigation
list. Sub-topics will introduce an additional consumer of this
template. So teach the template to hyperlink the "help" navigation
entry when necessary.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:01:28 -0700] rev 27579
templates: differentiate between partial and full topic name
In order to support sub-topics, we need to support linking to a full
topic name while displaying the base topic name. Change the {helpentry}
template to grab the display name from an optional seperate variable
(which will be defined in a future patch).
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:12:59 -0700] rev 27578
templates: make earlycommands and othercommands optional
We now have sub-topics in the help system. The "helptopics" template
serves as a mechanism for displaying an index of help topics.
Previously, it was only used to show the top-level list of help topics,
which includes special groupings of topics.
In the near future, we'll adapt "helptopics" for showing the index
of sub-topics. In this patch, we optionally render {earlycommands} and
{othercommands} since they aren't present on sub-topics.
Laurent Charignon <lcharignon@fb.com> [Tue, 29 Dec 2015 15:32:12 -0800] rev 27577
rebase: better error message when rebased changes are all in destination
Before this patch, when rebasing a set of obsolete revisions that were plain
pruned or already present in the destination, we were displaying:
abort: no matching revisions
This was not very helpful to understand what was going on, instead we replace
the error message by:
abort: all requested changesets have equivalents or were marked as obsolete
(to force the rebase, set the config experimental.rebaseskipobsolete to False)
Eric Sumner <ericsumner@fb.com> [Wed, 30 Dec 2015 13:10:53 -0800] rev 27576
lrucachedict: add copy method
This diff implements the standard dict copy() method for lrucachedicts, which
will be used in the pushrebase extension to make a copy of the manifestcache.
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 02:04:32 +0100] rev 27575
Added signature for changeset
ea389970c084
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 02:04:26 +0100] rev 27574
Added tag 3.6.3 for changeset
ea389970c084
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 01:49:18 +0100] rev 27573
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 01 Jan 2016 12:21:11 +0900] rev 27572
i18n-ja: synchronized with
ca8ada499529
Siddharth Agarwal <sid0@fb.com> [Mon, 28 Dec 2015 22:51:37 -0800] rev 27571
merge: while checking for unknown files don't follow symlinks (
issue5027)
Previously, we were using Python's native 'os.path.isfile' method which follows
symlinks. In this case, since we're operating on repo contents, we don't want
to follow symlinks.
There's a behaviour change here, as shown by the second part of the added test.
Consider a symlink 'f' pointing to a file containing 'abc'. If we try and
replace it with a file with contents 'abc', previously we would have let it
though. Now we don't. Although this breaks naive inspection with tools like
'cat' and 'diff', on balance I believe this is the right change.
Matt Mackall <mpm@selenic.com> [Thu, 31 Dec 2015 09:55:56 +0100] rev 27570
merge with stable
timeless <timeless@mozdev.org> [Tue, 22 Dec 2015 11:05:56 +0000] rev 27569
tests: add test-check-execute.t
Try to prevent people from adding files with incorrect execute bits
timeless <timeless@mozdev.org> [Wed, 23 Dec 2015 19:07:34 +0000] rev 27568
parents: correct help revset replacements
Implementing `hg parents -r REV FILE` correctly is hard.
The output can be 0, 1, or 2 revs.
First, you can't use parents(), because it sorts its output...
Consider:
echo $a
echo par@rev: `hg log -r "parents($a)" -q`
echo p12@rev: `hg log -r "p1($a)+p2($a)" -q`
echo parents: `hg parents -q -r $a`
(Merge 1 into 0)
3
par@rev: 0:
d9612eafe8ec 1:
070fe4290d06
p12@rev: 0:
d9612eafe8ec 1:
070fe4290d06
parents: 0:
d9612eafe8ec 1:
070fe4290d06
(Merge 4 into 5)
6
par@rev: 4:
db73392995c3 5:
c26e7dd67644
p12@rev: 5:
c26e7dd67644 4:
db73392995c3
parents: 5:
c26e7dd67644 4:
db73392995c3
(Merge 7 into 8)
9
par@rev: 7:
d84f47462f70 8:
9597bcab36e0
p12@rev: 8:
9597bcab36e0 7:
d84f47462f70
parents: 8:
9597bcab36e0 7:
d84f47462f70
You also can't use parents or/p1/p2 alone with a set, as in:
-r "parents(::REV and file(FILE))"
-r "parents(::REV - REV and file(FILE))"
... because each will return all parents for each candidate revision,
and the :: gives too many candidates.
Thus, we need a max and a p1/p2.
Also, anything of this form:
max(::REV - REV and file(FILE))
... is wrong, because max will return only one revision, and for
a proper parents, you need to return two occasionally.
Lastly, it doesn't help that `hg parents -r REV FILE` is buggy
due to a quirk in filelogs.
Here's a repository to consider when evaluating whether your
revset is correct:
$ hg log -G --template '{rev} {files}\n';
@ 10 a
|
o 9 a b
|\
| o 8 a
| |
o | 7 a
| |
+---o 6 b
| |/
| o 5 b
| |
o | 4 b
| |
+---o 3
| |/
+---o 2
| |/
| o 1 b
|
o 0 a
revs 4 and 5 create a conflict.
The conflict is resolved in the same way by both 6 and 9.
You would hope that parents around 9/10 would point to 9,
but `hg parents` will point to 6 due to the aforementioned bug.
Here's the winning solution test script and its output.
echo $a;
echo rp12-max: `hg log -r "max(::p1($a) and file(b)) + max(::p2($a) and file(b))" -q` 2> /dev/null;
echo expected: `hg parents -q -r $a b` 2> /dev/null;
Note that for 10, the output differs, but again, this is because
of the aforementioned bug. The rp12-max output is "correct",
whereas "expected" is just an unfortunate bug. The abort output
is due to something else. I'm not sure why someone thought it
was important to abort to stdio instead of stderr, but that's
really not my problem here.
10
rp12-max: 9:
184ebefc2fce
expected: 6:
dd558142b03f
9
rp12-max: 5:
c26e7dd67644 4:
db73392995c3
expected: 5:
c26e7dd67644 4:
db73392995c3
8
rp12-max: 5:
c26e7dd67644
expected: 5:
c26e7dd67644
7
rp12-max: 4:
db73392995c3
expected: 4:
db73392995c3
6
rp12-max: 5:
c26e7dd67644 4:
db73392995c3
expected: 5:
c26e7dd67644 4:
db73392995c3
5
rp12-max: 1:
070fe4290d06
expected: 1:
070fe4290d06
4
rp12-max:
abort: 'b' not found in manifest!
expected:
3
rp12-max: 1:
070fe4290d06
expected: 1:
070fe4290d06
2
rp12-max: 1:
070fe4290d06
expected: 1:
070fe4290d06
1
rp12-max:
abort: 'b' not found in manifest!
expected:
0
rp12-max:
abort: 'b' not found in manifest!
expected:
timeless <timeless@mozdev.org> [Mon, 28 Dec 2015 16:01:31 +0000] rev 27567
run-tests: avoid double counting server fails
Yuya Nishihara <yuya@tcha.org> [Mon, 14 Dec 2015 23:50:02 +0900] rev 27566
commandserver: reset state of progress bar per command
A progress bar is normally disabled in command-server session, but chg can
enable it. This patch makes sure the last-print time is measured per command.
Otherwise, progress.delay could be ineffective if a progbar was loaded before
forking worker process.
This patch is corresponding to the following change.
https://bitbucket.org/yuja/chg/commits/
2dfe3e90b365
Yuya Nishihara <yuya@tcha.org> [Mon, 14 Dec 2015 23:13:42 +0900] rev 27565
commandserver: do not set nontty flag if channel is replaced by a real file
This prepares for porting the chg server. In chg, a server receives client's
stdio over a UNIX domain socket to override server channels. This is because
chg should behave as if it is a normal hg command attached to tty. "nontty"
is not wanted.
This patch is corresponding to the following change. This doesn't test the
identity of "cin" object because the current version of chg reopens stdio
to apply buffering mode.
https://bitbucket.org/yuja/chg/commits/
c48c7aed5fc0
timeless <timeless@mozdev.org> [Tue, 22 Dec 2015 08:00:03 +0000] rev 27564
run-tests: report missing feature for skipped tests