Mercurial > hg
annotate hgext/narrow/narrowbundle2.py @ 44647:99fa161a883c
phabricator: extract the logic to amend diff properties to a function
This will be needed on a separate code path when dealing with folding revisions.
And since we know that will involve adding multiple local commmits to the diff
properties instead of just one, restructure the logic slightly to allow it.
Differential Revision: https://phab.mercurial-scm.org/D8312
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 16 Mar 2020 14:33:35 -0400 |
parents | 9f70512ae2cf |
children | a03c177a4679 |
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, |
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 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
26 from mercurial.interfaces import repository |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
27 from mercurial.utils import stringutil |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
28 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
29 _NARROWACL_SECTION = b'narrowacl' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
30 _CHANGESPECPART = b'narrow:changespec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
31 _RESSPECS = b'narrow:responsespec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
32 _SPECPART = b'narrow:spec' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
33 _SPECPART_INCLUDE = b'include' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
34 _SPECPART_EXCLUDE = b'exclude' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
35 _KILLNODESIGNAL = b'KILL' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
36 _DONESIGNAL = b'DONE' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
37 _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
|
38 _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
|
39 _CSHEADERSIZE = struct.calcsize(_ELIDEDCSHEADER) |
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
40 _MFHEADERSIZE = struct.calcsize(_ELIDEDMFHEADER) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 # 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
|
43 def getbundlechangegrouppart_narrow( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
44 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
45 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
46 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
47 bundlecaps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
48 b2caps=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
49 heads=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
50 common=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
51 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
52 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 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
|
54 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 cgversions = b2caps.get(b'changegroup') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
56 cgversions = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
57 v |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
58 for v in cgversions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
59 if v in changegroup.supportedoutgoingversions(repo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
60 ] |
42365
92f584065b4f
narrow: remove unrequired compat code for old versions of hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42209
diff
changeset
|
61 if not cgversions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
62 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
|
63 version = max(cgversions) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
64 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
65 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
|
66 exclude = sorted(filter(bool, kwargs.get('excludepats', []))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
67 generateellipsesbundle2( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
68 bundler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
69 repo, |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
70 include, |
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
71 exclude, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
72 version, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
73 common, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
74 heads, |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
75 kwargs.get('depth', None), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
76 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
77 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
79 def generateellipsesbundle2( |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
80 bundler, repo, include, exclude, version, common, heads, depth, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
81 ): |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
82 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
|
83 if depth is not None: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
84 depth = int(depth) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 if depth < 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
86 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
|
87 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
88 heads = set(heads or repo.heads()) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
89 common = set(common or [nullid]) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 |
38791
7e66e7999bdd
exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38790
diff
changeset
|
91 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
|
92 repo, common, heads, set(), match, depth=depth |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
93 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
94 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
95 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
|
96 if visitnodes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
97 packer = changegroup.getbundler( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
98 version, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
99 repo, |
43243
e94f457998d3
narrow: drop server support for widening using the getbundle command (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43242
diff
changeset
|
100 matcher=match, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
101 ellipses=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
102 shallow=depth is not None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
103 ellipsisroots=ellipsisroots, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
104 fullnodes=relevant_nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
105 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 cgdata = packer.generate(common, visitnodes, False, b'narrow_widen') |
38910
245c58952298
changegroup: inline _packellipsischangegroup
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38884
diff
changeset
|
107 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 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
|
109 part.addparam(b'version', version) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 if b'treemanifest' in repo.requirements: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 part.addparam(b'treemanifest', b'1') |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
112 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
113 |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
114 def generate_ellipses_bundle2_for_widening( |
43249
63d440bef72a
widening: pass in matchers instead of patterns
Martin von Zweigbergk <martinvonz@google.com>
parents:
43248
diff
changeset
|
115 bundler, repo, oldmatch, newmatch, version, common, known, |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
116 ): |
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
117 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
|
118 # Steps: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
119 # 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
|
120 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
121 # 2. Send changegroup for ::common |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
122 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
123 # 3. Proceed. |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
124 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
125 # 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
|
126 # 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
|
127 # 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
|
128 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
129 # a) apply this changegroup |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
130 # 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
|
131 # c) goto a |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
132 # |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
133 # 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
|
134 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
|
135 # 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
|
136 # 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
|
137 # 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
|
138 # single node. |
43248
2673f9a74968
widening: trust user to give full "known" set
Martin von Zweigbergk <martinvonz@google.com>
parents:
43247
diff
changeset
|
139 deadrevs = knownrevs |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
140 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
141 def genkills(): |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
142 for r in deadrevs: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
143 yield _KILLNODESIGNAL |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
144 yield repo.changelog.node(r) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
145 yield _DONESIGNAL |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
146 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
147 bundler.newpart(_CHANGESPECPART, data=genkills()) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
148 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
|
149 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
|
150 ) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
151 if newvisit: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
152 packer = changegroup.getbundler( |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
153 version, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
154 repo, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
155 matcher=newmatch, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
156 ellipses=True, |
43247
599e0e62b597
widening: remove "depth" argument since it's always None
Martin von Zweigbergk <martinvonz@google.com>
parents:
43246
diff
changeset
|
157 shallow=False, |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
158 ellipsisroots=newellipsis, |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
159 fullnodes=newfull, |
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 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
|
162 |
43244
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
163 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
|
164 part.addparam(b'version', version) |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
165 if b'treemanifest' in repo.requirements: |
c5adf480de0f
widening: remove always-true condition in widening code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43243
diff
changeset
|
166 part.addparam(b'treemanifest', b'1') |
43242
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
167 |
561f9bc4b4c5
widening: duplicate generateellipsesbundle2() for widening
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
168 |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
169 @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
|
170 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
|
171 # 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
|
172 # 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
|
173 # '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
|
174 # Refer to issue5952 and 6019 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
175 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
|
176 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
|
177 narrowspec.validatepatterns(includepats) |
ce20caecacbd
narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39529
diff
changeset
|
178 narrowspec.validatepatterns(excludepats) |
ce20caecacbd
narrow: validate patterns on incoming bundle2 part
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39529
diff
changeset
|
179 |
38835
a232e6744ba3
narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents:
38808
diff
changeset
|
180 if not repository.NARROW_REQUIREMENT in op.repo.requirements: |
a232e6744ba3
narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents:
38808
diff
changeset
|
181 op.repo.requirements.add(repository.NARROW_REQUIREMENT) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 op.repo._writerequirements() |
36469
28c7f580360b
narrow: reduce depedence on narrowspec.save()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36464
diff
changeset
|
183 op.repo.setnarrowpats(includepats, excludepats) |
41236
44a51c1c8e17
narrow: move copytonarrowspec() out of setnarrowpats()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41076
diff
changeset
|
184 narrowspec.copytoworkingcopy(op.repo) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
185 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
186 |
42209
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
187 @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
|
188 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
|
189 data = inpart.read() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
196 if repository.NARROW_REQUIREMENT not in op.repo.requirements: |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
197 op.repo.requirements.add(repository.NARROW_REQUIREMENT) |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
198 op.repo._writerequirements() |
280f7a095df8
narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41236
diff
changeset
|
199 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
|
200 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
|
201 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
202 |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
203 @bundle2.parthandler(_CHANGESPECPART) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
204 def _handlechangespec(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
205 repo = op.repo |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
206 cl = repo.changelog |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
207 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
208 # 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
|
209 # 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
|
210 # in the changegroup part. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
211 clkills = set() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
212 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
213 # 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
|
214 # 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
|
215 # 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
|
216 # 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
|
217 chunksignal = changegroup.readexactly(inpart, 4) |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
218 while chunksignal != _DONESIGNAL: |
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
219 if chunksignal == _KILLNODESIGNAL: |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
220 # 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
|
221 ck = changegroup.readexactly(inpart, 20) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
222 if cl.hasnode(ck): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
223 clkills.add(ck) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
224 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
225 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 _(b'unexpected changespec node chunk type: %s') % chunksignal |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
227 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
228 chunksignal = changegroup.readexactly(inpart, 4) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
229 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
230 if clkills: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
231 # 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
|
232 op._bookmarksbackup = repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
233 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
234 class dummybmstore(dict): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
235 def applychanges(self, repo, tr, changes): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
236 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
237 |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
238 localrepo.localrepository._bookmarks.set(repo, dummybmstore()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
239 chgrpfile = repair.strip( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 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
|
241 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
242 if chgrpfile: |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
40868
diff
changeset
|
243 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
|
244 op._widen_uninterr.__enter__() |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
245 # 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
|
246 op._widen_bundle = chgrpfile |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
247 # 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
|
248 # 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
|
249 # 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
|
250 # 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
|
251 if util.safehasattr(repo, 'setnewnarrowpats'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
252 repo.setnewnarrowpats() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
253 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
254 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
255 def handlechangegroup_widen(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
256 """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
|
257 # 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
|
258 # 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
|
259 repo = op.repo |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
260 ui = op.ui |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
261 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
262 chgrpfile = op._widen_bundle |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 del op._widen_bundle |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
264 vfs = repo.vfs |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
265 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 ui.note(_(b"adding branch\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 f = vfs.open(chgrpfile, b"rb") |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
268 try: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
269 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
|
270 # silence internal shuffling chatter |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 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
|
272 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
|
273 override = {} |
bbcaf3a74822
narrow: rely on setting `quiet` mode instead of `pushbuffer`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42813
diff
changeset
|
274 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
|
275 if isinstance(gen, bundle2.unbundle20): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
276 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
|
277 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
|
278 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 gen.apply( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 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
|
281 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
282 finally: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
283 f.close() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
284 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
285 # remove undo files |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
286 for undovfs, undofile in repo.undofiles(): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
287 try: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
288 undovfs.unlink(undofile) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
289 except OSError as e: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
290 if e.errno != errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
291 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
292 _(b'error removing %s: %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
293 % (undovfs.join(undofile), stringutil.forcebytestr(e)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
294 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
295 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
296 # 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
|
297 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
|
298 vfs.unlink(chgrpfile) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
299 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
300 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
301 def setup(): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
302 """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
|
303 getbundleargs = wireprototypes.GETBUNDLE_ARGUMENTS |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37084
diff
changeset
|
304 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 getbundleargs[b'narrow'] = b'boolean' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 getbundleargs[b'depth'] = b'plain' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 getbundleargs[b'oldincludepats'] = b'csv' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 getbundleargs[b'oldexcludepats'] = b'csv' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 getbundleargs[b'known'] = b'csv' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
310 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
311 # 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
|
312 origcgfn = exchange.getbundle2partsmapping[b'changegroup'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
313 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
314 def wrappedcgfn(*args, **kwargs): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
315 repo = args[1] |
36087
844f253dad5e
narrowbundle2: mark most constants as module-private
Augie Fackler <augie@google.com>
parents:
36086
diff
changeset
|
316 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
|
317 kwargs = exchange.applynarrowacl(repo, kwargs) |
98df52d5042c
exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38794
diff
changeset
|
318 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43249
diff
changeset
|
319 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
|
320 b'experimental', b'narrowservebrokenellipses' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
321 ): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
322 getbundlechangegrouppart_narrow(*args, **kwargs) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
323 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
324 origcgfn(*args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
325 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 exchange.getbundle2partsmapping[b'changegroup'] = wrappedcgfn |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
327 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
328 # 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
|
329 origcghandler = bundle2.parthandlermapping[b'changegroup'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
330 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
331 def wrappedcghandler(op, inpart): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
332 origcghandler(op, inpart) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
333 if util.safehasattr(op, '_widen_bundle'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
334 handlechangegroup_widen(op, inpart) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
335 if util.safehasattr(op, '_bookmarksbackup'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
336 localrepo.localrepository._bookmarks.set( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
337 op.repo, op._bookmarksbackup |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42895
diff
changeset
|
338 ) |
40868
109a267acc1e
narrow: keep bookmarks temporarily stripped for as long as commits are
Martin von Zweigbergk <martinvonz@google.com>
parents:
40867
diff
changeset
|
339 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
|
340 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
341 wrappedcghandler.params = origcghandler.params |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 bundle2.parthandlermapping[b'changegroup'] = wrappedcghandler |