comparison mercurial/discovery.py @ 16746:9acb5cd19162

merge with stable
author Matt Mackall <mpm@selenic.com>
date Thu, 17 May 2012 15:52:14 -0500
parents 525fdb738975 025b3b763ba9
children 4267c840c481
comparison
equal deleted inserted replaced
16745:27b2e1823e83 16746:9acb5cd19162
85 if self._missing is None: 85 if self._missing is None:
86 self._computecommonmissing() 86 self._computecommonmissing()
87 return self._missing 87 return self._missing
88 88
89 def findcommonoutgoing(repo, other, onlyheads=None, force=False, 89 def findcommonoutgoing(repo, other, onlyheads=None, force=False,
90 commoninc=None): 90 commoninc=None, portable=False):
91 '''Return an outgoing instance to identify the nodes present in repo but 91 '''Return an outgoing instance to identify the nodes present in repo but
92 not in other. 92 not in other.
93 93
94 If onlyheads is given, only nodes ancestral to nodes in onlyheads 94 If onlyheads is given, only nodes ancestral to nodes in onlyheads
95 (inclusive) are included. If you already know the local repo's heads, 95 (inclusive) are included. If you already know the local repo's heads,
96 passing them in onlyheads is faster than letting them be recomputed here. 96 passing them in onlyheads is faster than letting them be recomputed here.
97 97
98 If commoninc is given, it must the the result of a prior call to 98 If commoninc is given, it must the the result of a prior call to
99 findcommonincoming(repo, other, force) to avoid recomputing it here.''' 99 findcommonincoming(repo, other, force) to avoid recomputing it here.
100
101 If portable is given, compute more conservative common and missingheads,
102 to make bundles created from the instance more portable.'''
100 # declare an empty outgoing object to be filled later 103 # declare an empty outgoing object to be filled later
101 og = outgoing(repo.changelog, None, None) 104 og = outgoing(repo.changelog, None, None)
102 105
103 # get common set if not provided 106 # get common set if not provided
104 if commoninc is None: 107 if commoninc is None:
127 # update missing heads 130 # update missing heads
128 missingheads = phases.newheads(repo, onlyheads, excluded) 131 missingheads = phases.newheads(repo, onlyheads, excluded)
129 else: 132 else:
130 missingheads = onlyheads 133 missingheads = onlyheads
131 og.missingheads = missingheads 134 og.missingheads = missingheads
135
136 if portable:
137 # recompute common and missingheads as if -r<rev> had been given for
138 # each head of missing, and --base <rev> for each head of the proper
139 # ancestors of missing
140 og._computecommonmissing()
141 cl = repo.changelog
142 missingrevs = set(cl.rev(n) for n in og._missing)
143 og._common = set(cl.ancestors(*missingrevs)) - missingrevs
144 commonheads = set(og.commonheads)
145 og.missingheads = [h for h in og.missingheads if h not in commonheads]
132 146
133 return og 147 return og
134 148
135 def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False): 149 def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False):
136 """Check that a push won't add any outgoing head 150 """Check that a push won't add any outgoing head