Mercurial > hg
annotate mercurial/discovery.py @ 52154:6ca0771b32ef stable
tests: disable `test-git-interop.t` with a requirements directive
Note that the failures in this test affect all platforms.
I don't like this, but the test has been broken for awhile because of dirstate
API changes, and nobody noticed because the required `pygit2` package isn't
installed on the CI systems. I did install it on the mac CI system, which
triggers this failure. Disabling it is no worse than not running it due to the
missing package, but at least this way the CI systems can get the package
installed, and the test can be enabled and fixed eventually, without needing to
alter the CI systems.
The feature here is kind of abused. I thought about adding one specifically to
test for CI, but didn't feel like doing it at this point. Maybe if we need to
disable things to get the Windows CI off the ground (but that likely requires
testing for CI + platform).
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 11 Oct 2024 11:03:21 -0400 |
parents | f4733654f144 |
children |
rev | line source |
---|---|
11313
0bb14798cd07
discovery: fix description line
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11301
diff
changeset
|
1 # discovery.py - protocol changeset discovery functions |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46780
diff
changeset
|
3 # Copyright 2010 Olivia Mackall <olivia@selenic.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
7 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51595
diff
changeset
|
8 from __future__ import annotations |
25944
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
9 |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
10 import functools |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
11 |
25944
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
12 from .i18n import _ |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
13 from .node import ( |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
14 hex, |
25944
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
15 short, |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
16 ) |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
17 |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
18 from . import ( |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
19 bookmarks, |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
20 branchmap, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26585
diff
changeset
|
21 error, |
51594
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
22 node as nodemod, |
48688
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
23 obsolete, |
25944
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
24 phases, |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
25 pycompat, |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
32792
diff
changeset
|
26 scmutil, |
25944
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
27 setdiscovery, |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
28 treediscovery, |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
29 util, |
337d010f31e6
discovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24702
diff
changeset
|
30 ) |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
31 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
32 |
35305
483b5dd0f1aa
push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
33 def findcommonincoming(repo, remote, heads=None, force=False, ancestorsof=None): |
14073
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
34 """Return a tuple (common, anyincoming, heads) used to identify the common |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
35 subset of nodes between repo and remote. |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
36 |
14073
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
37 "common" is a list of (at least) the heads of the common subset. |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
38 "anyincoming" is testable as a boolean indicating if any nodes are missing |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
39 locally. If remote does not support getbundle, this actually is a list of |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
40 roots of the nodes that would be incoming, to be supplied to |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
41 changegroupsubset. No code except for pull should be relying on this fact |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
42 any longer. |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
43 "heads" is either the supplied heads, or else the remote's heads. |
35305
483b5dd0f1aa
push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
44 "ancestorsof" if not None, restrict the discovery to a subset defined by |
45142
75f6491b66a7
discovery: weaken claim about returned common heads if ancestorsof are given
Manuel Jacob <me@manueljacob.de>
parents:
44729
diff
changeset
|
45 these nodes. Changeset outside of this set won't be considered (but may |
75f6491b66a7
discovery: weaken claim about returned common heads if ancestorsof are given
Manuel Jacob <me@manueljacob.de>
parents:
44729
diff
changeset
|
46 still appear in "common"). |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
47 |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17254
diff
changeset
|
48 If you pass heads and they are all known locally, the response lists just |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
49 these heads in "common" and in "heads". |
14213
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
50 |
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
51 Please use findcommonoutgoing to compute the set of outgoing nodes to give |
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
52 extensions a good hook into outgoing. |
11301
3d0591a66118
move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11230
diff
changeset
|
53 """ |
14073
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13742
diff
changeset
|
54 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 if not remote.capable(b'getbundle'): |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
56 return treediscovery.findcommonincoming(repo, remote, heads, force) |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
57 |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
58 if heads: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
59 knownnode = repo.changelog.hasnode # no nodemap until it is filtered |
35879
6c1d3779c052
discovery: don't reimplement all()
Martin von Zweigbergk <martinvonz@google.com>
parents:
35849
diff
changeset
|
60 if all(knownnode(h) for h in heads): |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
61 return (heads, False, heads) |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
62 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
63 res = setdiscovery.findcommonheads( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
64 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
65 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
66 remote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
67 abortwhenunrelated=not force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
68 ancestorsof=ancestorsof, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
69 ) |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
70 common, anyinc, srvheads = res |
44667
b561f3a68e41
discovery: avoid wrongly saying there are nothing to pull
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44450
diff
changeset
|
71 if heads and not anyinc: |
b561f3a68e41
discovery: avoid wrongly saying there are nothing to pull
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44450
diff
changeset
|
72 # server could be lying on the advertised heads |
b561f3a68e41
discovery: avoid wrongly saying there are nothing to pull
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44450
diff
changeset
|
73 has_node = repo.changelog.hasnode |
b561f3a68e41
discovery: avoid wrongly saying there are nothing to pull
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44450
diff
changeset
|
74 anyinc = any(not has_node(n) for n in heads) |
14164
cb98fed52495
discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
75 return (list(common), anyinc, heads or list(srvheads)) |
11301
3d0591a66118
move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11230
diff
changeset
|
76 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
77 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
78 class outgoing: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
79 """Represents the result of a findcommonoutgoing() call. |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
80 |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
81 Members: |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
82 |
45143
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
83 ancestorsof is a list of the nodes whose ancestors are included in the |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
84 outgoing operation. |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
85 |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
86 missing is a list of those ancestors of ancestorsof that are present in |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
87 local but not in remote. |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
88 |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
89 common is a set containing revs common between the local and the remote |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
90 repository (at least all of those that are ancestors of ancestorsof). |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
91 |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
92 commonheads is the list of heads of common. |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
93 |
45143
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
94 excluded is the list of missing changeset that shouldn't be sent |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
95 remotely. |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
96 |
5631b0116374
discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de>
parents:
45142
diff
changeset
|
97 Some members are computed on demand from the heads, unless provided upfront |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
98 by discovery.""" |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
99 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
100 def __init__( |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
101 self, repo, commonheads=None, ancestorsof=None, missingroots=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
102 ): |
51594
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
103 # at most one of them must not be set |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
104 if commonheads is not None and missingroots is not None: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
105 m = 'commonheads and missingroots arguments are mutually exclusive' |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
106 raise error.ProgrammingError(m) |
29805
f09d0004481c
outgoing: adds some default value for argument
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29804
diff
changeset
|
107 cl = repo.changelog |
51595
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
108 unfi = repo.unfiltered() |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
109 ucl = unfi.changelog |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
110 to_node = ucl.node |
51594
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
111 missing = None |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
112 common = None |
51595
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
113 arg_anc = ancestorsof |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
114 if ancestorsof is None: |
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
115 ancestorsof = cl.heads() |
51595
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
116 |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
117 # XXX-perf: do we need all this to be node-list? They would be simpler |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
118 # as rev-num sets (and smartset) |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
119 if missingroots == [nodemod.nullrev] or missingroots == []: |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
120 commonheads = [repo.nullid] |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
121 common = set() |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
122 if arg_anc is None: |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
123 missing = [to_node(r) for r in cl] |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
124 else: |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
125 missing_rev = repo.revs('::%ln', missingroots, ancestorsof) |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
126 missing = [to_node(r) for r in missing_rev] |
3a6fae3bef35
outgoing: add a simple fastpath when there is no common
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51594
diff
changeset
|
127 elif missingroots is not None: |
29806
82e8c86cdd6d
outgoing: add a 'missingroots' argument
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29805
diff
changeset
|
128 # TODO remove call to nodesbetween. |
51594
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
129 missing_rev = repo.revs('%ln::%ln', missingroots, ancestorsof) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
130 ancestorsof = [to_node(r) for r in ucl.headrevs(missing_rev)] |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
131 parent_revs = ucl.parentrevs |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
132 common_legs = set() |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
133 for r in missing_rev: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
134 p1, p2 = parent_revs(r) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
135 if p1 not in missing_rev: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
136 common_legs.add(p1) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
137 if p2 not in missing_rev: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
138 common_legs.add(p2) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
139 common_legs.discard(nodemod.nullrev) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
140 if not common_legs: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
141 commonheads = [repo.nullid] |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
142 common = set() |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
143 else: |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
144 commonheads_revs = unfi.revs( |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
145 'heads(%ld::%ld)', |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
146 common_legs, |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
147 common_legs, |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
148 ) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
149 commonheads = [to_node(r) for r in commonheads_revs] |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
150 common = ucl.ancestors(commonheads_revs, inclusive=True) |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
151 missing = [to_node(r) for r in missing_rev] |
29806
82e8c86cdd6d
outgoing: add a 'missingroots' argument
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29805
diff
changeset
|
152 elif not commonheads: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
153 commonheads = [repo.nullid] |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
154 self.commonheads = commonheads |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
155 self.ancestorsof = ancestorsof |
29805
f09d0004481c
outgoing: adds some default value for argument
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29804
diff
changeset
|
156 self._revlog = cl |
51594
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
157 self._common = common |
e3a5ec2d236a
outgoing: rework the handling of the `missingroots` case to be faster
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51580
diff
changeset
|
158 self._missing = missing |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
159 self.excluded = [] |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
160 |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
161 def _computecommonmissing(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
162 sets = self._revlog.findcommonmissing( |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
163 self.commonheads, self.ancestorsof |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
164 ) |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
165 self._common, self._missing = sets |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
166 |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
167 @util.propertycache |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
168 def common(self): |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
169 if self._common is None: |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
170 self._computecommonmissing() |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
171 return self._common |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
172 |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
173 @util.propertycache |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
174 def missing(self): |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
175 if self._missing is None: |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
176 self._computecommonmissing() |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
177 return self._missing |
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
178 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
179 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
180 def findcommonoutgoing( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
181 repo, other, onlyheads=None, force=False, commoninc=None, portable=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
182 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
183 """Return an outgoing instance to identify the nodes present in repo but |
15837
cd956049fc14
discovery: introduce outgoing object for result of findcommonoutgoing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15713
diff
changeset
|
184 not in other. |
14213
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
185 |
16683 | 186 If onlyheads is given, only nodes ancestral to nodes in onlyheads |
187 (inclusive) are included. If you already know the local repo's heads, | |
188 passing them in onlyheads is faster than letting them be recomputed here. | |
14213
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
189 |
17251
98166640b356
help: fix some instances of 'the the'
Mads Kiilerich <mads@kiilerich.com>
parents:
17248
diff
changeset
|
190 If commoninc is given, it must be the result of a prior call to |
16736
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
191 findcommonincoming(repo, other, force) to avoid recomputing it here. |
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
192 |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
193 If portable is given, compute more conservative common and ancestorsof, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
194 to make bundles created from the instance more portable.""" |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
195 # declare an empty outgoing object to be filled later |
29804
7b9157aa752f
outgoing: pass a repo object to the constructor
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29690
diff
changeset
|
196 og = outgoing(repo, None, None) |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
197 |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
198 # get common set if not provided |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
199 if commoninc is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
200 commoninc = findcommonincoming( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
201 repo, other, force=force, ancestorsof=onlyheads |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
202 ) |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
203 og.commonheads, _any, _hds = commoninc |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
204 |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
205 # compute outgoing |
51402
2e10ddbb9faa
phases: check secret presence the right way during discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50393
diff
changeset
|
206 mayexclude = phases.hassecret(repo) or repo.obsstore |
17206
70ebb4bd8083
obsolete: do not exchange extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17205
diff
changeset
|
207 if not mayexclude: |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
208 og.ancestorsof = onlyheads or repo.heads() |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
209 elif onlyheads is None: |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
210 # use visible heads as it should be cached |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
211 og.ancestorsof = repo.filtered(b"served").heads() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 og.excluded = [ctx.node() for ctx in repo.set(b'secret() or extinct()')] |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
213 else: |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
214 # compute common, missing and exclude secret stuff |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
215 sets = repo.changelog.findcommonmissing(og.commonheads, onlyheads) |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
216 og._common, allmissing = sets |
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
217 og._missing = missing = [] |
15951
bd84fc0b5f64
phases: properly register excluded changeset when revision are specified
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15932
diff
changeset
|
218 og.excluded = excluded = [] |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
219 for node in allmissing: |
17206
70ebb4bd8083
obsolete: do not exchange extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17205
diff
changeset
|
220 ctx = repo[node] |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17214
diff
changeset
|
221 if ctx.phase() >= phases.secret or ctx.extinct(): |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17214
diff
changeset
|
222 excluded.append(node) |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17214
diff
changeset
|
223 else: |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17214
diff
changeset
|
224 missing.append(node) |
17206
70ebb4bd8083
obsolete: do not exchange extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17205
diff
changeset
|
225 if len(missing) == len(allmissing): |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
226 ancestorsof = onlyheads |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
227 else: # update missing heads |
51580
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
228 to_rev = repo.changelog.index.rev |
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
229 to_node = repo.changelog.node |
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
230 excluded_revs = [to_rev(r) for r in excluded] |
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
231 onlyheads_revs = [to_rev(r) for r in onlyheads] |
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
232 new_heads = phases.new_heads(repo, onlyheads_revs, excluded_revs) |
b70628a9aa7e
phases: use revision number in new_heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51402
diff
changeset
|
233 ancestorsof = [to_node(r) for r in new_heads] |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
234 og.ancestorsof = ancestorsof |
16736
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
235 if portable: |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
236 # recompute common and ancestorsof as if -r<rev> had been given for |
16736
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
237 # each head of missing, and --base <rev> for each head of the proper |
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
238 # ancestors of missing |
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
239 og._computecommonmissing() |
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
240 cl = repo.changelog |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44306
diff
changeset
|
241 missingrevs = {cl.rev(n) for n in og._missing} |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16835
diff
changeset
|
242 og._common = set(cl.ancestors(missingrevs)) - missingrevs |
16736
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
243 commonheads = set(og.commonheads) |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
244 og.ancestorsof = [h for h in og.ancestorsof if h not in commonheads] |
16736
025b3b763ba9
bundle: make bundles more portable (isue3441)
Sune Foldager <cryo@cyanite.org>
parents:
16535
diff
changeset
|
245 |
15838
7299e09a85a2
phases: make outgoing object and discovery aware of exclusion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15837
diff
changeset
|
246 return og |
14213
30273f0c776b
discovery: resurrect findoutgoing as findcommonoutgoing for extension hooks
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14184
diff
changeset
|
247 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
248 |
32706
993f58db2045
headssummary: directly feed the function with the 'pushop' object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32705
diff
changeset
|
249 def _headssummary(pushop): |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
250 """compute a summary of branch and heads status before and after push |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
251 |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
252 return {'branch': ([remoteheads], [newheads], |
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
253 [unsyncedheads], [discardedheads])} mapping |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
254 |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
255 - branch: the branch name, |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
256 - remoteheads: the list of remote heads known locally |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
257 None if the branch is new, |
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
258 - newheads: the new remote heads (known locally) with outgoing pushed, |
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
259 - unsyncedheads: the list of remote heads unknown locally, |
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
260 - discardedheads: the list of heads made obsolete by the push. |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
261 """ |
32706
993f58db2045
headssummary: directly feed the function with the 'pushop' object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32705
diff
changeset
|
262 repo = pushop.repo.unfiltered() |
993f58db2045
headssummary: directly feed the function with the 'pushop' object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32705
diff
changeset
|
263 remote = pushop.remote |
993f58db2045
headssummary: directly feed the function with the 'pushop' object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32705
diff
changeset
|
264 outgoing = pushop.outgoing |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
265 cl = repo.changelog |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
266 headssum = {} |
42026
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
267 missingctx = set() |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
268 # A. Create set of branches involved in the push. |
42026
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
269 branches = set() |
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
270 for n in outgoing.missing: |
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
271 ctx = repo[n] |
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
272 missingctx.add(ctx) |
98908e36d58a
discovery: prevent recomputing info about server and outgoing changesets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
41566
diff
changeset
|
273 branches.add(ctx.branch()) |
37637
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
274 |
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
275 with remote.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
276 remotemap = e.callcommand(b'branchmap', {}).result() |
37637
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
277 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
278 knownnode = cl.hasnode # do not use nodemap until it is filtered |
42028
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
279 # A. register remote heads of branches which are in outgoing set |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
280 for branch, heads in remotemap.items(): |
42028
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
281 # don't add head info about branches which we don't have locally |
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
282 if branch not in branches: |
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
283 continue |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
284 known = [] |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
285 unsynced = [] |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
286 for h in heads: |
20225
d2704c48f417
discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20184
diff
changeset
|
287 if knownnode(h): |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
288 known.append(h) |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
289 else: |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
290 unsynced.append(h) |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
291 headssum[branch] = (known, list(known), unsynced) |
42028
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
292 |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
293 # B. add new branch data |
42027
d36a7da96a5a
discovery: drop some unused sets
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42026
diff
changeset
|
294 for branch in branches: |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
295 if branch not in headssum: |
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
296 headssum[branch] = (None, [], []) |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
297 |
42028
0cc9d7918754
discovery: prevent deleting items from a dictionary
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42027
diff
changeset
|
298 # C. Update newmap with outgoing changes. |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
299 # This will possibly add new heads and remove existing ones. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
300 newmap = branchmap.remotebranchcache( |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46119
diff
changeset
|
301 repo, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46119
diff
changeset
|
302 ( |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46119
diff
changeset
|
303 (branch, heads[1]) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
304 for branch, heads in headssum.items() |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46119
diff
changeset
|
305 if heads[0] is not None |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46119
diff
changeset
|
306 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
307 ) |
18305
2502a15e033d
branchmap: pass revision insteads of changectx to the update function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18284
diff
changeset
|
308 newmap.update(repo, (ctx.rev() for ctx in missingctx)) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
309 for branch, newheads in newmap.items(): |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
310 headssum[branch][1][:] = newheads |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
311 for branch, items in headssum.items(): |
32672
315d74d0f059
headssummary: ensure all returned lists are sorted
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32671
diff
changeset
|
312 for l in items: |
315d74d0f059
headssummary: ensure all returned lists are sorted
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32671
diff
changeset
|
313 if l is not None: |
315d74d0f059
headssummary: ensure all returned lists are sorted
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32671
diff
changeset
|
314 l.sort() |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
315 headssum[branch] = items + ([],) |
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
316 |
32707
32c8f98aebf4
checkheads: perform obsolescence post processing directly in _headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32706
diff
changeset
|
317 # If there are no obsstore, no post processing are needed. |
32c8f98aebf4
checkheads: perform obsolescence post processing directly in _headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32706
diff
changeset
|
318 if repo.obsstore: |
32791
1cb14923dee9
checkheads: use "revnum" in the "allfuturecommon" set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32790
diff
changeset
|
319 torev = repo.changelog.rev |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45143
diff
changeset
|
320 futureheads = {torev(h) for h in outgoing.ancestorsof} |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44306
diff
changeset
|
321 futureheads |= {torev(h) for h in outgoing.commonheads} |
32792
4374e88e808c
checkheads: use a "lazyancestors" object for allfuturecommon
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32791
diff
changeset
|
322 allfuturecommon = repo.changelog.ancestors(futureheads, inclusive=True) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
323 for branch, heads in sorted(pycompat.iteritems(headssum)): |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
324 remoteheads, newheads, unsyncedheads, placeholder = heads |
32707
32c8f98aebf4
checkheads: perform obsolescence post processing directly in _headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32706
diff
changeset
|
325 result = _postprocessobsolete(pushop, allfuturecommon, newheads) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
326 headssum[branch] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
327 remoteheads, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
328 sorted(result[0]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
329 unsyncedheads, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
330 sorted(result[1]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
331 ) |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
332 return headssum |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
333 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
334 |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
335 def _oldheadssummary(repo, remoteheads, outgoing, inc=False): |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
336 """Compute branchmapsummary for repo without branchmap support""" |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
337 |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
338 # 1-4b. old servers: Check for new topological heads. |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
339 # Construct {old,new}map with branch = None (topological branch). |
18120
88990d3e3d75
branchmap: extract _updatebranchcache from repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18104
diff
changeset
|
340 # (code based on update) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
341 knownnode = repo.changelog.hasnode # no nodemap until it is filtered |
32672
315d74d0f059
headssummary: ensure all returned lists are sorted
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32671
diff
changeset
|
342 oldheads = sorted(h for h in remoteheads if knownnode(h)) |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
343 # all nodes in outgoing.missing are children of either: |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
344 # - an element of oldheads |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
345 # - another element of outgoing.missing |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
346 # - nullrev |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
347 # This explains why the new head are very simple to compute. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
348 r = repo.set(b'heads(%ln + %ln)', oldheads, outgoing.missing) |
32672
315d74d0f059
headssummary: ensure all returned lists are sorted
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32671
diff
changeset
|
349 newheads = sorted(c.node() for c in r) |
22178
70383c6961b4
discovery: prevent crash on unknown remote heads with old repo (issue4337)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21580
diff
changeset
|
350 # set some unsynced head to issue the "unsynced changes" warning |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22178
diff
changeset
|
351 if inc: |
32671
81cbfaea1e0f
discovery: also use lists for the returns of '_oldheadssummary'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32331
diff
changeset
|
352 unsynced = [None] |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22178
diff
changeset
|
353 else: |
32671
81cbfaea1e0f
discovery: also use lists for the returns of '_oldheadssummary'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32331
diff
changeset
|
354 unsynced = [] |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
355 return {None: (oldheads, newheads, unsynced, [])} |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
356 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
357 |
26936
d47ac02fcefa
discovery: pass pushop to _nowarnheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26935
diff
changeset
|
358 def _nowarnheads(pushop): |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
359 # Compute newly pushed bookmarks. We don't warn about bookmarked heads. |
26936
d47ac02fcefa
discovery: pass pushop to _nowarnheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26935
diff
changeset
|
360 repo = pushop.repo.unfiltered() |
d47ac02fcefa
discovery: pass pushop to _nowarnheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26935
diff
changeset
|
361 remote = pushop.remote |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
362 localbookmarks = repo._bookmarks |
37637
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
363 |
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
364 with remote.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
365 remotebookmarks = e.callcommand( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
366 b'listkeys', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
367 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
368 b'namespace': b'bookmarks', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
369 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
370 ).result() |
37637
1964d2d1f421
discovery: use command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37636
diff
changeset
|
371 |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
372 bookmarkedheads = set() |
29229
89bba2beb03e
bookmarks: allow pushing active bookmark on new remote head (issue5236)
liscju <piotr.listkiewicz@gmail.com>
parents:
26936
diff
changeset
|
373 |
89bba2beb03e
bookmarks: allow pushing active bookmark on new remote head (issue5236)
liscju <piotr.listkiewicz@gmail.com>
parents:
26936
diff
changeset
|
374 # internal config: bookmarks.pushing |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
375 newbookmarks = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
376 localbookmarks.expandname(b) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 for b in pushop.ui.configlist(b'bookmarks', b'pushing') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
378 ] |
29229
89bba2beb03e
bookmarks: allow pushing active bookmark on new remote head (issue5236)
liscju <piotr.listkiewicz@gmail.com>
parents:
26936
diff
changeset
|
379 |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
380 for bm in localbookmarks: |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
381 rnode = remotebookmarks.get(bm) |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
382 if rnode and rnode in repo: |
42978
e3bb2a58af1e
bookmarks: remove changectx() method from bmstore (API)
Augie Fackler <augie@google.com>
parents:
42216
diff
changeset
|
383 lctx, rctx = repo[localbookmarks[bm]], repo[rnode] |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
384 if bookmarks.validdest(repo, rctx, lctx): |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
385 bookmarkedheads.add(lctx.node()) |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
386 else: |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
387 if bm in newbookmarks and bm not in remotebookmarks: |
37451
444ed53f93df
discovery: look up bookmarks only among bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
36715
diff
changeset
|
388 bookmarkedheads.add(localbookmarks[bm]) |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
389 |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
390 return bookmarkedheads |
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
391 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
392 |
26935
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
393 def checkheads(pushop): |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
394 """Check that a push won't add any outgoing head |
3684
975c2469c316
correct remote heads test in prepush
Matt Mackall <mpm@selenic.com>
parents:
3682
diff
changeset
|
395 |
46119
9261f6c1d39b
errors: raise StateError when push fails because it creates new heads
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
396 raise StateError error and display ui message as needed. |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
397 """ |
26935
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
398 |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
399 repo = pushop.repo.unfiltered() |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
400 remote = pushop.remote |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
401 outgoing = pushop.outgoing |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
402 remoteheads = pushop.remoteheads |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
403 newbranch = pushop.newbranch |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
404 inc = bool(pushop.incoming) |
c4a7bbc78c74
exchange: pass pushop to discovery.checkheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26862
diff
changeset
|
405 |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
406 # Check for each named branch if we're creating new remote heads. |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
407 # To be a remote head after push, node must be either: |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
408 # - unknown locally |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
409 # - a local outgoing head descended from update |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
410 # - a remote head that's known locally and not |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
411 # ancestral to an outgoing head |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
412 if remoteheads == [repo.nullid]: |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
413 # remote is empty, nothing to check. |
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
414 return |
2439
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
415 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 if remote.capable(b'branchmap'): |
32706
993f58db2045
headssummary: directly feed the function with the 'pushop' object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32705
diff
changeset
|
417 headssum = _headssummary(pushop) |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
418 else: |
17211
4f321eecbf8d
checkheads: simplify the structure build by preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17209
diff
changeset
|
419 headssum = _oldheadssummary(repo, remoteheads, outgoing, inc) |
32709
16ada4cbb1a9
push: add a way to allow concurrent pushes on unrelated heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32708
diff
changeset
|
420 pushop.pushbranchmap = headssum |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
421 newbranches = [ |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
422 branch for branch, heads in headssum.items() if heads[0] is None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
423 ] |
17209
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
424 # 1. Check for new branches on the remote. |
5cd3e526ac37
checkheads: extract branchmap preprocessing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17206
diff
changeset
|
425 if newbranches and not newbranch: # new branch requires --new-branch |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
426 branchnames = b', '.join(sorted(newbranches)) |
42216
d0e773ad9077
discovery: only calculate closed branches if required
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42203
diff
changeset
|
427 # Calculate how many of the new branches are closed branches |
d0e773ad9077
discovery: only calculate closed branches if required
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42203
diff
changeset
|
428 closedbranches = set() |
d0e773ad9077
discovery: only calculate closed branches if required
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42203
diff
changeset
|
429 for tag, heads, tip, isclosed in repo.branchmap().iterbranches(): |
d0e773ad9077
discovery: only calculate closed branches if required
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42203
diff
changeset
|
430 if isclosed: |
d0e773ad9077
discovery: only calculate closed branches if required
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42203
diff
changeset
|
431 closedbranches.add(tag) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
432 closedbranches = closedbranches & set(newbranches) |
42203
5997eabc7b85
push: added clear warning message when pushing closed branches(issue6080)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42029
diff
changeset
|
433 if closedbranches: |
45908
122f0b59f5f0
errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents:
45144
diff
changeset
|
434 errmsg = _(b"push creates new remote branches: %s (%d closed)") % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
435 branchnames, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
436 len(closedbranches), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
437 ) |
42203
5997eabc7b85
push: added clear warning message when pushing closed branches(issue6080)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42029
diff
changeset
|
438 else: |
45908
122f0b59f5f0
errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents:
45144
diff
changeset
|
439 errmsg = _(b"push creates new remote branches: %s") % branchnames |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
440 hint = _(b"use 'hg push --new-branch' to create new remote branches") |
46119
9261f6c1d39b
errors: raise StateError when push fails because it creates new heads
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
441 raise error.StateError(errmsg, hint=hint) |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
442 |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
443 # 2. Find heads that we need not warn about |
26936
d47ac02fcefa
discovery: pass pushop to _nowarnheads
Ryan McElroy <rmcelroy@fb.com>
parents:
26935
diff
changeset
|
444 nowarnheads = _nowarnheads(pushop) |
17212
246131d670c2
checkheads: extract bookmark computation from the branch loop
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17211
diff
changeset
|
445 |
246131d670c2
checkheads: extract bookmark computation from the branch loop
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17211
diff
changeset
|
446 # 3. Check for new heads. |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
447 # If there are more heads after the push than before, a suitable |
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
448 # error message, depending on unsynced status, is displayed. |
26585
b38d93735a4f
discovery: rename 'error' to 'errormsg'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25944
diff
changeset
|
449 errormsg = None |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
450 for branch, heads in sorted(pycompat.iteritems(headssum)): |
32708
90cb4ec8df64
headsummary: expose the 'discardedheads' set in the headssummary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
451 remoteheads, newheads, unsyncedheads, discardedheads = heads |
17214
738ad56dd8a6
checkheads: take future obsoleted heads into account
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17212
diff
changeset
|
452 # add unsynced data |
20381
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
453 if remoteheads is None: |
19840
b00ba31313c3
discovery: abort also when pushing multiple headed new branch
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18382
diff
changeset
|
454 oldhs = set() |
b00ba31313c3
discovery: abort also when pushing multiple headed new branch
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18382
diff
changeset
|
455 else: |
20381
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
456 oldhs = set(remoteheads) |
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
457 oldhs.update(unsyncedheads) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
458 dhs = None # delta heads, the new heads on branch |
32675
fc9296c15112
checkheads: simplify the code around obsolescence post-processing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32674
diff
changeset
|
459 newhs = set(newheads) |
32673
bd966b9f3274
checkheads: clarify that we no longer touch the head unknown locally
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32672
diff
changeset
|
460 newhs.update(unsyncedheads) |
32674
7a7c4f3afb98
checkheads: drop now unused filtering of 'unsyncedheads'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32673
diff
changeset
|
461 if unsyncedheads: |
7a7c4f3afb98
checkheads: drop now unused filtering of 'unsyncedheads'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32673
diff
changeset
|
462 if None in unsyncedheads: |
22178
70383c6961b4
discovery: prevent crash on unknown remote heads with old repo (issue4337)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21580
diff
changeset
|
463 # old remote, no heads data |
70383c6961b4
discovery: prevent crash on unknown remote heads with old repo (issue4337)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21580
diff
changeset
|
464 heads = None |
21198
56a04085c23c
discovery: don't report all "unsynced" remote heads (issue4230)
Mads Kiilerich <madski@unity3d.com>
parents:
20502
diff
changeset
|
465 else: |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
32792
diff
changeset
|
466 heads = scmutil.nodesummaries(repo, unsyncedheads) |
22178
70383c6961b4
discovery: prevent crash on unknown remote heads with old repo (issue4337)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21580
diff
changeset
|
467 if heads is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
468 repo.ui.status( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
469 _(b"remote has heads that are not known locally\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
470 ) |
22178
70383c6961b4
discovery: prevent crash on unknown remote heads with old repo (issue4337)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21580
diff
changeset
|
471 elif branch is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
472 repo.ui.status( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
473 _(b"remote has heads that are not known locally: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
474 % heads |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
475 ) |
20501
8a9e0b523d2d
discovery: improve "note: unsynced remote changes!" warning
Mads Kiilerich <madski@unity3d.com>
parents:
20403
diff
changeset
|
476 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
477 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
478 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
479 b"remote has heads on branch '%s' that are " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 b"not known locally: %s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
481 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
482 % (branch, heads) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
483 ) |
20381
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
484 if remoteheads is None: |
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
485 if len(newhs) > 1: |
19840
b00ba31313c3
discovery: abort also when pushing multiple headed new branch
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18382
diff
changeset
|
486 dhs = list(newhs) |
26585
b38d93735a4f
discovery: rename 'error' to 'errormsg'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25944
diff
changeset
|
487 if errormsg is None: |
43049
6e8582ccf76d
discovery: re-wrap expression to avoid a black bug
Augie Fackler <augie@google.com>
parents:
42978
diff
changeset
|
488 errormsg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
489 _(b"push creates new branch '%s' with multiple heads") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
490 % branch |
43049
6e8582ccf76d
discovery: re-wrap expression to avoid a black bug
Augie Fackler <augie@google.com>
parents:
42978
diff
changeset
|
491 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
492 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
493 b"merge or" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
494 b" see 'hg help push' for details about" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
495 b" pushing new heads" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
496 ) |
19840
b00ba31313c3
discovery: abort also when pushing multiple headed new branch
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18382
diff
changeset
|
497 elif len(newhs) > len(oldhs): |
20381
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
498 # remove bookmarked or existing remote heads from the new heads list |
26862
894f54d84d4a
discovery: factor out calculation of heads to not warn about
Ryan McElroy <rmcelroy@fb.com>
parents:
26819
diff
changeset
|
499 dhs = sorted(newhs - nowarnheads - oldhs) |
16835
4267c840c481
bookmarks: allow existing remote bookmarks to become heads when pushing
Levi Bard <levi@unity3d.com>
parents:
16746
diff
changeset
|
500 if dhs: |
26585
b38d93735a4f
discovery: rename 'error' to 'errormsg'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25944
diff
changeset
|
501 if errormsg is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 if branch not in (b'default', None): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
503 errormsg = _( |
45908
122f0b59f5f0
errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents:
45144
diff
changeset
|
504 b"push creates new remote head %s on branch '%s'" |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
505 ) % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
506 short(dhs[0]), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
507 branch, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45908
diff
changeset
|
508 ) |
21580
32601b0b74c0
discovery: if a push would create a new head, mention the bookmark name if any
Stephen Lee <sphen.lee@gmail.com>
parents:
21198
diff
changeset
|
509 elif repo[dhs[0]].bookmarks(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
510 errormsg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 b"push creates new remote head %s " |
45908
122f0b59f5f0
errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents:
45144
diff
changeset
|
512 b"with bookmark '%s'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
513 ) % (short(dhs[0]), repo[dhs[0]].bookmarks()[0]) |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
514 else: |
45908
122f0b59f5f0
errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents:
45144
diff
changeset
|
515 errormsg = _(b"push creates new remote head %s") % short( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
516 dhs[0] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
517 ) |
20381
fff0a71f8177
discovery: cleanup of variable names and comments
Mads Kiilerich <madski@unity3d.com>
parents:
20225
diff
changeset
|
518 if unsyncedheads: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
519 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
520 b"pull and merge or" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
521 b" see 'hg help push' for details about" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
522 b" pushing new heads" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
523 ) |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
524 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
525 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
526 b"merge or" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
527 b" see 'hg help push' for details about" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
528 b" pushing new heads" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
529 ) |
20051
b988b3b19303
discovery: make note messages for new heads more readable
Mads Kiilerich <madski@unity3d.com>
parents:
20050
diff
changeset
|
530 if branch is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 repo.ui.note(_(b"new remote heads:\n")) |
20051
b988b3b19303
discovery: make note messages for new heads more readable
Mads Kiilerich <madski@unity3d.com>
parents:
20050
diff
changeset
|
532 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
533 repo.ui.note(_(b"new remote heads on branch '%s':\n") % branch) |
15932
4154338f0bc0
discovery: diet discovery.prepush from non-discovery code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15893
diff
changeset
|
534 for h in dhs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 repo.ui.note(b" %s\n" % short(h)) |
26585
b38d93735a4f
discovery: rename 'error' to 'errormsg'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25944
diff
changeset
|
536 if errormsg: |
46119
9261f6c1d39b
errors: raise StateError when push fails because it creates new heads
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
537 raise error.StateError(errormsg, hint=hint) |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
538 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
539 |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
540 def _postprocessobsolete(pushop, futurecommon, candidate_newhs): |
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
541 """post process the list of new heads with obsolescence information |
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
542 |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
543 Exists as a sub-function to contain the complexity and allow extensions to |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
544 experiment with smarter logic. |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
545 |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
546 Returns (newheads, discarded_heads) tuple |
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
547 """ |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
548 # known issue |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
549 # |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
550 # * We "silently" skip processing on all changeset unknown locally |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
551 # |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
552 # * if <nh> is public on the remote, it won't be affected by obsolete |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
553 # marker and a new is created |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
554 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
555 # define various utilities and containers |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
556 repo = pushop.repo |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
557 unfi = repo.unfiltered() |
43560
65d6770273c8
index: use `index.get_rev` in `discovery._postprocessobsolete`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
558 torev = unfi.changelog.index.get_rev |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
559 public = phases.public |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
560 getphase = unfi._phasecache.phase |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
561 ispublic = lambda r: getphase(unfi, r) == public |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
562 ispushed = lambda n: torev(n) in futurecommon |
32789
443e8543a125
checkheads: pass "ispushed" function to the obsmarkers logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32709
diff
changeset
|
563 hasoutmarker = functools.partial(pushingmarkerfor, unfi.obsstore, ispushed) |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
564 successorsmarkers = unfi.obsstore.successors |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
565 newhs = set() # final set of new heads |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
566 discarded = set() # new head of fully replaced branch |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
567 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
568 localcandidate = set() # candidate heads known locally |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
569 unknownheads = set() # candidate heads unknown locally |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
570 for h in candidate_newhs: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
571 if h in unfi: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
572 localcandidate.add(h) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
573 else: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
574 if successorsmarkers.get(h) is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
575 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
576 b'checkheads: remote head unknown locally has' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
577 b' local marker: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
578 ) |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
579 repo.ui.debug(msg % hex(h)) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
580 unknownheads.add(h) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
581 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
582 # fast path the simple case |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
583 if len(localcandidate) == 1: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
584 return unknownheads | set(candidate_newhs), set() |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
585 |
48688
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
586 obsrevs = obsolete.getrevs(unfi, b'obsolete') |
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
587 futurenonobsolete = frozenset(futurecommon) - obsrevs |
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
588 |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
589 # actually process branch replacement |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
590 while localcandidate: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
591 nh = localcandidate.pop() |
48688
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
592 r = torev(nh) |
44450
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
593 current_branch = unfi[nh].branch() |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
594 # run this check early to skip the evaluation of the whole branch |
48688
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
595 if ispublic(r) or r not in obsrevs: |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
596 newhs.add(nh) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
597 continue |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
598 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
599 # Get all revs/nodes on the branch exclusive to this head |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
600 # (already filtered heads are "ignored")) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 branchrevs = unfi.revs( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 b'only(%n, (%ln+%ln))', nh, localcandidate, newhs |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
603 ) |
44450
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
604 |
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
605 branchnodes = [] |
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
606 for r in branchrevs: |
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
607 c = unfi[r] |
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
608 if c.branch() == current_branch: |
7d5455b988ec
discovery: avoid wrong detection of multiple branch heads (issue6256)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43560
diff
changeset
|
609 branchnodes.append(c.node()) |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
610 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
611 # The branch won't be hidden on the remote if |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
612 # * any part of it is public, |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
613 # * any part of it is considered part of the result by previous logic, |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
614 # * if we have no markers to push to obsolete it. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
615 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
616 any(ispublic(r) for r in branchrevs) |
48688
053a5bf508da
discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net>
parents:
48530
diff
changeset
|
617 or any(torev(n) in futurenonobsolete for n in branchnodes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
618 or any(not hasoutmarker(n) for n in branchnodes) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
619 ): |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
620 newhs.add(nh) |
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
621 else: |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
622 # note: there is a corner case if there is a merge in the branch. |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
623 # we might end up with -more- heads. However, these heads are not |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
624 # "added" by the push, but more by the "removal" on the remote so I |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
625 # think is a okay to ignore them, |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
626 discarded.add(nh) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
627 newhs |= unknownheads |
31586
df82f375fa00
checkheads: extract obsolete post processing in its own function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29973
diff
changeset
|
628 return newhs, discarded |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
629 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
630 |
32789
443e8543a125
checkheads: pass "ispushed" function to the obsmarkers logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32709
diff
changeset
|
631 def pushingmarkerfor(obsstore, ispushed, node): |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
632 """true if some markers are to be pushed for node |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
633 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
634 We cannot just look in to the pushed obsmarkers from the pushop because |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
635 discovery might have filtered relevant markers. In addition listing all |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
636 markers relevant to all changesets in the pushed set would be too expensive |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
637 (O(len(repo))) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
638 |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
639 (note: There are cache opportunity in this function. but it would requires |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
640 a two dimensional stack.) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
641 """ |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
642 successorsmarkers = obsstore.successors |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
643 stack = [node] |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
644 seen = set(stack) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
645 while stack: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
646 current = stack.pop() |
32789
443e8543a125
checkheads: pass "ispushed" function to the obsmarkers logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32709
diff
changeset
|
647 if ispushed(current): |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
648 return True |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
649 markers = successorsmarkers.get(current, ()) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
650 # markers fields = ('prec', 'succs', 'flag', 'meta', 'date', 'parents') |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
651 for m in markers: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
652 nexts = m[1] # successors |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
653 if not nexts: # this is a prune marker |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43049
diff
changeset
|
654 nexts = m[5] or () # parents |
32009
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
655 for n in nexts: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
656 if n not in seen: |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
657 seen.add(n) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
658 stack.append(n) |
c6cb21ddf74a
checkheads: upgrade the obsolescence postprocessing logic (issue4354)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31586
diff
changeset
|
659 return False |