Mercurial > hg
annotate mercurial/discovery.py @ 52168:6b7ffa3f9199
rust-changelog: switch away from deprecated APIs for datetime use
This was caught by clippy, nothing was changed aside from some light API
changes.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Wed, 19 Jun 2024 18:20:22 +0200 |
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 |