Mercurial > public > mercurial-scm > hg
comparison mercurial/exchange.py @ 20439:0d3ccf285ff2
push: move push return value in the push object
The return code convey information about the success of changeset push. This is
used by phases to compute the new common set between local and remote. So we
need to move it into the object to extract the phase sync from the god
function.
Note that this information will be used by obsolescence markers too.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 30 Jan 2014 19:43:28 -0800 |
parents | 2b5ab0d11327 |
children | 400da8bc7786 |
comparison
equal
deleted
inserted
replaced
20438:2b5ab0d11327 | 20439:0d3ccf285ff2 |
---|---|
33 self.revs = revs | 33 self.revs = revs |
34 # allow push of new branch | 34 # allow push of new branch |
35 self.newbranch = newbranch | 35 self.newbranch = newbranch |
36 # did a local lock get acquired? | 36 # did a local lock get acquired? |
37 self.locallocked = None | 37 self.locallocked = None |
38 # Integer version of the push result | |
39 # - None means nothing to push | |
40 # - 0 means HTTP error | |
41 # - 1 means we pushed and remote head count is unchanged *or* | |
42 # we have outgoing changesets but refused to push | |
43 # - other values as described by addchangegroup() | |
44 self.ret = None | |
38 | 45 |
39 def push(repo, remote, force=False, revs=None, newbranch=False): | 46 def push(repo, remote, force=False, revs=None, newbranch=False): |
40 '''Push outgoing changesets (limited by revs) from a local | 47 '''Push outgoing changesets (limited by revs) from a local |
41 repository to remote. Return an integer: | 48 repository to remote. Return an integer: |
42 - None means nothing to push | 49 - None means nothing to push |
97 | 104 |
98 | 105 |
99 if not outgoing.missing: | 106 if not outgoing.missing: |
100 # nothing to push | 107 # nothing to push |
101 scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded) | 108 scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded) |
102 ret = None | |
103 else: | 109 else: |
104 # something to push | 110 # something to push |
105 if not pushop.force: | 111 if not pushop.force: |
106 # if repo.obsstore == False --> no obsolete | 112 # if repo.obsstore == False --> no obsolete |
107 # then, save the iteration | 113 # then, save the iteration |
154 # commit/push race), server aborts. | 160 # commit/push race), server aborts. |
155 if pushop.force: | 161 if pushop.force: |
156 remoteheads = ['force'] | 162 remoteheads = ['force'] |
157 # ssh: return remote's addchangegroup() | 163 # ssh: return remote's addchangegroup() |
158 # http: return remote's addchangegroup() or 0 for error | 164 # http: return remote's addchangegroup() or 0 for error |
159 ret = pushop.remote.unbundle(cg, remoteheads, 'push') | 165 pushop.ret = pushop.remote.unbundle(cg, remoteheads, |
166 'push') | |
160 else: | 167 else: |
161 # we return an integer indicating remote head count | 168 # we return an integer indicating remote head count |
162 # change | 169 # change |
163 ret = pushop.remote.addchangegroup(cg, 'push', | 170 pushop.ret = pushop.remote.addchangegroup(cg, 'push', |
164 pushop.repo.url()) | 171 pushop.repo.url()) |
165 | 172 |
166 if ret: | 173 if pushop.ret: |
167 # push succeed, synchronize target of the push | 174 # push succeed, synchronize target of the push |
168 cheads = outgoing.missingheads | 175 cheads = outgoing.missingheads |
169 elif pushop.revs is None: | 176 elif pushop.revs is None: |
170 # All out push fails. synchronize all common | 177 # All out push fails. synchronize all common |
171 cheads = outgoing.commonheads | 178 cheads = outgoing.commonheads |
195 cheads.extend(c.node() for c in revset) | 202 cheads.extend(c.node() for c in revset) |
196 # even when we don't push, exchanging phase data is useful | 203 # even when we don't push, exchanging phase data is useful |
197 remotephases = pushop.remote.listkeys('phases') | 204 remotephases = pushop.remote.listkeys('phases') |
198 if (pushop.ui.configbool('ui', '_usedassubrepo', False) | 205 if (pushop.ui.configbool('ui', '_usedassubrepo', False) |
199 and remotephases # server supports phases | 206 and remotephases # server supports phases |
200 and ret is None # nothing was pushed | 207 and pushop.ret is None # nothing was pushed |
201 and remotephases.get('publishing', False)): | 208 and remotephases.get('publishing', False)): |
202 # When: | 209 # When: |
203 # - this is a subrepo push | 210 # - this is a subrepo push |
204 # - and remote support phase | 211 # - and remote support phase |
205 # - and no changeset was pushed | 212 # - and no changeset was pushed |
244 finally: | 251 finally: |
245 if locallock is not None: | 252 if locallock is not None: |
246 locallock.release() | 253 locallock.release() |
247 | 254 |
248 _pushbookmark(pushop) | 255 _pushbookmark(pushop) |
249 return ret | 256 return pushop.ret |
250 | 257 |
251 def _localphasemove(pushop, nodes, phase=phases.public): | 258 def _localphasemove(pushop, nodes, phase=phases.public): |
252 """move <nodes> to <phase> in the local source repo""" | 259 """move <nodes> to <phase> in the local source repo""" |
253 if pushop.locallocked: | 260 if pushop.locallocked: |
254 phases.advanceboundary(pushop.repo, phase, nodes) | 261 phases.advanceboundary(pushop.repo, phase, nodes) |