David Soria Parra <davidsp@fb.com> [Tue, 20 Dec 2016 20:28:41 -0800] rev 30633
tests: exclude bundled pywatchman from check-code test
pywatchman is imported from upstream and therefore fails to pass
linting. We have added 'no-check-code' manually to every file in the
past. This is cumbersome and modifies upstream sources.
David Soria Parra <davidsp@fb.com> [Tue, 20 Dec 2016 09:23:50 -0800] rev 30632
convert: parse perforce data on-demand
We are using read-only attributes that parse the perforce data on
demand. We are reading the data only once whenever an attribute is
requested and use it throughout the import process. This is equivalent
to the previous behavior, but we are avoiding reading from perforce when
we initialize the object, but instead run it during the actual import
process, when the first attribute is requested (usually getheads(), see
`convertcmd.convert`).
David Soria Parra <davidsp@fb.com> [Tue, 20 Dec 2016 09:23:50 -0800] rev 30631
convert: return calculated values from parse() instead of manpulating state
David Soria Parra <davidsp@fb.com> [Tue, 20 Dec 2016 09:23:50 -0800] rev 30630
convert: move localname state to function scope
David Soria Parra <davidsp@fb.com> [Tue, 20 Dec 2016 09:23:50 -0800] rev 30629
convert: use return value in parse_view() instead of manipulating state
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 19 Dec 2016 04:25:18 +0100] rev 30628
changegroup: simplify logic around enabling changegroup 03
There was multiple spot that took care of adding '03' as supported changegroup
version for different condition. We gather them all in one location for
simplicity.
The 'supportedincomingversions' function is now doing nothing, but I kept it
around because it looks like a great hooking point for extension.
(Note that we should probably just get changegroup3 out of experimental now, But
that would be a patch with a much wider scope).
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 19 Dec 2016 04:29:33 +0100] rev 30627
changegroup: pass 'repo' to allsupportedversions
In the next changesets, we will introduce more logic directly related to the
repository to decide what version have to be supported. So we now directly pass
the repo object instead of just ui.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 19 Dec 2016 04:31:13 +0100] rev 30626
changegroup: simplify 'allsupportedversions' logic
Discarding '03' to add it back is a bit strange. Instead we only discard it when
needed.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 18 Dec 2016 01:17:12 +0530] rev 30625
py3: replace os.altsep with pycompat.altsep
All the occurences of os.altsep are replaced with pycompat.altsep which
returns bytes.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 18 Dec 2016 00:52:05 +0530] rev 30624
py3: have a bytes version of sys.platform
sys.platform returns unicodes on Python 3. This patch adds up
pycompat.sysplatform which returns bytes.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 18 Dec 2016 00:44:21 +0530] rev 30623
py3: have a bytes version of os.altsep
os.altsep returns unicodes on Python 3. We need a bytes version hence added
pycompat.altsep.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 23:55:25 +0530] rev 30622
py3: make sure encoding.encoding is a bytes variable
encoding.encoding returns unicodes when locale.getpreferredencoding() is used
to get the preferred encoding. This patch fixes that.
Jun Wu <quark@fb.com> [Mon, 19 Dec 2016 22:15:00 +0000] rev 30621
chg: remove locks
See the previous two patches for the reason. The advantage is a simplified
code base and better throughput when starting multiple servers with multiple
confighashes. The disadvantage is starting multiple servers in parallel with
a single confighash will waste some CPU time, which is probably fine in
common use-cases.
This makes it easier to switch to relative paths to support long unix domain
socket paths.
Jun Wu <quark@fb.com> [Mon, 19 Dec 2016 22:09:49 +0000] rev 30620
chg: start server at a unique address
See the previous patch for motivation. Previously, the server is started at
a globally shared address. This patch appends pid to the address so it
becomes unique.
Note: with Linux pid namespace, the address may be non-unique, but it does
not affect correctness of chg - chg client will receive an redirection and
that's it.
Jun Wu <quark@fb.com> [Mon, 19 Dec 2016 22:07:41 +0000] rev 30619
chgserver: truncate base address at "." for hash address
Previously, the hash address is just appending "-$HASH" to base address.
This patch makes it truncate the basename address at "." before appending
"-$HASH".
This makes it possible to spawn new servers in a racy situation and the
client could be sure the server it connects is the new server just spawned.
This is a step towards removing the lock.
One of the functionalities of the lock is to make sure the connect will
connect to a server it just created:
1. start server --address foo
2. connect to foo # wish "foo" is the server just started
With this change, the client could do:
1. start server --address foo.tmp$PID
2. connect to foo.tmp$PID # is the server just started
(note: if it is not, it does not affect correctness - linux pid
namespace is not a concern here)
3. rename foo.tmp$PID to foo
Another functionality of the lock is to avoid starting multiple servers with
a same confighash in parallel. But that also prevents starting multiple
servers with different confighashes in parallel.
Yuya Nishihara <yuya@tcha.org> [Sun, 23 Oct 2016 17:47:00 +0900] rev 30618
ui: do not translate empty configsource() to 'none' (API)
It should be processed when displaying data, so we can get "source": "" in
JSON output.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Dec 2016 16:20:04 +0900] rev 30617
convert: remove unused-but-set variable introduced in
db9e883566e8
Spotted by pyflakes.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 20:24:46 +0530] rev 30616
py3: replace os.sep with pycompat.ossep (part 4 of 4)
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 20:14:24 +0530] rev 30615
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 20:02:50 +0530] rev 30614
py3: replace os.sep with pycompat.ossep (part 2 of 4)
This part also replaces some chunks of os.sep with pycompat.ossep.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 19:56:30 +0530] rev 30613
py3: replace os.sep with pycompat.ossep (part 1 of 4)
os.sep returns unicodes on Python 3. We have pycompat.ossep which returns
bytes. This patch is a part of 4 patch series which will replace all the
occurrences of os.sep to pycompat.ossep
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 19:47:17 +0530] rev 30612
py3: replace os.pathsep with pycompat.ospathsep
os.pathsep returns unicode on Python 3. We already have pycompat.ospathsep
which return bytes on Python 3. This patch replaces all the occurrences of
os.pathsep in the codebase (excluding tests) to pycompat.ospathsep.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Dec 2016 19:36:40 +0530] rev 30611
py3: use %d instead of %s for integers
Python 3 returns an error if we use %s as type specifiers for integers.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Dec 2016 09:48:14 -0800] rev 30610
help: make multirevs just an alias for revsets
The multirevs topis seems to be covered well by the revsets topic, so
just make it an alias and remove multirevs.txt.
Jun Wu <quark@fb.com> [Fri, 16 Dec 2016 21:02:39 +0000] rev 30609
context: correct metadataonlyctx's parameter
It's "originalctx", not "path" as Yuya pointed in [1].
[1]: www.mercurial-scm.org/pipermail/mercurial-devel/2016-December/091508.html
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 12 Dec 2016 13:32:45 +0100] rev 30608
registrar: raise a programming error on duplicated registering
Previous, registering different object with the same name would silently
overwrite the first value with the second one. We now detect the situation and
raise an error. No extension in test or core had the issues.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Oct 2016 17:01:41 +0900] rev 30607
py3kcompat: drop unused module
Perhaps this was a predated attempt of Python 3 porting. Python 3.5 supports
%-formatting of bytes.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Oct 2016 16:59:50 +0900] rev 30606
strutil: drop module which no longer be used
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Oct 2016 16:58:43 +0900] rev 30605
convert: inline strutil.rfindall()
This is the only place where strutil is used. I don't think it's worth to
keep the strutil module, so inline it.
Also, strutil.rfindall() appears to have off-by-one error. 'end = c - 1' is
wrong because 'end' is exclusive.
David Soria Parra <davidsp@fb.com> [Wed, 14 Dec 2016 12:07:23 -0800] rev 30604
convert: return commit objects for revisions in the revmap
Source revision data that exists in the revmap are ignored when pulling
data from Perforce as we consider them already imported. In case where
the `convertcmd.convert` algorithm requests a commit object for such
a revision we are creating it. This is usually the case for parent of
the first imported revision.
David Soria Parra <davidsp@fb.com> [Tue, 13 Dec 2016 21:49:58 -0800] rev 30603
convert: encapsulate commit data fetching and commit object creation
Split fetching the `describe` form from Perforce and the commit object creation
into two functions. This allows us to reuse the commit construction for
revisions passed from a revmap.
David Soria Parra <davidsp@fb.com> [Tue, 13 Dec 2016 21:49:58 -0800] rev 30602
convert: do not provide head revisions if we have no changests to import
Don't set a head revision in cases where we have a revmap but no
changesets to import, as convertcmd.convert() treats them as heads of
to-imported revisions.
David Soria Parra <davidsp@fb.com> [Wed, 14 Dec 2016 01:45:57 -0800] rev 30601
convert: allow passing in a revmap
Implement `common.setrevmap` which is used to pass in a file with existing
revision mappings. This functionality is used by `convertcmd.convert` if it
exists and allows implementors such as the p4 converter to make use of an
existing mapping.
We are using the revmap to abort scanning and the repository for more information
if we already have the revision. This means we are allowing incremental imports
in cases where a revmap is provided.
David Soria Parra <davidsp@fb.com> [Tue, 13 Dec 2016 21:49:58 -0800] rev 30600
convert: use convert_revision for P4 imports
We are using convert_revisions in other importers. In order to unify this
we are also using convert_revision for Perforce in addition to the original
'p4'.
David Soria Parra <davidsp@fb.com> [Wed, 14 Dec 2016 01:45:17 -0800] rev 30599
convert: remove unused dictionaries
self.parent, self.lastbranch and self.tags have never been used.
David Soria Parra <davidsp@fb.com> [Wed, 14 Dec 2016 01:43:47 -0800] rev 30598
convert: self.heads is a list
self.heads is used as a list throughout convert and never a dictionary.
Initialize it correctly to a list.
David Soria Parra <davidsp@fb.com> [Tue, 13 Dec 2016 21:49:58 -0800] rev 30597
convert: don't use long list comprehensions
We are iterating over p4changes. Make the continue condition more clear
and easier to add new conditions in future patches, by removing the list
comprehension and move the condition into the existing for-loop.
Durham Goode <durham@fb.com> [Thu, 15 Dec 2016 11:00:18 -0800] rev 30596
changelog: keep track of file end in appender (
issue5444)
Previously, changelog.appender.end() would compute the end of the file by
joining all the current appended data and checking the length. This is an O(n)
operation.
e240e914d226 introduced a seek call before every revlog write, which
means we are hitting this O(n) behavior n times, which causes changelog writes
during a pull to be n^2.
In our large repo, this caused pulling 100k commits to go from 17s to 130s. With
this fix, it's back to 17s.
Augie Fackler <augie@google.com> [Thu, 15 Dec 2016 11:14:00 -0500] rev 30595
tests: fix test-bdiff to handle variance between pure and c bdiff code
Obviously we'd rather patch pure to have the same algorithmic win as
the C code, but this is a quick fix for the pure build since pure
isn't wrong, just not as fast as it could be.
Augie Fackler <augie@google.com> [Thu, 15 Dec 2016 11:04:09 -0500] rev 30594
tests: finish updating test-bdiff to unittest (part 4 of 4)
Augie Fackler <augie@google.com> [Thu, 15 Dec 2016 10:56:26 -0500] rev 30593
tests: update more of test-bdiff.py to use unittest (part 3 of 4)
Augie Fackler <augie@google.com> [Thu, 15 Dec 2016 10:50:06 -0500] rev 30592
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
Augie Fackler <augie@google.com> [Thu, 15 Dec 2016 10:10:15 -0500] rev 30591
tests: migrate test-bdiff.py to use unittest (part 1 of 4)
This moves all the test() calls, which were easy and mechanical.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 15 Dec 2016 19:56:48 +0100] rev 30590
import-checker: do not enforce lexical sort accross stdlib/local boundary
Before this change, you could get in a start where the checker would either
complain about importing local module before stdlib one or complain about the
local one being wrongly lexically sorted with the stdlib one.
We detect the boundary and avoid complaining about lexical sort across it.
Stanislau Hlebik <stash@fb.com> [Wed, 14 Dec 2016 09:53:56 -0800] rev 30589
cg1packer: fix `compressed` method
`cg1packer.compressed()` returns True even if `self._type` is 'UN'. This patch
fixes it.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 15 Dec 2016 12:17:08 +0100] rev 30588
perf: add historical support of ui.load()
ui.load() has been available since
d83ca854 and at the time of writing isn't
available on stable branch breaking benchmarking newer stable revisions.
Add historical portability policy note on contrib/benchmarks
Jun Wu <quark@fb.com> [Wed, 14 Dec 2016 02:17:59 +0000] rev 30587
chg: ignore HG_* in confighash
The environment variables `HG_*` are usually used by hooks. Unlike `HGPLAIN`
etc, they do not actually affect hg's behavior. So do not include them in
confighash.
This would avoid spawning an unbound number of chg server processes if
commit hook calls hg frequently.
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 13 Dec 2016 20:53:40 +0530] rev 30586
py3: make keys of keyword arguments strings
keys of keyword arguments on Python 3 has to be string. We are dealing with
bytes in our codebase so the keys are also bytes. Done that using
pycompat.strkwargs().
Also after this patch, `hg version` now runs on Python 3.5. Hurray!