Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/exchange.py @ 49339:6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
If the value is non-default, we display it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 18 May 2022 12:07:50 +0100 |
parents | 642e31cb55f0 |
children | 04cdb442a892 |
rev | line source |
---|---|
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
1 # exchange.py - utility to exchange data between repos. |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46793
diff
changeset
|
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
4 # |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
7 |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
8 |
34329
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
9 import collections |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
10 import weakref |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
11 |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
12 from .i18n import _ |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
13 from .node import ( |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
14 hex, |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
15 nullrev, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
16 ) |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
17 from . import ( |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
18 bookmarks as bookmod, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
19 bundle2, |
45807
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45681
diff
changeset
|
20 bundlecaches, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
21 changegroup, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
22 discovery, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
23 error, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
24 lock as lockmod, |
35356
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35314
diff
changeset
|
25 logexchange, |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
26 narrowspec, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
27 obsolete, |
43426
e513e87b0476
py3: fix sorting of obsolete markers in obsutil (issue6217)
Denis Laxalde <denis@laxalde.org>
parents:
43278
diff
changeset
|
28 obsutil, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
29 phases, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
30 pushkey, |
32914
e14484e7f562
py3: use pycompat.strkwargs() to convert kwargs keys to str before passing
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32909
diff
changeset
|
31 pycompat, |
45392
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45391
diff
changeset
|
32 requirements, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
33 scmutil, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
34 streamclone, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
35 url as urlmod, |
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
36 util, |
40542
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
37 wireprototypes, |
27523
68b9abf1cb82
exchange: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27244
diff
changeset
|
38 ) |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43919
diff
changeset
|
39 from .utils import ( |
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43919
diff
changeset
|
40 hashutil, |
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43919
diff
changeset
|
41 stringutil, |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
42 urlutil, |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43919
diff
changeset
|
43 ) |
47237
19d4802cb304
sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47055
diff
changeset
|
44 from .interfaces import repository |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
45 |
28883
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
46 urlerr = util.urlerr |
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
47 urlreq = util.urlreq |
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
48 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 _NARROWACL_SECTION = b'narrowacl' |
38829
9b64b73d702b
exchange: move disabling of rev-branch-cache bundle part out of narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38615
diff
changeset
|
50 |
26639
92d67e5729b9
exchange: move bundle specification parsing from cmdutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26623
diff
changeset
|
51 |
21064
4d9d490d7bbe
bundle2: add a ui argument to readbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21063
diff
changeset
|
52 def readbundle(ui, fh, fname, vfs=None): |
21065
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
53 header = changegroup.readexactly(fh, 4) |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
54 |
21065
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
55 alg = None |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
56 if not fname: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
57 fname = b"stream" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
58 if not header.startswith(b'HG') and header.startswith(b'\0'): |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
59 fh = changegroup.headerlessfixup(fh, header) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 header = b"HG10" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 alg = b'UN' |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
62 elif vfs: |
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
63 fname = vfs.join(fname) |
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
64 |
21065
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
65 magic, version = header[0:2], header[2:4] |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
66 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
67 if magic != b'HG': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
68 raise error.Abort(_(b'%s: not a Mercurial bundle') % fname) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
69 if version == b'10': |
21065
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
70 if alg is None: |
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
71 alg = changegroup.readexactly(fh, 2) |
22390
e2806b8613ca
changegroup: rename bundle-related functions and classes
Sune Foldager <cryo@cyanite.org>
parents:
22354
diff
changeset
|
72 return changegroup.cg1unpacker(fh, alg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
73 elif version.startswith(b'2'): |
25640
39f0064a3079
bundle2.getunbundler: rename "header" to "magicstring"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25559
diff
changeset
|
74 return bundle2.getunbundler(ui, fh, magicstring=magic + version) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 elif version == b'S1': |
26756
9e272a96f764
exchange: support for streaming clone bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26732
diff
changeset
|
76 return streamclone.streamcloneapplier(fh) |
21065
f9a9a6d63e89
bundle2: prepare readbundle to return more that one type of bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21064
diff
changeset
|
77 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
78 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 _(b'%s: unknown bundle version %s') % (fname, version) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
80 ) |
21063
7ca4f2049d3b
bundle2: move `readbundle` into the `exchange` module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21062
diff
changeset
|
81 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
82 |
49339
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
83 def _format_params(params): |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
84 parts = [] |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
85 for key, value in sorted(params.items()): |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
86 value = urlreq.quote(value) |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
87 parts.append(b"%s=%s" % (key, value)) |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
88 return b';'.join(parts) |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
89 |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
90 |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
91 def getbundlespec(ui, fh): |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
92 """Infer the bundlespec from a bundle file handle. |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
93 |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
94 The input file handle is seeked and the original seek position is not |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
95 restored. |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
96 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
97 |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
98 def speccompression(alg): |
30449
c3944ab1443a
exchange: obtain compression engines from the registrar
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30342
diff
changeset
|
99 try: |
c3944ab1443a
exchange: obtain compression engines from the registrar
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30342
diff
changeset
|
100 return util.compengines.forbundletype(alg).bundletype()[0] |
c3944ab1443a
exchange: obtain compression engines from the registrar
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30342
diff
changeset
|
101 except KeyError: |
c3944ab1443a
exchange: obtain compression engines from the registrar
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30342
diff
changeset
|
102 return None |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
103 |
49339
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
104 params = {} |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
105 |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
106 b = readbundle(ui, fh, None) |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
107 if isinstance(b, changegroup.cg1unpacker): |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
108 alg = b._type |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 if alg == b'_truncatedBZ': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 alg = b'BZ' |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
111 comp = speccompression(alg) |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
112 if not comp: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 raise error.Abort(_(b'unknown compression algorithm: %s') % alg) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
114 return b'%s-v1' % comp |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
115 elif isinstance(b, bundle2.unbundle20): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 if b'Compression' in b.params: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 comp = speccompression(b.params[b'Compression']) |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
118 if not comp: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
119 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
120 _(b'unknown compression algorithm: %s') % comp |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
121 ) |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
122 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
123 comp = b'none' |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
124 |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
125 version = None |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
126 for part in b.iterparts(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
127 if part.type == b'changegroup': |
49339
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
128 cgversion = part.params[b'version'] |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
129 if cgversion in (b'01', b'02'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
130 version = b'v2' |
49339
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
131 elif cgversion in (b'03',): |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
132 version = b'v2' |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
133 params[b'cg.version'] = cgversion |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
134 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
135 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
136 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 b'changegroup version %s does not have ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
138 b'a known bundlespec' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
139 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
140 % version, |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
141 hint=_(b'try upgrading your Mercurial client'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
142 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 elif part.type == b'stream2' and version is None: |
37170
a2b350d9f6ae
bundlespec: add support for some variants
Boris Feld <boris.feld@octobus.net>
parents:
37169
diff
changeset
|
144 # A stream2 part requires to be part of a v2 bundle |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 requirements = urlreq.unquote(part.params[b'requirements']) |
37170
a2b350d9f6ae
bundlespec: add support for some variants
Boris Feld <boris.feld@octobus.net>
parents:
37169
diff
changeset
|
146 splitted = requirements.split() |
a2b350d9f6ae
bundlespec: add support for some variants
Boris Feld <boris.feld@octobus.net>
parents:
37169
diff
changeset
|
147 params = bundle2._formatrequirementsparams(splitted) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 return b'none-v2;stream=v2;%s' % params |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
149 |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
150 if not version: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
151 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
152 _(b'could not identify changegroup version in bundle') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
153 ) |
49339
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
154 spec = b'%s-%s' % (comp, version) |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
155 if params: |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
156 spec += b';' |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
157 spec += _format_params(params) |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
158 return spec |
6d15a8971e30
bundlespec: fix the generation of bundlespec for `cg.version`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49037
diff
changeset
|
159 |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
160 elif isinstance(b, streamclone.streamcloneapplier): |
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
161 requirements = streamclone.readbundle1header(fh)[2] |
37169
6f467adf9f05
bundle: add the possibility to bundle a stream v2 part
Boris Feld <boris.feld@octobus.net>
parents:
37167
diff
changeset
|
162 formatted = bundle2._formatrequirementsparams(requirements) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 return b'none-packed1;%s' % formatted |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
164 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 raise error.Abort(_(b'unknown bundle type: %s') % b) |
27883
4f4b80b3f2bf
exchange: implement function for inferring bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27751
diff
changeset
|
166 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
167 |
29819
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
168 def _computeoutgoing(repo, heads, common): |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
169 """Computes which revs are outgoing given a set of common |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
170 and a set of heads. |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
171 |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
172 This is a separate function so extensions can have access to |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
173 the logic. |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
174 |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
175 Returns a discovery.outgoing object. |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
176 """ |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
177 cl = repo.changelog |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
178 if common: |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
179 hasnode = cl.hasnode |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
180 common = [n for n in common if hasnode(n)] |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
181 else: |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46977
diff
changeset
|
182 common = [repo.nullid] |
29819
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
183 if not heads: |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
184 heads = cl.heads() |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
185 return discovery.outgoing(repo, common, heads) |
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
186 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
187 |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
188 def _checkpublish(pushop): |
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
189 repo = pushop.repo |
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
190 ui = repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 behavior = ui.config(b'experimental', b'auto-publish') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 if pushop.publish or behavior not in (b'warn', b'confirm', b'abort'): |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
193 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 remotephases = listkeys(pushop.remote, b'phases') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 if not remotephases.get(b'publishing', False): |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
196 return |
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
197 |
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
198 if pushop.revs is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 published = repo.filtered(b'served').revs(b'not public()') |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
200 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 published = repo.revs(b'::%ln - public()', pushop.revs) |
47497
f03e9d30258e
exchange: use "served" repo filter to guess what the server will publish
Anton Shestakov <av6@dwimlabs.net>
parents:
47237
diff
changeset
|
202 # we want to use pushop.revs in the revset even if they themselves are |
f03e9d30258e
exchange: use "served" repo filter to guess what the server will publish
Anton Shestakov <av6@dwimlabs.net>
parents:
47237
diff
changeset
|
203 # secret, but we don't want to have anything that the server won't see |
f03e9d30258e
exchange: use "served" repo filter to guess what the server will publish
Anton Shestakov <av6@dwimlabs.net>
parents:
47237
diff
changeset
|
204 # in the result of this expression |
f03e9d30258e
exchange: use "served" repo filter to guess what the server will publish
Anton Shestakov <av6@dwimlabs.net>
parents:
47237
diff
changeset
|
205 published &= repo.filtered(b'served') |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
206 if published: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 if behavior == b'warn': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
208 ui.warn( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
209 _(b'%i changesets about to be published\n') % len(published) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
211 elif behavior == b'confirm': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
212 if ui.promptchoice( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
213 _(b'push and publish %i changesets (yn)?$$ &Yes $$ &No') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
214 % len(published) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
215 ): |
45892
ac362d5a7893
errors: introduce CanceledError and use it in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
45807
diff
changeset
|
216 raise error.CanceledError(_(b'user quit')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 elif behavior == b'abort': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 msg = _(b'push would publish %i changesets') % len(published) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
219 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 b"use --publish or adjust 'experimental.auto-publish'" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 b" config" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
222 ) |
40801
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
223 raise error.Abort(msg, hint=hint) |
33d30fb1e4ae
push: config option to control behavior when pushing to a publishing server
Anton Shestakov <av6@dwimlabs.net>
parents:
40725
diff
changeset
|
224 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
225 |
29696
2db085d5f5a2
bundle2: rename the _canusebundle2 method to _forcebundle1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29389
diff
changeset
|
226 def _forcebundle1(op): |
2db085d5f5a2
bundle2: rename the _canusebundle2 method to _forcebundle1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29389
diff
changeset
|
227 """return true if a pull/push must use bundle1 |
24650
b83a8f512a80
exchange: introduce a '_canusebundle2' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24649
diff
changeset
|
228 |
29697
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
229 This function is used to allow testing of the older bundle version""" |
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
230 ui = op.repo.ui |
30342
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30187
diff
changeset
|
231 # The goal is this config is to allow developer to choose the bundle |
29697
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
232 # version used during exchanged. This is especially handy during test. |
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
233 # Value is a list of bundle version to be picked from, highest version |
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
234 # should be used. |
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
235 # |
6786c3f8684d
bundle2: add a devel option controling bundle version used for exchange
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29696
diff
changeset
|
236 # developer config: devel.legacy.exchange |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 exchange = ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 forcebundle1 = b'bundle2' not in exchange and b'bundle1' in exchange |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 return forcebundle1 or not op.remote.capable(b'bundle2') |
24650
b83a8f512a80
exchange: introduce a '_canusebundle2' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24649
diff
changeset
|
240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
241 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49026
diff
changeset
|
242 class pushoperation: |
20346
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
243 """A object that represent a single push operation |
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
244 |
28456
d9d51da7a850
pushoperation: fix language issues in docstring
Nathan Goldbaum <ngoldbau@illinois.edu>
parents:
28182
diff
changeset
|
245 Its purpose is to carry push related state and very common operations. |
20346
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
246 |
28456
d9d51da7a850
pushoperation: fix language issues in docstring
Nathan Goldbaum <ngoldbau@illinois.edu>
parents:
28182
diff
changeset
|
247 A new pushoperation should be created at the beginning of each push and |
d9d51da7a850
pushoperation: fix language issues in docstring
Nathan Goldbaum <ngoldbau@illinois.edu>
parents:
28182
diff
changeset
|
248 discarded afterward. |
20346
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
249 """ |
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
250 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
251 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
252 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
253 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
254 remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
255 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
256 revs=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
257 newbranch=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
258 bookmarks=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
259 publish=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
260 pushvars=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
261 ): |
20346
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
262 # repo we push from |
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
263 self.repo = repo |
20347
3ec5f833348e
push: ease access to current ui object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20346
diff
changeset
|
264 self.ui = repo.ui |
20348
d64c904db55a
push: move `remote` argument in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20347
diff
changeset
|
265 # repo we push to |
d64c904db55a
push: move `remote` argument in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20347
diff
changeset
|
266 self.remote = remote |
20349
89f90457979e
push: move `force` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20348
diff
changeset
|
267 # force option provided |
89f90457979e
push: move `force` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20348
diff
changeset
|
268 self.force = force |
20350
8c85d968ee65
push: move `revs` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20349
diff
changeset
|
269 # revs to be pushed (None is "all") |
8c85d968ee65
push: move `revs` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20349
diff
changeset
|
270 self.revs = revs |
22623
cd7e17aa6040
push: pass list of bookmark to `exchange.push`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22622
diff
changeset
|
271 # bookmark explicitly pushed |
cd7e17aa6040
push: pass list of bookmark to `exchange.push`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22622
diff
changeset
|
272 self.bookmarks = bookmarks |
20351
c05ad450df23
push: move `newbranch` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20350
diff
changeset
|
273 # allow push of new branch |
c05ad450df23
push: move `newbranch` argument into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20350
diff
changeset
|
274 self.newbranch = newbranch |
21901
8612c4ab7f54
push: add a ``pushop.stepsdone`` attribute
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21899
diff
changeset
|
275 # step already performed |
8612c4ab7f54
push: add a ``pushop.stepsdone`` attribute
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21899
diff
changeset
|
276 # (used to check what steps have been already performed through bundle2) |
8612c4ab7f54
push: add a ``pushop.stepsdone`` attribute
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21899
diff
changeset
|
277 self.stepsdone = set() |
22615
4f14303e8954
push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22543
diff
changeset
|
278 # Integer version of the changegroup push result |
20439
0d3ccf285ff2
push: move push return value in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20438
diff
changeset
|
279 # - None means nothing to push |
0d3ccf285ff2
push: move push return value in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20438
diff
changeset
|
280 # - 0 means HTTP error |
0d3ccf285ff2
push: move push return value in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20438
diff
changeset
|
281 # - 1 means we pushed and remote head count is unchanged *or* |
0d3ccf285ff2
push: move push return value in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20438
diff
changeset
|
282 # we have outgoing changesets but refused to push |
0d3ccf285ff2
push: move push return value in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20438
diff
changeset
|
283 # - other values as described by addchangegroup() |
22615
4f14303e8954
push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22543
diff
changeset
|
284 self.cgresult = None |
22624
eef31f9a4c0f
push: add `pushoperation.bkresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22623
diff
changeset
|
285 # Boolean value for the bookmark push |
eef31f9a4c0f
push: add `pushoperation.bkresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22623
diff
changeset
|
286 self.bkresult = None |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
287 # discover.outgoing object (contains common and outgoing data) |
20440
400da8bc7786
push: move outgoing object in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20439
diff
changeset
|
288 self.outgoing = None |
32729
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
289 # all remote topological heads before the push |
20462
0031ef5df586
push: move `remoteheads` into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20441
diff
changeset
|
290 self.remoteheads = None |
32729
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
291 # Details of the remote branch pre and post push |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
292 # |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
293 # mapping: {'branch': ([remoteheads], |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
294 # [newheads], |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
295 # [unsyncedheads], |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
296 # [discardedheads])} |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
297 # - branch: the branch name |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
298 # - remoteheads: the list of remote heads known locally |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
299 # None if the branch is new |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
300 # - newheads: the new remote heads (known locally) with outgoing pushed |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
301 # - unsyncedheads: the list of remote heads unknown locally. |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
302 # - discardedheads: the list of remote heads made obsolete by the push |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
303 self.pushbranchmap = None |
20464
d032417db243
push: move `incoming` into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20463
diff
changeset
|
304 # testable as a boolean indicating if any nodes are missing locally. |
d032417db243
push: move `incoming` into the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20463
diff
changeset
|
305 self.incoming = None |
34819
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
306 # summary of the remote phase situation |
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
307 self.remotephases = None |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
308 # phases changes that must be pushed along side the changesets |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
309 self.outdatedphases = None |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
310 # phases changes that must be pushed if changeset push fails |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
311 self.fallbackoutdatedphases = None |
22034
5f57bc77657c
push: move the list of obsmarker to push into the push operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22033
diff
changeset
|
312 # outgoing obsmarkers |
22035
24bb01f42e82
push: introduce a discovery step for obsmarker
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22034
diff
changeset
|
313 self.outobsmarkers = set() |
42928
e0bf41b83cef
exchange: avoid unnecessary conversion of bookmark nodes to hex (API)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42920
diff
changeset
|
314 # outgoing bookmarks, list of (bm, oldnode | '', newnode | '') |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
315 self.outbookmarks = [] |
23437
94e2862dbcfb
push: elevate phase transaction to cover entire operation
Eric Sumner <ericsumner@fb.com>
parents:
23436
diff
changeset
|
316 # transaction manager |
94e2862dbcfb
push: elevate phase transaction to cover entire operation
Eric Sumner <ericsumner@fb.com>
parents:
23436
diff
changeset
|
317 self.trmanager = None |
25485
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
318 # map { pushkey partid -> callback handling failure} |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
319 # used to handle exception from mandatory pushkey part failure |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
320 self.pkfailcb = {} |
33903 | 321 # an iterable of pushvars or None |
322 self.pushvars = pushvars | |
40725
9b8d1ad851f8
push: add --publish flag to change phase of pushed changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
40542
diff
changeset
|
323 # publish pushed changesets |
9b8d1ad851f8
push: add --publish flag to change phase of pushed changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
40542
diff
changeset
|
324 self.publish = publish |
20346
42df1fe32552
push: introduce a pushoperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20345
diff
changeset
|
325 |
22014
71083b020b4a
push: extract future heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21989
diff
changeset
|
326 @util.propertycache |
71083b020b4a
push: extract future heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21989
diff
changeset
|
327 def futureheads(self): |
71083b020b4a
push: extract future heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21989
diff
changeset
|
328 """future remote heads if the changeset push succeeds""" |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
329 return self.outgoing.ancestorsof |
22014
71083b020b4a
push: extract future heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21989
diff
changeset
|
330 |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
331 @util.propertycache |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
332 def fallbackheads(self): |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
333 """future remote heads if the changeset push fails""" |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
334 if self.revs is None: |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
335 # not target to push, all common are relevant |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
336 return self.outgoing.commonheads |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
337 unfi = self.repo.unfiltered() |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
338 # I want cheads = heads(::ancestorsof and ::commonheads) |
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
339 # (ancestorsof is revs with secret changeset filtered out) |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
340 # |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
341 # This can be expressed as: |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
342 # cheads = ( (ancestorsof and ::commonheads) |
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
343 # + (commonheads and ::ancestorsof))" |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
344 # ) |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
345 # |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
346 # while trying to push we already computed the following: |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
347 # common = (::commonheads) |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
348 # missing = ((commonheads::ancestorsof) - commonheads) |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
349 # |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
350 # We can pick: |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
351 # * ancestorsof part of common (::commonheads) |
26184
327d09f0b5d4
exchange: allow fallbackheads to use lazy set behavior
Durham Goode <durham@fb.com>
parents:
25896
diff
changeset
|
352 common = self.outgoing.common |
43610
a49b2e253035
index: use `index.rev` in `exchange.fallbackheads`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43593
diff
changeset
|
353 rev = self.repo.changelog.index.rev |
a49b2e253035
index: use `index.rev` in `exchange.fallbackheads`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43593
diff
changeset
|
354 cheads = [node for node in self.revs if rev(node) in common] |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
355 # and |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
356 # * commonheads parents on missing |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
357 revset = unfi.set( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 b'%ln and parents(roots(%ln))', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
359 self.outgoing.commonheads, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
360 self.outgoing.missing, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
361 ) |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
362 cheads.extend(c.node() for c in revset) |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
363 return cheads |
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
364 |
22016
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
365 @property |
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
366 def commonheads(self): |
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
367 """set of all common heads after changeset bundle push""" |
22615
4f14303e8954
push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22543
diff
changeset
|
368 if self.cgresult: |
22016
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
369 return self.futureheads |
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
370 else: |
7d976d71684c
push: move common heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22015
diff
changeset
|
371 return self.fallbackheads |
22015
c478031deba2
push: extract fallback heads computation into pushop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22014
diff
changeset
|
372 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
373 |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
374 # mapping of message used when pushing bookmark |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
375 bookmsgmap = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 b'update': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 _(b"updating bookmark %s\n"), |
45925
f0626acf007d
errors: drop trailing "!" for some errors about bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
45892
diff
changeset
|
378 _(b'updating bookmark %s failed\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
379 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 b'export': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 _(b"exporting bookmark %s\n"), |
45925
f0626acf007d
errors: drop trailing "!" for some errors about bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
45892
diff
changeset
|
382 _(b'exporting bookmark %s failed\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
383 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 b'delete': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 _(b"deleting remote bookmark %s\n"), |
45925
f0626acf007d
errors: drop trailing "!" for some errors about bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
45892
diff
changeset
|
386 _(b'deleting remote bookmark %s failed\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
387 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
388 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
389 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
390 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
391 def push( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
392 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
393 remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
394 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
395 revs=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
396 newbranch=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
397 bookmarks=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
398 publish=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
399 opargs=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
400 ): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
401 """Push outgoing changesets (limited by revs) from a local |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
402 repository to remote. Return an integer: |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
403 - None means nothing to push |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
404 - 0 means HTTP error |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
405 - 1 means we pushed and remote head count is unchanged *or* |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
406 we have outgoing changesets but refused to push |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
407 - other values as described by addchangegroup() |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
408 """ |
26729
16e69e6b357b
exchange: add oparg to push so that extensions can wrap pushop
Sean Farley <sean@farley.io>
parents:
26700
diff
changeset
|
409 if opargs is None: |
16e69e6b357b
exchange: add oparg to push so that extensions can wrap pushop
Sean Farley <sean@farley.io>
parents:
26700
diff
changeset
|
410 opargs = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
411 pushop = pushoperation( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
412 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
413 remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
414 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
415 revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
416 newbranch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
417 bookmarks, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
418 publish, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
419 **pycompat.strkwargs(opargs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
420 ) |
20348
d64c904db55a
push: move `remote` argument in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20347
diff
changeset
|
421 if pushop.remote.local(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
422 missing = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
423 set(pushop.repo.requirements) - pushop.remote.local().supported |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
424 ) |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
425 if missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
426 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 b"required features are not" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 b" supported in the destination:" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
429 b" %s" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
430 ) % (b', '.join(sorted(missing))) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26566
diff
changeset
|
431 raise error.Abort(msg) |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
432 |
20348
d64c904db55a
push: move `remote` argument in the push object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20347
diff
changeset
|
433 if not pushop.remote.canpush(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
434 raise error.Abort(_(b"destination does not support push")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
435 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
436 if not pushop.remote.capable(b'unbundle'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
437 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
438 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 b'cannot push: destination does not support the ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
440 b'unbundle wire protocol command' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
441 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
442 ) |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
443 for category in sorted(bundle2.read_remote_wanted_sidedata(pushop.remote)): |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
444 # Check that a computer is registered for that category for at least |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
445 # one revlog kind. |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
446 for kind, computers in repo._sidedata_computers.items(): |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
447 if computers.get(category): |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
448 break |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
449 else: |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
450 raise error.Abort( |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
451 _( |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
452 b'cannot push: required sidedata category not supported' |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
453 b" by this client: '%s'" |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
454 ) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
455 % pycompat.bytestr(category) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
456 ) |
33812
20d663a104fb
exchange: drop now-unnecessary "local" from lock name variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
33811
diff
changeset
|
457 # get lock as we might write phase data |
20d663a104fb
exchange: drop now-unnecessary "local" from lock name variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
33811
diff
changeset
|
458 wlock = lock = None |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
459 try: |
42348
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
460 # bundle2 push may receive a reply bundle touching bookmarks |
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
461 # requiring the wlock. Take it now to ensure proper ordering. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 maypushback = pushop.ui.configbool(b'experimental', b'bundle2.pushback') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
463 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
464 (not _forcebundle1(pushop)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
465 and maypushback |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
466 and not bookmod.bookmarksinstore(repo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
467 ): |
33812
20d663a104fb
exchange: drop now-unnecessary "local" from lock name variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
33811
diff
changeset
|
468 wlock = pushop.repo.wlock() |
20d663a104fb
exchange: drop now-unnecessary "local" from lock name variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
33811
diff
changeset
|
469 lock = pushop.repo.lock() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
470 pushop.trmanager = transactionmanager( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 pushop.repo, b'push-response', pushop.remote.url() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
472 ) |
37841
7c05198cd1ca
push: continue without locking on lock failure other than EEXIST (issue5882)
Yuya Nishihara <yuya@tcha.org>
parents:
37768
diff
changeset
|
473 except error.LockUnavailable as err: |
20345
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
474 # source repo cannot be locked. |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
475 # We do not abort the push, but just disable the local phase |
8567b4ea76ac
exchange: extract push function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
476 # synchronisation. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
477 msg = b'cannot lock source repository: %s\n' % stringutil.forcebytestr( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
478 err |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
479 ) |
20347
3ec5f833348e
push: ease access to current ui object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20346
diff
changeset
|
480 pushop.ui.debug(msg) |
33813
5904511fc9f8
exchange: remove need for "locked" variable
Martin von Zweigbergk <martinvonz@google.com>
parents:
33812
diff
changeset
|
481 |
41769
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
482 with wlock or util.nullcontextmanager(): |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
483 with lock or util.nullcontextmanager(): |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
484 with pushop.trmanager or util.nullcontextmanager(): |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
485 pushop.repo.checkpush(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
486 _checkpublish(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
487 _pushdiscovery(pushop) |
43919
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
488 if not pushop.force: |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
489 _checksubrepostate(pushop) |
41769
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
490 if not _forcebundle1(pushop): |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
491 _pushbundle2(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
492 _pushchangeset(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
493 _pushsyncphase(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
494 _pushobsolete(pushop) |
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41768
diff
changeset
|
495 _pushbookmark(pushop) |
33727
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
496 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
497 if repo.ui.configbool(b'experimental', b'remotenames'): |
38615
4d5fb4062f0b
remotenames: synchronise remotenames after push also
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38605
diff
changeset
|
498 logexchange.pullremotenames(repo, remote) |
4d5fb4062f0b
remotenames: synchronise remotenames after push also
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38605
diff
changeset
|
499 |
22616
cda85cfc8252
push: `exchange.push` now returns the `pushoperation` object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22615
diff
changeset
|
500 return pushop |
20352
58300f61b139
push: move bookmarks exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20351
diff
changeset
|
501 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
502 |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
503 # list of steps to perform discovery before push |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
504 pushdiscoveryorder = [] |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
505 |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
506 # Mapping between step name and function |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
507 # |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
508 # This exists to help extensions wrap steps if necessary |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
509 pushdiscoverymapping = {} |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
510 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
511 |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
512 def pushdiscovery(stepname): |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
513 """decorator for function performing discovery before push |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
514 |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
515 The function is added to the step -> function mapping and appended to the |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
516 list of steps. Beware that decorated function will be added in order (this |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
517 may matter). |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
518 |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
519 You can only use this decorator for a new step, if you want to wrap a step |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
520 from an extension, change the pushdiscovery dictionary directly.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
521 |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
522 def dec(func): |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
523 assert stepname not in pushdiscoverymapping |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
524 pushdiscoverymapping[stepname] = func |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
525 pushdiscoveryorder.append(stepname) |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
526 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
527 |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
528 return dec |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
529 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
530 |
20466
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
531 def _pushdiscovery(pushop): |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
532 """Run all discovery steps""" |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
533 for stepname in pushdiscoveryorder: |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
534 step = pushdiscoverymapping[stepname] |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
535 step(pushop) |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
536 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
537 |
43919
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
538 def _checksubrepostate(pushop): |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
539 """Ensure all outgoing referenced subrepo revisions are present locally""" |
48578
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
540 |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
541 repo = pushop.repo |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
542 |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
543 # If the repository does not use subrepos, skip the expensive |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
544 # manifest checks. |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
545 if not len(repo.file(b'.hgsub')) or not len(repo.file(b'.hgsubstate')): |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
546 return |
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
547 |
43919
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
548 for n in pushop.outgoing.missing: |
48578
28f0092ec89f
exchange: add fast path for subrepo check on push
Joerg Sonnenberger <joerg@bec.de>
parents:
48561
diff
changeset
|
549 ctx = repo[n] |
43919
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
550 |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
551 if b'.hgsub' in ctx.manifest() and b'.hgsubstate' in ctx.files(): |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
552 for subpath in sorted(ctx.substate): |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
553 sub = ctx.sub(subpath) |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
554 sub.verify(onpush=True) |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
555 |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43839
diff
changeset
|
556 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 @pushdiscovery(b'changeset') |
22018
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
558 def _pushdiscoverychangeset(pushop): |
ddb56e7e1b92
push: make discovery extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22017
diff
changeset
|
559 """discover the changeset that need to be pushed""" |
20466
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
560 fci = discovery.findcommonincoming |
35314
483b5dd0f1aa
push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
561 if pushop.revs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
562 commoninc = fci( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
563 pushop.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
564 pushop.remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
565 force=pushop.force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
566 ancestorsof=pushop.revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
567 ) |
35314
483b5dd0f1aa
push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
568 else: |
483b5dd0f1aa
push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
569 commoninc = fci(pushop.repo, pushop.remote, force=pushop.force) |
20466
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
570 common, inc, remoteheads = commoninc |
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
571 fco = discovery.findcommonoutgoing |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
572 outgoing = fco( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
573 pushop.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
574 pushop.remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
575 onlyheads=pushop.revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
576 commoninc=commoninc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
577 force=pushop.force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
578 ) |
20466
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
579 pushop.outgoing = outgoing |
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
580 pushop.remoteheads = remoteheads |
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
581 pushop.incoming = inc |
233623d58c9a
push: move discovery in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20465
diff
changeset
|
582 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
583 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
584 @pushdiscovery(b'phase') |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
585 def _pushdiscoveryphase(pushop): |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
586 """discover the phase that needs to be pushed |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
587 |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
588 (computed for both success and failure case for changesets push)""" |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
589 outgoing = pushop.outgoing |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
590 unfi = pushop.repo.unfiltered() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
591 remotephases = listkeys(pushop.remote, b'phases') |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
592 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
593 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
594 pushop.ui.configbool(b'ui', b'_usedassubrepo') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
595 and remotephases # server supports phases |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
596 and not pushop.outgoing.missing # no changesets to be pushed |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
597 and remotephases.get(b'publishing', False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
598 ): |
25337
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
599 # When: |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
600 # - this is a subrepo push |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
601 # - and remote support phase |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
602 # - and no changeset are to be pushed |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
603 # - and remote is publishing |
34817
a80142b03552
exchange: fix issue3781 reference in the comment
Boris Feld <boris.feld@octobus.net>
parents:
34375
diff
changeset
|
604 # We may be in issue 3781 case! |
25337
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
605 # We drop the possible phase synchronisation done by |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
606 # courtesy to publish changesets possibly locally draft |
636b1f1b9f8d
subrepo: detect issue3781 case earlier so it apply to bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25236
diff
changeset
|
607 # on the remote. |
34818
6709b5661d1b
phase: simplify the check for issue3781 shortcut in discovery
Boris Feld <boris.feld@octobus.net>
parents:
34817
diff
changeset
|
608 pushop.outdatedphases = [] |
6709b5661d1b
phase: simplify the check for issue3781 shortcut in discovery
Boris Feld <boris.feld@octobus.net>
parents:
34817
diff
changeset
|
609 pushop.fallbackoutdatedphases = [] |
6709b5661d1b
phase: simplify the check for issue3781 shortcut in discovery
Boris Feld <boris.feld@octobus.net>
parents:
34817
diff
changeset
|
610 return |
34819
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
611 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
612 pushop.remotephases = phases.remotephasessummary( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
613 pushop.repo, pushop.fallbackheads, remotephases |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
614 ) |
34819
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
615 droots = pushop.remotephases.draftroots |
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
616 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
617 extracond = b'' |
34819
eb6375651974
phase: gather remote phase information in a summary object
Boris Feld <boris.feld@octobus.net>
parents:
34818
diff
changeset
|
618 if not pushop.remotephases.publishing: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
619 extracond = b' and public()' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
620 revset = b'heads((%%ln::%%ln) %s)' % extracond |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
621 # Get the list of all revs draft on remote by public here. |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
622 # XXX Beware that revset break if droots is not strictly |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
623 # XXX root we may want to ensure it is but it is costly |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
624 fallback = list(unfi.set(revset, droots, pushop.fallbackheads)) |
40725
9b8d1ad851f8
push: add --publish flag to change phase of pushed changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
40542
diff
changeset
|
625 if not pushop.remotephases.publishing and pushop.publish: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
626 future = list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
627 unfi.set( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 b'%ln and (not public() or %ln::)', pushop.futureheads, droots |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
629 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
630 ) |
40725
9b8d1ad851f8
push: add --publish flag to change phase of pushed changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
40542
diff
changeset
|
631 elif not outgoing.missing: |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
632 future = fallback |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
633 else: |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
634 # adds changeset we are going to push as draft |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
635 # |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23082
diff
changeset
|
636 # should not be necessary for publishing server, but because of an |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
637 # issue fixed in xxxxx we have to do it anyway. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
638 fdroots = list( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
639 unfi.set(b'roots(%ln + %ln::)', outgoing.missing, droots) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
640 ) |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
641 fdroots = [f.node() for f in fdroots] |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
642 future = list(unfi.set(revset, fdroots, pushop.futureheads)) |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
643 pushop.outdatedphases = future |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
644 pushop.fallbackoutdatedphases = fallback |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
645 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
646 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
647 @pushdiscovery(b'obsmarker') |
22035
24bb01f42e82
push: introduce a discovery step for obsmarker
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22034
diff
changeset
|
648 def _pushdiscoveryobsmarkers(pushop): |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
649 if not obsolete.isenabled(pushop.repo, obsolete.exchangeopt): |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
650 return |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
651 |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
652 if not pushop.repo.obsstore: |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
653 return |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
654 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
655 if b'obsolete' not in listkeys(pushop.remote, b'namespaces'): |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
656 return |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
657 |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
658 repo = pushop.repo |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
659 # very naive computation, that can be quite expensive on big repo. |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
660 # However: evolution is currently slow on them anyway. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 nodes = (c.node() for c in repo.set(b'::%ln', pushop.futureheads)) |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
662 pushop.outobsmarkers = pushop.repo.obsstore.relevantmarkers(nodes) |
22035
24bb01f42e82
push: introduce a discovery step for obsmarker
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22034
diff
changeset
|
663 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
664 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 @pushdiscovery(b'bookmarks') |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
666 def _pushdiscoverybookmarks(pushop): |
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
667 ui = pushop.ui |
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
668 repo = pushop.repo.unfiltered() |
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
669 remote = pushop.remote |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
670 ui.debug(b"checking for updated bookmarks\n") |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
671 ancestors = () |
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
672 if pushop.revs: |
38605
2834ac06d5a9
py3: fix revnums in bookmark discovery to be consumable more than once
Yuya Nishihara <yuya@tcha.org>
parents:
37841
diff
changeset
|
673 revnums = pycompat.maplist(repo.changelog.rev, pushop.revs) |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
674 ancestors = repo.changelog.ancestors(revnums, inclusive=True) |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
675 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
676 remotebookmark = bookmod.unhexlifybookmarks(listkeys(remote, b'bookmarks')) |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
677 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
678 explicit = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
679 repo._bookmarks.expandname(bookmark) for bookmark in pushop.bookmarks |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
680 } |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
681 |
30588
8f8211903b83
bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents:
30587
diff
changeset
|
682 comp = bookmod.comparebookmarks(repo, repo._bookmarks, remotebookmark) |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
683 return _processcompared(pushop, ancestors, explicit, remotebookmark, comp) |
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
684 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
685 |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
686 def _processcompared(pushop, pushed, explicit, remotebms, comp): |
42920
08fce968d00b
doc: fix up confusing doc comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42830
diff
changeset
|
687 """take decision on bookmarks to push to the remote repo |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
688 |
42920
08fce968d00b
doc: fix up confusing doc comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42830
diff
changeset
|
689 Exists to help extensions alter this behavior. |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
690 """ |
23081
e62c330a044f
bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23047
diff
changeset
|
691 addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = comp |
30588
8f8211903b83
bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents:
30587
diff
changeset
|
692 |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
693 repo = pushop.repo |
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
694 |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
695 for b, scid, dcid in advsrc: |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
696 if b in explicit: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
697 explicit.remove(b) |
36944
8fd9b56e8d7c
push-discovery: extract the bookmark comparison logic in its own function
Boris Feld <boris.feld@octobus.net>
parents:
36943
diff
changeset
|
698 if not pushed or repo[scid].rev() in pushed: |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
699 pushop.outbookmarks.append((b, dcid, scid)) |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
700 # search added bookmark |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
701 for b, scid, dcid in addsrc: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
702 if b in explicit: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
703 explicit.remove(b) |
44406
8407031f195f
bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44328
diff
changeset
|
704 if bookmod.isdivergent(b): |
8407031f195f
bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44328
diff
changeset
|
705 pushop.ui.warn(_(b'cannot push divergent bookmark %s!\n') % b) |
8407031f195f
bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44328
diff
changeset
|
706 pushop.bkresult = 2 |
8407031f195f
bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44328
diff
changeset
|
707 else: |
8407031f195f
bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44328
diff
changeset
|
708 pushop.outbookmarks.append((b, b'', scid)) |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
709 # search for overwritten bookmark |
30588
8f8211903b83
bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents:
30587
diff
changeset
|
710 for b, scid, dcid in list(advdst) + list(diverge) + list(differ): |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
711 if b in explicit: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
712 explicit.remove(b) |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
713 pushop.outbookmarks.append((b, dcid, scid)) |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
714 # search for bookmark to delete |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
715 for b, scid, dcid in adddst: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
716 if b in explicit: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
717 explicit.remove(b) |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
718 # treat as "deleted locally" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
719 pushop.outbookmarks.append((b, dcid, b'')) |
23082
0fc4686de1d7
exchange: don't report failure from identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23081
diff
changeset
|
720 # identical bookmarks shouldn't get reported |
0fc4686de1d7
exchange: don't report failure from identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23081
diff
changeset
|
721 for b, scid, dcid in same: |
0fc4686de1d7
exchange: don't report failure from identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23081
diff
changeset
|
722 if b in explicit: |
0fc4686de1d7
exchange: don't report failure from identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23081
diff
changeset
|
723 explicit.remove(b) |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
724 |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
725 if explicit: |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
726 explicit = sorted(explicit) |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
727 # we should probably list all of them |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
728 pushop.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
729 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
730 b'bookmark %s does not exist on the local ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
731 b'or remote repository!\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
732 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
733 % explicit[0] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
734 ) |
22651
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
735 pushop.bkresult = 2 |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
736 |
b901645a8784
push: gather all bookmark decisions together
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22650
diff
changeset
|
737 pushop.outbookmarks.sort() |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
738 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
739 |
20465
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
740 def _pushcheckoutgoing(pushop): |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
741 outgoing = pushop.outgoing |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
742 unfi = pushop.repo.unfiltered() |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
743 if not outgoing.missing: |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
744 # nothing to push |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
745 scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded) |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
746 return False |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
747 # something to push |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
748 if not pushop.force: |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
749 # if repo.obsstore == False --> no obsolete |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
750 # then, save the iteration |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
751 if unfi.obsstore: |
45194
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
752 # this message are here for 80 char limit reason |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
753 mso = _(b"push includes obsolete changeset: %s!") |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
754 mspd = _(b"push includes phase-divergent changeset: %s!") |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
755 mscd = _(b"push includes content-divergent changeset: %s!") |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
756 mst = { |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
757 b"orphan": _(b"push includes orphan changeset: %s!"), |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
758 b"phase-divergent": mspd, |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
759 b"content-divergent": mscd, |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
760 } |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
761 # If we are to push if there is at least one |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
762 # obsolete or unstable changeset in missing, at |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
763 # least one of the missinghead will be obsolete or |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
764 # unstable. So checking heads only is ok |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
765 for node in outgoing.ancestorsof: |
20465
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
766 ctx = unfi[node] |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
767 if ctx.obsolete(): |
45194
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
768 raise error.Abort(mso % ctx) |
33756
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
769 elif ctx.isunstable(): |
45194
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
770 # TODO print more than one instability in the abort |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
771 # message |
6063c1857d0a
exchange: backout changeset c26335fa4225
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45156
diff
changeset
|
772 raise error.Abort(mst[ctx.instabilities()[0]] % ctx) |
25836
dede675dc0c1
bookmarks: mark internal-only config option
Matt Mackall <mpm@selenic.com>
parents:
25668
diff
changeset
|
773 |
26935
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26855
diff
changeset
|
774 discovery.checkheads(pushop) |
20465
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
775 return True |
170f71061069
push: move outgoing check logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20464
diff
changeset
|
776 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
777 |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
778 # List of names of steps to perform for an outgoing bundle2, order matters. |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
779 b2partsgenorder = [] |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
780 |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
781 # Mapping between step name and function |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
782 # |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
783 # This exists to help extensions wrap steps if necessary |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
784 b2partsgenmapping = {} |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
785 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
786 |
24731
88a36edefea5
bundle2: add an 'idx' argument to the 'b2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24697
diff
changeset
|
787 def b2partsgenerator(stepname, idx=None): |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
788 """decorator for function generating bundle2 part |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
789 |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
790 The function is added to the step -> function mapping and appended to the |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
791 list of steps. Beware that decorated functions will be added in order |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
792 (this may matter). |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
793 |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
794 You can only use this decorator for new steps, if you want to wrap a step |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
795 from an extension, attack the b2partsgenmapping dictionary directly.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
796 |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
797 def dec(func): |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
798 assert stepname not in b2partsgenmapping |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
799 b2partsgenmapping[stepname] = func |
24731
88a36edefea5
bundle2: add an 'idx' argument to the 'b2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24697
diff
changeset
|
800 if idx is None: |
88a36edefea5
bundle2: add an 'idx' argument to the 'b2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24697
diff
changeset
|
801 b2partsgenorder.append(stepname) |
88a36edefea5
bundle2: add an 'idx' argument to the 'b2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24697
diff
changeset
|
802 else: |
88a36edefea5
bundle2: add an 'idx' argument to the 'b2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24697
diff
changeset
|
803 b2partsgenorder.insert(idx, stepname) |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
804 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
805 |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
806 return dec |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
807 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
808 |
26428
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
809 def _pushb2ctxcheckheads(pushop, bundler): |
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
810 """Generate race condition checking parts |
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
811 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26779
diff
changeset
|
812 Exists as an independent function to aid extensions |
26428
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
813 """ |
32729
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
814 # * 'force' do not check for push race, |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
815 # * if we don't push anything, there are nothing to check. |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45117
diff
changeset
|
816 if not pushop.force and pushop.outgoing.ancestorsof: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
817 allowunrelated = b'related' in bundler.capabilities.get( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
818 b'checkheads', () |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
819 ) |
33145
78fc540c53e1
pushrace: avoid crash on bare push when using concurrent push mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33055
diff
changeset
|
820 emptyremote = pushop.pushbranchmap is None |
78fc540c53e1
pushrace: avoid crash on bare push when using concurrent push mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33055
diff
changeset
|
821 if not allowunrelated or emptyremote: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
822 bundler.newpart(b'check:heads', data=iter(pushop.remoteheads)) |
32729
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
823 else: |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
824 affected = set() |
49004
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
825 for branch, heads in pushop.pushbranchmap.items(): |
32729
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
826 remoteheads, newheads, unsyncedheads, discardedheads = heads |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
827 if remoteheads is not None: |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
828 remote = set(remoteheads) |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
829 affected |= set(discardedheads) & remote |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
830 affected |= remote - set(newheads) |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
831 if affected: |
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
832 data = iter(sorted(affected)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
833 bundler.newpart(b'check:updated-heads', data=data) |
26428
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
834 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
835 |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
836 def _pushing(pushop): |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
837 """return True if we are pushing anything""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
838 return bool( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
839 pushop.outgoing.missing |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
840 or pushop.outdatedphases |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
841 or pushop.outobsmarkers |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
842 or pushop.outbookmarks |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
843 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
844 |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
845 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
846 @b2partsgenerator(b'check-bookmarks') |
35268
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
847 def _pushb2checkbookmarks(pushop, bundler): |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
848 """insert bookmark move checking""" |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
849 if not _pushing(pushop) or pushop.force: |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
850 return |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
851 b2caps = bundle2.bundle2caps(pushop.remote) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
852 hasbookmarkcheck = b'bookmarks' in b2caps |
35268
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
853 if not (pushop.outbookmarks and hasbookmarkcheck): |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
854 return |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
855 data = [] |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
856 for book, old, new in pushop.outbookmarks: |
ad5f2b923b0d
push: include a 'check:bookmarks' part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35245
diff
changeset
|
857 data.append((book, old)) |
46793
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46726
diff
changeset
|
858 checkdata = bookmod.binaryencode(pushop.repo, data) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
859 bundler.newpart(b'check:bookmarks', data=checkdata) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
860 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
862 @b2partsgenerator(b'check-phases') |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
863 def _pushb2checkphases(pushop, bundler): |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
864 """insert phase move checking""" |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
865 if not _pushing(pushop) or pushop.force: |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
866 return |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
867 b2caps = bundle2.bundle2caps(pushop.remote) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
868 hasphaseheads = b'heads' in b2caps.get(b'phases', ()) |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
869 if pushop.remotephases is not None and hasphaseheads: |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
870 # check that the remote phase has not changed |
45117
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
871 checks = {p: [] for p in phases.allphases} |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
872 checks[phases.public].extend(pushop.remotephases.publicheads) |
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
873 checks[phases.draft].extend(pushop.remotephases.draftroots) |
49026
2cce2fa5bcf7
py3: replace pycompat.itervalues(x) with x.values()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
874 if any(checks.values()): |
45117
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
875 for phase in checks: |
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
876 checks[phase].sort() |
34821
aa5e7b4a3a01
phase: generate a push-race detection part on push
Boris Feld <boris.feld@octobus.net>
parents:
34819
diff
changeset
|
877 checkdata = phases.binaryencode(checks) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
878 bundler.newpart(b'check:phases', data=checkdata) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
879 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
881 @b2partsgenerator(b'changeset') |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
882 def _pushb2ctx(pushop, bundler): |
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
883 """handle changegroup push through bundle2 |
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
884 |
22615
4f14303e8954
push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22543
diff
changeset
|
885 addchangegroup result is stored in the ``pushop.cgresult`` attribute. |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
886 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
887 if b'changesets' in pushop.stepsdone: |
21902
7a7def851ba0
push: use `stepsdone` to control changegroup push through bundle10 or bundle20
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21901
diff
changeset
|
888 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
889 pushop.stepsdone.add(b'changesets') |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
890 # Send known heads to the server for race detection. |
21903
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
891 if not _pushcheckoutgoing(pushop): |
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
892 return |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28668
diff
changeset
|
893 pushop.repo.prepushoutgoinghooks(pushop) |
26428
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
894 |
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
895 _pushb2ctxcheckheads(pushop, bundler) |
b75c4651b186
bundle2: generate check:heads in a independent function
Ryan McElroy <rmcelroy@fb.com>
parents:
26184
diff
changeset
|
896 |
23180
116b80d63815
push: send highest changegroup format supported by both side
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23179
diff
changeset
|
897 b2caps = bundle2.bundle2caps(pushop.remote) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
898 version = b'01' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
899 cgversions = b2caps.get(b'changegroup') |
28668
07f1fbf1f758
exchange: make _pushb2ctx() look more like _getbundlechangegrouppart()
Martin von Zweigbergk <martinvonz@google.com>
parents:
28667
diff
changeset
|
900 if cgversions: # 3.1 and 3.2 ship with an empty value |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
901 cgversions = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
902 v |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
903 for v in cgversions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
904 if v in changegroup.supportedoutgoingversions(pushop.repo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
905 ] |
23180
116b80d63815
push: send highest changegroup format supported by both side
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23179
diff
changeset
|
906 if not cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
907 raise error.Abort(_(b'no common changegroup version')) |
23180
116b80d63815
push: send highest changegroup format supported by both side
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23179
diff
changeset
|
908 version = max(cgversions) |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
909 |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
910 remote_sidedata = bundle2.read_remote_wanted_sidedata(pushop.remote) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
911 cgstream = changegroup.makestream( |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
912 pushop.repo, |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
913 pushop.outgoing, |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
914 version, |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
915 b'push', |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
916 bundlecaps=b2caps, |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
917 remote_sidedata=remote_sidedata, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
918 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
919 cgpart = bundler.newpart(b'changegroup', data=cgstream) |
28668
07f1fbf1f758
exchange: make _pushb2ctx() look more like _getbundlechangegrouppart()
Martin von Zweigbergk <martinvonz@google.com>
parents:
28667
diff
changeset
|
920 if cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
921 cgpart.addparam(b'version', version) |
45558
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
922 if scmutil.istreemanifest(pushop.repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
923 cgpart.addparam(b'treemanifest', b'1') |
47237
19d4802cb304
sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47055
diff
changeset
|
924 if repository.REPO_FEATURE_SIDE_DATA in pushop.repo.features: |
43131
c17a63eb5d4c
sidedata: apply basic but tight security around exchange
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
925 cgpart.addparam(b'exp-sidedata', b'1') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
926 |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
927 def handlereply(op): |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23082
diff
changeset
|
928 """extract addchangegroup returns from server reply""" |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
929 cgreplies = op.records.getreplies(cgpart.id) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
930 assert len(cgreplies[b'changegroup']) == 1 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
931 pushop.cgresult = cgreplies[b'changegroup'][0][b'return'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
932 |
21899
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
933 return handlereply |
52ab44b979f4
bundle2-push: extract changegroup logic in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21898
diff
changeset
|
934 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
935 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
936 @b2partsgenerator(b'phase') |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
937 def _pushb2phases(pushop, bundler): |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
938 """handle phase push through bundle2""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
939 if b'phases' in pushop.stepsdone: |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
940 return |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
941 b2caps = bundle2.bundle2caps(pushop.remote) |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
942 ui = pushop.repo.ui |
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
943 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
944 legacyphase = b'phases' in ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
945 haspushkey = b'pushkey' in b2caps |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
946 hasphaseheads = b'heads' in b2caps.get(b'phases', ()) |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
947 |
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
948 if hasphaseheads and not legacyphase: |
34910
498697fe41f2
exchange: propagate the subfunctions return
Boris Feld <boris.feld@octobus.net>
parents:
34836
diff
changeset
|
949 return _pushb2phaseheads(pushop, bundler) |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
950 elif haspushkey: |
34910
498697fe41f2
exchange: propagate the subfunctions return
Boris Feld <boris.feld@octobus.net>
parents:
34836
diff
changeset
|
951 return _pushb2phasespushkey(pushop, bundler) |
34822
c1e7ce11db9b
phase: isolate logic to update remote phrase through bundle2 pushkey
Boris Feld <boris.feld@octobus.net>
parents:
34821
diff
changeset
|
952 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
953 |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
954 def _pushb2phaseheads(pushop, bundler): |
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
955 """push phase information through a bundle2 - binary part""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
956 pushop.stepsdone.add(b'phases') |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
957 if pushop.outdatedphases: |
45117
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
958 updates = {p: [] for p in phases.allphases} |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
959 updates[0].extend(h.node() for h in pushop.outdatedphases) |
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
960 phasedata = phases.binaryencode(updates) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
961 bundler.newpart(b'phase-heads', data=phasedata) |
34836
537de0b14030
phase: use a binary phase part to push through bundle2 (BC)
Boris Feld <boris.feld@octobus.net>
parents:
34822
diff
changeset
|
962 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
963 |
34822
c1e7ce11db9b
phase: isolate logic to update remote phrase through bundle2 pushkey
Boris Feld <boris.feld@octobus.net>
parents:
34821
diff
changeset
|
964 def _pushb2phasespushkey(pushop, bundler): |
c1e7ce11db9b
phase: isolate logic to update remote phrase through bundle2 pushkey
Boris Feld <boris.feld@octobus.net>
parents:
34821
diff
changeset
|
965 """push phase information through a bundle2 - pushkey part""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
966 pushop.stepsdone.add(b'phases') |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
967 part2node = [] |
25502
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
968 |
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
969 def handlefailure(pushop, exc): |
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
970 targetid = int(exc.partid) |
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
971 for partid, node in part2node: |
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
972 if partid == targetid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
973 raise error.Abort(_(b'updating %s to public failed') % node) |
25502
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
974 |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
975 enc = pushkey.encode |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
976 for newremotehead in pushop.outdatedphases: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
977 part = bundler.newpart(b'pushkey') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
978 part.addparam(b'namespace', enc(b'phases')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 part.addparam(b'key', enc(newremotehead.hex())) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
980 part.addparam(b'old', enc(b'%d' % phases.draft)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
981 part.addparam(b'new', enc(b'%d' % phases.public)) |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
982 part2node.append((part.id, newremotehead)) |
25502
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
983 pushop.pkfailcb[part.id] = handlefailure |
bd41c19383db
phases: abort the whole push if phases fail to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25501
diff
changeset
|
984 |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
985 def handlereply(op): |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
986 for partid, node in part2node: |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
987 partrep = op.records.getreplies(partid) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
988 results = partrep[b'pushkey'] |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
989 assert len(results) <= 1 |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
990 msg = None |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
991 if not results: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
992 msg = _(b'server ignored update of %s to public!\n') % node |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
993 elif not int(results[0][b'return']): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
994 msg = _(b'updating %s to public failed!\n') % node |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
995 if msg is not None: |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
996 pushop.ui.warn(msg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
997 |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
998 return handlereply |
21904
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
999 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1000 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1001 @b2partsgenerator(b'obsmarkers') |
22347
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1002 def _pushb2obsmarkers(pushop, bundler): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1003 if b'obsmarkers' in pushop.stepsdone: |
22347
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1004 return |
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1005 remoteversions = bundle2.obsmarkersversion(bundler.capabilities) |
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1006 if obsolete.commonversion(remoteversions) is None: |
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1007 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1008 pushop.stepsdone.add(b'obsmarkers') |
22347
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1009 if pushop.outobsmarkers: |
43426
e513e87b0476
py3: fix sorting of obsolete markers in obsutil (issue6217)
Denis Laxalde <denis@laxalde.org>
parents:
43278
diff
changeset
|
1010 markers = obsutil.sortedmarkers(pushop.outobsmarkers) |
32548
e70d6dbde713
bundle2: move function building obsmarker-part in the bundle2 module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32331
diff
changeset
|
1011 bundle2.buildobsmarkerspart(bundler, markers) |
22347
7198cb9b56b9
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22346
diff
changeset
|
1012 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1013 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1014 @b2partsgenerator(b'bookmarks') |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1015 def _pushb2bookmarks(pushop, bundler): |
25895
c30b739c322f
exchange: s/phase/bookmark/ in _pushb2bookmarks()
Martin von Zweigbergk <martinvonz@google.com>
parents:
25836
diff
changeset
|
1016 """handle bookmark push through bundle2""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1017 if b'bookmarks' in pushop.stepsdone: |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1018 return |
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1019 b2caps = bundle2.bundle2caps(pushop.remote) |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1020 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1021 legacy = pushop.repo.ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1022 legacybooks = b'bookmarks' in legacy |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1023 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1024 if not legacybooks and b'bookmarks' in b2caps: |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1025 return _pushb2bookmarkspart(pushop, bundler) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1026 elif b'pushkey' in b2caps: |
35271
3fd5f05a5b87
push: move bundle2-pushkey based bookmarks exchange in its own function
Boris Feld <boris.feld@octobus.net>
parents:
35268
diff
changeset
|
1027 return _pushb2bookmarkspushkey(pushop, bundler) |
3fd5f05a5b87
push: move bundle2-pushkey based bookmarks exchange in its own function
Boris Feld <boris.feld@octobus.net>
parents:
35268
diff
changeset
|
1028 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1029 |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1030 def _bmaction(old, new): |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1031 """small utility for bookmark pushing""" |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1032 if not old: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1033 return b'export' |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1034 elif not new: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1035 return b'delete' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1036 return b'update' |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1037 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1038 |
42670
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1039 def _abortonsecretctx(pushop, node, b): |
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1040 """abort if a given bookmark points to a secret changeset""" |
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1041 if node and pushop.repo[node].phase() == phases.secret: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1042 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1043 _(b'cannot push bookmark %s as it points to a secret changeset') % b |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1044 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1045 |
42670
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1046 |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1047 def _pushb2bookmarkspart(pushop, bundler): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1048 pushop.stepsdone.add(b'bookmarks') |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1049 if not pushop.outbookmarks: |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1050 return |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1051 |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1052 allactions = [] |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1053 data = [] |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1054 for book, old, new in pushop.outbookmarks: |
42670
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1055 _abortonsecretctx(pushop, new, book) |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1056 data.append((book, new)) |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1057 allactions.append((book, _bmaction(old, new))) |
46793
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46726
diff
changeset
|
1058 checkdata = bookmod.binaryencode(pushop.repo, data) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1059 bundler.newpart(b'bookmarks', data=checkdata) |
35273
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1060 |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1061 def handlereply(op): |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1062 ui = pushop.ui |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1063 # if success |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1064 for book, action in allactions: |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1065 ui.status(bookmsgmap[action][0] % book) |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1066 |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1067 return handlereply |
a1e70c1dbec0
bookmark: use the 'bookmarks' bundle2 part to push bookmark update (issue5165)
Boris Feld <boris.feld@octobus.net>
parents:
35271
diff
changeset
|
1068 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1069 |
35271
3fd5f05a5b87
push: move bundle2-pushkey based bookmarks exchange in its own function
Boris Feld <boris.feld@octobus.net>
parents:
35268
diff
changeset
|
1070 def _pushb2bookmarkspushkey(pushop, bundler): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1071 pushop.stepsdone.add(b'bookmarks') |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1072 part2book = [] |
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1073 enc = pushkey.encode |
25501
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1074 |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1075 def handlefailure(pushop, exc): |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1076 targetid = int(exc.partid) |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1077 for partid, book, action in part2book: |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1078 if partid == targetid: |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1079 raise error.Abort(bookmsgmap[action][1].rstrip() % book) |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1080 # we should not be called for part we did not generated |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1081 assert False |
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1082 |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1083 for book, old, new in pushop.outbookmarks: |
42670
3332bde53714
exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42348
diff
changeset
|
1084 _abortonsecretctx(pushop, new, book) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1085 part = bundler.newpart(b'pushkey') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1086 part.addparam(b'namespace', enc(b'bookmarks')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1087 part.addparam(b'key', enc(book)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1088 part.addparam(b'old', enc(hex(old))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1089 part.addparam(b'new', enc(hex(new))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1090 action = b'update' |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1091 if not old: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1092 action = b'export' |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1093 elif not new: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1094 action = b'delete' |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1095 part2book.append((part.id, book, action)) |
25501
a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25485
diff
changeset
|
1096 pushop.pkfailcb[part.id] = handlefailure |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1097 |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1098 def handlereply(op): |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1099 ui = pushop.ui |
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1100 for partid, book, action in part2book: |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1101 partrep = op.records.getreplies(partid) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1102 results = partrep[b'pushkey'] |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1103 assert len(results) <= 1 |
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1104 if not results: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1105 pushop.ui.warn(_(b'server ignored bookmark %s update\n') % book) |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1106 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1107 ret = int(results[0][b'return']) |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1108 if ret: |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1109 ui.status(bookmsgmap[action][0] % book) |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1110 else: |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1111 ui.warn(bookmsgmap[action][1] % book) |
22649
1d7a2422b90c
push: set bkresult when pushing bookmarks through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22645
diff
changeset
|
1112 if pushop.bkresult is not None: |
1d7a2422b90c
push: set bkresult when pushing bookmarks through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22645
diff
changeset
|
1113 pushop.bkresult = 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1114 |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1115 return handlereply |
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1116 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1117 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1118 @b2partsgenerator(b'pushvars', idx=0) |
33719
db3dc11356ed
pushvars: move fb extension pushvars to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33715
diff
changeset
|
1119 def _getbundlesendvars(pushop, bundler): |
db3dc11356ed
pushvars: move fb extension pushvars to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33715
diff
changeset
|
1120 '''send shellvars via bundle2''' |
33903 | 1121 pushvars = pushop.pushvars |
1122 if pushvars: | |
1123 shellvars = {} | |
1124 for raw in pushvars: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1125 if b'=' not in raw: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1126 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1127 b"unable to parse variable '%s', should follow " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1128 b"'KEY=VALUE' or 'KEY=' format" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1129 ) |
33903 | 1130 raise error.Abort(msg % raw) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1131 k, v = raw.split(b'=', 1) |
33903 | 1132 shellvars[k] = v |
1133 | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1134 part = bundler.newpart(b'pushvars') |
33719
db3dc11356ed
pushvars: move fb extension pushvars to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33715
diff
changeset
|
1135 |
49004
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
1136 for key, value in shellvars.items(): |
33719
db3dc11356ed
pushvars: move fb extension pushvars to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33715
diff
changeset
|
1137 part.addparam(key, value, mandatory=False) |
22242
ed222ebd61be
push: add bookmarks to the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22240
diff
changeset
|
1138 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1139 |
21061
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1140 def _pushbundle2(pushop): |
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1141 """push data to the remote using bundle2 |
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1142 |
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1143 The only currently supported type of data is changegroup but this will |
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1144 evolve in the future.""" |
21644
17755dd8c509
bundle2: introduce a bundle2caps function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21643
diff
changeset
|
1145 bundler = bundle2.bundle20(pushop.ui, bundle2.bundle2caps(pushop.remote)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1146 pushback = pushop.trmanager and pushop.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1147 b'experimental', b'bundle2.pushback' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1148 ) |
23439
743736fc7c41
bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
23437
diff
changeset
|
1149 |
21142
15039ce3e4a3
bundle2: include client capabilities in the pushed bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21141
diff
changeset
|
1150 # create reply capability |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1151 capsblob = bundle2.encodecaps( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1152 bundle2.getrepocaps(pushop.repo, allowpushback=pushback, role=b'client') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1153 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1154 bundler.newpart(b'replycaps', data=capsblob) |
21904
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
1155 replyhandlers = [] |
22017
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
1156 for partgenname in b2partsgenorder: |
7986e99bb69a
push: rework the bundle2partsgenerators logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22016
diff
changeset
|
1157 partgen = b2partsgenmapping[partgenname] |
21904
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
1158 ret = partgen(pushop, bundler) |
21941
dab31290c7eb
bundle2: only use callable return as reply handler
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21906
diff
changeset
|
1159 if callable(ret): |
dab31290c7eb
bundle2: only use callable return as reply handler
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21906
diff
changeset
|
1160 replyhandlers.append(ret) |
21904
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
1161 # do not push if nothing to push |
21903
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
1162 if bundler.nbparts <= 1: |
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
1163 return |
21061
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1164 stream = util.chunkbuffer(bundler.getchunks()) |
21182
08c84fd99aac
bundle2: catch UnknownPartError during local push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21181
diff
changeset
|
1165 try: |
25485
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1166 try: |
37646
72e26319f3b8
wireproto: use command executor for unbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
1167 with pushop.remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1168 reply = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1169 b'unbundle', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1170 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1171 b'bundle': stream, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1172 b'heads': [b'force'], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1173 b'url': pushop.remote.url(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1174 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1175 ).result() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25640
diff
changeset
|
1176 except error.BundleValueError as exc: |
46977
3f87d2af0bd6
errors: raise RemoteError in some places in exchange.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
46907
diff
changeset
|
1177 raise error.RemoteError(_(b'missing support for %s') % exc) |
25485
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1178 try: |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1179 trgetter = None |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1180 if pushback: |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1181 trgetter = pushop.trmanager.transaction |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1182 op = bundle2.processbundle(pushop.repo, reply, trgetter) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25640
diff
changeset
|
1183 except error.BundleValueError as exc: |
46977
3f87d2af0bd6
errors: raise RemoteError in some places in exchange.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
46907
diff
changeset
|
1184 raise error.RemoteError(_(b'missing support for %s') % exc) |
26829
58f1645f72c3
bundle2: attribute remote failures to remote (issue4788)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26781
diff
changeset
|
1185 except bundle2.AbortFromPart as exc: |
46537
db9e33beb0fb
bundle2: print "error:abort" message to stderr instead of stdout
Martin von Zweigbergk <martinvonz@google.com>
parents:
45957
diff
changeset
|
1186 pushop.ui.error(_(b'remote: %s\n') % exc) |
30870
4c8dcb491974
bundle2: keep hint close to the primary message when remote abort
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30685
diff
changeset
|
1187 if exc.hint is not None: |
46537
db9e33beb0fb
bundle2: print "error:abort" message to stderr instead of stdout
Martin von Zweigbergk <martinvonz@google.com>
parents:
45957
diff
changeset
|
1188 pushop.ui.error(_(b'remote: %s\n') % (b'(%s)' % exc.hint)) |
46977
3f87d2af0bd6
errors: raise RemoteError in some places in exchange.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
46907
diff
changeset
|
1189 raise error.RemoteError(_(b'push failed on remote')) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25640
diff
changeset
|
1190 except error.PushkeyFailed as exc: |
25485
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1191 partid = int(exc.partid) |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1192 if partid not in pushop.pkfailcb: |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1193 raise |
8182163ae983
push: catch and process PushkeyFailed error
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25480
diff
changeset
|
1194 pushop.pkfailcb[partid](pushop, exc) |
21904
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
1195 for rephand in replyhandlers: |
5fbccbcc07ea
bundle2-push: introduce a list of part generating functions
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21903
diff
changeset
|
1196 rephand(op) |
21061
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
1197 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1198 |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1199 def _pushchangeset(pushop): |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1200 """Make the actual push of changeset bundle to remote repo""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1201 if b'changesets' in pushop.stepsdone: |
21902
7a7def851ba0
push: use `stepsdone` to control changegroup push through bundle10 or bundle20
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21901
diff
changeset
|
1202 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1203 pushop.stepsdone.add(b'changesets') |
21903
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
1204 if not _pushcheckoutgoing(pushop): |
48f61cfb7576
bundle2-push: move changegroup push validation inside _pushb2ctx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21902
diff
changeset
|
1205 return |
33727
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1206 |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1207 # Should have verified this in push(). |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1208 assert pushop.remote.capable(b'unbundle') |
33727
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1209 |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28668
diff
changeset
|
1210 pushop.repo.prepushoutgoinghooks(pushop) |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1211 outgoing = pushop.outgoing |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1212 # TODO: get bundlecaps from remote |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1213 bundlecaps = None |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1214 # create a changegroup from local |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1215 if pushop.revs is None and not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1216 outgoing.excluded or pushop.repo.changelog.filteredrevs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1217 ): |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1218 # push everything, |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1219 # use the fast path, no race possible on push |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1220 cg = changegroup.makechangegroup( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1221 pushop.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1222 outgoing, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1223 b'01', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1224 b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1225 fastpath=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1226 bundlecaps=bundlecaps, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1227 ) |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1228 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1229 cg = changegroup.makechangegroup( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1230 pushop.repo, outgoing, b'01', b'push', bundlecaps=bundlecaps |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1231 ) |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1232 |
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1233 # apply changegroup to remote |
33727
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1234 # local repo finds heads on server, finds out what |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1235 # revs it must push. once revs transferred, if server |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1236 # finds it has different heads (someone else won |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1237 # commit/push race), server aborts. |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1238 if pushop.force: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1239 remoteheads = [b'force'] |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1240 else: |
33727
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1241 remoteheads = pushop.remoteheads |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1242 # ssh: return remote's addchangegroup() |
fda0867cfe03
exchange: drop support for lock-based unbundling (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33719
diff
changeset
|
1243 # http: return remote's addchangegroup() or 0 for error |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1244 pushop.cgresult = pushop.remote.unbundle(cg, remoteheads, pushop.repo.url()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1245 |
20463
f1b532a310e4
push: move changeset push logic in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20462
diff
changeset
|
1246 |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1247 def _pushsyncphase(pushop): |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
1248 """synchronise phase information locally and remotely""" |
20468
7d0bbb6dd730
push: extract new common set computation from phase synchronisation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20467
diff
changeset
|
1249 cheads = pushop.commonheads |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1250 # even when we don't push, exchanging phase data is useful |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1251 remotephases = listkeys(pushop.remote, b'phases') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1252 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1253 pushop.ui.configbool(b'ui', b'_usedassubrepo') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1254 and remotephases # server supports phases |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1255 and pushop.cgresult is None # nothing was pushed |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1256 and remotephases.get(b'publishing', False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1257 ): |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1258 # When: |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1259 # - this is a subrepo push |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1260 # - and remote support phase |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1261 # - and no changeset was pushed |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1262 # - and remote is publishing |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1263 # We may be in issue 3871 case! |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1264 # We drop the possible phase synchronisation done by |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1265 # courtesy to publish changesets possibly locally draft |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1266 # on the remote. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1267 remotephases = {b'publishing': b'True'} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1268 if not remotephases: # old server or public only reply from non-publishing |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1269 _localphasemove(pushop, cheads) |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1270 # don't push any phase data as there is nothing to push |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1271 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1272 ana = phases.analyzeremotephases(pushop.repo, cheads, remotephases) |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1273 pheads, droots = ana |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1274 ### Apply remote phase on local |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1275 if remotephases.get(b'publishing', False): |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1276 _localphasemove(pushop, cheads) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1277 else: # publish = False |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1278 _localphasemove(pushop, pheads) |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1279 _localphasemove(pushop, cheads, phases.draft) |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1280 ### Apply local phase on remote |
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1281 |
22615
4f14303e8954
push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22543
diff
changeset
|
1282 if pushop.cgresult: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1283 if b'phases' in pushop.stepsdone: |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
1284 # phases already pushed though bundle2 |
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
1285 return |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1286 outdated = pushop.outdatedphases |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1287 else: |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1288 outdated = pushop.fallbackoutdatedphases |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1289 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1290 pushop.stepsdone.add(b'phases') |
22020
311979b773fb
push: include phase push in the unified bundle2 push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22019
diff
changeset
|
1291 |
22019
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1292 # filter heads already turned public by the push |
9fcf772f15ff
push: perform phases discovery before the push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22018
diff
changeset
|
1293 outdated = [c for c in outdated if c.node() not in pheads] |
23376
2e65da5f80df
push: stop independent usage of bundle2 in syncphase (issue4454)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23082
diff
changeset
|
1294 # fallback to independent pushkey command |
2e65da5f80df
push: stop independent usage of bundle2 in syncphase (issue4454)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23082
diff
changeset
|
1295 for newremotehead in outdated: |
37647
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1296 with pushop.remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1297 r = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1298 b'pushkey', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1299 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1300 b'namespace': b'phases', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1301 b'key': newremotehead.hex(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1302 b'old': b'%d' % phases.draft, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1303 b'new': b'%d' % phases.public, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1304 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1305 ).result() |
37647
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1306 |
23376
2e65da5f80df
push: stop independent usage of bundle2 in syncphase (issue4454)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23082
diff
changeset
|
1307 if not r: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1308 pushop.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1309 _(b'updating %s to public failed!\n') % newremotehead |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1310 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1311 |
20441
eca9d5375606
push: move phases synchronisation function in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20440
diff
changeset
|
1312 |
20438
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1313 def _localphasemove(pushop, nodes, phase=phases.public): |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1314 """move <nodes> to <phase> in the local source repo""" |
23437
94e2862dbcfb
push: elevate phase transaction to cover entire operation
Eric Sumner <ericsumner@fb.com>
parents:
23436
diff
changeset
|
1315 if pushop.trmanager: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1316 phases.advanceboundary( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1317 pushop.repo, pushop.trmanager.transaction(), phase, nodes |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1318 ) |
20438
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1319 else: |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1320 # repo is not locked, do not change any phases! |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1321 # Informs the user that phases should have been moved when |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1322 # applicable. |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1323 actualmoves = [n for n in nodes if phase < pushop.repo[n].phase()] |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1324 phasestr = phases.phasenames[phase] |
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1325 if actualmoves: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1326 pushop.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1327 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1328 b'cannot lock source repo, skipping ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1329 b'local %s phase update\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1330 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1331 % phasestr |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1332 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1333 |
20438
2b5ab0d11327
push: move local phase move in a normal function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20437
diff
changeset
|
1334 |
20433
6af248474224
push: feed pushoperation object to _pushobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20432
diff
changeset
|
1335 def _pushobsolete(pushop): |
20434
e009e59e4566
push: drop now outdated comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20433
diff
changeset
|
1336 """utility function to push obsolete markers to a remote""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1337 if b'obsmarkers' in pushop.stepsdone: |
22036
f1528ef123f4
push: use stepsdone for obsmarkers push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22035
diff
changeset
|
1338 return |
20433
6af248474224
push: feed pushoperation object to _pushobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20432
diff
changeset
|
1339 repo = pushop.repo |
6af248474224
push: feed pushoperation object to _pushobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20432
diff
changeset
|
1340 remote = pushop.remote |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1341 pushop.stepsdone.add(b'obsmarkers') |
22350
6d113cc7a31a
push: only push obsmarkers relevant to the "pushed subset"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22347
diff
changeset
|
1342 if pushop.outobsmarkers: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1343 pushop.ui.debug(b'try to push obsolete markers to remote\n') |
20432
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1344 rslts = [] |
43426
e513e87b0476
py3: fix sorting of obsolete markers in obsutil (issue6217)
Denis Laxalde <denis@laxalde.org>
parents:
43278
diff
changeset
|
1345 markers = obsutil.sortedmarkers(pushop.outobsmarkers) |
43278
2c70dd03b743
py3: fix sorting of obsolete markers during push
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43277
diff
changeset
|
1346 remotedata = obsolete._pushkeyescape(markers) |
20432
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1347 for key in sorted(remotedata, reverse=True): |
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1348 # reverse sort to ensure we end with dump0 |
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1349 data = remotedata[key] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1350 rslts.append(remote.pushkey(b'obsolete', key, b'', data)) |
20432
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1351 if [r for r in rslts if not r]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1352 msg = _(b'failed to push some obsolete markers!\n') |
20432
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1353 repo.ui.warn(msg) |
1b926f0bbf8a
push: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20431
diff
changeset
|
1354 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1355 |
20431
bebf8b8479f3
push: feed pushoperation object to _pushbookmark function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20352
diff
changeset
|
1356 def _pushbookmark(pushop): |
20352
58300f61b139
push: move bookmarks exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20351
diff
changeset
|
1357 """Update bookmark position on remote""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1358 if pushop.cgresult == 0 or b'bookmarks' in pushop.stepsdone: |
22228
a3dc2d385490
pushbookmark: do not attempt to update bookmarks if the push failed (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22227
diff
changeset
|
1359 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1360 pushop.stepsdone.add(b'bookmarks') |
20431
bebf8b8479f3
push: feed pushoperation object to _pushbookmark function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20352
diff
changeset
|
1361 ui = pushop.ui |
bebf8b8479f3
push: feed pushoperation object to _pushbookmark function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20352
diff
changeset
|
1362 remote = pushop.remote |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1363 |
22239
0688010ee38f
push: move bookmark discovery with other discovery steps
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22238
diff
changeset
|
1364 for b, old, new in pushop.outbookmarks: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1365 action = b'update' |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1366 if not old: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1367 action = b'export' |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1368 elif not new: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1369 action = b'delete' |
37647
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1370 |
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1371 with remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1372 r = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1373 b'pushkey', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1374 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1375 b'namespace': b'bookmarks', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1376 b'key': b, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1377 b'old': hex(old), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1378 b'new': hex(new), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1379 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1380 ).result() |
37647
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1381 |
516b5a5edae3
exchange: use command executor for pushkey
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
1382 if r: |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1383 ui.status(bookmsgmap[action][0] % b) |
20352
58300f61b139
push: move bookmarks exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20351
diff
changeset
|
1384 else: |
22650
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1385 ui.warn(bookmsgmap[action][1] % b) |
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1386 # discovery can have set the value form invalid entry |
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1387 if pushop.bkresult is not None: |
36952c91e6c3
push: prepare the issue of multiple kinds of messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22649
diff
changeset
|
1388 pushop.bkresult = 1 |
20469
6b4c789d618d
exchange: extract pull function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20468
diff
changeset
|
1389 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1390 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49026
diff
changeset
|
1391 class pulloperation: |
20472
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1392 """A object that represent a single pull operation |
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1393 |
23219
61cd79ac4b99
exchange: swap "push" for "pull" in pulloperation docstring
Mike Edgar <adgar@google.com>
parents:
23218
diff
changeset
|
1394 It purpose is to carry pull related state and very common operation. |
20472
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1395 |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
1396 A new should be created at the beginning of each pull and discarded |
20472
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1397 afterward. |
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1398 """ |
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1399 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1400 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1401 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1402 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1403 remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1404 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1405 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1406 bookmarks=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1407 remotebookmarks=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1408 streamclonerequested=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1409 includepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1410 excludepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1411 depth=None, |
48292
aad84024660f
pull: make the new argument a keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48254
diff
changeset
|
1412 path=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1413 ): |
20596
004a1744088d
exchange: fix docs for pulloperation
Siddharth Agarwal <sid0@fb.com>
parents:
20489
diff
changeset
|
1414 # repo we pull into |
20472
b97a453b8c27
pull: introduce a pulloperation object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20469
diff
changeset
|
1415 self.repo = repo |
20596
004a1744088d
exchange: fix docs for pulloperation
Siddharth Agarwal <sid0@fb.com>
parents:
20489
diff
changeset
|
1416 # repo we pull from |
20473
1516daaca632
pull: move `remote` argument into pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20472
diff
changeset
|
1417 self.remote = remote |
48253
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1418 # path object used to build this remote |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1419 # |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1420 # Ideally, the remote peer would carry that directly. |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1421 self.remote_path = path |
20474
c9bceafc61be
pull: move `heads` argument into pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20473
diff
changeset
|
1422 # revision we try to pull (None is "all") |
c9bceafc61be
pull: move `heads` argument into pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20473
diff
changeset
|
1423 self.heads = heads |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
1424 # bookmark pulled explicitly |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1425 self.explicitbookmarks = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1426 repo._bookmarks.expandname(bookmark) for bookmark in bookmarks |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1427 ] |
20475
b79b405583af
pull: move `force` argument into pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20474
diff
changeset
|
1428 # do we force pull? |
b79b405583af
pull: move `force` argument into pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20474
diff
changeset
|
1429 self.force = force |
26448
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1430 # whether a streaming clone was requested |
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1431 self.streamclonerequested = streamclonerequested |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1432 # transaction manager |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1433 self.trmanager = None |
20487
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1434 # set of common changeset between local and remote before pull |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1435 self.common = None |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1436 # set of pulled head |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1437 self.rheads = None |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
1438 # list of missing changeset to fetch remotely |
20488
76e66654f74e
pull: move `fetch` subset into the object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20487
diff
changeset
|
1439 self.fetch = None |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
1440 # remote bookmarks data |
25446
b5311068077e
pull: prevent race condition in bookmark update when using -B (issue4689)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25445
diff
changeset
|
1441 self.remotebookmarks = remotebookmarks |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
1442 # result of changegroup pulling (used as return code by pull) |
20898
f295b2ac3579
pull: move return code in the pull operation object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20878
diff
changeset
|
1443 self.cgresult = None |
22937
92bf9abc4deb
pull: use `stepsdone` instead of `todosteps`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22936
diff
changeset
|
1444 # list of step already done |
92bf9abc4deb
pull: use `stepsdone` instead of `todosteps`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22936
diff
changeset
|
1445 self.stepsdone = set() |
26689
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
1446 # Whether we attempted a clone from pre-generated bundles. |
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
1447 self.clonebundleattempted = False |
39569
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1448 # Set of file patterns to include. |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1449 self.includepats = includepats |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1450 # Set of file patterns to exclude. |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1451 self.excludepats = excludepats |
40331
ac59de55c8b4
exchange: support declaring pull depth
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39916
diff
changeset
|
1452 # Number of ancestor changesets to pull from each pulled head. |
ac59de55c8b4
exchange: support declaring pull depth
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39916
diff
changeset
|
1453 self.depth = depth |
20487
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1454 |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1455 @util.propertycache |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1456 def pulledsubset(self): |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1457 """heads of the set of changeset target by the pull""" |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1458 # compute target subset |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1459 if self.heads is None: |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1460 # We pulled every thing possible |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1461 # sync on everything common |
20878
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1462 c = set(self.common) |
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1463 ret = list(self.common) |
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1464 for n in self.rheads: |
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1465 if n not in c: |
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1466 ret.append(n) |
09e7118715eb
pull: prevent duplicated entry in `op.pulledsubset`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20596
diff
changeset
|
1467 return ret |
20487
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1468 else: |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1469 # We pulled a specific subset |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1470 # sync on this subset |
f715cc0b5107
pull: make pulled subset a propertycache of the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20486
diff
changeset
|
1471 return self.heads |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1472 |
26464
9a7fc6d48898
exchange: expose bundle2 capabilities on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26462
diff
changeset
|
1473 @util.propertycache |
26465
eda32ee9962f
exchange: expose bundle2 availability on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26464
diff
changeset
|
1474 def canusebundle2(self): |
29696
2db085d5f5a2
bundle2: rename the _canusebundle2 method to _forcebundle1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29389
diff
changeset
|
1475 return not _forcebundle1(self) |
26465
eda32ee9962f
exchange: expose bundle2 availability on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26464
diff
changeset
|
1476 |
eda32ee9962f
exchange: expose bundle2 availability on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26464
diff
changeset
|
1477 @util.propertycache |
26464
9a7fc6d48898
exchange: expose bundle2 capabilities on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26462
diff
changeset
|
1478 def remotebundle2caps(self): |
9a7fc6d48898
exchange: expose bundle2 capabilities on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26462
diff
changeset
|
1479 return bundle2.bundle2caps(self.remote) |
9a7fc6d48898
exchange: expose bundle2 capabilities on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26462
diff
changeset
|
1480 |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1481 def gettransaction(self): |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1482 # deprecated; talk to trmanager directly |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1483 return self.trmanager.transaction() |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1484 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1485 |
33814
bbbbd3c30bfc
util: add base class for transactional context managers
Martin von Zweigbergk <martinvonz@google.com>
parents:
33813
diff
changeset
|
1486 class transactionmanager(util.transactional): |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23439
diff
changeset
|
1487 """An object to manage the life cycle of a transaction |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1488 |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1489 It creates the transaction on demand and calls the appropriate hooks when |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1490 closing the transaction.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1491 |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1492 def __init__(self, repo, source, url): |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1493 self.repo = repo |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1494 self.source = source |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1495 self.url = url |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1496 self._tr = None |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1497 |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1498 def transaction(self): |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1499 """Return an open transaction object, constructing if necessary""" |
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1500 if not self._tr: |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
1501 trname = b'%s\n%s' % (self.source, urlutil.hidepassword(self.url)) |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1502 self._tr = self.repo.transaction(trname) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1503 self._tr.hookargs[b'source'] = self.source |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1504 self._tr.hookargs[b'url'] = self.url |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1505 return self._tr |
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1506 |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1507 def close(self): |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1508 """close transaction if created""" |
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1509 if self._tr is not None: |
23222
6b7e60fb0b38
exchange: use the postclose API on transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23219
diff
changeset
|
1510 self._tr.close() |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1511 |
23436
52db731b964d
pull: extract transaction logic into separate object
Eric Sumner <ericsumner@fb.com>
parents:
23382
diff
changeset
|
1512 def release(self): |
20477
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1513 """release transaction if created""" |
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1514 if self._tr is not None: |
2607a21bb40b
pull: move transaction logic into the pull object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20476
diff
changeset
|
1515 self._tr.release() |
20469
6b4c789d618d
exchange: extract pull function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20468
diff
changeset
|
1516 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1517 |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
1518 def listkeys(remote, namespace): |
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
1519 with remote.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1520 return e.callcommand(b'listkeys', {b'namespace': namespace}).result() |
37757
2a8ad00b8aed
exchange: use command executor interface for calling listkeys
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37663
diff
changeset
|
1521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1522 |
37498
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1523 def _fullpullbundle2(repo, pullop): |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1524 # The server may send a partial reply, i.e. when inlining |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1525 # pre-computed bundles. In that case, update the common |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1526 # set based on the results and pull another bundle. |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1527 # |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1528 # There are two indicators that the process is finished: |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1529 # - no changeset has been added, or |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1530 # - all remote heads are known locally. |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1531 # The head check must use the unfiltered view as obsoletion |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1532 # markers can hide heads. |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1533 unfi = repo.unfiltered() |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1534 unficl = unfi.changelog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1535 |
37498
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1536 def headsofdiff(h1, h2): |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1537 """Returns heads(h1 % h2)""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1538 res = unfi.set(b'heads(%ln %% %ln)', h1, h2) |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44406
diff
changeset
|
1539 return {ctx.node() for ctx in res} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1540 |
37498
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1541 def headsofunion(h1, h2): |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1542 """Returns heads((h1 + h2) - null)""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1543 res = unfi.set(b'heads((%ln + %ln - null))', h1, h2) |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44406
diff
changeset
|
1544 return {ctx.node() for ctx in res} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1545 |
37498
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1546 while True: |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1547 old_heads = unficl.heads() |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1548 clstart = len(unficl) |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1549 _pullbundle2(pullop) |
45392
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45391
diff
changeset
|
1550 if requirements.NARROW_REQUIREMENT in repo.requirements: |
37498
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1551 # XXX narrow clones filter the heads on the server side during |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1552 # XXX getbundle and result in partial replies as well. |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1553 # XXX Disable pull bundles in this case as band aid to avoid |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1554 # XXX extra round trips. |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1555 break |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1556 if clstart == len(unficl): |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1557 break |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1558 if all(unficl.hasnode(n) for n in pullop.rheads): |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1559 break |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1560 new_heads = headsofdiff(unficl.heads(), old_heads) |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1561 pullop.common = headsofunion(new_heads, pullop.common) |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1562 pullop.rheads = set(pullop.rheads) - pullop.common |
aacfca6f9767
wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents:
37239
diff
changeset
|
1563 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1564 |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1565 def add_confirm_callback(repo, pullop): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1566 """adds a finalize callback to transaction which can be used to show stats |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1567 to user and confirm the pull before committing transaction""" |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1568 |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1569 tr = pullop.trmanager.transaction() |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1570 scmutil.registersummarycallback( |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1571 repo, tr, txnname=b'pull', as_validator=True |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1572 ) |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1573 reporef = weakref.ref(repo.unfiltered()) |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1574 |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1575 def prompt(tr): |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1576 repo = reporef() |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1577 cm = _(b'accept incoming changes (yn)?$$ &Yes $$ &No') |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1578 if repo.ui.promptchoice(cm): |
45681
a736ab681b78
errors: stop passing non-strings to Abort's constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45558
diff
changeset
|
1579 raise error.Abort(b"user aborted") |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1580 |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1581 tr.addvalidator(b'900-pull-prompt', prompt) |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1582 |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1583 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1584 def pull( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1585 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1586 remote, |
48253
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1587 path=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1588 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1589 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1590 bookmarks=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1591 opargs=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1592 streamclonerequested=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1593 includepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1594 excludepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1595 depth=None, |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1596 confirm=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1597 ): |
26440
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1598 """Fetch repository data from a remote. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1599 |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1600 This is the main function used to retrieve data from a remote repository. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1601 |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1602 ``repo`` is the local repository to clone into. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1603 ``remote`` is a peer instance. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1604 ``heads`` is an iterable of revisions we want to pull. ``None`` (the |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1605 default) means to pull everything from the remote. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1606 ``bookmarks`` is an iterable of bookmarks requesting to be pulled. By |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1607 default, all remote bookmarks are pulled. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1608 ``opargs`` are additional keyword arguments to pass to ``pulloperation`` |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1609 initialization. |
26448
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1610 ``streamclonerequested`` is a boolean indicating whether a "streaming |
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1611 clone" is requested. A "streaming clone" is essentially a raw file copy |
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1612 of revlogs from the server. This only works when the local repository is |
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1613 empty. The default value of ``None`` means to respect the server |
e05fd574c922
exchange: teach pull about requested stream clones
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26443
diff
changeset
|
1614 configuration for preferring stream clones. |
39569
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1615 ``includepats`` and ``excludepats`` define explicit file patterns to |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1616 include and exclude in storage, respectively. If not defined, narrow |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1617 patterns from the repo instance are used, if available. |
40331
ac59de55c8b4
exchange: support declaring pull depth
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39916
diff
changeset
|
1618 ``depth`` is an integer indicating the DAG depth of history we're |
ac59de55c8b4
exchange: support declaring pull depth
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39916
diff
changeset
|
1619 interested in. If defined, for each revision specified in ``heads``, we |
ac59de55c8b4
exchange: support declaring pull depth
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39916
diff
changeset
|
1620 will fetch up to this many of its ancestors and data associated with them. |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1621 ``confirm`` is a boolean indicating whether the pull should be confirmed |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1622 before committing the transaction. This overrides HGPLAIN. |
26440
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1623 |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1624 Returns the ``pulloperation`` created for this pull. |
85b992177d2a
exchange: add docstring to pull()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26428
diff
changeset
|
1625 """ |
25445
1457c1f28c92
pull: allow a generic way to pass parameters to the pull operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25444
diff
changeset
|
1626 if opargs is None: |
1457c1f28c92
pull: allow a generic way to pass parameters to the pull operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25444
diff
changeset
|
1627 opargs = {} |
39569
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1628 |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1629 # We allow the narrow patterns to be passed in explicitly to provide more |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1630 # flexibility for API consumers. |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1631 if includepats or excludepats: |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1632 includepats = includepats or set() |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1633 excludepats = excludepats or set() |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1634 else: |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1635 includepats, excludepats = repo.narrowpats |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1636 |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1637 narrowspec.validatepatterns(includepats) |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1638 narrowspec.validatepatterns(excludepats) |
130e5df346d5
exchange: support defining narrow file patterns for pull
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39191
diff
changeset
|
1639 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1640 pullop = pulloperation( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1641 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1642 remote, |
48253
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1643 path=path, |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1644 heads=heads, |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47497
diff
changeset
|
1645 force=force, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1646 bookmarks=bookmarks, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1647 streamclonerequested=streamclonerequested, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1648 includepats=includepats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1649 excludepats=excludepats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1650 depth=depth, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1651 **pycompat.strkwargs(opargs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1652 ) |
33728
033484935391
exchange: access requirements on repo instead of peer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33727
diff
changeset
|
1653 |
033484935391
exchange: access requirements on repo instead of peer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33727
diff
changeset
|
1654 peerlocal = pullop.remote.local() |
033484935391
exchange: access requirements on repo instead of peer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33727
diff
changeset
|
1655 if peerlocal: |
033484935391
exchange: access requirements on repo instead of peer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33727
diff
changeset
|
1656 missing = set(peerlocal.requirements) - pullop.repo.supported |
20469
6b4c789d618d
exchange: extract pull function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20468
diff
changeset
|
1657 if missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1658 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1659 b"required features are not" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1660 b" supported in the destination:" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1661 b" %s" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1662 ) % (b', '.join(sorted(missing))) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26566
diff
changeset
|
1663 raise error.Abort(msg) |
20469
6b4c789d618d
exchange: extract pull function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20468
diff
changeset
|
1664 |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1665 for category in repo._wanted_sidedata: |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1666 # Check that a computer is registered for that category for at least |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1667 # one revlog kind. |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1668 for kind, computers in repo._sidedata_computers.items(): |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1669 if computers.get(category): |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1670 break |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1671 else: |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1672 # This should never happen since repos are supposed to be able to |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1673 # generate the sidedata they require. |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1674 raise error.ProgrammingError( |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1675 _( |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1676 b'sidedata category requested by local side without local' |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1677 b"support: '%s'" |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1678 ) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1679 % pycompat.bytestr(category) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1680 ) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1681 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1682 pullop.trmanager = transactionmanager(repo, b'pull', remote.url()) |
42348
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
1683 wlock = util.nullcontextmanager() |
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
1684 if not bookmod.bookmarksinstore(repo): |
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
1685 wlock = repo.wlock() |
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
1686 with wlock, repo.lock(), pullop.trmanager: |
44555
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1687 if confirm or ( |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1688 repo.ui.configbool(b"pull", b"confirm") and not repo.ui.plain() |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1689 ): |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1690 add_confirm_callback(repo, pullop) |
bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44470
diff
changeset
|
1691 |
48561 | 1692 # This should ideally be in _pullbundle2(). However, it needs to run |
1693 # before discovery to avoid extra work. | |
1694 _maybeapplyclonebundle(pullop) | |
1695 streamclone.maybeperformlegacystreamclone(pullop) | |
1696 _pulldiscovery(pullop) | |
1697 if pullop.canusebundle2: | |
1698 _fullpullbundle2(repo, pullop) | |
1699 _pullchangeset(pullop) | |
1700 _pullphase(pullop) | |
1701 _pullbookmarks(pullop) | |
1702 _pullobsolete(pullop) | |
20469
6b4c789d618d
exchange: extract pull function from localrepo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20468
diff
changeset
|
1703 |
35245
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35064
diff
changeset
|
1704 # storing remotenames |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1705 if repo.ui.configbool(b'experimental', b'remotenames'): |
35356
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35314
diff
changeset
|
1706 logexchange.pullremotenames(repo, remote) |
35245
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35064
diff
changeset
|
1707 |
22693
68439b154063
exchange: have `pull` return the pulloperation object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22666
diff
changeset
|
1708 return pullop |
20476
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
1709 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1710 |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1711 # list of steps to perform discovery before pull |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1712 pulldiscoveryorder = [] |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1713 |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1714 # Mapping between step name and function |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1715 # |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1716 # This exists to help extensions wrap steps if necessary |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1717 pulldiscoverymapping = {} |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1718 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1719 |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1720 def pulldiscovery(stepname): |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1721 """decorator for function performing discovery before pull |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1722 |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1723 The function is added to the step -> function mapping and appended to the |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1724 list of steps. Beware that decorated function will be added in order (this |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1725 may matter). |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1726 |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1727 You can only use this decorator for a new step, if you want to wrap a step |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1728 from an extension, change the pulldiscovery dictionary directly.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1729 |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1730 def dec(func): |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1731 assert stepname not in pulldiscoverymapping |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1732 pulldiscoverymapping[stepname] = func |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1733 pulldiscoveryorder.append(stepname) |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1734 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1735 |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1736 return dec |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1737 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1738 |
20900
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1739 def _pulldiscovery(pullop): |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1740 """Run all discovery steps""" |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1741 for stepname in pulldiscoveryorder: |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1742 step = pulldiscoverymapping[stepname] |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1743 step(pullop) |
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1744 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1745 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1746 @pulldiscovery(b'b1:bookmarks') |
25369
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1747 def _pullbookmarkbundle1(pullop): |
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1748 """fetch bookmark data in bundle1 case |
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1749 |
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1750 If not using bundle2, we have to fetch bookmarks before changeset |
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1751 discovery to reduce the chance and impact of race conditions.""" |
25443
443d3decbdde
pull: skip pulling remote bookmarks with bundle1 if a value already exist
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25423
diff
changeset
|
1752 if pullop.remotebookmarks is not None: |
443d3decbdde
pull: skip pulling remote bookmarks with bundle1 if a value already exist
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25423
diff
changeset
|
1753 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1754 if pullop.canusebundle2 and b'listkeys' in pullop.remotebundle2caps: |
25479
f00a63a43c4b
bundle2: pull bookmark the old way if no bundle2 listkeys support (issue4701)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25446
diff
changeset
|
1755 # all known bundle2 servers now support listkeys, but lets be nice with |
f00a63a43c4b
bundle2: pull bookmark the old way if no bundle2 listkeys support (issue4701)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25446
diff
changeset
|
1756 # new implementation. |
f00a63a43c4b
bundle2: pull bookmark the old way if no bundle2 listkeys support (issue4701)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25446
diff
changeset
|
1757 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1758 books = listkeys(pullop.remote, b'bookmarks') |
35062
d7a4384d2d87
pull: store binary node in pullop.remotebookmarks
Boris Feld <boris.feld@octobus.net>
parents:
34910
diff
changeset
|
1759 pullop.remotebookmarks = bookmod.unhexlifybookmarks(books) |
25369
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1760 |
02defdb1b628
pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25337
diff
changeset
|
1761 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1762 @pulldiscovery(b'changegroup') |
22936
dae236906fb2
pull: make discovery phase extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22693
diff
changeset
|
1763 def _pulldiscoverychangegroup(pullop): |
20900
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1764 """discovery phase for the pull |
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1765 |
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1766 Current handle changeset discovery only, will change handle all discovery |
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1767 at some point.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1768 tmp = discovery.findcommonincoming( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1769 pullop.repo, pullop.remote, heads=pullop.heads, force=pullop.force |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1770 ) |
23848
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1771 common, fetch, rheads = tmp |
43593
9c1f4e2f1fc4
index: use `index.has_node` in `exchange._pulldiscoverychangegroup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43554
diff
changeset
|
1772 has_node = pullop.repo.unfiltered().changelog.index.has_node |
23848
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1773 if fetch and rheads: |
34324
e45ec589f962
discovery: avoid dropping remote heads hidden locally
Boris Feld <boris.feld@octobus.net>
parents:
34228
diff
changeset
|
1774 # If a remote heads is filtered locally, put in back in common. |
23848
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1775 # |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1776 # This is a hackish solution to catch most of "common but locally |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1777 # hidden situation". We do not performs discovery on unfiltered |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1778 # repository because it end up doing a pathological amount of round |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1779 # trip for w huge amount of changeset we do not care about. |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1780 # |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1781 # If a set of such "common but filtered" changeset exist on the server |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1782 # but are not including a remote heads, we'll not be able to detect it, |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1783 scommon = set(common) |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1784 for n in rheads: |
43593
9c1f4e2f1fc4
index: use `index.has_node` in `exchange._pulldiscoverychangegroup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43554
diff
changeset
|
1785 if has_node(n): |
23975
3b7088a5c64c
discovery: properly exclude locally known but filtered heads
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23890
diff
changeset
|
1786 if n not in scommon: |
3b7088a5c64c
discovery: properly exclude locally known but filtered heads
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23890
diff
changeset
|
1787 common.append(n) |
34324
e45ec589f962
discovery: avoid dropping remote heads hidden locally
Boris Feld <boris.feld@octobus.net>
parents:
34228
diff
changeset
|
1788 if set(rheads).issubset(set(common)): |
23848
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1789 fetch = [] |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1790 pullop.common = common |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1791 pullop.fetch = fetch |
c5456b64eb07
discovery: run discovery on filtered repository
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23591
diff
changeset
|
1792 pullop.rheads = rheads |
20900
cb37fb91bc5a
pull: put discovery step in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20899
diff
changeset
|
1793 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1794 |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1795 def _pullbundle2(pullop): |
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1796 """pull data using bundle2 |
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1797 |
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1798 For now, the only supported data are changegroup.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1799 kwargs = {b'bundlecaps': caps20to10(pullop.repo, role=b'client')} |
26471
41dd7b2c7e15
exchange: add "streaming all changes" to bundle2 pulling
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26465
diff
changeset
|
1800 |
35761
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1801 # make ui easier to access |
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1802 ui = pullop.repo.ui |
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1803 |
32297
205bd3936179
bundle2: don't check for whether we can do stream clones
Siddharth Agarwal <sid0@fb.com>
parents:
32262
diff
changeset
|
1804 # At the moment we don't do stream clones over bundle2. If that is |
205bd3936179
bundle2: don't check for whether we can do stream clones
Siddharth Agarwal <sid0@fb.com>
parents:
32262
diff
changeset
|
1805 # implemented then here's where the check for that will go. |
35763
7eedbd5d4880
streamclone: add support for bundle2 based stream clone
Boris Feld <boris.feld@octobus.net>
parents:
35762
diff
changeset
|
1806 streaming = streamclone.canperformstreamclone(pullop, bundle2=True)[0] |
26471
41dd7b2c7e15
exchange: add "streaming all changes" to bundle2 pulling
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26465
diff
changeset
|
1807 |
35761
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1808 # declare pull perimeters |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1809 kwargs[b'common'] = pullop.common |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1810 kwargs[b'heads'] = pullop.heads or pullop.rheads |
35761
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1811 |
40542
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
1812 # check server supports narrow and then adding includepats and excludepats |
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
1813 servernarrow = pullop.remote.capable(wireprototypes.NARROWCAP) |
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
1814 if servernarrow and pullop.includepats: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1815 kwargs[b'includepats'] = pullop.includepats |
40542
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
1816 if servernarrow and pullop.excludepats: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1817 kwargs[b'excludepats'] = pullop.excludepats |
40542
440f5b65be57
exchange: pass includepats and excludepats as arguments to getbundle()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40352
diff
changeset
|
1818 |
35763
7eedbd5d4880
streamclone: add support for bundle2 based stream clone
Boris Feld <boris.feld@octobus.net>
parents:
35762
diff
changeset
|
1819 if streaming: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1820 kwargs[b'cg'] = False |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1821 kwargs[b'stream'] = True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1822 pullop.stepsdone.add(b'changegroup') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1823 pullop.stepsdone.add(b'phases') |
35763
7eedbd5d4880
streamclone: add support for bundle2 based stream clone
Boris Feld <boris.feld@octobus.net>
parents:
35762
diff
changeset
|
1824 |
7eedbd5d4880
streamclone: add support for bundle2 based stream clone
Boris Feld <boris.feld@octobus.net>
parents:
35762
diff
changeset
|
1825 else: |
35762
40df727b6f4f
pull: preindent some code
Boris Feld <boris.feld@octobus.net>
parents:
35761
diff
changeset
|
1826 # pulling changegroup |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1827 pullop.stepsdone.add(b'changegroup') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1828 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1829 kwargs[b'cg'] = pullop.fetch |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1830 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1831 legacyphase = b'phases' in ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1832 hasbinaryphase = b'heads' in pullop.remotebundle2caps.get(b'phases', ()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1833 if not legacyphase and hasbinaryphase: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1834 kwargs[b'phases'] = True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1835 pullop.stepsdone.add(b'phases') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1836 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1837 if b'listkeys' in pullop.remotebundle2caps: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1838 if b'phases' not in pullop.stepsdone: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1839 kwargs[b'listkeys'] = [b'phases'] |
35761
1908d360f977
pull: reorganize bundle2 argument bundling
Boris Feld <boris.feld@octobus.net>
parents:
35759
diff
changeset
|
1840 |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1841 bookmarksrequested = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1842 legacybookmark = b'bookmarks' in ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1843 hasbinarybook = b'bookmarks' in pullop.remotebundle2caps |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1844 |
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1845 if pullop.remotebookmarks is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1846 pullop.stepsdone.add(b'request-bookmarks') |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1847 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1848 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1849 b'request-bookmarks' not in pullop.stepsdone |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1850 and pullop.remotebookmarks is None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1851 and not legacybookmark |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1852 and hasbinarybook |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1853 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1854 kwargs[b'bookmarks'] = True |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1855 bookmarksrequested = True |
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1856 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1857 if b'listkeys' in pullop.remotebundle2caps: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1858 if b'request-bookmarks' not in pullop.stepsdone: |
25444
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1859 # make sure to always includes bookmark data when migrating |
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1860 # `hg incoming --bundle` to using this function. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1861 pullop.stepsdone.add(b'request-bookmarks') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1862 kwargs.setdefault(b'listkeys', []).append(b'bookmarks') |
26690
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1863 |
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1864 # If this is a full pull / clone and the server supports the clone bundles |
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1865 # feature, tell the server whether we attempted a clone bundle. The |
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1866 # presence of this flag indicates the client supports clone bundles. This |
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1867 # will enable the server to treat clients that support clone bundles |
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1868 # differently from those that don't. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1869 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1870 pullop.remote.capable(b'clonebundles') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1871 and pullop.heads is None |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46977
diff
changeset
|
1872 and list(pullop.common) == [pullop.repo.nullid] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1873 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1874 kwargs[b'cbattempted'] = pullop.clonebundleattempted |
26690
704818fb170d
exchange: advertise if a clone bundle was attempted
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26689
diff
changeset
|
1875 |
26471
41dd7b2c7e15
exchange: add "streaming all changes" to bundle2 pulling
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26465
diff
changeset
|
1876 if streaming: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1877 pullop.repo.ui.status(_(b'streaming all changes\n')) |
26471
41dd7b2c7e15
exchange: add "streaming all changes" to bundle2 pulling
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26465
diff
changeset
|
1878 elif not pullop.fetch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1879 pullop.repo.ui.status(_(b"no changes found\n")) |
21258
71931b789424
exchange: fix bad indentation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21257
diff
changeset
|
1880 pullop.cgresult = 0 |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1881 else: |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46977
diff
changeset
|
1882 if pullop.heads is None and list(pullop.common) == [pullop.repo.nullid]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1883 pullop.repo.ui.status(_(b"requesting all changes\n")) |
22953
b1d694d3975e
obsolete: add exchange option
Durham Goode <durham@fb.com>
parents:
22937
diff
changeset
|
1884 if obsolete.isenabled(pullop.repo, obsolete.exchangeopt): |
26464
9a7fc6d48898
exchange: expose bundle2 capabilities on pulloperation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26462
diff
changeset
|
1885 remoteversions = bundle2.obsmarkersversion(pullop.remotebundle2caps) |
22354
a89add6c6b2f
bundle2: pull obsmarkers relevant to the pulled set through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22353
diff
changeset
|
1886 if obsolete.commonversion(remoteversions) is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1887 kwargs[b'obsmarkers'] = True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1888 pullop.stepsdone.add(b'obsmarkers') |
21159
024f38f6d5f6
bundle2: allow extensions to extend the getbundle request
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21158
diff
changeset
|
1889 _pullbundle2extraprepare(pullop, kwargs) |
37648
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1890 |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1891 remote_sidedata = bundle2.read_remote_wanted_sidedata(pullop.remote) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1892 if remote_sidedata: |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1893 kwargs[b'remote_sidedata'] = remote_sidedata |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
1894 |
37648
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1895 with pullop.remote.commandexecutor() as e: |
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1896 args = dict(kwargs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1897 args[b'source'] = b'pull' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1898 bundle = e.callcommand(b'getbundle', args).result() |
37648
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1899 |
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1900 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1901 op = bundle2.bundleoperation( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1902 pullop.repo, pullop.gettransaction, source=b'pull' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1903 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1904 op.modes[b'bookmarks'] = b'records' |
37648
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1905 bundle2.processbundle(pullop.repo, bundle, op=op) |
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1906 except bundle2.AbortFromPart as exc: |
46537
db9e33beb0fb
bundle2: print "error:abort" message to stderr instead of stdout
Martin von Zweigbergk <martinvonz@google.com>
parents:
45957
diff
changeset
|
1907 pullop.repo.ui.error(_(b'remote: abort: %s\n') % exc) |
46977
3f87d2af0bd6
errors: raise RemoteError in some places in exchange.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
46907
diff
changeset
|
1908 raise error.RemoteError(_(b'pull failed on remote'), hint=exc.hint) |
37648
8f3c6fb55369
exchange: use command executor for getbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37647
diff
changeset
|
1909 except error.BundleValueError as exc: |
46977
3f87d2af0bd6
errors: raise RemoteError in some places in exchange.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
46907
diff
changeset
|
1910 raise error.RemoteError(_(b'missing support for %s') % exc) |
21259
ab5040cd5749
bundle2: fix bundle2 pulling all revs on empty pulls
Durham Goode <durham@fb.com>
parents:
21258
diff
changeset
|
1911 |
ab5040cd5749
bundle2: fix bundle2 pulling all revs on empty pulls
Durham Goode <durham@fb.com>
parents:
21258
diff
changeset
|
1912 if pullop.fetch: |
33049
d765ad56081f
bundle: make combinechangegroupresults() take a bundleoperation
Martin von Zweigbergk <martinvonz@google.com>
parents:
33048
diff
changeset
|
1913 pullop.cgresult = bundle2.combinechangegroupresults(op) |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1914 |
21658
0696ca0a685b
pull: when remote supports it, pull phase data alongside changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21657
diff
changeset
|
1915 # processing phases change |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1916 for namespace, value in op.records[b'listkeys']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1917 if namespace == b'phases': |
21658
0696ca0a685b
pull: when remote supports it, pull phase data alongside changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21657
diff
changeset
|
1918 _pullapplyphases(pullop, value) |
0696ca0a685b
pull: when remote supports it, pull phase data alongside changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21657
diff
changeset
|
1919 |
22656
c9276945eba3
pull: retrieve bookmarks through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22655
diff
changeset
|
1920 # processing bookmark update |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1921 if bookmarksrequested: |
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1922 books = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1923 for record in op.records[b'bookmarks']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1924 books[record[b'bookmark']] = record[b"node"] |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1925 pullop.remotebookmarks = books |
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1926 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1927 for namespace, value in op.records[b'listkeys']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1928 if namespace == b'bookmarks': |
35277
44b8b5ad30eb
pull: retrieve bookmarks through the binary part when possible
Boris Feld <boris.feld@octobus.net>
parents:
35276
diff
changeset
|
1929 pullop.remotebookmarks = bookmod.unhexlifybookmarks(value) |
25444
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1930 |
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1931 # bookmark data were either already there or pulled in the bundle |
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1932 if pullop.remotebookmarks is not None: |
1d1fd5d44f57
pull: skip pulling remote bookmarks with bundle2 if a value already exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25443
diff
changeset
|
1933 _pullbookmarks(pullop) |
22656
c9276945eba3
pull: retrieve bookmarks through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22655
diff
changeset
|
1934 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1935 |
21159
024f38f6d5f6
bundle2: allow extensions to extend the getbundle request
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21158
diff
changeset
|
1936 def _pullbundle2extraprepare(pullop, kwargs): |
024f38f6d5f6
bundle2: allow extensions to extend the getbundle request
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21158
diff
changeset
|
1937 """hook function so that extensions can extend the getbundle call""" |
024f38f6d5f6
bundle2: allow extensions to extend the getbundle request
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21158
diff
changeset
|
1938 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1939 |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1940 def _pullchangeset(pullop): |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1941 """pull changeset from unbundle into the local repo""" |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1942 # We delay the open of the transaction as late as possible so we |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1943 # don't open transaction for nothing or you break future useful |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1944 # rollback call |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1945 if b'changegroup' in pullop.stepsdone: |
22653
d94f5bec9c8e
pull: perform the todostep inside functions handling old way of pulling
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22651
diff
changeset
|
1946 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1947 pullop.stepsdone.add(b'changegroup') |
20899
d62319f91cb7
pull: move the cgresult logic in _pullchangeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20898
diff
changeset
|
1948 if not pullop.fetch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1949 pullop.repo.ui.status(_(b"no changes found\n")) |
23217
2f12ac53b528
exchange: fix indentation in _pullchangeset
Mike Edgar <adgar@google.com>
parents:
23208
diff
changeset
|
1950 pullop.cgresult = 0 |
2f12ac53b528
exchange: fix indentation in _pullchangeset
Mike Edgar <adgar@google.com>
parents:
23208
diff
changeset
|
1951 return |
32948
af31d531dda0
changegroup: let callers pass in transaction to apply() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32945
diff
changeset
|
1952 tr = pullop.gettransaction() |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46977
diff
changeset
|
1953 if pullop.heads is None and list(pullop.common) == [pullop.repo.nullid]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1954 pullop.repo.ui.status(_(b"requesting all changes\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1955 elif pullop.heads is None and pullop.remote.capable(b'changegroupsubset'): |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1956 # issue1320, avoid a race if remote changed after discovery |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1957 pullop.heads = pullop.rheads |
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1958 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1959 if pullop.remote.capable(b'getbundle'): |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1960 # TODO: get bundlecaps from remote |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1961 cg = pullop.remote.getbundle( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1962 b'pull', common=pullop.common, heads=pullop.heads or pullop.rheads |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1963 ) |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1964 elif pullop.heads is None: |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37498
diff
changeset
|
1965 with pullop.remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1966 cg = e.callcommand( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1967 b'changegroup', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1968 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1969 b'nodes': pullop.fetch, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1970 b'source': b'pull', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45925
diff
changeset
|
1971 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1972 ).result() |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37498
diff
changeset
|
1973 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1974 elif not pullop.remote.capable(b'changegroupsubset'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1975 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1976 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1977 b"partial pull cannot be done because " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1978 b"other repository doesn't support " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1979 b"changegroupsubset." |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1980 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1981 ) |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1982 else: |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37498
diff
changeset
|
1983 with pullop.remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1984 cg = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1985 b'changegroupsubset', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1986 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1987 b'bases': pullop.fetch, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1988 b'heads': pullop.heads, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1989 b'source': b'pull', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1990 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1991 ).result() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1992 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1993 bundleop = bundle2.applybundle( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1994 pullop.repo, cg, tr, b'pull', pullop.remote.url() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1995 ) |
33052
2baef42a2881
bundle: make applybundle1() return a bundleoperation
Martin von Zweigbergk <martinvonz@google.com>
parents:
33051
diff
changeset
|
1996 pullop.cgresult = bundle2.combinechangegroupresults(bundleop) |
20489
7b5ec1c7e8e2
pull: move changeset pulling in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20488
diff
changeset
|
1997 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
1998 |
20486
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
1999 def _pullphase(pullop): |
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2000 # Get remote phases data from remote |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2001 if b'phases' in pullop.stepsdone: |
22653
d94f5bec9c8e
pull: perform the todostep inside functions handling old way of pulling
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22651
diff
changeset
|
2002 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2003 remotephases = listkeys(pullop.remote, b'phases') |
21654
ddf9a00c1239
pull: split remote phases retrieval from actual application
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21645
diff
changeset
|
2004 _pullapplyphases(pullop, remotephases) |
ddf9a00c1239
pull: split remote phases retrieval from actual application
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21645
diff
changeset
|
2005 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2006 |
21654
ddf9a00c1239
pull: split remote phases retrieval from actual application
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21645
diff
changeset
|
2007 def _pullapplyphases(pullop, remotephases): |
ddf9a00c1239
pull: split remote phases retrieval from actual application
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21645
diff
changeset
|
2008 """apply phase movement from observed remote state""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2009 if b'phases' in pullop.stepsdone: |
22937
92bf9abc4deb
pull: use `stepsdone` instead of `todosteps`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22936
diff
changeset
|
2010 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2011 pullop.stepsdone.add(b'phases') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2012 publishing = bool(remotephases.get(b'publishing', False)) |
20486
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2013 if remotephases and not publishing: |
30342
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30187
diff
changeset
|
2014 # remote is new and non-publishing |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2015 pheads, _dr = phases.analyzeremotephases( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2016 pullop.repo, pullop.pulledsubset, remotephases |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2017 ) |
22068
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2018 dheads = pullop.pulledsubset |
20486
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2019 else: |
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2020 # Remote is old or publishing all common changesets |
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2021 # should be seen as public |
22068
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2022 pheads = pullop.pulledsubset |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2023 dheads = [] |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2024 unfi = pullop.repo.unfiltered() |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2025 phase = unfi._phasecache.phase |
43611
4d8a4ecbb8b9
index: use `index.get_rev` in `exchange._pullapplyphases`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43610
diff
changeset
|
2026 rev = unfi.changelog.index.get_rev |
22068
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2027 public = phases.public |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2028 draft = phases.draft |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2029 |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2030 # exclude changesets already public locally and update the others |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2031 pheads = [pn for pn in pheads if phase(unfi, rev(pn)) > public] |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2032 if pheads: |
22069
616a455b02ca
phase: add a transaction argument to advanceboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22068
diff
changeset
|
2033 tr = pullop.gettransaction() |
616a455b02ca
phase: add a transaction argument to advanceboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22068
diff
changeset
|
2034 phases.advanceboundary(pullop.repo, tr, public, pheads) |
22068
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2035 |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2036 # exclude changesets already draft locally and update the others |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2037 dheads = [pn for pn in dheads if phase(unfi, rev(pn)) > draft] |
d34058dd3246
pull: pre-filter remote phases before moving local ones
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
2038 if dheads: |
22069
616a455b02ca
phase: add a transaction argument to advanceboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22068
diff
changeset
|
2039 tr = pullop.gettransaction() |
616a455b02ca
phase: add a transaction argument to advanceboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22068
diff
changeset
|
2040 phases.advanceboundary(pullop.repo, tr, draft, dheads) |
20486
0c469df6e914
pull: move phases synchronisation in its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20485
diff
changeset
|
2041 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2042 |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2043 def _pullbookmarks(pullop): |
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2044 """process the remote bookmark information to update the local one""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2045 if b'bookmarks' in pullop.stepsdone: |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2046 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2047 pullop.stepsdone.add(b'bookmarks') |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2048 repo = pullop.repo |
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2049 remotebookmarks = pullop.remotebookmarks |
48254
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48253
diff
changeset
|
2050 bookmarks_mode = None |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48253
diff
changeset
|
2051 if pullop.remote_path is not None: |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48253
diff
changeset
|
2052 bookmarks_mode = pullop.remote_path.bookmarks_mode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2053 bookmod.updatefromremote( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2054 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2055 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2056 remotebookmarks, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2057 pullop.remote.url(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2058 pullop.gettransaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2059 explicit=pullop.explicitbookmarks, |
48254
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48253
diff
changeset
|
2060 mode=bookmarks_mode, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2061 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2062 |
22654
02e0a574bcd3
pull: move bookmark pulling into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22653
diff
changeset
|
2063 |
20478
80628d4069be
push: feed pulloperation object to _pullobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20477
diff
changeset
|
2064 def _pullobsolete(pullop): |
20476
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2065 """utility function to pull obsolete markers from a remote |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2066 |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2067 The `gettransaction` is function that return the pull transaction, creating |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2068 one if necessary. We return the transaction to inform the calling code that |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2069 a new transaction have been created (when applicable). |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2070 |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2071 Exists mostly to allow overriding for experimentation purpose""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2072 if b'obsmarkers' in pullop.stepsdone: |
22653
d94f5bec9c8e
pull: perform the todostep inside functions handling old way of pulling
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22651
diff
changeset
|
2073 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2074 pullop.stepsdone.add(b'obsmarkers') |
20476
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2075 tr = None |
22953
b1d694d3975e
obsolete: add exchange option
Durham Goode <durham@fb.com>
parents:
22937
diff
changeset
|
2076 if obsolete.isenabled(pullop.repo, obsolete.exchangeopt): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2077 pullop.repo.ui.debug(b'fetching remote obsolete markers\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2078 remoteobs = listkeys(pullop.remote, b'obsolete') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2079 if b'dump0' in remoteobs: |
20478
80628d4069be
push: feed pulloperation object to _pullobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20477
diff
changeset
|
2080 tr = pullop.gettransaction() |
27558
b5b54825de6b
pull: make a single call to obsstore.add (issue5006)
Matt Mackall <mpm@selenic.com>
parents:
27523
diff
changeset
|
2081 markers = [] |
20476
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2082 for key in sorted(remoteobs, reverse=True): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2083 if key.startswith(b'dump'): |
32245
4462a981e8df
base85: proxy through util module
Yuya Nishihara <yuya@tcha.org>
parents:
32215
diff
changeset
|
2084 data = util.b85decode(remoteobs[key]) |
27558
b5b54825de6b
pull: make a single call to obsstore.add (issue5006)
Matt Mackall <mpm@selenic.com>
parents:
27523
diff
changeset
|
2085 version, newmarks = obsolete._readmarkers(data) |
b5b54825de6b
pull: make a single call to obsstore.add (issue5006)
Matt Mackall <mpm@selenic.com>
parents:
27523
diff
changeset
|
2086 markers += newmarks |
b5b54825de6b
pull: make a single call to obsstore.add (issue5006)
Matt Mackall <mpm@selenic.com>
parents:
27523
diff
changeset
|
2087 if markers: |
b5b54825de6b
pull: make a single call to obsstore.add (issue5006)
Matt Mackall <mpm@selenic.com>
parents:
27523
diff
changeset
|
2088 pullop.repo.obsstore.add(tr, markers) |
20478
80628d4069be
push: feed pulloperation object to _pullobsolete function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20477
diff
changeset
|
2089 pullop.repo.invalidatevolatilesets() |
20476
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2090 return tr |
1180c6ec5695
pull: move obsolescence marker exchange in the exchange module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20475
diff
changeset
|
2091 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2092 |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2093 def applynarrowacl(repo, kwargs): |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2094 """Apply narrow fetch access control. |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2095 |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2096 This massages the named arguments for getbundle wire protocol commands |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2097 so requested data is filtered through access control rules. |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2098 """ |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2099 ui = repo.ui |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2100 # TODO this assumes existence of HTTP and is a layering violation. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2101 username = ui.shortuser(ui.environ.get(b'REMOTE_USER') or ui.username()) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2102 user_includes = ui.configlist( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2103 _NARROWACL_SECTION, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2104 username + b'.includes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2105 ui.configlist(_NARROWACL_SECTION, b'default.includes'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2106 ) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2107 user_excludes = ui.configlist( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2108 _NARROWACL_SECTION, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2109 username + b'.excludes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 ui.configlist(_NARROWACL_SECTION, b'default.excludes'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2111 ) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2112 if not user_includes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2113 raise error.Abort( |
43789
27c6d6f53d46
exchange: eliminate some bytes.format() calls
Matt Harbison <matt_harbison@yahoo.com>
parents:
43705
diff
changeset
|
2114 _(b"%s configuration for user %s is empty") |
27c6d6f53d46
exchange: eliminate some bytes.format() calls
Matt Harbison <matt_harbison@yahoo.com>
parents:
43705
diff
changeset
|
2115 % (_NARROWACL_SECTION, username) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2116 ) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2117 |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2118 user_includes = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2119 b'path:.' if p == b'*' else b'path:' + p for p in user_includes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2120 ] |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2121 user_excludes = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2122 b'path:.' if p == b'*' else b'path:' + p for p in user_excludes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2123 ] |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2124 |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2125 req_includes = set(kwargs.get('includepats', [])) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2126 req_excludes = set(kwargs.get('excludepats', [])) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2127 |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2128 req_includes, req_excludes, invalid_includes = narrowspec.restrictpatterns( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2129 req_includes, req_excludes, user_includes, user_excludes |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2130 ) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2131 |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2132 if invalid_includes: |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2133 raise error.Abort( |
43789
27c6d6f53d46
exchange: eliminate some bytes.format() calls
Matt Harbison <matt_harbison@yahoo.com>
parents:
43705
diff
changeset
|
2134 _(b"The following includes are not accessible for %s: %s") |
43839
ea97cd64c500
exchange: fix an attempt to format a list into bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
43813
diff
changeset
|
2135 % (username, stringutil.pprint(invalid_includes)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2136 ) |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2137 |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2138 new_args = {} |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2139 new_args.update(kwargs) |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2140 new_args['narrow'] = True |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2141 new_args['narrow_acl'] = True |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2142 new_args['includepats'] = req_includes |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2143 if req_excludes: |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2144 new_args['excludepats'] = req_excludes |
38847
98df52d5042c
exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38832
diff
changeset
|
2145 |
38830
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2146 return new_args |
3e7387337a3c
exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38829
diff
changeset
|
2147 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2148 |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2149 def _computeellipsis(repo, common, heads, known, match, depth=None): |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2150 """Compute the shape of a narrowed DAG. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2151 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2152 Args: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2153 repo: The repository we're transferring. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2154 common: The roots of the DAG range we're transferring. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2155 May be just [nullid], which means all ancestors of heads. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2156 heads: The heads of the DAG range we're transferring. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2157 match: The narrowmatcher that allows us to identify relevant changes. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2158 depth: If not None, only consider nodes to be full nodes if they are at |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2159 most depth changesets away from one of heads. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2160 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2161 Returns: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2162 A tuple of (visitnodes, relevant_nodes, ellipsisroots) where: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2163 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2164 visitnodes: The list of nodes (either full or ellipsis) which |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2165 need to be sent to the client. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2166 relevant_nodes: The set of changelog nodes which change a file inside |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2167 the narrowspec. The client needs these as non-ellipsis nodes. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2168 ellipsisroots: A dict of {rev: parents} that is used in |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2169 narrowchangegroup to produce ellipsis nodes with the |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2170 correct parents. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2171 """ |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2172 cl = repo.changelog |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2173 mfl = repo.manifestlog |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2174 |
39191
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2175 clrev = cl.rev |
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2176 |
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2177 commonrevs = {clrev(n) for n in common} | {nullrev} |
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2178 headsrevs = {clrev(n) for n in heads} |
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2179 |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2180 if depth: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2181 revdepth = {h: 0 for h in headsrevs} |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2182 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2183 ellipsisheads = collections.defaultdict(set) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2184 ellipsisroots = collections.defaultdict(set) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2185 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2186 def addroot(head, curchange): |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2187 """Add a root to an ellipsis head, splitting heads with 3 roots.""" |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2188 ellipsisroots[head].add(curchange) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2189 # Recursively split ellipsis heads with 3 roots by finding the |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2190 # roots' youngest common descendant which is an elided merge commit. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2191 # That descendant takes 2 of the 3 roots as its own, and becomes a |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2192 # root of the head. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2193 while len(ellipsisroots[head]) > 2: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2194 child, roots = splithead(head) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2195 splitroots(head, child, roots) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2196 head = child # Recurse in case we just added a 3rd root |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2197 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2198 def splitroots(head, child, roots): |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2199 ellipsisroots[head].difference_update(roots) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2200 ellipsisroots[head].add(child) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2201 ellipsisroots[child].update(roots) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2202 ellipsisroots[child].discard(child) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2203 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2204 def splithead(head): |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2205 r1, r2, r3 = sorted(ellipsisroots[head]) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2206 for nr1, nr2 in ((r2, r3), (r1, r3), (r1, r2)): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2207 mid = repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2208 b'sort(merge() & %d::%d & %d::%d, -rev)', nr1, head, nr2, head |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2209 ) |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2210 for j in mid: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2211 if j == nr2: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2212 return nr2, (nr1, nr2) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2213 if j not in ellipsisroots or len(ellipsisroots[j]) < 2: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2214 return j, (nr1, nr2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2215 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2216 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2217 b'Failed to split up ellipsis node! head: %d, ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2218 b'roots: %d %d %d' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2219 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2220 % (head, r1, r2, r3) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2221 ) |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2222 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2223 missing = list(cl.findmissingrevs(common=commonrevs, heads=headsrevs)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2224 visit = reversed(missing) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2225 relevant_nodes = set() |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2226 visitnodes = [cl.node(m) for m in missing] |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2227 required = set(headsrevs) | known |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2228 for rev in visit: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2229 clrev = cl.changelogrevision(rev) |
39191
b0c73866c9fb
exchange: don't use dagutil
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38874
diff
changeset
|
2230 ps = [prev for prev in cl.parentrevs(rev) if prev != nullrev] |
38831
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2231 if depth is not None: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2232 curdepth = revdepth[rev] |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2233 for p in ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2234 revdepth[p] = min(curdepth + 1, revdepth.get(p, depth + 1)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2235 needed = False |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2236 shallow_enough = depth is None or revdepth[rev] <= depth |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2237 if shallow_enough: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2238 curmf = mfl[clrev.manifest].read() |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2239 if ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2240 # We choose to not trust the changed files list in |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2241 # changesets because it's not always correct. TODO: could |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2242 # we trust it for the non-merge case? |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2243 p1mf = mfl[cl.changelogrevision(ps[0]).manifest].read() |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2244 needed = bool(curmf.diff(p1mf, match)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2245 if not needed and len(ps) > 1: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2246 # For merge changes, the list of changed files is not |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2247 # helpful, since we need to emit the merge if a file |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2248 # in the narrow spec has changed on either side of the |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2249 # merge. As a result, we do a manifest diff to check. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2250 p2mf = mfl[cl.changelogrevision(ps[1]).manifest].read() |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2251 needed = bool(curmf.diff(p2mf, match)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2252 else: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2253 # For a root node, we need to include the node if any |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2254 # files in the node match the narrowspec. |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2255 needed = any(curmf.walk(match)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2256 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2257 if needed: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2258 for head in ellipsisheads[rev]: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2259 addroot(head, rev) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2260 for p in ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2261 required.add(p) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2262 relevant_nodes.add(cl.node(rev)) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2263 else: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2264 if not ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2265 ps = [nullrev] |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2266 if rev in required: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2267 for head in ellipsisheads[rev]: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2268 addroot(head, rev) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2269 for p in ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2270 ellipsisheads[p].add(rev) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2271 else: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2272 for p in ps: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2273 ellipsisheads[p] |= ellipsisheads[rev] |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2274 |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2275 # add common changesets as roots of their reachable ellipsis heads |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2276 for c in commonrevs: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2277 for head in ellipsisheads[c]: |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2278 addroot(head, c) |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2279 return visitnodes, relevant_nodes, ellipsisroots |
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38830
diff
changeset
|
2280 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2281 |
35783
c97639ad6874
bundle2: specify what capabilities will be used for
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35765
diff
changeset
|
2282 def caps20to10(repo, role): |
21645
aed14bb165f3
bundle2: introduce a ``caps20to10`` function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21644
diff
changeset
|
2283 """return a set with appropriate options to use bundle20 during getbundle""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2284 caps = {b'HG20'} |
35783
c97639ad6874
bundle2: specify what capabilities will be used for
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35765
diff
changeset
|
2285 capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo, role=role)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2286 caps.add(b'bundle2=' + urlreq.quote(capsblob)) |
21645
aed14bb165f3
bundle2: introduce a ``caps20to10`` function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21644
diff
changeset
|
2287 return caps |
aed14bb165f3
bundle2: introduce a ``caps20to10`` function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21644
diff
changeset
|
2288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2289 |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2290 # List of names of steps to perform for a bundle2 for getbundle, order matters. |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2291 getbundle2partsorder = [] |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2292 |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2293 # Mapping between step name and function |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2294 # |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2295 # This exists to help extensions wrap steps if necessary |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2296 getbundle2partsmapping = {} |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2297 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2298 |
24732
8f70b529cb0c
bundle2: add an 'idx' argument to the 'getbundle2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24731
diff
changeset
|
2299 def getbundle2partsgenerator(stepname, idx=None): |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2300 """decorator for function generating bundle2 part for getbundle |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2301 |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2302 The function is added to the step -> function mapping and appended to the |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2303 list of steps. Beware that decorated functions will be added in order |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2304 (this may matter). |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2305 |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2306 You can only use this decorator for new steps, if you want to wrap a step |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2307 from an extension, attack the getbundle2partsmapping dictionary directly.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2308 |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2309 def dec(func): |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2310 assert stepname not in getbundle2partsmapping |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2311 getbundle2partsmapping[stepname] = func |
24732
8f70b529cb0c
bundle2: add an 'idx' argument to the 'getbundle2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24731
diff
changeset
|
2312 if idx is None: |
8f70b529cb0c
bundle2: add an 'idx' argument to the 'getbundle2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24731
diff
changeset
|
2313 getbundle2partsorder.append(stepname) |
8f70b529cb0c
bundle2: add an 'idx' argument to the 'getbundle2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24731
diff
changeset
|
2314 else: |
8f70b529cb0c
bundle2: add an 'idx' argument to the 'getbundle2partsgenerator'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24731
diff
changeset
|
2315 getbundle2partsorder.insert(idx, stepname) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2316 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2317 |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2318 return dec |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2319 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2320 |
27244
709977a4fc9d
exchange: standalone function to determine if bundle2 is requested
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26935
diff
changeset
|
2321 def bundle2requested(bundlecaps): |
709977a4fc9d
exchange: standalone function to determine if bundle2 is requested
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26935
diff
changeset
|
2322 if bundlecaps is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2323 return any(cap.startswith(b'HG2') for cap in bundlecaps) |
27244
709977a4fc9d
exchange: standalone function to determine if bundle2 is requested
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26935
diff
changeset
|
2324 return False |
709977a4fc9d
exchange: standalone function to determine if bundle2 is requested
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26935
diff
changeset
|
2325 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2326 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2327 def getbundlechunks( |
46724
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2328 repo, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2329 source, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2330 heads=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2331 common=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2332 bundlecaps=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2333 remote_sidedata=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2334 **kwargs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2335 ): |
30187
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30068
diff
changeset
|
2336 """Return chunks constituting a bundle's raw data. |
20954
dba91f8060eb
bundle2: add an exchange.getbundle function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
2337 |
24686
e0e28e910fa3
bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24650
diff
changeset
|
2338 Could be a bundle HG10 or a bundle HG20 depending on bundlecaps |
30187
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30068
diff
changeset
|
2339 passed. |
20954
dba91f8060eb
bundle2: add an exchange.getbundle function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
2340 |
35785
ba15580e53d5
exchange: return bundle info from getbundlechunks() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35784
diff
changeset
|
2341 Returns a 2-tuple of a dict with metadata about the generated bundle |
ba15580e53d5
exchange: return bundle info from getbundlechunks() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35784
diff
changeset
|
2342 and an iterator over raw chunks (of varying sizes). |
20954
dba91f8060eb
bundle2: add an exchange.getbundle function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
2343 """ |
33032
4e6dc34b5d7a
py3: convert kwargs keys' back to bytes using pycompat.byteskwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33007
diff
changeset
|
2344 kwargs = pycompat.byteskwargs(kwargs) |
35785
ba15580e53d5
exchange: return bundle info from getbundlechunks() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35784
diff
changeset
|
2345 info = {} |
27244
709977a4fc9d
exchange: standalone function to determine if bundle2 is requested
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26935
diff
changeset
|
2346 usebundle2 = bundle2requested(bundlecaps) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2347 # bundle10 case |
24649
2d15c59a001b
bundle2: detect bundle2 stream/request on /HG2./ instead of /HG2Y/
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24641
diff
changeset
|
2348 if not usebundle2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2349 if bundlecaps and not kwargs.get(b'cg', True): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2350 raise ValueError( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2351 _(b'request for bundle10 must include changegroup') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2352 ) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2353 |
21656
36200dc6b3bd
getbundle: raise error if extra arguments are provided for bundle10
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21654
diff
changeset
|
2354 if kwargs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2355 raise ValueError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2356 _(b'unsupported getbundle arguments: %s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2357 % b', '.join(sorted(kwargs.keys())) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2358 ) |
29819
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
2359 outgoing = _computeoutgoing(repo, heads, common) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2360 info[b'bundleversion'] = 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2361 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2362 info, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2363 changegroup.makestream( |
46724
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2364 repo, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2365 outgoing, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2366 b'01', |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2367 source, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2368 bundlecaps=bundlecaps, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2369 remote_sidedata=remote_sidedata, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2370 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2371 ) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2372 |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2373 # bundle20 case |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2374 info[b'bundleversion'] = 2 |
21143
5bb5d4ba14e5
bundle2: transmit capabilities to getbundle during pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21142
diff
changeset
|
2375 b2caps = {} |
5bb5d4ba14e5
bundle2: transmit capabilities to getbundle during pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21142
diff
changeset
|
2376 for bcaps in bundlecaps: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2377 if bcaps.startswith(b'bundle2='): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2378 blob = urlreq.unquote(bcaps[len(b'bundle2=') :]) |
21143
5bb5d4ba14e5
bundle2: transmit capabilities to getbundle during pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21142
diff
changeset
|
2379 b2caps.update(bundle2.decodecaps(blob)) |
5bb5d4ba14e5
bundle2: transmit capabilities to getbundle during pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21142
diff
changeset
|
2380 bundler = bundle2.bundle20(repo.ui, b2caps) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2381 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2382 kwargs[b'heads'] = heads |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2383 kwargs[b'common'] = common |
23218
0e78ea8e592a
exchange: prepare kwargs for bundle2 part generation exactly once
Mike Edgar <adgar@google.com>
parents:
23217
diff
changeset
|
2384 |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2385 for name in getbundle2partsorder: |
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2386 func = getbundle2partsmapping[name] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2387 func( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2388 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2389 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2390 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2391 bundlecaps=bundlecaps, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2392 b2caps=b2caps, |
46724
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2393 remote_sidedata=remote_sidedata, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2394 **pycompat.strkwargs(kwargs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2395 ) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2396 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2397 info[b'prefercompressed'] = bundler.prefercompressed |
35787
a84dbc87dae9
exchange: send bundle2 stream clones uncompressed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35785
diff
changeset
|
2398 |
35785
ba15580e53d5
exchange: return bundle info from getbundlechunks() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35784
diff
changeset
|
2399 return info, bundler.getchunks() |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2400 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2401 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2402 @getbundle2partsgenerator(b'stream2') |
37169
6f467adf9f05
bundle: add the possibility to bundle a stream v2 part
Boris Feld <boris.feld@octobus.net>
parents:
37167
diff
changeset
|
2403 def _getbundlestream2(bundler, repo, *args, **kwargs): |
6f467adf9f05
bundle: add the possibility to bundle a stream v2 part
Boris Feld <boris.feld@octobus.net>
parents:
37167
diff
changeset
|
2404 return bundle2.addpartbundlestream2(bundler, repo, **kwargs) |
35759
c24dad55ac19
bundle2: add support for a 'stream' parameter to 'getbundle'
Boris Feld <boris.feld@octobus.net>
parents:
35578
diff
changeset
|
2405 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2406 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2407 @getbundle2partsgenerator(b'changegroup') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2408 def _getbundlechangegrouppart( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2409 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2410 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2411 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2412 bundlecaps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2413 b2caps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2414 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2415 common=None, |
46724
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2416 remote_sidedata=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2417 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2418 ): |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2419 """add a changegroup part to the requested bundle""" |
43790
44b605638918
exchange: guard against method invocation on `b2caps=None` args
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
2420 if not kwargs.get('cg', True) or not b2caps: |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2421 return |
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2422 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2423 version = b'01' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2424 cgversions = b2caps.get(b'changegroup') |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2425 if cgversions: # 3.1 and 3.2 ship with an empty value |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2426 cgversions = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2427 v |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2428 for v in cgversions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2429 if v in changegroup.supportedoutgoingversions(repo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2430 ] |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2431 if not cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2432 raise error.Abort(_(b'no common changegroup version')) |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2433 version = max(cgversions) |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2434 |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2435 outgoing = _computeoutgoing(repo, heads, common) |
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2436 if not outgoing.missing: |
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2437 return |
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2438 |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2439 if kwargs.get('narrow', False): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2440 include = sorted(filter(bool, kwargs.get('includepats', []))) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2441 exclude = sorted(filter(bool, kwargs.get('excludepats', []))) |
40344
2c5835b4246b
narrow: when widening, don't include manifests the client already has
Martin von Zweigbergk <martinvonz@google.com>
parents:
40337
diff
changeset
|
2442 matcher = narrowspec.match(repo.root, include=include, exclude=exclude) |
38848
d99083996398
exchange: move simple narrow changegroup generation from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38847
diff
changeset
|
2443 else: |
40344
2c5835b4246b
narrow: when widening, don't include manifests the client already has
Martin von Zweigbergk <martinvonz@google.com>
parents:
40337
diff
changeset
|
2444 matcher = None |
38848
d99083996398
exchange: move simple narrow changegroup generation from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38847
diff
changeset
|
2445 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2446 cgstream = changegroup.makestream( |
46724
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2447 repo, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2448 outgoing, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2449 version, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2450 source, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2451 bundlecaps=bundlecaps, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2452 matcher=matcher, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46537
diff
changeset
|
2453 remote_sidedata=remote_sidedata, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2454 ) |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2455 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2456 part = bundler.newpart(b'changegroup', data=cgstream) |
38832
afb442f58cbf
exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38831
diff
changeset
|
2457 if cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2458 part.addparam(b'version', version) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2459 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2460 part.addparam(b'nbchanges', b'%d' % len(outgoing.missing), mandatory=False) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2461 |
45558
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
2462 if scmutil.istreemanifest(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2463 part.addparam(b'treemanifest', b'1') |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2464 |
47237
19d4802cb304
sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47055
diff
changeset
|
2465 if repository.REPO_FEATURE_SIDE_DATA in repo.features: |
43131
c17a63eb5d4c
sidedata: apply basic but tight security around exchange
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
2466 part.addparam(b'exp-sidedata', b'1') |
46726
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
2467 sidedata = bundle2.format_remote_wanted_sidedata(repo) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46724
diff
changeset
|
2468 part.addparam(b'exp-wanted-sidedata', sidedata) |
43131
c17a63eb5d4c
sidedata: apply basic but tight security around exchange
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
2469 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2470 if ( |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2471 kwargs.get('narrow', False) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2472 and kwargs.get('narrow_acl', False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2473 and (include or exclude) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2474 ): |
42158
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42057
diff
changeset
|
2475 # this is mandatory because otherwise ACL clients won't work |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2476 narrowspecpart = bundler.newpart(b'Narrow:responsespec') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2477 narrowspecpart.data = b'%s\0%s' % ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2478 b'\n'.join(include), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2479 b'\n'.join(exclude), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2480 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2481 |
38848
d99083996398
exchange: move simple narrow changegroup generation from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38847
diff
changeset
|
2482 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2483 @getbundle2partsgenerator(b'bookmarks') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2484 def _getbundlebookmarkpart( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2485 bundler, repo, source, bundlecaps=None, b2caps=None, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2486 ): |
35276
cb4dcd7fabe7
getbundle: add support for 'bookmarks' boolean argument
Boris Feld <boris.feld@octobus.net>
parents:
35273
diff
changeset
|
2487 """add a bookmark part to the requested bundle""" |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2488 if not kwargs.get('bookmarks', False): |
35276
cb4dcd7fabe7
getbundle: add support for 'bookmarks' boolean argument
Boris Feld <boris.feld@octobus.net>
parents:
35273
diff
changeset
|
2489 return |
43790
44b605638918
exchange: guard against method invocation on `b2caps=None` args
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
2490 if not b2caps or b'bookmarks' not in b2caps: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2491 raise error.Abort(_(b'no common bookmarks exchange method')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2492 books = bookmod.listbinbookmarks(repo) |
46793
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46726
diff
changeset
|
2493 data = bookmod.binaryencode(repo, books) |
35276
cb4dcd7fabe7
getbundle: add support for 'bookmarks' boolean argument
Boris Feld <boris.feld@octobus.net>
parents:
35273
diff
changeset
|
2494 if data: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2495 bundler.newpart(b'bookmarks', data=data) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2496 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2497 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2498 @getbundle2partsgenerator(b'listkeys') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2499 def _getbundlelistkeysparts( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2500 bundler, repo, source, bundlecaps=None, b2caps=None, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2501 ): |
22542
6b180a0c703e
bundle2: separate bundle10 and bundle2 cases in getbundle()
Mike Hommey <mh@glandium.org>
parents:
22541
diff
changeset
|
2502 """add parts containing listkeys namespaces to the requested bundle""" |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2503 listkeys = kwargs.get('listkeys', ()) |
21657
0ff44e06275d
getbundle: support of listkeys argument when bundle2 is used
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21656
diff
changeset
|
2504 for namespace in listkeys: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2505 part = bundler.newpart(b'listkeys') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2506 part.addparam(b'namespace', namespace) |
21657
0ff44e06275d
getbundle: support of listkeys argument when bundle2 is used
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21656
diff
changeset
|
2507 keys = repo.listkeys(namespace).items() |
0ff44e06275d
getbundle: support of listkeys argument when bundle2 is used
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21656
diff
changeset
|
2508 part.data = pushkey.encodekeys(keys) |
20967
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2509 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2510 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2511 @getbundle2partsgenerator(b'obsmarkers') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2512 def _getbundleobsmarkerpart( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2513 bundler, repo, source, bundlecaps=None, b2caps=None, heads=None, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2514 ): |
22541
4e1a80c022a4
bundle2: pass b2caps down to functions adding bundle2 parts for getbundle
Mike Hommey <mh@glandium.org>
parents:
22390
diff
changeset
|
2515 """add an obsolescence markers part to the requested bundle""" |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2516 if kwargs.get('obsmarkers', False): |
22353
47e3420ae889
getbundle: add `obsmarkers` argument to getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22352
diff
changeset
|
2517 if heads is None: |
47e3420ae889
getbundle: add `obsmarkers` argument to getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22352
diff
changeset
|
2518 heads = repo.heads() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2519 subset = [c.node() for c in repo.set(b'::%ln', heads)] |
22353
47e3420ae889
getbundle: add `obsmarkers` argument to getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22352
diff
changeset
|
2520 markers = repo.obsstore.relevantmarkers(subset) |
43426
e513e87b0476
py3: fix sorting of obsolete markers in obsutil (issue6217)
Denis Laxalde <denis@laxalde.org>
parents:
43278
diff
changeset
|
2521 markers = obsutil.sortedmarkers(markers) |
32548
e70d6dbde713
bundle2: move function building obsmarker-part in the bundle2 module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32331
diff
changeset
|
2522 bundle2.buildobsmarkerspart(bundler, markers) |
22353
47e3420ae889
getbundle: add `obsmarkers` argument to getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22352
diff
changeset
|
2523 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2524 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2525 @getbundle2partsgenerator(b'phases') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2526 def _getbundlephasespart( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2527 bundler, repo, source, bundlecaps=None, b2caps=None, heads=None, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2528 ): |
34329
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2529 """add phase heads part to the requested bundle""" |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2530 if kwargs.get('phases', False): |
43813
0f6782df1100
exchange: replace a "not x in ys" by more Pythonic "x not in ys"
Martin von Zweigbergk <martinvonz@google.com>
parents:
43790
diff
changeset
|
2531 if not b2caps or b'heads' not in b2caps.get(b'phases'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2532 raise error.Abort(_(b'no common phases exchange method')) |
34329
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2533 if heads is None: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2534 heads = repo.heads() |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2535 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2536 headsbyphase = collections.defaultdict(set) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2537 if repo.publishing(): |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2538 headsbyphase[phases.public] = heads |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2539 else: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2540 # find the appropriate heads to move |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2541 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2542 phase = repo._phasecache.phase |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2543 node = repo.changelog.node |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2544 rev = repo.changelog.rev |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2545 for h in heads: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2546 headsbyphase[phase(repo, rev(h))].add(h) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2547 seenphases = list(headsbyphase.keys()) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2548 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2549 # We do not handle anything but public and draft phase for now) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2550 if seenphases: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2551 assert max(seenphases) <= phases.draft |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2552 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2553 # if client is pulling non-public changesets, we need to find |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2554 # intermediate public heads. |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2555 draftheads = headsbyphase.get(phases.draft, set()) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2556 if draftheads: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2557 publicheads = headsbyphase.get(phases.public, set()) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2558 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2559 revset = b'heads(only(%ln, %ln) and public())' |
34329
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2560 extraheads = repo.revs(revset, draftheads, publicheads) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2561 for r in extraheads: |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2562 headsbyphase[phases.public].add(node(r)) |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2563 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2564 # transform data in a format used by the encoding function |
45117
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
2565 phasemapping = { |
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
2566 phase: sorted(headsbyphase[phase]) for phase in phases.allphases |
b1e51ef4e536
phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de>
parents:
45063
diff
changeset
|
2567 } |
34329
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2568 |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2569 # generate the actual part |
10e162bb9bf5
pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net>
parents:
34324
diff
changeset
|
2570 phasedata = phases.binaryencode(phasemapping) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2571 bundler.newpart(b'phase-heads', data=phasedata) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2572 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2573 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2574 @getbundle2partsgenerator(b'hgtagsfnodes') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2575 def _getbundletagsfnodes( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2576 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2577 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2578 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2579 bundlecaps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2580 b2caps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2581 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2582 common=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2583 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2584 ): |
25402
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2585 """Transfer the .hgtags filenodes mapping. |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2586 |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2587 Only values for heads in this bundle will be transferred. |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2588 |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2589 The part data consists of pairs of 20 byte changeset node and .hgtags |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2590 filenodes raw values. |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2591 """ |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2592 # Don't send unless: |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2593 # - changeset are being exchanged, |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2594 # - the client supports it. |
43790
44b605638918
exchange: guard against method invocation on `b2caps=None` args
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
2595 if not b2caps or not (kwargs.get('cg', True) and b'hgtagsfnodes' in b2caps): |
25402
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2596 return |
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2597 |
29819
8d226db31f20
computeoutgoing: move the function from 'changegroup' to 'exchange'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29818
diff
changeset
|
2598 outgoing = _computeoutgoing(repo, heads, common) |
32262
6068712cbf03
bundle2: move tagsfnodecache generation in a generic function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32245
diff
changeset
|
2599 bundle2.addparttagsfnodescache(repo, bundler, outgoing) |
25402
0c2ded041d10
exchange: support transferring .hgtags fnodes mapping
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25369
diff
changeset
|
2600 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2601 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2602 @getbundle2partsgenerator(b'cache:rev-branch-cache') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2603 def _getbundlerevbranchcache( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2604 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2605 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2606 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2607 bundlecaps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2608 b2caps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2609 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2610 common=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2611 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2612 ): |
36972
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2613 """Transfer the rev-branch-cache mapping |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2614 |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2615 The payload is a series of data related to each branch |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2616 |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2617 1) branch name length |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2618 2) number of open heads |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2619 3) number of closed heads |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2620 4) open heads nodes |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2621 5) closed heads nodes |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2622 """ |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2623 # Don't send unless: |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2624 # - changeset are being exchanged, |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2625 # - the client supports it. |
38829
9b64b73d702b
exchange: move disabling of rev-branch-cache bundle part out of narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38615
diff
changeset
|
2626 # - narrow bundle isn't in play (not currently compatible). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2627 if ( |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2628 not kwargs.get('cg', True) |
43790
44b605638918
exchange: guard against method invocation on `b2caps=None` args
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
2629 or not b2caps |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2630 or b'rev-branch-cache' not in b2caps |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43278
diff
changeset
|
2631 or kwargs.get('narrow', False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2632 or repo.ui.has_section(_NARROWACL_SECTION) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2633 ): |
36972
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2634 return |
38829
9b64b73d702b
exchange: move disabling of rev-branch-cache bundle part out of narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38615
diff
changeset
|
2635 |
36972
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2636 outgoing = _computeoutgoing(repo, heads, common) |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2637 bundle2.addpartrevbranchcache(repo, bundler, outgoing) |
c0e90df1ab1e
revbranchcache: add the necessary bit to send 'rbc' data over bundle2
Boris Feld <boris.feld@octobus.net>
parents:
36944
diff
changeset
|
2638 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2639 |
20967
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2640 def check_heads(repo, their_heads, context): |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2641 """check if the heads of a repo have been modified |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2642 |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2643 Used by peer for unbundling. |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2644 """ |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2645 heads = repo.heads() |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43919
diff
changeset
|
2646 heads_hash = hashutil.sha1(b''.join(sorted(heads))).digest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2647 if not ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2648 their_heads == [b'force'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2649 or their_heads == heads |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2650 or their_heads == [b'hashed', heads_hash] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2651 ): |
20967
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2652 # someone else committed/pushed/unbundled while we |
984850270acb
unbundle: extract checkheads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20956
diff
changeset
|
2653 # were transferring data |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2654 raise error.PushRaced( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
2655 b'repository changed while %s - please try again' % context |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2656 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2657 |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2658 |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2659 def unbundle(repo, cg, heads, source, url): |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2660 """Apply a bundle to a repo. |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2661 |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2662 this function makes sure the repo is locked during the application and have |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
21012
diff
changeset
|
2663 mechanism to check that no push race occurred between the creation of the |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2664 bundle and its application. |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2665 |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2666 If the push was raced as PushRaced exception is raised.""" |
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2667 r = 0 |
21061
62d35f251c60
bundle2: allow using bundle2 for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
2668 # need a transaction when processing a bundle2 stream |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2669 # [wlock, lock, tr] - needs to be an array so nested functions can modify it |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2670 lockandtr = [None, None, None] |
24847
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2671 recordout = None |
24878
e530cde6d115
bundle2: disable ouput capture unless we use http (issue4613 issue4615)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24851
diff
changeset
|
2672 # quick fix for output mismatch with bundle2 in 3.4 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2673 captureoutput = repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2674 b'experimental', b'bundle2-output-capture' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2675 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2676 if url.startswith(b'remote:http:') or url.startswith(b'remote:https:'): |
24878
e530cde6d115
bundle2: disable ouput capture unless we use http (issue4613 issue4615)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24851
diff
changeset
|
2677 captureoutput = True |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2678 try: |
30902
847f06179f60
unbundle: add a small comment to clarify the 'check_heads' call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30685
diff
changeset
|
2679 # note: outside bundle1, 'heads' is expected to be empty and this |
847f06179f60
unbundle: add a small comment to clarify the 'check_heads' call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30685
diff
changeset
|
2680 # 'check_heads' call wil be a no-op |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2681 check_heads(repo, heads, b'uploading changes') |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2682 # push can proceed |
32909
7e2eb964a561
exchange: switch to usual way of testing for bundle2-ness
Martin von Zweigbergk <martinvonz@google.com>
parents:
32863
diff
changeset
|
2683 if not isinstance(cg, bundle2.unbundle20): |
30904
c5bee6aa4971
unbundle: swap conditional branches for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30903
diff
changeset
|
2684 # legacy case: bundle1 (changegroup 01) |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
2685 txnname = b"\n".join([source, urlutil.hidepassword(url)]) |
32948
af31d531dda0
changegroup: let callers pass in transaction to apply() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32945
diff
changeset
|
2686 with repo.lock(), repo.transaction(txnname) as tr: |
33055
18c2489ac96d
bundle: make applybundle() delegate v1 bundles to applybundle1()
Martin von Zweigbergk <martinvonz@google.com>
parents:
33052
diff
changeset
|
2687 op = bundle2.applybundle(repo, cg, tr, source, url) |
33052
2baef42a2881
bundle: make applybundle1() return a bundleoperation
Martin von Zweigbergk <martinvonz@google.com>
parents:
33051
diff
changeset
|
2688 r = bundle2.combinechangegroupresults(op) |
30904
c5bee6aa4971
unbundle: swap conditional branches for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30903
diff
changeset
|
2689 else: |
24795
f9aa4cb8f2dd
bundle2: store the salvaged output on the exception object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24754
diff
changeset
|
2690 r = None |
21187
bcfd44abad93
bundle2: gracefully handle hook abort
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21184
diff
changeset
|
2691 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2692 |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2693 def gettransaction(): |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2694 if not lockandtr[2]: |
42348
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
2695 if not bookmod.bookmarksinstore(repo): |
5d4ec64a6fcb
exchange: don't take wlock if bookmarks are stored in .hg/store/
Martin von Zweigbergk <martinvonz@google.com>
parents:
42158
diff
changeset
|
2696 lockandtr[0] = repo.wlock() |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2697 lockandtr[1] = repo.lock() |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2698 lockandtr[2] = repo.transaction(source) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2699 lockandtr[2].hookargs[b'source'] = source |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2700 lockandtr[2].hookargs[b'url'] = url |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2701 lockandtr[2].hookargs[b'bundle2'] = b'1' |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2702 return lockandtr[2] |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2703 |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2704 # Do greedy locking by default until we're satisfied with lazy |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2705 # locking. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2706 if not repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2707 b'experimental', b'bundle2lazylocking' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2708 ): |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2709 gettransaction() |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2710 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2711 op = bundle2.bundleoperation( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2712 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2713 gettransaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2714 captureoutput=captureoutput, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2715 source=b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2716 ) |
24851
df0ce98c882f
bundle2: also save output when error happens during part processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24850
diff
changeset
|
2717 try: |
25896
6805a4f76cda
exchange: fix dead assignment
Martin von Zweigbergk <martinvonz@google.com>
parents:
25895
diff
changeset
|
2718 op = bundle2.processbundle(repo, cg, op=op) |
24851
df0ce98c882f
bundle2: also save output when error happens during part processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24850
diff
changeset
|
2719 finally: |
df0ce98c882f
bundle2: also save output when error happens during part processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24850
diff
changeset
|
2720 r = op.reply |
24878
e530cde6d115
bundle2: disable ouput capture unless we use http (issue4613 issue4615)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24851
diff
changeset
|
2721 if captureoutput and r is not None: |
24851
df0ce98c882f
bundle2: also save output when error happens during part processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24850
diff
changeset
|
2722 repo.ui.pushbuffer(error=True, subproc=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2723 |
24851
df0ce98c882f
bundle2: also save output when error happens during part processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24850
diff
changeset
|
2724 def recordout(output): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2725 r.newpart(b'output', data=output, mandatory=False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2726 |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2727 if lockandtr[2] is not None: |
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2728 lockandtr[2].close() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25640
diff
changeset
|
2729 except BaseException as exc: |
21187
bcfd44abad93
bundle2: gracefully handle hook abort
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21184
diff
changeset
|
2730 exc.duringunbundle2 = True |
24878
e530cde6d115
bundle2: disable ouput capture unless we use http (issue4613 issue4615)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24851
diff
changeset
|
2731 if captureoutput and r is not None: |
24847
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2732 parts = exc._bundle2salvagedoutput = r.salvageoutput() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2733 |
24847
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2734 def recordout(output): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2735 part = bundle2.bundlepart( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2736 b'output', data=output, mandatory=False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2737 ) |
24847
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2738 parts.append(part) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2739 |
21187
bcfd44abad93
bundle2: gracefully handle hook abort
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21184
diff
changeset
|
2740 raise |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2741 finally: |
26566
58880acd2369
bundle2: allow lazily acquiring the lock
Durham Goode <durham@fb.com>
parents:
26471
diff
changeset
|
2742 lockmod.release(lockandtr[2], lockandtr[1], lockandtr[0]) |
24847
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2743 if recordout is not None: |
b705e5ab3b07
bundle2: capture transaction rollback message output (issue4614)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24795
diff
changeset
|
2744 recordout(repo.ui.popbuffer()) |
20968
33d5fdd9bd99
unbundle: extract the core logic in another function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20967
diff
changeset
|
2745 return r |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2746 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2747 |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2748 def _maybeapplyclonebundle(pullop): |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2749 """Apply a clone bundle from a remote, if possible.""" |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2750 |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2751 repo = pullop.repo |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2752 remote = pullop.remote |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2753 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2754 if not repo.ui.configbool(b'ui', b'clonebundles'): |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2755 return |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2756 |
26855
9350f00a7b23
exchange: do not attempt clone bundle if local repo is non-empty (issue4932)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26829
diff
changeset
|
2757 # Only run if local repo is empty. |
9350f00a7b23
exchange: do not attempt clone bundle if local repo is non-empty (issue4932)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26829
diff
changeset
|
2758 if len(repo): |
9350f00a7b23
exchange: do not attempt clone bundle if local repo is non-empty (issue4932)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26829
diff
changeset
|
2759 return |
9350f00a7b23
exchange: do not attempt clone bundle if local repo is non-empty (issue4932)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26829
diff
changeset
|
2760 |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2761 if pullop.heads: |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2762 return |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2763 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2764 if not remote.capable(b'clonebundles'): |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2765 return |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2766 |
37649
a168799687e5
wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37648
diff
changeset
|
2767 with remote.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2768 res = e.callcommand(b'clonebundles', {}).result() |
26689
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
2769 |
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
2770 # If we call the wire protocol command, that's good enough to record the |
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
2771 # attempt. |
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
2772 pullop.clonebundleattempted = True |
2c9f15366982
exchange: record that we attempted to fetch a clone bundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26688
diff
changeset
|
2773 |
45807
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45681
diff
changeset
|
2774 entries = bundlecaches.parseclonebundlesmanifest(repo, res) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2775 if not entries: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2776 repo.ui.note( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2777 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2778 b'no clone bundles available on remote; ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2779 b'falling back to regular clone\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2780 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2781 ) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2782 return |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2783 |
45807
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45681
diff
changeset
|
2784 entries = bundlecaches.filterclonebundleentries( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2785 repo, entries, streamclonerequested=pullop.streamclonerequested |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2786 ) |
34365
ff406f3e57b2
exchange: perform stream clone with clone bundle with --uncompressed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34330
diff
changeset
|
2787 |
26644
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2788 if not entries: |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2789 # There is a thundering herd concern here. However, if a server |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2790 # operator doesn't advertise bundles appropriate for its clients, |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2791 # they deserve what's coming. Furthermore, from a client's |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2792 # perspective, no automatic fallback would mean not being able to |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2793 # clone! |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2794 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2795 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2796 b'no compatible clone bundles available on server; ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2797 b'falling back to regular clone\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2798 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2799 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2800 repo.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
2801 _(b'(you may want to report this to the server operator)\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2802 ) |
26644
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2803 return |
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2804 |
45807
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45681
diff
changeset
|
2805 entries = bundlecaches.sortclonebundleentries(repo.ui, entries) |
26644
74de1c59f71c
clonebundles: filter on bundle specification
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26643
diff
changeset
|
2806 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2807 url = entries[0][b'URL'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2808 repo.ui.status(_(b'applying clone bundle from %s\n') % url) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2809 if trypullbundlefromurl(repo.ui, repo, url): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2810 repo.ui.status(_(b'finished applying clone bundle\n')) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2811 # Bundle failed. |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2812 # |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2813 # We abort by default to avoid the thundering herd of |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2814 # clients flooding a server that was expecting expensive |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2815 # clone load to be offloaded. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2816 elif repo.ui.configbool(b'ui', b'clonebundlefallback'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2817 repo.ui.warn(_(b'falling back to normal clone\n')) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2818 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2819 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2820 _(b'error applying bundle'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2821 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2822 b'if this error persists, consider contacting ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2823 b'the server operator or disable clone ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2824 b'bundles via ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2825 b'"--config ui.clonebundles=false"' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2826 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2827 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2828 |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2829 |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2830 def trypullbundlefromurl(ui, repo, url): |
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2831 """Attempt to apply a bundle from a URL.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2832 with repo.lock(), repo.transaction(b'bundleurl') as tr: |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2833 try: |
32861
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2834 fh = urlmod.open(ui, url) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2835 cg = readbundle(ui, fh, b'stream') |
26643
d2e16419d3f4
clonebundle: support bundle2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26640
diff
changeset
|
2836 |
33055
18c2489ac96d
bundle: make applybundle() delegate v1 bundles to applybundle1()
Martin von Zweigbergk <martinvonz@google.com>
parents:
33052
diff
changeset
|
2837 if isinstance(cg, streamclone.streamcloneapplier): |
32861
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2838 cg.apply(repo) |
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2839 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2840 bundle2.applybundle(repo, cg, tr, b'clonebundles', url) |
32861
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2841 return True |
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2842 except urlerr.httperror as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2843 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2844 _(b'HTTP error fetching bundle: %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2845 % stringutil.forcebytestr(e) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2846 ) |
32861
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2847 except urlerr.urlerror as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2848 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2849 _(b'error fetching bundle: %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2850 % stringutil.forcebytestr(e.reason) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42929
diff
changeset
|
2851 ) |
26623
5a95fe44121d
clonebundles: support for seeding clones from pre-generated bundles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26587
diff
changeset
|
2852 |
32861
a470bbb4e3af
clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
32729
diff
changeset
|
2853 return False |