Mercurial > hg
annotate hgext/narrow/narrowbundle2.py @ 46192:25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Differential Revision: https://phab.mercurial-scm.org/D9578
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 14 Dec 2020 13:48:25 +0530 |
parents | 89a2afe31e82 |
children | d55b71393907 |
rev | line source |
---|---|
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 # narrowbundle2.py - bundle2 extensions for narrow repository support |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 # |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 # Copyright 2017 Google, Inc. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 # |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 from __future__ import absolute_import |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 import errno |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 import struct |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 from mercurial.i18n import _ |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
14 from mercurial.node import nullid |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 from mercurial import ( |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 bundle2, |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 changegroup, |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 error, |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 exchange, |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
20 localrepo, |
36160
9fd8c2a3db5a
narrowspec: move module into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36100
diff
changeset
|
21 narrowspec, |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 repair, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
23 requirements, |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
43506
diff
changeset
|
24 scmutil, |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
25 util, |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37084
diff
changeset
|
26 wireprototypes, |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
27 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
28 from mercurial.utils import stringutil |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
29 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
30 _NARROWACL_SECTION = b'narrowacl' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
31 _CHANGESPECPART = b'narrow:changespec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
32 _RESSPECS = b'narrow:responsespec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
33 _SPECPART = b'narrow:spec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
34 _SPECPART_INCLUDE = b'include' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
35 _SPECPART_EXCLUDE = b'exclude' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
36 _KILLNODESIGNAL = b'KILL' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
37 _DONESIGNAL = b'DONE' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
38 _ELIDEDCSHEADER = b'>20s20s20sl' # cset id, p1, p2, len(text) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
39 _ELIDEDMFHEADER = b'>20s20s20s20sl' # manifest id, p1, p2, link id, len(text) |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
40 _CSHEADERSIZE = struct.calcsize(_ELIDEDCSHEADER) |
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
41 _MFHEADERSIZE = struct.calcsize(_ELIDEDMFHEADER) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 # Serve a changegroup for a client with a narrow clone. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
44 def getbundlechangegrouppart_narrow( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
45 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
46 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
47 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
48 bundlecaps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
49 b2caps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
50 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
51 common=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
52 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
53 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 assert repo.ui.configbool(b'experimental', b'narrowservebrokenellipses') |
38808
d99083996398
exchange: move simple narrow changegroup generation from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38807
diff
changeset
|
55 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 cgversions = b2caps.get(b'changegroup') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
57 cgversions = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
58 v |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
59 for v in cgversions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
60 if v in changegroup.supportedoutgoingversions(repo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
61 ] |
42365
92f584065b4f
narrow: remove unrequired compat code for old versions of hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42209
diff
changeset
|
62 if not cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 raise ValueError(_(b'no common changegroup version')) |
42365
92f584065b4f
narrow: remove unrequired compat code for old versions of hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42209
diff
changeset
|
64 version = max(cgversions) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
65 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
66 include = sorted(filter(bool, kwargs.get('includepats', []))) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
67 exclude = sorted(filter(bool, kwargs.get('excludepats', []))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
68 generateellipsesbundle2( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
69 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
70 repo, |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
71 include, |
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
72 exclude, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
73 version, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
74 common, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
75 heads, |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
76 kwargs.get('depth', None), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
77 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
78 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
80 def generateellipsesbundle2( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
81 bundler, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
82 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
83 include, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
84 exclude, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
85 version, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
86 common, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
87 heads, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
88 depth, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
89 ): |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
90 match = narrowspec.match(repo.root, include=include, exclude=exclude) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
91 if depth is not None: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
92 depth = int(depth) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
93 if depth < 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
94 raise error.Abort(_(b'depth must be positive, got %d') % depth) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
95 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
96 heads = set(heads or repo.heads()) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
97 common = set(common or [nullid]) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
98 |
38791
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38790
diff
changeset
|
99 visitnodes, relevant_nodes, ellipsisroots = exchange._computeellipsis( |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
100 repo, common, heads, set(), match, depth=depth |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
101 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
102 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
103 repo.ui.debug(b'Found %d relevant revs\n' % len(relevant_nodes)) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
104 if visitnodes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
105 packer = changegroup.getbundler( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
106 version, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
107 repo, |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
108 matcher=match, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
109 ellipses=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
110 shallow=depth is not None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
111 ellipsisroots=ellipsisroots, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
112 fullnodes=relevant_nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
113 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
114 cgdata = packer.generate(common, visitnodes, False, b'narrow_widen') |
38910
245c58952298
changegroup: inline _packellipsischangegroup
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38884
diff
changeset
|
115 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 part = bundler.newpart(b'changegroup', data=cgdata) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 part.addparam(b'version', version) |
45552
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
118 if scmutil.istreemanifest(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
119 part.addparam(b'treemanifest', b'1') |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
121 |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
122 def generate_ellipses_bundle2_for_widening( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
123 bundler, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
124 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
125 oldmatch, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
126 newmatch, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
127 version, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
128 common, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45552
diff
changeset
|
129 known, |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
130 ): |
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
131 common = set(common or [nullid]) |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
132 # Steps: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
133 # 1. Send kill for "$known & ::common" |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
134 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
135 # 2. Send changegroup for ::common |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
136 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
137 # 3. Proceed. |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
138 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
139 # In the future, we can send kills for only the specific |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
140 # nodes we know should go away or change shape, and then |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
141 # send a data stream that tells the client something like this: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
142 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
143 # a) apply this changegroup |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
144 # b) apply nodes XXX, YYY, ZZZ that you already have |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
145 # c) goto a |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
146 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
147 # until they've built up the full new state. |
43248
2673f9a74968
widening: trust user to give full "known" set
Martin von Zweigbergk <martinvonz@google.com>
parents:
43247
diff
changeset
|
148 knownrevs = {repo.changelog.rev(n) for n in known} |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
149 # TODO: we could send only roots() of this set, and the |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
150 # list of nodes in common, and the client could work out |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
151 # what to strip, instead of us explicitly sending every |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
152 # single node. |
43248
2673f9a74968
widening: trust user to give full "known" set
Martin von Zweigbergk <martinvonz@google.com>
parents:
43247
diff
changeset
|
153 deadrevs = knownrevs |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
154 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
155 def genkills(): |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
156 for r in deadrevs: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
157 yield _KILLNODESIGNAL |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
158 yield repo.changelog.node(r) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
159 yield _DONESIGNAL |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
160 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
161 bundler.newpart(_CHANGESPECPART, data=genkills()) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
162 newvisit, newfull, newellipsis = exchange._computeellipsis( |
43248
2673f9a74968
widening: trust user to give full "known" set
Martin von Zweigbergk <martinvonz@google.com>
parents:
43247
diff
changeset
|
163 repo, set(), common, knownrevs, newmatch |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
164 ) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
165 if newvisit: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
166 packer = changegroup.getbundler( |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
167 version, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
168 repo, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
169 matcher=newmatch, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
170 ellipses=True, |
43247
599e0e62b597
widening: remove "depth" argument since it's always None
Martin von Zweigbergk <martinvonz@google.com>
parents:
43246
diff
changeset
|
171 shallow=False, |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
172 ellipsisroots=newellipsis, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
173 fullnodes=newfull, |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
174 ) |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
175 cgdata = packer.generate(common, newvisit, False, b'narrow_widen') |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
176 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
177 part = bundler.newpart(b'changegroup', data=cgdata) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
178 part.addparam(b'version', version) |
45552
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
179 if scmutil.istreemanifest(repo): |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
180 part.addparam(b'treemanifest', b'1') |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
181 |
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
182 |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
183 @bundle2.parthandler(_SPECPART, (_SPECPART_INCLUDE, _SPECPART_EXCLUDE)) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
184 def _handlechangespec_2(op, inpart): |
42209
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
185 # XXX: This bundle2 handling is buggy and should be removed after hg5.2 is |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
186 # released. New servers will send a mandatory bundle2 part named |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
187 # 'Narrowspec' and will send specs as data instead of params. |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
188 # Refer to issue5952 and 6019 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 includepats = set(inpart.params.get(_SPECPART_INCLUDE, b'').splitlines()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
190 excludepats = set(inpart.params.get(_SPECPART_EXCLUDE, b'').splitlines()) |
39540
ce20caecacbd
narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39529
diff
changeset
|
191 narrowspec.validatepatterns(includepats) |
ce20caecacbd
narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39529
diff
changeset
|
192 narrowspec.validatepatterns(excludepats) |
ce20caecacbd
narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39529
diff
changeset
|
193 |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
194 if not requirements.NARROW_REQUIREMENT in op.repo.requirements: |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
195 op.repo.requirements.add(requirements.NARROW_REQUIREMENT) |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
43506
diff
changeset
|
196 scmutil.writereporequirements(op.repo) |
36469
28c7f580360b
narrow: reduce depedence on narrowspec.save()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36464
diff
changeset
|
197 op.repo.setnarrowpats(includepats, excludepats) |
41236
44a51c1c8e17
narrow: move copytonarrowspec() out of setnarrowpats()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41076
diff
changeset
|
198 narrowspec.copytoworkingcopy(op.repo) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
200 |
42209
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
201 @bundle2.parthandler(_RESSPECS) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
202 def _handlenarrowspecs(op, inpart): |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
203 data = inpart.read() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 inc, exc = data.split(b'\0') |
42209
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
205 includepats = set(inc.splitlines()) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
206 excludepats = set(exc.splitlines()) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
207 narrowspec.validatepatterns(includepats) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
208 narrowspec.validatepatterns(excludepats) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
209 |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
210 if requirements.NARROW_REQUIREMENT not in op.repo.requirements: |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
211 op.repo.requirements.add(requirements.NARROW_REQUIREMENT) |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
43506
diff
changeset
|
212 scmutil.writereporequirements(op.repo) |
42209
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
213 op.repo.setnarrowpats(includepats, excludepats) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
214 narrowspec.copytoworkingcopy(op.repo) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
215 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
216 |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
217 @bundle2.parthandler(_CHANGESPECPART) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
218 def _handlechangespec(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
219 repo = op.repo |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
220 cl = repo.changelog |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
221 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
222 # changesets which need to be stripped entirely. either they're no longer |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
223 # needed in the new narrow spec, or the server is sending a replacement |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
224 # in the changegroup part. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
225 clkills = set() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
226 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
227 # A changespec part contains all the updates to ellipsis nodes |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
228 # that will happen as a result of widening or narrowing a |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
229 # repo. All the changes that this block encounters are ellipsis |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
230 # nodes or flags to kill an existing ellipsis. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
231 chunksignal = changegroup.readexactly(inpart, 4) |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
232 while chunksignal != _DONESIGNAL: |
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
233 if chunksignal == _KILLNODESIGNAL: |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
234 # a node used to be an ellipsis but isn't anymore |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
235 ck = changegroup.readexactly(inpart, 20) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
236 if cl.hasnode(ck): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
237 clkills.add(ck) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
238 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
239 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 _(b'unexpected changespec node chunk type: %s') % chunksignal |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
241 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
242 chunksignal = changegroup.readexactly(inpart, 4) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
243 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
244 if clkills: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
245 # preserve bookmarks that repair.strip() would otherwise strip |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
246 op._bookmarksbackup = repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
247 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
248 class dummybmstore(dict): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
249 def applychanges(self, repo, tr, changes): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
250 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
251 |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
252 localrepo.localrepository._bookmarks.set(repo, dummybmstore()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
253 chgrpfile = repair.strip( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 op.ui, repo, list(clkills), backup=True, topic=b'widen' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
255 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
256 if chgrpfile: |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
40868
diff
changeset
|
257 op._widen_uninterr = repo.ui.uninterruptible() |
38529
1ad873c3e4a4
narrowbundle2: when we handle a widen, mark the operation as unsafe
Augie Fackler <augie@google.com>
parents:
37613
diff
changeset
|
258 op._widen_uninterr.__enter__() |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
259 # presence of _widen_bundle attribute activates widen handler later |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
260 op._widen_bundle = chgrpfile |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
261 # Set the new narrowspec if we're widening. The setnewnarrowpats() method |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
262 # will currently always be there when using the core+narrowhg server, but |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 # other servers may include a changespec part even when not widening (e.g. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
264 # because we're deepening a shallow repo). |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
265 if util.safehasattr(repo, 'setnewnarrowpats'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
266 repo.setnewnarrowpats() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
267 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
268 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
269 def handlechangegroup_widen(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
270 """Changegroup exchange handler which restores temporarily-stripped nodes""" |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
271 # We saved a bundle with stripped node data we must now restore. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
272 # This approach is based on mercurial/repair.py@6ee26a53c111. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
273 repo = op.repo |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
274 ui = op.ui |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
275 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
276 chgrpfile = op._widen_bundle |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
277 del op._widen_bundle |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
278 vfs = repo.vfs |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
279 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 ui.note(_(b"adding branch\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 f = vfs.open(chgrpfile, b"rb") |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
282 try: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
283 gen = exchange.readbundle(ui, f, chgrpfile, vfs) |
42895
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
284 # silence internal shuffling chatter |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 override = {(b'ui', b'quiet'): True} |
42895
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
286 if ui.verbose: |
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
287 override = {} |
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
288 with ui.configoverride(override): |
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
289 if isinstance(gen, bundle2.unbundle20): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
290 with repo.transaction(b'strip') as tr: |
42895
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
291 bundle2.processbundle(repo, gen, lambda: tr) |
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
292 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
293 gen.apply( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 repo, b'strip', b'bundle:' + vfs.join(chgrpfile), True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
295 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
296 finally: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
297 f.close() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
298 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
299 # remove undo files |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
300 for undovfs, undofile in repo.undofiles(): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
301 try: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
302 undovfs.unlink(undofile) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
303 except OSError as e: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
304 if e.errno != errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
305 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 _(b'error removing %s: %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
307 % (undovfs.join(undofile), stringutil.forcebytestr(e)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
308 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
309 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
310 # Remove partial backup only if there were no exceptions |
38529
1ad873c3e4a4
narrowbundle2: when we handle a widen, mark the operation as unsafe
Augie Fackler <augie@google.com>
parents:
37613
diff
changeset
|
311 op._widen_uninterr.__exit__(None, None, None) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
312 vfs.unlink(chgrpfile) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
313 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
314 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
315 def setup(): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
316 """Enable narrow repo support in bundle2-related extension points.""" |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37084
diff
changeset
|
317 getbundleargs = wireprototypes.GETBUNDLE_ARGUMENTS |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37084
diff
changeset
|
318 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
319 getbundleargs[b'narrow'] = b'boolean' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
320 getbundleargs[b'depth'] = b'plain' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 getbundleargs[b'oldincludepats'] = b'csv' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 getbundleargs[b'oldexcludepats'] = b'csv' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 getbundleargs[b'known'] = b'csv' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
324 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
325 # Extend changegroup serving to handle requests from narrow clients. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 origcgfn = exchange.getbundle2partsmapping[b'changegroup'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
327 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
328 def wrappedcgfn(*args, **kwargs): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
329 repo = args[1] |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
330 if repo.ui.has_section(_NARROWACL_SECTION): |
38807
98df52d5042c
exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38794
diff
changeset
|
331 kwargs = exchange.applynarrowacl(repo, kwargs) |
98df52d5042c
exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38794
diff
changeset
|
332 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
333 if kwargs.get('narrow', False) and repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
334 b'experimental', b'narrowservebrokenellipses' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
335 ): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
336 getbundlechangegrouppart_narrow(*args, **kwargs) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
337 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
338 origcgfn(*args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
339 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 exchange.getbundle2partsmapping[b'changegroup'] = wrappedcgfn |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
341 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
342 # Extend changegroup receiver so client can fixup after widen requests. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 origcghandler = bundle2.parthandlermapping[b'changegroup'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
344 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
345 def wrappedcghandler(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
346 origcghandler(op, inpart) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
347 if util.safehasattr(op, '_widen_bundle'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
348 handlechangegroup_widen(op, inpart) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
349 if util.safehasattr(op, '_bookmarksbackup'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
350 localrepo.localrepository._bookmarks.set( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
351 op.repo, op._bookmarksbackup |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
352 ) |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
353 del op._bookmarksbackup |
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
354 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
355 wrappedcghandler.params = origcghandler.params |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 bundle2.parthandlermapping[b'changegroup'] = wrappedcghandler |