2009-04-26 03:13:08 +04:00
|
|
|
# changegroup.py - Mercurial changegroup manipulation functions
|
|
|
|
#
|
|
|
|
# Copyright 2006 Matt Mackall <mpm@selenic.com>
|
|
|
|
#
|
|
|
|
# This software may be used and distributed according to the terms of the
|
2010-01-20 07:20:08 +03:00
|
|
|
# GNU General Public License version 2 or any later version.
|
2006-12-13 22:27:09 +03:00
|
|
|
|
2015-08-08 10:35:37 +03:00
|
|
|
from __future__ import absolute_import
|
|
|
|
|
|
|
|
import os
|
|
|
|
import struct
|
|
|
|
import tempfile
|
2014-04-02 02:27:53 +04:00
|
|
|
import weakref
|
2015-08-08 10:35:37 +03:00
|
|
|
|
2019-03-26 05:22:16 +03:00
|
|
|
from . import (
|
|
|
|
dagutil,
|
|
|
|
error,
|
|
|
|
mdiff,
|
2019-03-27 14:45:35 +03:00
|
|
|
mutation,
|
2019-03-26 05:22:16 +03:00
|
|
|
perftrace,
|
|
|
|
phases,
|
|
|
|
progress,
|
|
|
|
pycompat,
|
|
|
|
util,
|
|
|
|
visibility,
|
|
|
|
)
|
2015-08-08 10:35:37 +03:00
|
|
|
from .i18n import _
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
from .node import hex, nullrev, short
|
|
|
|
|
2006-03-21 13:47:21 +03:00
|
|
|
|
2018-03-07 00:20:16 +03:00
|
|
|
CFG_CGDELTA_ALWAYS_NULL = "always-null"
|
|
|
|
CFG_CGDELTA_NO_EXTERNAL = "no-external"
|
|
|
|
CFG_CGDELTA_DEFAULT = "default"
|
|
|
|
|
2014-09-02 14:11:36 +04:00
|
|
|
_CHANGEGROUPV1_DELTA_HEADER = "20s20s20s20s"
|
2014-10-17 16:41:11 +04:00
|
|
|
_CHANGEGROUPV2_DELTA_HEADER = "20s20s20s20s20s"
|
2015-12-14 23:55:12 +03:00
|
|
|
_CHANGEGROUPV3_DELTA_HEADER = ">20s20s20s20s20sH"
|
2011-04-30 12:00:41 +04:00
|
|
|
|
flake8: enable F821 check
Summary:
This check is useful and detects real errors (ex. fbconduit). Unfortunately
`arc lint` will run it with both py2 and py3 so a lot of py2 builtins will
still be warned.
I didn't find a clean way to disable py3 check. So this diff tries to fix them.
For `xrange`, the change was done by a script:
```
import sys
import redbaron
headertypes = {'comment', 'endl', 'from_import', 'import', 'string',
'assignment', 'atomtrailers'}
xrangefix = '''try:
xrange(0)
except NameError:
xrange = range
'''
def isxrange(x):
try:
return x[0].value == 'xrange'
except Exception:
return False
def main(argv):
for i, path in enumerate(argv):
print('(%d/%d) scanning %s' % (i + 1, len(argv), path))
content = open(path).read()
try:
red = redbaron.RedBaron(content)
except Exception:
print(' warning: failed to parse')
continue
hasxrange = red.find('atomtrailersnode', value=isxrange)
hasxrangefix = 'xrange = range' in content
if hasxrangefix or not hasxrange:
print(' no need to change')
continue
# find a place to insert the compatibility statement
changed = False
for node in red:
if node.type in headertypes:
continue
# node.insert_before is an easier API, but it has bugs changing
# other "finally" and "except" positions. So do the insert
# manually.
# # node.insert_before(xrangefix)
line = node.absolute_bounding_box.top_left.line - 1
lines = content.splitlines(1)
content = ''.join(lines[:line]) + xrangefix + ''.join(lines[line:])
changed = True
break
if changed:
# "content" is faster than "red.dumps()"
open(path, 'w').write(content)
print(' updated')
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
```
For other py2 builtins that do not have a py3 equivalent, some `# noqa`
were added as a workaround for now.
Reviewed By: DurhamG
Differential Revision: D6934535
fbshipit-source-id: 546b62830af144bc8b46788d2e0fd00496838939
2018-02-10 04:31:44 +03:00
|
|
|
try:
|
|
|
|
xrange(0)
|
|
|
|
except NameError:
|
|
|
|
xrange = range
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2011-02-22 05:03:39 +03:00
|
|
|
def readexactly(stream, n):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
"""read n bytes from stream.read and abort if less was available"""
|
2011-02-22 05:03:39 +03:00
|
|
|
s = stream.read(n)
|
|
|
|
if len(s) < n:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
raise error.Abort(
|
|
|
|
_("stream ended unexpectedly" " (got %d bytes, expected %d)") % (len(s), n)
|
|
|
|
)
|
2011-02-22 05:03:39 +03:00
|
|
|
return s
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2011-02-22 05:03:39 +03:00
|
|
|
def getchunk(stream):
|
|
|
|
"""return the next chunk from stream as a string"""
|
|
|
|
d = readexactly(stream, 4)
|
2006-03-21 13:47:21 +03:00
|
|
|
l = struct.unpack(">l", d)[0]
|
|
|
|
if l <= 4:
|
2011-02-22 05:10:37 +03:00
|
|
|
if l:
|
2015-10-08 22:55:45 +03:00
|
|
|
raise error.Abort(_("invalid chunk length %d") % l)
|
2006-03-21 13:47:21 +03:00
|
|
|
return ""
|
2011-02-22 05:03:39 +03:00
|
|
|
return readexactly(stream, l - 4)
|
2006-03-21 13:47:21 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2007-10-04 02:17:28 +04:00
|
|
|
def chunkheader(length):
|
2009-09-09 01:58:59 +04:00
|
|
|
"""return a changegroup chunk header (string)"""
|
2007-10-04 02:17:28 +04:00
|
|
|
return struct.pack(">l", length + 4)
|
2006-03-21 13:47:21 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2006-03-21 13:47:21 +03:00
|
|
|
def closechunk():
|
2009-09-09 01:58:59 +04:00
|
|
|
"""return a changegroup chunk header (string) for a zero-length chunk"""
|
2006-03-21 13:47:21 +03:00
|
|
|
return struct.pack(">l", 0)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2015-10-05 10:14:47 +03:00
|
|
|
def writechunks(ui, chunks, filename, vfs=None):
|
|
|
|
"""Write chunks to a file and return its filename.
|
2006-11-16 00:51:58 +03:00
|
|
|
|
2015-10-05 10:14:47 +03:00
|
|
|
The stream is assumed to be a bundle file.
|
2006-11-16 00:51:58 +03:00
|
|
|
Existing files will not be overwritten.
|
|
|
|
If no filename is specified, a temporary file is created.
|
|
|
|
"""
|
|
|
|
fh = None
|
|
|
|
cleanup = None
|
|
|
|
try:
|
|
|
|
if filename:
|
2014-03-08 20:03:28 +04:00
|
|
|
if vfs:
|
|
|
|
fh = vfs.open(filename, "wb")
|
|
|
|
else:
|
changegroup: increase write buffer size to 128k
By default, Python defers to the operating system for choosing the
default buffer size on opened files. On my Linux machine, the default
is 4k, which is really small for 2016.
This patch bumps the write buffer size when writing
changegroups/bundles to 128k. This matches the 128k read buffer
we already use on revlogs.
It's worth noting that this only impacts when writing to an explicit
file (such as during `hg bundle`). Buffers when writing to bundle
files via the repo vfs or to a temporary file are not impacted.
When producing a none-v2 bundle file of the mozilla-unified repository,
this change caused the number of write() system calls to drop from
952,449 to 29,788. After this change, the most frequent system
calls are fstat(), read(), lseek(), and open(). There were
2,523,672 system calls after this patch (so a net decrease of
~950k is statistically significant).
This change shows no performance change on my system. But I have a
high-end system with a fast SSD. It is quite possible this change
will have a significant impact on network file systems, where
extra network round trips due to excessive I/O system calls could
introduce significant latency.
2016-10-16 23:35:23 +03:00
|
|
|
# Increase default buffer size because default is usually
|
|
|
|
# small (4k is common on Linux).
|
|
|
|
fh = open(filename, "wb", 131072)
|
2006-11-16 00:51:58 +03:00
|
|
|
else:
|
|
|
|
fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg")
|
2017-02-13 19:45:28 +03:00
|
|
|
fh = os.fdopen(fd, pycompat.sysstr("wb"))
|
2006-11-16 00:51:58 +03:00
|
|
|
cleanup = filename
|
2015-10-05 10:14:47 +03:00
|
|
|
for c in chunks:
|
|
|
|
fh.write(c)
|
2006-11-16 00:51:58 +03:00
|
|
|
cleanup = None
|
|
|
|
return filename
|
|
|
|
finally:
|
|
|
|
if fh is not None:
|
|
|
|
fh.close()
|
|
|
|
if cleanup is not None:
|
2014-03-08 20:03:28 +04:00
|
|
|
if filename and vfs:
|
|
|
|
vfs.unlink(cleanup)
|
|
|
|
else:
|
|
|
|
os.unlink(cleanup)
|
2006-11-16 00:51:58 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-08-21 02:35:18 +03:00
|
|
|
def checkrevs(repo, revs):
|
|
|
|
# to be replaced by extensions
|
|
|
|
# free from extension logic
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2014-09-02 14:11:36 +04:00
|
|
|
class cg1unpacker(object):
|
2015-10-14 19:05:27 +03:00
|
|
|
"""Unpacker for cg1 changegroup streams.
|
|
|
|
|
|
|
|
A changegroup unpacker handles the framing of the revision data in
|
|
|
|
the wire format. Most consumers will want to use the apply()
|
|
|
|
method to add the changes from the changegroup to a repository.
|
|
|
|
|
|
|
|
If you're forwarding a changegroup unmodified to another consumer,
|
|
|
|
use getchunks(), which returns an iterator of changegroup
|
|
|
|
chunks. This is mostly useful for cases where you need to know the
|
|
|
|
data stream has ended by observing the end of the changegroup.
|
|
|
|
|
|
|
|
deltachunk() is useful only if you're applying delta data. Most
|
|
|
|
consumers should prefer apply() instead.
|
|
|
|
|
|
|
|
A few other public methods exist. Those are used only for
|
|
|
|
bundlerepo and some debug commands - their use is discouraged.
|
|
|
|
"""
|
2018-05-30 12:16:33 +03:00
|
|
|
|
2014-09-02 14:11:36 +04:00
|
|
|
deltaheader = _CHANGEGROUPV1_DELTA_HEADER
|
2011-04-30 12:00:41 +04:00
|
|
|
deltaheadersize = struct.calcsize(deltaheader)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "01"
|
|
|
|
_grouplistcount = 1 # One list of files after the manifests
|
2016-01-20 04:44:25 +03:00
|
|
|
|
2016-07-18 01:13:51 +03:00
|
|
|
def __init__(self, fh, alg, extras=None):
|
2016-11-08 05:38:13 +03:00
|
|
|
if alg is None:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
alg = "UN"
|
2016-11-08 05:38:13 +03:00
|
|
|
if alg not in util.compengines.supportedbundletypes:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
raise error.Abort(_("unknown stream compression type: %s") % alg)
|
|
|
|
if alg == "BZ":
|
|
|
|
alg = "_truncatedBZ"
|
2016-11-08 05:38:13 +03:00
|
|
|
|
|
|
|
compengine = util.compengines.forbundletype(alg)
|
|
|
|
self._stream = compengine.decompressorreader(fh)
|
2010-08-26 01:55:54 +04:00
|
|
|
self._type = alg
|
2016-07-18 01:13:51 +03:00
|
|
|
self.extras = extras or {}
|
2018-03-21 23:36:28 +03:00
|
|
|
self.progress = None
|
2015-10-14 18:58:35 +03:00
|
|
|
|
|
|
|
# These methods (compressed, read, seek, tell) all appear to only
|
|
|
|
# be used by bundlerepo, but it's a little hard to tell.
|
2010-08-26 01:55:54 +04:00
|
|
|
def compressed(self):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
return self._type is not None and self._type != "UN"
|
|
|
|
|
2010-08-26 01:53:06 +04:00
|
|
|
def read(self, l):
|
|
|
|
return self._stream.read(l)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2010-09-18 04:02:32 +04:00
|
|
|
def seek(self, pos):
|
|
|
|
return self._stream.seek(pos)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2010-09-18 04:02:32 +04:00
|
|
|
def tell(self):
|
2010-09-18 04:24:29 +04:00
|
|
|
return self._stream.tell()
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2010-09-21 01:14:05 +04:00
|
|
|
def close(self):
|
|
|
|
return self._stream.close()
|
2010-09-19 21:38:44 +04:00
|
|
|
|
2015-10-14 18:58:56 +03:00
|
|
|
def _chunklength(self):
|
2011-02-22 18:31:01 +03:00
|
|
|
d = readexactly(self._stream, 4)
|
2011-02-22 05:10:37 +03:00
|
|
|
l = struct.unpack(">l", d)[0]
|
|
|
|
if l <= 4:
|
|
|
|
if l:
|
2015-10-08 22:55:45 +03:00
|
|
|
raise error.Abort(_("invalid chunk length %d") % l)
|
2011-02-22 05:10:37 +03:00
|
|
|
return 0
|
2018-03-21 23:36:28 +03:00
|
|
|
if self.progress is not None:
|
|
|
|
self.progress.value += 1
|
2011-02-22 05:10:37 +03:00
|
|
|
return l - 4
|
2010-09-19 21:38:44 +04:00
|
|
|
|
2011-04-30 21:01:24 +04:00
|
|
|
def changelogheader(self):
|
|
|
|
"""v10 does not have a changelog header chunk"""
|
|
|
|
return {}
|
|
|
|
|
|
|
|
def manifestheader(self):
|
|
|
|
"""v10 does not have a manifest header chunk"""
|
|
|
|
return {}
|
|
|
|
|
|
|
|
def filelogheader(self):
|
|
|
|
"""return the header of the filelogs chunk, v10 only has the filename"""
|
2015-10-14 18:58:56 +03:00
|
|
|
l = self._chunklength()
|
2011-04-30 21:01:24 +04:00
|
|
|
if not l:
|
|
|
|
return {}
|
|
|
|
fname = readexactly(self._stream, l)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
return {"filename": fname}
|
2010-09-19 21:38:44 +04:00
|
|
|
|
2011-04-30 12:00:41 +04:00
|
|
|
def _deltaheader(self, headertuple, prevnode):
|
|
|
|
node, p1, p2, cs = headertuple
|
|
|
|
if prevnode is None:
|
|
|
|
deltabase = p1
|
|
|
|
else:
|
|
|
|
deltabase = prevnode
|
2015-12-14 23:55:12 +03:00
|
|
|
flags = 0
|
|
|
|
return node, p1, p2, deltabase, cs, flags
|
2011-04-30 12:00:41 +04:00
|
|
|
|
2011-04-30 21:01:24 +04:00
|
|
|
def deltachunk(self, prevnode):
|
2015-10-14 18:58:56 +03:00
|
|
|
l = self._chunklength()
|
2010-09-19 22:12:45 +04:00
|
|
|
if not l:
|
|
|
|
return {}
|
2011-04-30 12:00:41 +04:00
|
|
|
headerdata = readexactly(self._stream, self.deltaheadersize)
|
|
|
|
header = struct.unpack(self.deltaheader, headerdata)
|
|
|
|
delta = readexactly(self._stream, l - self.deltaheadersize)
|
2015-12-14 23:55:12 +03:00
|
|
|
node, p1, p2, deltabase, cs, flags = self._deltaheader(header, prevnode)
|
2017-09-20 19:35:45 +03:00
|
|
|
return (node, p1, p2, cs, deltabase, delta, flags)
|
2010-09-19 22:12:45 +04:00
|
|
|
|
2014-04-11 00:19:00 +04:00
|
|
|
def getchunks(self):
|
|
|
|
"""returns all the chunks contains in the bundle
|
|
|
|
|
|
|
|
Used when you need to forward the binary stream to a file or another
|
|
|
|
network API. To do so, it parse the changegroup data, otherwise it will
|
|
|
|
block in case of sshrepo because it don't know the end of the stream.
|
|
|
|
"""
|
2017-09-07 04:33:55 +03:00
|
|
|
# For changegroup 1 and 2, we expect 3 parts: changelog, manifestlog,
|
|
|
|
# and a list of filelogs. For changegroup 3, we expect 4 parts:
|
|
|
|
# changelog, manifestlog, a list of tree manifestlogs, and a list of
|
|
|
|
# filelogs.
|
|
|
|
#
|
|
|
|
# Changelog and manifestlog parts are terminated with empty chunks. The
|
|
|
|
# tree and file parts are a list of entry sections. Each entry section
|
|
|
|
# is a series of chunks terminating in an empty chunk. The list of these
|
|
|
|
# entry sections is terminated in yet another empty chunk, so we know
|
|
|
|
# we've reached the end of the tree/file list when we reach an empty
|
|
|
|
# chunk that was proceeded by no non-empty chunks.
|
|
|
|
|
|
|
|
parts = 0
|
|
|
|
while parts < 2 + self._grouplistcount:
|
|
|
|
noentries = True
|
2014-04-11 00:19:00 +04:00
|
|
|
while True:
|
|
|
|
chunk = getchunk(self)
|
|
|
|
if not chunk:
|
2017-09-07 04:33:55 +03:00
|
|
|
# The first two empty chunks represent the end of the
|
|
|
|
# changelog and the manifestlog portions. The remaining
|
|
|
|
# empty chunks represent either A) the end of individual
|
|
|
|
# tree or file entries in the file list, or B) the end of
|
|
|
|
# the entire list. It's the end of the entire list if there
|
|
|
|
# were no entries (i.e. noentries is True).
|
|
|
|
if parts < 2:
|
|
|
|
parts += 1
|
|
|
|
elif noentries:
|
|
|
|
parts += 1
|
2014-04-11 00:19:00 +04:00
|
|
|
break
|
2017-09-07 04:33:55 +03:00
|
|
|
noentries = False
|
2014-04-11 00:19:00 +04:00
|
|
|
yield chunkheader(len(chunk))
|
|
|
|
pos = 0
|
|
|
|
while pos < len(chunk):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
next = pos + 2 ** 20
|
2014-04-11 00:19:00 +04:00
|
|
|
yield chunk[pos:next]
|
|
|
|
pos = next
|
|
|
|
yield closechunk()
|
|
|
|
|
2018-03-21 23:36:28 +03:00
|
|
|
def _unpackmanifests(self, repo, revmap, trp, numchanges):
|
2015-10-14 22:11:53 +03:00
|
|
|
# We know that we'll never have more manifests than we had
|
|
|
|
# changesets.
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(repo.ui, _("manifests"), total=numchanges) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
self.progress = prog
|
|
|
|
# no need to check for empty manifest group here:
|
|
|
|
# if the result of the merge of 1 and 2 is the same in 3 and 4,
|
|
|
|
# no new manifest will be created and the manifest group will
|
|
|
|
# be empty during the pull
|
|
|
|
self.manifestheader()
|
|
|
|
deltas = self.deltaiter()
|
|
|
|
mfnodes = repo.manifestlog._revlog.addgroup(deltas, revmap, trp)
|
|
|
|
self.progress = None
|
2018-03-12 21:10:07 +03:00
|
|
|
return mfnodes
|
2015-10-14 22:11:53 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
def apply(
|
|
|
|
self, repo, tr, srctype, url, targetphase=phases.draft, expectedtotal=None
|
|
|
|
):
|
2015-10-13 23:58:51 +03:00
|
|
|
"""Add the changegroup returned by source.read() to this repo.
|
|
|
|
srctype is a string like 'push', 'pull', or 'unbundle'. url is
|
|
|
|
the URL of the repo where this changegroup is coming from.
|
|
|
|
|
|
|
|
Return an integer summarizing the change to this repo:
|
|
|
|
- nothing changed or no source: 0
|
|
|
|
- more heads than before: 1+added heads (2..n)
|
|
|
|
- fewer heads than before: -1-removed heads (-2..-n)
|
|
|
|
- number of heads stays the same: 1
|
|
|
|
"""
|
|
|
|
repo = repo.unfiltered()
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2015-10-13 23:58:51 +03:00
|
|
|
def csmap(x):
|
|
|
|
repo.ui.debug("add changeset %s\n" % short(x))
|
|
|
|
return len(cl)
|
|
|
|
|
|
|
|
def revmap(x):
|
|
|
|
return cl.rev(x)
|
|
|
|
|
|
|
|
changesets = files = revisions = 0
|
|
|
|
|
|
|
|
try:
|
2017-06-16 09:23:47 +03:00
|
|
|
# The transaction may already carry source information. In this
|
|
|
|
# case we use the top level data. We overwrite the argument
|
|
|
|
# because we need to use the top level value (if they exist)
|
|
|
|
# in this function.
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
srctype = tr.hookargs.setdefault("source", srctype)
|
|
|
|
url = tr.hookargs.setdefault("url", url)
|
|
|
|
repo.hook("prechangegroup", throw=True, **pycompat.strkwargs(tr.hookargs))
|
2017-06-16 09:23:47 +03:00
|
|
|
|
|
|
|
# write changelog data to temp files so concurrent readers
|
|
|
|
# will not see an inconsistent view
|
|
|
|
cl = repo.changelog
|
|
|
|
cl.delayupdate(tr)
|
|
|
|
oldheads = set(cl.heads())
|
|
|
|
|
|
|
|
trp = weakref.proxy(tr)
|
|
|
|
# pull off the changeset group
|
|
|
|
repo.ui.status(_("adding changesets\n"))
|
|
|
|
clstart = len(cl)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(repo.ui, _("changesets"), total=expectedtotal) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
self.progress = prog
|
|
|
|
efiles = set()
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-03-21 23:36:28 +03:00
|
|
|
def onchangelog(cl, node):
|
|
|
|
efiles.update(cl.readfiles(node))
|
|
|
|
|
|
|
|
self.changelogheader()
|
|
|
|
deltas = self.deltaiter()
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
cgnodes = cl.addgroup(deltas, csmap, trp, addrevisioncb=onchangelog)
|
2018-03-21 23:36:28 +03:00
|
|
|
efiles = len(efiles)
|
2019-03-26 05:22:16 +03:00
|
|
|
|
|
|
|
perftrace.tracevalue("Commits", len(cgnodes))
|
|
|
|
if cgnodes:
|
|
|
|
perftrace.tracevalue(
|
|
|
|
"Range", "%s:%s" % (hex(cgnodes[0])[:12], hex(cgnodes[-1])[:12])
|
|
|
|
)
|
2018-03-21 23:36:28 +03:00
|
|
|
self.progress = None
|
2017-06-16 09:23:47 +03:00
|
|
|
|
2017-07-01 10:00:09 +03:00
|
|
|
if not cgnodes:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo.ui.develwarn(
|
|
|
|
"applied empty changegroup", config="warn-empty-changegroup"
|
|
|
|
)
|
2017-06-16 09:23:47 +03:00
|
|
|
clend = len(cl)
|
|
|
|
changesets = clend - clstart
|
|
|
|
|
|
|
|
# pull off the manifest group
|
|
|
|
repo.ui.status(_("adding manifests\n"))
|
2018-03-21 23:36:28 +03:00
|
|
|
self._unpackmanifests(repo, revmap, trp, changesets)
|
2017-06-16 09:23:47 +03:00
|
|
|
|
|
|
|
needfiles = {}
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if repo.ui.configbool("server", "validate"):
|
2016-01-16 00:14:50 +03:00
|
|
|
cl = repo.changelog
|
2017-06-16 09:23:47 +03:00
|
|
|
ml = repo.manifestlog
|
|
|
|
# validate incoming csets have their manifests
|
|
|
|
for cset in xrange(clstart, clend):
|
|
|
|
mfnode = cl.changelogrevision(cset).manifest
|
2019-05-24 19:57:15 +03:00
|
|
|
mfest = ml[mfnode].readnew()
|
2017-06-16 09:23:47 +03:00
|
|
|
# store file cgnodes we must see
|
|
|
|
for f, n in mfest.iteritems():
|
|
|
|
needfiles.setdefault(f, set()).add(n)
|
|
|
|
|
|
|
|
# process the files
|
|
|
|
repo.ui.status(_("adding file changes\n"))
|
|
|
|
newrevs, newfiles = _addchangegroupfiles(
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo, self, revmap, trp, efiles, needfiles
|
|
|
|
)
|
2017-06-16 09:23:47 +03:00
|
|
|
revisions += newrevs
|
|
|
|
files += newfiles
|
|
|
|
|
|
|
|
deltaheads = 0
|
|
|
|
if oldheads:
|
|
|
|
heads = cl.heads()
|
|
|
|
deltaheads = len(heads) - len(oldheads)
|
|
|
|
for h in heads:
|
|
|
|
if h not in oldheads and repo[h].closesbranch():
|
|
|
|
deltaheads -= 1
|
|
|
|
htext = ""
|
|
|
|
if deltaheads:
|
|
|
|
htext = _(" (%+d heads)") % deltaheads
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo.ui.status(
|
|
|
|
_("added %d changesets" " with %d changes to %d files%s\n")
|
|
|
|
% (changesets, revisions, files, htext)
|
|
|
|
)
|
2017-06-16 09:23:47 +03:00
|
|
|
repo.invalidatevolatilesets()
|
|
|
|
|
|
|
|
if changesets > 0:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if "node" not in tr.hookargs:
|
|
|
|
tr.hookargs["node"] = hex(cl.node(clstart))
|
|
|
|
tr.hookargs["node_last"] = hex(cl.node(clend - 1))
|
2017-06-16 09:23:47 +03:00
|
|
|
hookargs = dict(tr.hookargs)
|
|
|
|
else:
|
|
|
|
hookargs = dict(tr.hookargs)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
hookargs["node"] = hex(cl.node(clstart))
|
|
|
|
hookargs["node_last"] = hex(cl.node(clend - 1))
|
|
|
|
repo.hook(
|
|
|
|
"pretxnchangegroup", throw=True, **pycompat.strkwargs(hookargs)
|
|
|
|
)
|
2017-06-16 09:23:47 +03:00
|
|
|
|
|
|
|
added = [cl.node(r) for r in xrange(clstart, clend)]
|
2017-07-11 02:17:36 +03:00
|
|
|
phaseall = None
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if srctype in ("push", "serve"):
|
2017-06-16 09:23:47 +03:00
|
|
|
# Old servers can not push the boundary themselves.
|
|
|
|
# New servers won't push the boundary if changeset already
|
|
|
|
# exists locally as secret
|
|
|
|
#
|
|
|
|
# We should not use added here but the list of all change in
|
|
|
|
# the bundle
|
|
|
|
if repo.publishing():
|
2017-07-11 02:17:36 +03:00
|
|
|
targetphase = phaseall = phases.public
|
2017-06-16 09:23:47 +03:00
|
|
|
else:
|
2017-07-11 02:17:36 +03:00
|
|
|
# closer target phase computation
|
|
|
|
|
2017-06-16 09:23:47 +03:00
|
|
|
# Those changesets have been pushed from the
|
|
|
|
# outside, their phases are going to be pushed
|
|
|
|
# alongside. Therefor `targetphase` is
|
|
|
|
# ignored.
|
2017-07-11 02:17:36 +03:00
|
|
|
targetphase = phaseall = phases.draft
|
|
|
|
if added:
|
|
|
|
phases.registernew(repo, tr, targetphase, added)
|
2019-03-08 14:01:10 +03:00
|
|
|
if targetphase > phases.public:
|
|
|
|
visibility.add(repo, added)
|
2019-03-27 14:45:35 +03:00
|
|
|
if mutation.recording(repo):
|
|
|
|
entries = [
|
|
|
|
mutation.createcommitentry(repo, node) for node in added
|
|
|
|
]
|
|
|
|
entries = [
|
|
|
|
entry.tostoreentry()
|
|
|
|
for entry in entries
|
|
|
|
if entry is not None
|
|
|
|
]
|
|
|
|
mutation.recordentries(repo, entries, skipexisting=False)
|
|
|
|
|
2017-07-11 02:17:36 +03:00
|
|
|
if phaseall is not None:
|
|
|
|
phases.advanceboundary(repo, tr, phaseall, cgnodes)
|
2017-06-16 09:23:47 +03:00
|
|
|
|
|
|
|
if changesets > 0:
|
|
|
|
|
|
|
|
def runhooks():
|
|
|
|
# These hooks run when the lock releases, not when the
|
|
|
|
# transaction closes. So it's possible for the changelog
|
|
|
|
# to have changed since we last saw it.
|
|
|
|
if clstart >= len(repo):
|
|
|
|
return
|
|
|
|
|
2017-07-24 18:28:59 +03:00
|
|
|
repo.hook("changegroup", **pycompat.strkwargs(hookargs))
|
2017-06-16 09:23:47 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
newheads = [h for h in repo.heads() if h not in oldheads]
|
|
|
|
repo.ui.log(
|
|
|
|
"incoming",
|
|
|
|
"%s incoming changes - new heads: %s\n",
|
|
|
|
len(added),
|
|
|
|
", ".join([hex(c[:6]) for c in newheads]),
|
|
|
|
)
|
|
|
|
|
|
|
|
tr.addpostclose(
|
|
|
|
"changegroup-runhooks-%020i" % clstart,
|
|
|
|
lambda tr: repo._afterlock(runhooks),
|
|
|
|
)
|
2018-08-21 02:35:18 +03:00
|
|
|
|
|
|
|
checkrevs(repo, range(clstart, clend))
|
2015-10-13 23:58:51 +03:00
|
|
|
finally:
|
|
|
|
repo.ui.flush()
|
|
|
|
# never return 0 here:
|
2017-06-15 23:47:54 +03:00
|
|
|
if deltaheads < 0:
|
2017-06-17 02:56:16 +03:00
|
|
|
ret = deltaheads - 1
|
2015-10-13 23:58:51 +03:00
|
|
|
else:
|
2017-06-17 02:56:16 +03:00
|
|
|
ret = deltaheads + 1
|
2017-07-13 22:08:06 +03:00
|
|
|
return ret
|
2015-10-13 23:58:51 +03:00
|
|
|
|
2017-09-20 19:22:22 +03:00
|
|
|
def deltaiter(self):
|
2017-09-13 20:43:44 +03:00
|
|
|
"""
|
|
|
|
returns an iterator of the deltas in this changegroup
|
|
|
|
|
|
|
|
Useful for passing to the underlying storage system to be stored.
|
|
|
|
"""
|
|
|
|
chain = None
|
|
|
|
for chunkdata in iter(lambda: self.deltachunk(chain), {}):
|
2017-09-20 19:35:45 +03:00
|
|
|
# Chunkdata: (node, p1, p2, cs, deltabase, delta, flags)
|
|
|
|
yield chunkdata
|
|
|
|
chain = chunkdata[0]
|
2017-09-13 20:43:44 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2014-10-17 16:41:11 +04:00
|
|
|
class cg2unpacker(cg1unpacker):
|
2015-10-14 19:05:27 +03:00
|
|
|
"""Unpacker for cg2 streams.
|
|
|
|
|
|
|
|
cg2 streams add support for generaldelta, so the delta header
|
|
|
|
format is slightly different. All other features about the data
|
|
|
|
remain the same.
|
|
|
|
"""
|
2018-05-30 12:16:33 +03:00
|
|
|
|
2014-10-17 16:41:11 +04:00
|
|
|
deltaheader = _CHANGEGROUPV2_DELTA_HEADER
|
|
|
|
deltaheadersize = struct.calcsize(deltaheader)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "02"
|
2014-10-17 16:41:11 +04:00
|
|
|
|
|
|
|
def _deltaheader(self, headertuple, prevnode):
|
|
|
|
node, p1, p2, deltabase, cs = headertuple
|
2015-12-14 23:55:12 +03:00
|
|
|
flags = 0
|
|
|
|
return node, p1, p2, deltabase, cs, flags
|
2014-10-17 16:41:11 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2015-12-11 19:23:49 +03:00
|
|
|
class cg3unpacker(cg2unpacker):
|
|
|
|
"""Unpacker for cg3 streams.
|
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
cg3 streams add support for exchanging treemanifests and revlog
|
2016-01-12 02:10:31 +03:00
|
|
|
flags. It adds the revlog flags to the delta header and an empty chunk
|
|
|
|
separating manifests and files.
|
2015-12-11 19:23:49 +03:00
|
|
|
"""
|
2018-05-30 12:16:33 +03:00
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
deltaheader = _CHANGEGROUPV3_DELTA_HEADER
|
|
|
|
deltaheadersize = struct.calcsize(deltaheader)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "03"
|
|
|
|
_grouplistcount = 2 # One list of manifests and one list of files
|
2015-12-11 19:23:49 +03:00
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
def _deltaheader(self, headertuple, prevnode):
|
|
|
|
node, p1, p2, deltabase, cs, flags = headertuple
|
|
|
|
return node, p1, p2, deltabase, cs, flags
|
|
|
|
|
2018-03-21 23:36:28 +03:00
|
|
|
def _unpackmanifests(self, repo, revmap, trp, numchanges):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
mfnodes = super(cg3unpacker, self)._unpackmanifests(
|
|
|
|
repo, revmap, trp, numchanges
|
|
|
|
)
|
2016-08-05 20:59:58 +03:00
|
|
|
for chunkdata in iter(self.filelogheader, {}):
|
2016-01-09 03:12:58 +03:00
|
|
|
# If we get here, there are directory manifests in the changegroup
|
|
|
|
d = chunkdata["filename"]
|
|
|
|
repo.ui.debug("adding %s revisions\n" % d)
|
2016-11-08 19:03:43 +03:00
|
|
|
dirlog = repo.manifestlog._revlog.dirlog(d)
|
2017-09-20 19:22:22 +03:00
|
|
|
deltas = self.deltaiter()
|
|
|
|
if not dirlog.addgroup(deltas, revmap, trp):
|
2016-01-09 03:12:58 +03:00
|
|
|
raise error.Abort(_("received dir revlog group is empty"))
|
|
|
|
|
2018-03-12 21:10:07 +03:00
|
|
|
return mfnodes
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2010-09-18 04:02:26 +04:00
|
|
|
class headerlessfixup(object):
|
|
|
|
def __init__(self, fh, h):
|
|
|
|
self._h = h
|
|
|
|
self._fh = fh
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2010-09-18 04:02:26 +04:00
|
|
|
def read(self, n):
|
|
|
|
if self._h:
|
|
|
|
d, self._h = self._h[:n], self._h[n:]
|
|
|
|
if len(d) < n:
|
2011-02-22 05:03:39 +03:00
|
|
|
d += readexactly(self._fh, n - len(d))
|
2010-09-18 04:02:26 +04:00
|
|
|
return d
|
2011-02-22 05:03:39 +03:00
|
|
|
return readexactly(self._fh, n)
|
2010-09-18 04:02:26 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2014-09-02 14:11:36 +04:00
|
|
|
class cg1packer(object):
|
|
|
|
deltaheader = _CHANGEGROUPV1_DELTA_HEADER
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "01"
|
|
|
|
|
2018-03-17 01:16:35 +03:00
|
|
|
def __init__(self, repo, bundlecaps=None, b2caps=None):
|
2013-05-10 23:35:49 +04:00
|
|
|
"""Given a source repo, construct a bundler.
|
2017-05-15 19:35:27 +03:00
|
|
|
|
|
|
|
bundlecaps is optional and can be used to specify the set of
|
|
|
|
capabilities which can be used to build the bundle. While bundlecaps is
|
|
|
|
unused in core Mercurial, extensions rely on this feature to communicate
|
|
|
|
capabilities to customize the changegroup packer.
|
2013-05-10 23:35:49 +04:00
|
|
|
"""
|
2017-05-15 19:35:27 +03:00
|
|
|
# Set of capabilities we can use to build the bundle.
|
|
|
|
if bundlecaps is None:
|
|
|
|
bundlecaps = set()
|
2018-03-17 01:16:35 +03:00
|
|
|
if b2caps is None:
|
|
|
|
b2caps = {}
|
2017-05-15 19:35:27 +03:00
|
|
|
self._bundlecaps = bundlecaps
|
2018-03-17 01:16:35 +03:00
|
|
|
self._b2caps = b2caps
|
2015-06-26 01:43:52 +03:00
|
|
|
# experimental config: bundle.reorder
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
reorder = repo.ui.config("bundle", "reorder")
|
|
|
|
if reorder == "auto":
|
2013-05-10 23:35:49 +04:00
|
|
|
reorder = None
|
|
|
|
else:
|
|
|
|
reorder = util.parsebool(reorder)
|
|
|
|
self._repo = repo
|
|
|
|
self._reorder = reorder
|
2014-08-15 21:43:32 +04:00
|
|
|
if self._repo.ui.verbose and not self._repo.ui.debugflag:
|
|
|
|
self._verbosenote = self._repo.ui.note
|
|
|
|
else:
|
|
|
|
self._verbosenote = lambda s: None
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
cgdeltaconfig = repo.ui.config("format", "cgdeltabase")
|
|
|
|
if cgdeltaconfig not in [
|
|
|
|
CFG_CGDELTA_ALWAYS_NULL,
|
|
|
|
CFG_CGDELTA_NO_EXTERNAL,
|
|
|
|
CFG_CGDELTA_DEFAULT,
|
|
|
|
]:
|
|
|
|
repo.ui.warn(_("ignore unknown cgdeltabase config: %s\n") % cgdeltaconfig)
|
2018-03-07 00:20:16 +03:00
|
|
|
cgdeltaconfig = CFG_CGDELTA_DEFAULT
|
|
|
|
self._cgdeltaconfig = cgdeltaconfig
|
2014-08-15 21:43:32 +04:00
|
|
|
|
2011-04-01 00:24:06 +04:00
|
|
|
def close(self):
|
|
|
|
return closechunk()
|
2013-05-10 23:03:01 +04:00
|
|
|
|
2011-04-01 00:24:06 +04:00
|
|
|
def fileheader(self, fname):
|
|
|
|
return chunkheader(len(fname)) + fname
|
2013-05-10 23:03:01 +04:00
|
|
|
|
2016-05-13 05:29:05 +03:00
|
|
|
# Extracted both for clarity and for overriding in extensions.
|
|
|
|
def _sortgroup(self, revlog, nodelist, lookup):
|
|
|
|
"""Sort nodes for change group and turn them into revnums."""
|
|
|
|
# for generaldelta revlogs, we linearize the revs; this will both be
|
|
|
|
# much quicker and generate a much smaller bundle
|
|
|
|
if (revlog._generaldelta and self._reorder is None) or self._reorder:
|
|
|
|
dag = dagutil.revlogdag(revlog)
|
|
|
|
return dag.linearize(set(revlog.rev(n) for n in nodelist))
|
|
|
|
else:
|
|
|
|
return sorted([revlog.rev(n) for n in nodelist])
|
|
|
|
|
2018-03-21 23:36:28 +03:00
|
|
|
def group(self, nodelist, revlog, lookup, prog=None):
|
2013-05-10 23:03:01 +04:00
|
|
|
"""Calculate a delta group, yielding a sequence of changegroup chunks
|
|
|
|
(strings).
|
|
|
|
|
|
|
|
Given a list of changeset revs, return a set of deltas and
|
|
|
|
metadata corresponding to nodes. The first delta is
|
|
|
|
first parent(nodelist[0]) -> nodelist[0], the receiver is
|
|
|
|
guaranteed to have this parent as it has all history before
|
|
|
|
these changesets. In the case firstparent is nullrev the
|
|
|
|
changegroup starts with a full revision.
|
|
|
|
|
2018-03-21 23:36:28 +03:00
|
|
|
If prog is not None, its value attribute will be updated with progress.
|
2013-05-11 01:48:03 +04:00
|
|
|
"""
|
2013-05-10 23:03:01 +04:00
|
|
|
# if we don't have any revisions touched by these changesets, bail
|
|
|
|
if len(nodelist) == 0:
|
|
|
|
yield self.close()
|
|
|
|
return
|
|
|
|
|
2016-05-13 05:29:05 +03:00
|
|
|
revs = self._sortgroup(revlog, nodelist, lookup)
|
2013-05-10 23:03:01 +04:00
|
|
|
|
|
|
|
# add the parent of the first rev
|
|
|
|
p = revlog.parentrevs(revs[0])[0]
|
|
|
|
revs.insert(0, p)
|
|
|
|
|
|
|
|
# build deltas
|
2018-03-21 23:36:28 +03:00
|
|
|
if prog is not None:
|
|
|
|
prog._total = len(revs) - 1
|
2013-05-10 23:03:01 +04:00
|
|
|
for r in xrange(len(revs) - 1):
|
2018-03-21 23:36:28 +03:00
|
|
|
if prog is not None:
|
|
|
|
prog.value = r + 1
|
2013-05-10 23:03:01 +04:00
|
|
|
prev, curr = revs[r], revs[r + 1]
|
2013-05-11 01:14:54 +04:00
|
|
|
linknode = lookup(revlog.node(curr))
|
2018-03-07 00:20:16 +03:00
|
|
|
if self._cgdeltaconfig == CFG_CGDELTA_ALWAYS_NULL:
|
|
|
|
prev = nullrev
|
|
|
|
elif self._cgdeltaconfig == CFG_CGDELTA_NO_EXTERNAL and r == 0:
|
|
|
|
prev = nullrev
|
2013-05-11 01:14:54 +04:00
|
|
|
for c in self.revchunk(revlog, curr, prev, linknode):
|
2013-05-10 23:03:01 +04:00
|
|
|
yield c
|
|
|
|
|
|
|
|
yield self.close()
|
|
|
|
|
2013-05-31 04:51:13 +04:00
|
|
|
# filter any nodes that claim to be part of the known set
|
2015-04-28 23:40:00 +03:00
|
|
|
def prune(self, revlog, missing, commonrevs):
|
2013-05-31 04:51:13 +04:00
|
|
|
rr, rl = revlog.rev, revlog.linkrev
|
|
|
|
return [n for n in missing if rl(rr(n)) not in commonrevs]
|
|
|
|
|
2016-02-13 02:18:56 +03:00
|
|
|
def _packmanifests(self, dir, mfnodes, lookuplinknode):
|
2015-10-01 22:35:10 +03:00
|
|
|
"""Pack flat manifests into a changegroup stream."""
|
2016-02-13 02:18:56 +03:00
|
|
|
assert not dir
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(self._repo.ui, _("bundling"), _("manifests")) as prog:
|
|
|
|
for chunk in self.group(
|
|
|
|
mfnodes, self._repo.manifestlog._revlog, lookuplinknode, prog
|
|
|
|
):
|
2018-03-21 23:36:28 +03:00
|
|
|
yield chunk
|
2016-02-13 02:18:56 +03:00
|
|
|
|
|
|
|
def _manifestsdone(self):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
return ""
|
2015-10-01 22:35:10 +03:00
|
|
|
|
2013-02-10 19:03:20 +04:00
|
|
|
def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
"""yield a sequence of changegroup chunks (strings)"""
|
2013-05-10 23:35:49 +04:00
|
|
|
repo = self._repo
|
2015-05-01 02:45:03 +03:00
|
|
|
cl = repo.changelog
|
2013-02-10 19:03:20 +04:00
|
|
|
|
2014-11-21 03:30:57 +03:00
|
|
|
clrevorder = {}
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
mfs = {} # needed manifests
|
|
|
|
fnodes = {} # needed file nodes
|
2016-02-23 01:43:14 +03:00
|
|
|
changedfiles = set()
|
2013-02-10 19:03:20 +04:00
|
|
|
|
2013-05-11 01:14:54 +04:00
|
|
|
# Callback for the changelog, used to collect changed files and manifest
|
|
|
|
# nodes.
|
|
|
|
# Returns the linkrev node (identity in the changelog case).
|
|
|
|
def lookupcl(x):
|
|
|
|
c = cl.read(x)
|
2014-11-21 03:30:57 +03:00
|
|
|
clrevorder[x] = len(clrevorder)
|
2015-12-04 18:34:58 +03:00
|
|
|
n = c[0]
|
2013-05-11 01:14:54 +04:00
|
|
|
# record the first changeset introducing this manifest version
|
2015-12-04 18:34:58 +03:00
|
|
|
mfs.setdefault(n, x)
|
|
|
|
# Record a complete list of potentially-changed files in
|
|
|
|
# this manifest.
|
2016-02-23 01:43:14 +03:00
|
|
|
changedfiles.update(c[3])
|
2013-05-11 01:14:54 +04:00
|
|
|
return x
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
self._verbosenote(_("uncompressed size of bundle content:\n"))
|
2014-08-15 21:43:32 +04:00
|
|
|
size = 0
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(repo.ui, _("bundling"), _("changesets")) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
for chunk in self.group(clnodes, cl, lookupcl, prog):
|
|
|
|
size += len(chunk)
|
|
|
|
yield chunk
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
self._verbosenote(_("%8.i (changelog)\n") % size)
|
2014-11-07 07:57:12 +03:00
|
|
|
|
2015-04-29 23:25:07 +03:00
|
|
|
# We need to make sure that the linkrev in the changegroup refers to
|
|
|
|
# the first changeset that introduced the manifest or file revision.
|
|
|
|
# The fastpath is usually safer than the slowpath, because the filelogs
|
|
|
|
# are walked in revlog order.
|
|
|
|
#
|
|
|
|
# When taking the slowpath with reorder=None and the manifest revlog
|
|
|
|
# uses generaldelta, the manifest may be walked in the "wrong" order.
|
|
|
|
# Without 'clrevorder', we would get an incorrect linkrev (see fix in
|
|
|
|
# cc0ff93d0c0c).
|
|
|
|
#
|
|
|
|
# When taking the fastpath, we are only vulnerable to reordering
|
|
|
|
# of the changelog itself. The changelog never uses generaldelta, so
|
|
|
|
# it is only reordered when reorder=True. To handle this case, we
|
|
|
|
# simply take the slowpath, which already has the 'clrevorder' logic.
|
|
|
|
# This was also fixed in cc0ff93d0c0c.
|
2015-04-29 20:34:28 +03:00
|
|
|
fastpathlinkrev = fastpathlinkrev and not self._reorder
|
2015-12-11 19:23:49 +03:00
|
|
|
# Treemanifests don't work correctly with fastpathlinkrev
|
|
|
|
# either, because we don't discover which directory nodes to
|
|
|
|
# send along with files. This could probably be fixed.
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
fastpathlinkrev = fastpathlinkrev and ("treemanifest" not in repo.requirements)
|
2016-02-12 07:19:48 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
for chunk in self.generatemanifests(
|
|
|
|
commonrevs, clrevorder, fastpathlinkrev, mfs, fnodes, source
|
|
|
|
):
|
2016-02-12 07:19:48 +03:00
|
|
|
yield chunk
|
|
|
|
mfs.clear()
|
|
|
|
clrevs = set(cl.rev(x) for x in clnodes)
|
|
|
|
|
|
|
|
if not fastpathlinkrev:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-02-12 07:19:48 +03:00
|
|
|
def linknodes(unused, fname):
|
|
|
|
return fnodes.get(fname, {})
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-02-12 07:19:48 +03:00
|
|
|
else:
|
|
|
|
cln = cl.node
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-02-12 07:19:48 +03:00
|
|
|
def linknodes(filerevlog, fname):
|
|
|
|
llr = filerevlog.linkrev
|
|
|
|
fln = filerevlog.node
|
|
|
|
revs = ((r, llr(r)) for r in filerevlog)
|
|
|
|
return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
for chunk in self.generatefiles(changedfiles, linknodes, commonrevs, source):
|
2016-02-12 07:19:48 +03:00
|
|
|
yield chunk
|
|
|
|
|
|
|
|
yield self.close()
|
|
|
|
|
|
|
|
if clnodes:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo.hook("outgoing", node=hex(clnodes[0]), source=source)
|
2016-02-12 07:19:48 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
def generatemanifests(
|
|
|
|
self, commonrevs, clrevorder, fastpathlinkrev, mfs, fnodes, source
|
|
|
|
):
|
2017-09-11 23:39:22 +03:00
|
|
|
"""Returns an iterator of changegroup chunks containing manifests.
|
|
|
|
|
|
|
|
`source` is unused here, but is used by extensions like remotefilelog to
|
|
|
|
change what is sent based in pulls vs pushes, etc.
|
|
|
|
"""
|
2016-02-12 07:19:48 +03:00
|
|
|
repo = self._repo
|
2016-11-03 03:10:47 +03:00
|
|
|
mfl = repo.manifestlog
|
|
|
|
dirlog = mfl._revlog.dirlog
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
tmfnodes = {"": mfs}
|
2016-02-12 07:19:48 +03:00
|
|
|
|
2013-05-11 01:14:54 +04:00
|
|
|
# Callback for the manifest, used to collect linkrevs for filelog
|
|
|
|
# revisions.
|
|
|
|
# Returns the linkrev node (collected in lookupcl).
|
changegroup: use any node, not min(), in treemanifest's generatemanifests
This is fixing quadratic behavior, which is probably not noticeable in the
common case, but if a very large directory gets added here, it can get pretty
bad. This was noticed because we had some pushes that spent >25s in changegroup
generation calling min() here, according to profiling.
The original reasoning for min() being used in 1d71430e1d28 was that, at that
point in the series, we were adding almost everything to tmfnodes during the
first iteration through the loop , so we needed to avoid sending child
directories before parents. Later changes made it so that the child directories
were added only when we visited the parent directory (not all of them on the
first iteration), so this is no longer necessary - there won't be any child
directories in tmfnodes before the parents have been sent.
This does mean that the manifests are now exchanged unordered, whereas
previously we would essentially do [a, b, b/c, b/c/d, e], we now can send a, b,
and e in any order; b/c must still follow b, and b/c/d must still follow b/c.
Differential Revision: https://phab.mercurial-scm.org/D1351
2017-11-09 05:24:43 +03:00
|
|
|
def makelookupmflinknode(dir, nodes):
|
2016-02-13 10:26:15 +03:00
|
|
|
if fastpathlinkrev:
|
|
|
|
assert not dir
|
|
|
|
return mfs.__getitem__
|
|
|
|
|
2015-12-04 18:55:46 +03:00
|
|
|
def lookupmflinknode(x):
|
|
|
|
"""Callback for looking up the linknode for manifests.
|
2015-12-03 18:56:05 +03:00
|
|
|
|
2015-12-04 18:55:46 +03:00
|
|
|
Returns the linkrev node for the specified manifest.
|
2015-12-03 18:56:05 +03:00
|
|
|
|
2015-12-04 18:55:46 +03:00
|
|
|
SIDE EFFECT:
|
2015-12-03 18:56:05 +03:00
|
|
|
|
2015-12-11 19:23:49 +03:00
|
|
|
1) fclnodes gets populated with the list of relevant
|
|
|
|
file nodes if we're not using fastpathlinkrev
|
|
|
|
2) When treemanifests are in use, collects treemanifest nodes
|
|
|
|
to send
|
2015-12-03 18:56:05 +03:00
|
|
|
|
2015-12-11 19:23:49 +03:00
|
|
|
Note that this means manifests must be completely sent to
|
|
|
|
the client before you can trust the list of files and
|
|
|
|
treemanifests to send.
|
2015-12-04 18:55:46 +03:00
|
|
|
"""
|
changegroup: use any node, not min(), in treemanifest's generatemanifests
This is fixing quadratic behavior, which is probably not noticeable in the
common case, but if a very large directory gets added here, it can get pretty
bad. This was noticed because we had some pushes that spent >25s in changegroup
generation calling min() here, according to profiling.
The original reasoning for min() being used in 1d71430e1d28 was that, at that
point in the series, we were adding almost everything to tmfnodes during the
first iteration through the loop , so we needed to avoid sending child
directories before parents. Later changes made it so that the child directories
were added only when we visited the parent directory (not all of them on the
first iteration), so this is no longer necessary - there won't be any child
directories in tmfnodes before the parents have been sent.
This does mean that the manifests are now exchanged unordered, whereas
previously we would essentially do [a, b, b/c, b/c/d, e], we now can send a, b,
and e in any order; b/c must still follow b, and b/c/d must still follow b/c.
Differential Revision: https://phab.mercurial-scm.org/D1351
2017-11-09 05:24:43 +03:00
|
|
|
clnode = nodes[x]
|
2019-05-24 19:57:15 +03:00
|
|
|
mfctx = mfl.get(dir, x)
|
|
|
|
mdata = mfctx.readnew(shallow=True)
|
2016-02-23 01:43:14 +03:00
|
|
|
for p, n, fl in mdata.iterentries():
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if fl == "t": # subdirectory manifest
|
|
|
|
subdir = dir + p + "/"
|
2016-02-23 01:43:14 +03:00
|
|
|
tmfclnodes = tmfnodes.setdefault(subdir, {})
|
|
|
|
tmfclnode = tmfclnodes.setdefault(n, clnode)
|
|
|
|
if clrevorder[clnode] < clrevorder[tmfclnode]:
|
|
|
|
tmfclnodes[n] = clnode
|
|
|
|
else:
|
|
|
|
f = dir + p
|
2016-02-13 10:09:09 +03:00
|
|
|
fclnodes = fnodes.setdefault(f, {})
|
|
|
|
fclnode = fclnodes.setdefault(n, clnode)
|
|
|
|
if clrevorder[clnode] < clrevorder[fclnode]:
|
|
|
|
fclnodes[n] = clnode
|
2015-12-04 18:55:46 +03:00
|
|
|
return clnode
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-02-13 10:26:15 +03:00
|
|
|
return lookupmflinknode
|
2013-05-10 23:35:49 +04:00
|
|
|
|
2016-02-13 02:18:56 +03:00
|
|
|
size = 0
|
2016-02-13 10:30:18 +03:00
|
|
|
while tmfnodes:
|
changegroup: use any node, not min(), in treemanifest's generatemanifests
This is fixing quadratic behavior, which is probably not noticeable in the
common case, but if a very large directory gets added here, it can get pretty
bad. This was noticed because we had some pushes that spent >25s in changegroup
generation calling min() here, according to profiling.
The original reasoning for min() being used in 1d71430e1d28 was that, at that
point in the series, we were adding almost everything to tmfnodes during the
first iteration through the loop , so we needed to avoid sending child
directories before parents. Later changes made it so that the child directories
were added only when we visited the parent directory (not all of them on the
first iteration), so this is no longer necessary - there won't be any child
directories in tmfnodes before the parents have been sent.
This does mean that the manifests are now exchanged unordered, whereas
previously we would essentially do [a, b, b/c, b/c/d, e], we now can send a, b,
and e in any order; b/c must still follow b, and b/c/d must still follow b/c.
Differential Revision: https://phab.mercurial-scm.org/D1351
2017-11-09 05:24:43 +03:00
|
|
|
dir, nodes = tmfnodes.popitem()
|
2016-02-13 10:09:09 +03:00
|
|
|
prunednodes = self.prune(dirlog(dir), nodes, commonrevs)
|
2016-06-17 01:15:33 +03:00
|
|
|
if not dir or prunednodes:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
for x in self._packmanifests(
|
|
|
|
dir, prunednodes, makelookupmflinknode(dir, nodes)
|
|
|
|
):
|
2016-06-17 01:15:33 +03:00
|
|
|
size += len(x)
|
|
|
|
yield x
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
self._verbosenote(_("%8.i (manifests)\n") % size)
|
2016-02-13 02:18:56 +03:00
|
|
|
yield self._manifestsdone()
|
2013-05-10 23:35:49 +04:00
|
|
|
|
2015-04-28 23:49:19 +03:00
|
|
|
# The 'source' parameter is useful for extensions
|
2013-06-26 00:23:12 +04:00
|
|
|
def generatefiles(self, changedfiles, linknodes, commonrevs, source):
|
|
|
|
repo = self._repo
|
|
|
|
total = len(changedfiles)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(repo.ui, _("bundling"), _("files"), total) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
for i, fname in enumerate(sorted(changedfiles)):
|
|
|
|
filerevlog = repo.file(fname)
|
|
|
|
if not filerevlog:
|
|
|
|
msg = _("empty or missing revlog for %s") % fname
|
|
|
|
raise error.Abort(msg)
|
|
|
|
|
|
|
|
linkrevnodes = linknodes(filerevlog, fname)
|
|
|
|
# Lookup for filenodes, we collected the linkrev nodes above in
|
|
|
|
# the fastpath case and with lookupmf in the slowpath case.
|
|
|
|
def lookupfilelog(x):
|
|
|
|
return linkrevnodes[x]
|
|
|
|
|
|
|
|
filenodes = self.prune(filerevlog, linkrevnodes, commonrevs)
|
|
|
|
if filenodes:
|
|
|
|
prog.value = (i + 1, fname)
|
|
|
|
h = self.fileheader(fname)
|
|
|
|
size = len(h)
|
|
|
|
yield h
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
for chunk in self.group(filenodes, filerevlog, lookupfilelog):
|
2018-03-21 23:36:28 +03:00
|
|
|
size += len(chunk)
|
|
|
|
yield chunk
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
self._verbosenote(_("%8.i %s\n") % (size, fname))
|
2013-05-10 23:03:01 +04:00
|
|
|
|
2014-10-17 16:41:11 +04:00
|
|
|
def deltaparent(self, revlog, rev, p1, p2, prev):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if not revlog.candelta(prev, rev) or self._cgdeltaconfig != CFG_CGDELTA_DEFAULT:
|
|
|
|
raise error.ProgrammingError("cannot change deltabase for cg1")
|
2014-10-17 16:41:11 +04:00
|
|
|
return prev
|
|
|
|
|
2013-05-11 01:14:54 +04:00
|
|
|
def revchunk(self, revlog, rev, prev, linknode):
|
2011-04-30 13:03:28 +04:00
|
|
|
node = revlog.node(rev)
|
|
|
|
p1, p2 = revlog.parentrevs(rev)
|
2014-10-17 16:41:11 +04:00
|
|
|
base = self.deltaparent(revlog, rev, p1, p2, prev)
|
2011-04-30 13:03:28 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
prefix = ""
|
2015-01-22 06:09:32 +03:00
|
|
|
if revlog.iscensored(base) or revlog.iscensored(rev):
|
|
|
|
try:
|
2017-01-05 20:16:07 +03:00
|
|
|
delta = revlog.revision(node, raw=True)
|
2015-06-24 08:20:08 +03:00
|
|
|
except error.CensoredNodeError as e:
|
2015-01-22 06:09:32 +03:00
|
|
|
delta = e.tombstone
|
|
|
|
if base == nullrev:
|
|
|
|
prefix = mdiff.trivialdiffheader(len(delta))
|
|
|
|
else:
|
|
|
|
baselen = revlog.rawsize(base)
|
|
|
|
prefix = mdiff.replacediffheader(baselen, len(delta))
|
|
|
|
elif base == nullrev:
|
2017-01-05 20:16:07 +03:00
|
|
|
delta = revlog.revision(node, raw=True)
|
2011-04-30 13:03:28 +04:00
|
|
|
prefix = mdiff.trivialdiffheader(len(delta))
|
|
|
|
else:
|
|
|
|
delta = revlog.revdiff(base, rev)
|
|
|
|
p1n, p2n = revlog.parents(node)
|
|
|
|
basenode = revlog.node(base)
|
2015-12-14 23:55:12 +03:00
|
|
|
flags = revlog.flags(rev)
|
|
|
|
meta = self.builddeltaheader(node, p1n, p2n, basenode, linknode, flags)
|
2011-04-30 13:03:28 +04:00
|
|
|
meta += prefix
|
|
|
|
l = len(meta) + len(delta)
|
2011-04-01 00:24:06 +04:00
|
|
|
yield chunkheader(l)
|
|
|
|
yield meta
|
2011-04-30 13:03:28 +04:00
|
|
|
yield delta
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
|
2011-04-30 13:03:28 +04:00
|
|
|
# do nothing with basenode, it is implicitly the previous one in HG10
|
2015-12-14 23:55:12 +03:00
|
|
|
# do nothing with flags, it is implicitly 0 for cg1 and cg2
|
2011-04-30 13:03:28 +04:00
|
|
|
return struct.pack(self.deltaheader, node, p1n, p2n, linknode)
|
2014-04-02 00:59:55 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2014-10-17 16:41:11 +04:00
|
|
|
class cg2packer(cg1packer):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "02"
|
2014-10-17 16:41:11 +04:00
|
|
|
deltaheader = _CHANGEGROUPV2_DELTA_HEADER
|
|
|
|
|
2018-03-17 01:16:35 +03:00
|
|
|
def __init__(self, repo, bundlecaps=None, b2caps=None):
|
|
|
|
super(cg2packer, self).__init__(repo, bundlecaps, b2caps=b2caps)
|
2015-04-29 20:38:45 +03:00
|
|
|
if self._reorder is None:
|
|
|
|
# Since generaldelta is directly supported by cg2, reordering
|
|
|
|
# generally doesn't help, so we disable it by default (treating
|
|
|
|
# bundle.reorder=auto just like bundle.reorder=False).
|
|
|
|
self._reorder = False
|
2014-10-17 16:41:11 +04:00
|
|
|
|
|
|
|
def deltaparent(self, revlog, rev, p1, p2, prev):
|
2018-03-07 00:20:16 +03:00
|
|
|
if self._cgdeltaconfig == CFG_CGDELTA_DEFAULT:
|
|
|
|
dp = revlog.deltaparent(rev)
|
|
|
|
else:
|
|
|
|
dp = nullrev
|
2016-10-14 02:31:11 +03:00
|
|
|
if dp == nullrev and revlog.storedeltachains:
|
|
|
|
# Avoid sending full revisions when delta parent is null. Pick prev
|
|
|
|
# in that case. It's tempting to pick p1 in this case, as p1 will
|
|
|
|
# be smaller in the common case. However, computing a delta against
|
|
|
|
# p1 may require resolving the raw text of p1, which could be
|
|
|
|
# expensive. The revlog caches should have prev cached, meaning
|
|
|
|
# less CPU for changegroup generation. There is likely room to add
|
|
|
|
# a flag and/or config option to control this behavior.
|
2018-02-07 01:18:21 +03:00
|
|
|
base = prev
|
2016-10-14 02:31:11 +03:00
|
|
|
elif dp == nullrev:
|
|
|
|
# revlog is configured to use full snapshot for a reason,
|
|
|
|
# stick to full snapshot.
|
2018-02-07 01:18:21 +03:00
|
|
|
base = nullrev
|
2016-10-14 02:31:11 +03:00
|
|
|
elif dp not in (p1, p2, prev):
|
|
|
|
# Pick prev when we can't be sure remote has the base revision.
|
2018-02-07 01:18:21 +03:00
|
|
|
base = prev
|
2016-10-14 02:31:11 +03:00
|
|
|
else:
|
2018-02-07 01:18:21 +03:00
|
|
|
base = dp
|
|
|
|
if base != nullrev and not revlog.candelta(base, rev):
|
|
|
|
base = nullrev
|
|
|
|
return base
|
2014-10-17 16:41:11 +04:00
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
|
|
|
|
# Do nothing with flags, it is implicitly 0 in cg1 and cg2
|
2014-10-17 16:41:11 +04:00
|
|
|
return struct.pack(self.deltaheader, node, p1n, p2n, basenode, linknode)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2015-12-11 19:23:49 +03:00
|
|
|
class cg3packer(cg2packer):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
version = "03"
|
2015-12-14 23:55:12 +03:00
|
|
|
deltaheader = _CHANGEGROUPV3_DELTA_HEADER
|
2015-12-11 19:23:49 +03:00
|
|
|
|
2016-02-13 02:18:56 +03:00
|
|
|
def _packmanifests(self, dir, mfnodes, lookuplinknode):
|
|
|
|
if dir:
|
|
|
|
yield self.fileheader(dir)
|
2016-11-08 19:03:43 +03:00
|
|
|
|
|
|
|
dirlog = self._repo.manifestlog._revlog.dirlog(dir)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(self._repo.ui, _("bundling"), _("manifests")) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
for chunk in self.group(mfnodes, dirlog, lookuplinknode, prog):
|
|
|
|
yield chunk
|
2016-02-13 02:18:56 +03:00
|
|
|
|
|
|
|
def _manifestsdone(self):
|
|
|
|
return self.close()
|
2015-12-11 19:23:49 +03:00
|
|
|
|
2015-12-14 23:55:12 +03:00
|
|
|
def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
return struct.pack(self.deltaheader, node, p1n, p2n, basenode, linknode, flags)
|
|
|
|
|
|
|
|
|
|
|
|
_packermap = {
|
|
|
|
"01": (cg1packer, cg1unpacker),
|
|
|
|
# cg2 adds support for exchanging generaldelta
|
|
|
|
"02": (cg2packer, cg2unpacker),
|
|
|
|
# cg3 adds support for exchanging revlog flags and treemanifests
|
|
|
|
"03": (cg3packer, cg3unpacker),
|
2015-09-29 22:14:03 +03:00
|
|
|
}
|
2014-09-25 08:24:06 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-12-19 06:29:33 +03:00
|
|
|
def allsupportedversions(repo):
|
2016-01-20 01:27:18 +03:00
|
|
|
versions = set(_packermap.keys())
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if not (
|
|
|
|
repo.ui.configbool("experimental", "changegroup3")
|
|
|
|
or repo.ui.configbool("experimental", "treemanifest")
|
|
|
|
or "treemanifest" in repo.requirements
|
|
|
|
):
|
|
|
|
versions.discard("03")
|
2016-01-27 20:07:28 +03:00
|
|
|
return versions
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-01-27 20:07:28 +03:00
|
|
|
# Changegroup versions that can be applied to the repo
|
|
|
|
def supportedincomingversions(repo):
|
2016-12-19 06:25:18 +03:00
|
|
|
return allsupportedversions(repo)
|
2016-01-27 20:07:28 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-01-27 20:07:28 +03:00
|
|
|
# Changegroup versions that can be created from the repo
|
|
|
|
def supportedoutgoingversions(repo):
|
2016-12-19 06:29:33 +03:00
|
|
|
versions = allsupportedversions(repo)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
versions.discard("01")
|
2018-04-12 02:04:53 +03:00
|
|
|
# developer config: format.allowbundle1
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if repo.ui.configbool("format", "allowbundle1") or "bundle1" in repo.ui.configlist(
|
|
|
|
"devel", "legacy.exchange"
|
|
|
|
):
|
|
|
|
versions.add("01")
|
|
|
|
if "treemanifest" in repo.requirements:
|
2016-01-20 01:27:18 +03:00
|
|
|
# Versions 01 and 02 support only flat manifests and it's just too
|
|
|
|
# expensive to convert between the flat manifest and tree manifest on
|
|
|
|
# the fly. Since tree manifests are hashed differently, all of history
|
|
|
|
# would have to be converted. Instead, we simply don't even pretend to
|
|
|
|
# support versions 01 and 02.
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
versions.discard("01")
|
|
|
|
versions.discard("02")
|
2016-01-13 08:23:45 +03:00
|
|
|
return versions
|
2016-01-13 08:01:06 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2017-09-14 21:16:57 +03:00
|
|
|
def localversion(repo):
|
|
|
|
# Finds the best version to use for bundles that are meant to be used
|
|
|
|
# locally, such as those from strip and shelve, and temporary bundles.
|
|
|
|
return max(supportedoutgoingversions(repo))
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-01-20 02:32:32 +03:00
|
|
|
def safeversion(repo):
|
|
|
|
# Finds the smallest version that it's safe to assume clients of the repo
|
2016-01-20 02:37:07 +03:00
|
|
|
# will support. For example, all hg versions that support generaldelta also
|
|
|
|
# support changegroup 02.
|
2016-01-27 20:07:28 +03:00
|
|
|
versions = supportedoutgoingversions(repo)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if "generaldelta" in repo.requirements:
|
|
|
|
versions.discard("01")
|
2016-01-20 02:32:32 +03:00
|
|
|
assert versions
|
|
|
|
return min(versions)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-03-17 01:16:35 +03:00
|
|
|
def getbundler(version, repo, bundlecaps=None, b2caps=None):
|
2016-01-27 20:07:28 +03:00
|
|
|
assert version in supportedoutgoingversions(repo)
|
2018-03-17 01:16:35 +03:00
|
|
|
return _packermap[version][0](repo, bundlecaps, b2caps=b2caps)
|
2016-01-13 08:01:06 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-07-18 01:13:51 +03:00
|
|
|
def getunbundler(version, fh, alg, extras=None):
|
|
|
|
return _packermap[version][1](fh, alg, extras=extras)
|
2016-01-13 08:01:06 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2014-04-02 01:13:34 +04:00
|
|
|
def _changegroupinfo(repo, nodes, source):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if repo.ui.verbose or source == "bundle":
|
2014-04-02 01:13:34 +04:00
|
|
|
repo.ui.status(_("%d changesets found\n") % len(nodes))
|
|
|
|
if repo.ui.debugflag:
|
|
|
|
repo.ui.debug("list of changesets:\n")
|
|
|
|
for node in nodes:
|
|
|
|
repo.ui.debug("%s\n" % hex(node))
|
|
|
|
|
2017-09-11 04:39:02 +03:00
|
|
|
|
2018-07-31 20:05:45 +03:00
|
|
|
def makechangegroup(
|
|
|
|
repo, outgoing, version, source, fastpath=False, bundlecaps=None, b2caps=None
|
|
|
|
):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
cgstream = makestream(
|
2018-07-31 20:05:45 +03:00
|
|
|
repo,
|
|
|
|
outgoing,
|
|
|
|
version,
|
|
|
|
source,
|
|
|
|
fastpath=fastpath,
|
|
|
|
bundlecaps=bundlecaps,
|
|
|
|
b2caps=b2caps,
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
)
|
|
|
|
return getunbundler(
|
|
|
|
version, util.chunkbuffer(cgstream), None, {"clcount": len(outgoing.missing)}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def makestream(
|
|
|
|
repo, outgoing, version, source, fastpath=False, bundlecaps=None, b2caps=None
|
|
|
|
):
|
|
|
|
if version == "01":
|
2018-04-12 02:04:30 +03:00
|
|
|
repo.ui.develwarn("using deprecated bundlev1 format\n")
|
|
|
|
|
2018-03-17 01:16:35 +03:00
|
|
|
bundler = getbundler(version, repo, bundlecaps=bundlecaps, b2caps=b2caps)
|
2017-09-11 04:52:40 +03:00
|
|
|
|
2014-04-02 00:59:55 +04:00
|
|
|
repo = repo.unfiltered()
|
|
|
|
commonrevs = outgoing.common
|
|
|
|
csets = outgoing.missing
|
|
|
|
heads = outgoing.missingheads
|
|
|
|
# We go through the fast path if we get told to, or if all (unfiltered
|
|
|
|
# heads have been requested (since we then know there all linkrevs will
|
|
|
|
# be pulled by the client).
|
|
|
|
heads.sort()
|
|
|
|
fastpathlinkrev = fastpath or (
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo.filtername is None and heads == sorted(repo.heads())
|
|
|
|
)
|
2014-04-02 00:59:55 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
repo.hook("preoutgoing", throw=True, source=source)
|
2014-04-02 01:13:34 +04:00
|
|
|
_changegroupinfo(repo, csets, source)
|
2014-10-17 16:41:02 +04:00
|
|
|
return bundler.generate(commonrevs, csets, fastpathlinkrev, source)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-02-29 09:51:07 +03:00
|
|
|
def _addchangegroupfiles(repo, source, revmap, trp, expectedfiles, needfiles):
|
2014-04-02 02:21:56 +04:00
|
|
|
revisions = 0
|
|
|
|
files = 0
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
with progress.bar(repo.ui, _("files"), _("files"), expectedfiles) as prog:
|
2018-03-21 23:36:28 +03:00
|
|
|
for chunkdata in iter(source.filelogheader, {}):
|
|
|
|
files += 1
|
|
|
|
f = chunkdata["filename"]
|
|
|
|
repo.ui.debug("adding %s revisions\n" % f)
|
|
|
|
prog.value = files
|
|
|
|
fl = repo.file(f)
|
|
|
|
o = len(fl)
|
|
|
|
try:
|
|
|
|
deltas = source.deltaiter()
|
|
|
|
if not fl.addgroup(deltas, revmap, trp):
|
|
|
|
raise error.Abort(_("received file revlog group is empty"))
|
|
|
|
except error.CensoredBaseError as e:
|
|
|
|
raise error.Abort(_("received delta base is censored: %s") % e)
|
|
|
|
revisions += len(fl) - o
|
|
|
|
if f in needfiles:
|
|
|
|
needs = needfiles[f]
|
|
|
|
for new in xrange(o, len(fl)):
|
|
|
|
n = fl.node(new)
|
|
|
|
if n in needs:
|
|
|
|
needs.remove(n)
|
|
|
|
else:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
raise error.Abort(_("received spurious file revlog entry"))
|
2018-03-21 23:36:28 +03:00
|
|
|
if not needs:
|
|
|
|
del needfiles[f]
|
2014-04-02 02:21:56 +04:00
|
|
|
|
|
|
|
for f, needs in needfiles.iteritems():
|
|
|
|
fl = repo.file(f)
|
|
|
|
for n in needs:
|
|
|
|
try:
|
|
|
|
fl.rev(n)
|
|
|
|
except error.LookupError:
|
2015-10-08 22:55:45 +03:00
|
|
|
raise error.Abort(
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
_("missing file data for %s:%s - run hg verify") % (f, hex(n))
|
|
|
|
)
|
2014-04-02 02:21:56 +04:00
|
|
|
|
|
|
|
return revisions, files
|