annotate hgext/narrow/narrowbundle2.py @ 51281:8f1983318455

common-pattern: cover "elapsed time" line These are perfect targets for the common-pattern matching.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 13 Dec 2023 13:46:28 +0100
parents d718eddf01d9
children 493034cc3265
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
9 import struct
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
10
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
11 from mercurial.i18n import _
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
12 from mercurial import (
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
13 bundle2,
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
14 changegroup,
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
15 error,
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
16 exchange,
40868
109a267acc1e narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents: 40867
diff changeset
17 localrepo,
36160
9fd8c2a3db5a narrowspec: move module into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36100
diff changeset
18 narrowspec,
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
19 repair,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
20 requirements,
45106
a03c177a4679 scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 43506
diff changeset
21 scmutil,
50286
3d0b5760851c undo-files: move the undo cleanup code in the transaction module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50277
diff changeset
22 transaction,
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
23 util,
37613
96d735601ca1 wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37084
diff changeset
24 wireprototypes,
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
25 )
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
26
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
27 _NARROWACL_SECTION = b'narrowacl'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
28 _CHANGESPECPART = b'narrow:changespec'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
29 _RESSPECS = b'narrow:responsespec'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
30 _SPECPART = b'narrow:spec'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
31 _SPECPART_INCLUDE = b'include'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
32 _SPECPART_EXCLUDE = b'exclude'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
33 _KILLNODESIGNAL = b'KILL'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
34 _DONESIGNAL = b'DONE'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
35 _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
36 _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
37 _CSHEADERSIZE = struct.calcsize(_ELIDEDCSHEADER)
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
38 _MFHEADERSIZE = struct.calcsize(_ELIDEDMFHEADER)
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
39
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
40 # 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
41 def getbundlechangegrouppart_narrow(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
42 bundler,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
43 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
44 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
45 bundlecaps=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
46 b2caps=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
47 heads=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
48 common=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
49 **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
50 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
51 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
52
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
53 cgversions = b2caps.get(b'changegroup')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
54 cgversions = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
55 v
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
56 for v in cgversions
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
57 if v in changegroup.supportedoutgoingversions(repo)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
58 ]
42365
92f584065b4f narrow: remove unrequired compat code for old versions of hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 42209
diff changeset
59 if not cgversions:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
60 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
61 version = max(cgversions)
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
62
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43249
diff changeset
63 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
64 exclude = sorted(filter(bool, kwargs.get('excludepats', [])))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
65 generateellipsesbundle2(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
66 bundler,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
67 repo,
43243
e94f457998d3 narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 43242
diff changeset
68 include,
e94f457998d3 narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 43242
diff changeset
69 exclude,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
70 version,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
71 common,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
72 heads,
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43249
diff changeset
73 kwargs.get('depth', None),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
74 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
75
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
76
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
77 def generateellipsesbundle2(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
78 bundler,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
79 repo,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
80 include,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
81 exclude,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
82 version,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
83 common,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
84 heads,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
85 depth,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
86 ):
43243
e94f457998d3 narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 43242
diff changeset
87 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
88 if depth is not None:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
89 depth = int(depth)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
90 if depth < 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
91 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
92
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
93 heads = set(heads or repo.heads())
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
94 common = set(common or [repo.nullid])
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
95
38791
7e66e7999bdd exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38790
diff changeset
96 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
97 repo, common, heads, set(), match, depth=depth
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
98 )
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
99
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
100 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
101 if visitnodes:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
102 packer = changegroup.getbundler(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
103 version,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
104 repo,
43243
e94f457998d3 narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 43242
diff changeset
105 matcher=match,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
106 ellipses=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
107 shallow=depth is not None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
108 ellipsisroots=ellipsisroots,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
109 fullnodes=relevant_nodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
110 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
111 cgdata = packer.generate(common, visitnodes, False, b'narrow_widen')
38910
245c58952298 changegroup: inline _packellipsischangegroup
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38884
diff changeset
112
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
113 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
114 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
115 if scmutil.istreemanifest(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
116 part.addparam(b'treemanifest', b'1')
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
117
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
118
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
119 def generate_ellipses_bundle2_for_widening(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
120 bundler,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
121 repo,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
122 oldmatch,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
123 newmatch,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
124 version,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
125 common,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45552
diff changeset
126 known,
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
127 ):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
128 common = set(common or [repo.nullid])
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
129 # Steps:
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
130 # 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
131 #
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
132 # 2. Send changegroup for ::common
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
133 #
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
134 # 3. Proceed.
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
135 #
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
136 # 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
137 # 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
138 # 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
139 #
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
140 # a) apply this changegroup
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
141 # 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
142 # c) goto a
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
143 #
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
144 # 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
145 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
146 # 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
147 # 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
148 # 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
149 # single node.
43248
2673f9a74968 widening: trust user to give full "known" set
Martin von Zweigbergk <martinvonz@google.com>
parents: 43247
diff changeset
150 deadrevs = knownrevs
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
151
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
152 def genkills():
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
153 for r in deadrevs:
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
154 yield _KILLNODESIGNAL
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
155 yield repo.changelog.node(r)
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
156 yield _DONESIGNAL
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
157
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
158 bundler.newpart(_CHANGESPECPART, data=genkills())
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
159 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
160 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
161 )
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
162 if newvisit:
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
163 packer = changegroup.getbundler(
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
164 version,
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
165 repo,
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
166 matcher=newmatch,
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
167 ellipses=True,
43247
599e0e62b597 widening: remove "depth" argument since it's always None
Martin von Zweigbergk <martinvonz@google.com>
parents: 43246
diff changeset
168 shallow=False,
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
169 ellipsisroots=newellipsis,
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
170 fullnodes=newfull,
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
171 )
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
172 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
173
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
174 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
175 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
176 if scmutil.istreemanifest(repo):
43244
c5adf480de0f widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents: 43243
diff changeset
177 part.addparam(b'treemanifest', b'1')
43242
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
178
561f9bc4b4c5 widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents: 43115
diff changeset
179
36087
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
180 @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
181 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
182 # 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
183 # 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
184 # '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
185 # Refer to issue5952 and 6019
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
186 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
187 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
188 narrowspec.validatepatterns(includepats)
ce20caecacbd narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39529
diff changeset
189 narrowspec.validatepatterns(excludepats)
ce20caecacbd narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39529
diff changeset
190
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
191 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
192 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
193 scmutil.writereporequirements(op.repo)
36469
28c7f580360b narrow: reduce depedence on narrowspec.save()
Martin von Zweigbergk <martinvonz@google.com>
parents: 36464
diff changeset
194 op.repo.setnarrowpats(includepats, excludepats)
41236
44a51c1c8e17 narrow: move copytonarrowspec() out of setnarrowpats()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41076
diff changeset
195 narrowspec.copytoworkingcopy(op.repo)
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
196
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
197
42209
280f7a095df8 narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41236
diff changeset
198 @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
199 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
200 data = inpart.read()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
201 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
202 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
203 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
204 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
205 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
206
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
207 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
208 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
209 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
210 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
211 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
212
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
213
36087
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
214 @bundle2.parthandler(_CHANGESPECPART)
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
215 def _handlechangespec(op, inpart):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
216 repo = op.repo
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
217 cl = repo.changelog
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
218
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
219 # 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
220 # 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
221 # in the changegroup part.
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
222 clkills = set()
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
223
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
224 # 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
225 # 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
226 # 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
227 # 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
228 chunksignal = changegroup.readexactly(inpart, 4)
36087
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
229 while chunksignal != _DONESIGNAL:
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
230 if chunksignal == _KILLNODESIGNAL:
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
231 # 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
232 ck = changegroup.readexactly(inpart, 20)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
233 if cl.hasnode(ck):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
234 clkills.add(ck)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
235 else:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
236 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
237 _(b'unexpected changespec node chunk type: %s') % chunksignal
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
238 )
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
239 chunksignal = changegroup.readexactly(inpart, 4)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
240
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
241 if clkills:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
242 # 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
243 op._bookmarksbackup = repo._bookmarks
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
244
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
245 class dummybmstore(dict):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
246 def applychanges(self, repo, tr, changes):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
247 pass
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
248
40868
109a267acc1e narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents: 40867
diff changeset
249 localrepo.localrepository._bookmarks.set(repo, dummybmstore())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
250 chgrpfile = repair.strip(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
251 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
252 )
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
253 if chgrpfile:
41076
8ecb17b7f432 procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents: 40868
diff changeset
254 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
255 op._widen_uninterr.__enter__()
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
256 # 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
257 op._widen_bundle = chgrpfile
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
258 # 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
259 # 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
260 # 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
261 # because we're deepening a shallow repo).
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50288
diff changeset
262 if hasattr(repo, 'setnewnarrowpats'):
50190
34db5692d537 narrow: open the transaction sooner when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
263 op.gettransaction()
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
264 repo.setnewnarrowpats()
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
265
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
266
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
267 def handlechangegroup_widen(op, inpart):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
268 """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
269 # 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
270 # 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
271 repo = op.repo
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
272 ui = op.ui
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
273
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
274 chgrpfile = op._widen_bundle
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
275 del op._widen_bundle
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
276 vfs = repo.vfs
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
277
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
278 ui.note(_(b"adding branch\n"))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
279 f = vfs.open(chgrpfile, b"rb")
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
280 try:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
281 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
282 # silence internal shuffling chatter
47439
86418ad637d1 narrowbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47012
diff changeset
283 maybe_silent = (
86418ad637d1 narrowbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47012
diff changeset
284 ui.silent() if not ui.verbose else util.nullcontextmanager()
86418ad637d1 narrowbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47012
diff changeset
285 )
86418ad637d1 narrowbundle: use new context manager for silencing the ui
Martin von Zweigbergk <martinvonz@google.com>
parents: 47012
diff changeset
286 with maybe_silent:
42895
bbcaf3a74822 narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42813
diff changeset
287 if isinstance(gen, bundle2.unbundle20):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
288 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
289 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
290 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
291 gen.apply(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
292 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
293 )
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
294 finally:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
295 f.close()
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
296
50288
d89eecf9605e undo-files: no longer pass the `repo` to `cleanup_undo_files`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50286
diff changeset
297 transaction.cleanup_undo_files(repo.ui.warn, repo.vfs_map)
36079
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 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
300 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
301 vfs.unlink(chgrpfile)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
302
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
303
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
304 def setup():
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
305 """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
306 getbundleargs = wireprototypes.GETBUNDLE_ARGUMENTS
96d735601ca1 wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37084
diff changeset
307
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
308 getbundleargs[b'narrow'] = b'boolean'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
309 getbundleargs[b'depth'] = b'plain'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
310 getbundleargs[b'oldincludepats'] = b'csv'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
311 getbundleargs[b'oldexcludepats'] = b'csv'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
312 getbundleargs[b'known'] = b'csv'
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
313
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
314 # 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
315 origcgfn = exchange.getbundle2partsmapping[b'changegroup']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
316
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
317 def wrappedcgfn(*args, **kwargs):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
318 repo = args[1]
36087
844f253dad5e narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents: 36086
diff changeset
319 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
320 kwargs = exchange.applynarrowacl(repo, kwargs)
98df52d5042c exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38794
diff changeset
321
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43249
diff changeset
322 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
323 b'experimental', b'narrowservebrokenellipses'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
324 ):
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
325 getbundlechangegrouppart_narrow(*args, **kwargs)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
326 else:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
327 origcgfn(*args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
328
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
329 exchange.getbundle2partsmapping[b'changegroup'] = wrappedcgfn
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
330
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
331 # 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
332 origcghandler = bundle2.parthandlermapping[b'changegroup']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
333
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
334 def wrappedcghandler(op, inpart):
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
335 origcghandler(op, inpart)
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50288
diff changeset
336 if hasattr(op, '_widen_bundle'):
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
337 handlechangegroup_widen(op, inpart)
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50288
diff changeset
338 if hasattr(op, '_bookmarksbackup'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
339 localrepo.localrepository._bookmarks.set(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
340 op.repo, op._bookmarksbackup
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42895
diff changeset
341 )
40868
109a267acc1e narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents: 40867
diff changeset
342 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
343
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
344 wrappedcghandler.params = origcghandler.params
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
345 bundle2.parthandlermapping[b'changegroup'] = wrappedcghandler