mercurial/exchange.py
changeset 23437 94e2862dbcfb
parent 23436 52db731b964d
child 23439 743736fc7c41
equal deleted inserted replaced
23436:52db731b964d 23437:94e2862dbcfb
   102         self.fallbackoutdatedphases = None
   102         self.fallbackoutdatedphases = None
   103         # outgoing obsmarkers
   103         # outgoing obsmarkers
   104         self.outobsmarkers = set()
   104         self.outobsmarkers = set()
   105         # outgoing bookmarks
   105         # outgoing bookmarks
   106         self.outbookmarks = []
   106         self.outbookmarks = []
       
   107         # transaction manager
       
   108         self.trmanager = None
   107 
   109 
   108     @util.propertycache
   110     @util.propertycache
   109     def futureheads(self):
   111     def futureheads(self):
   110         """future remote heads if the changeset push succeeds"""
   112         """future remote heads if the changeset push succeeds"""
   111         return self.outgoing.missingheads
   113         return self.outgoing.missingheads
   202         # We do not abort the push, but just disable the local phase
   204         # We do not abort the push, but just disable the local phase
   203         # synchronisation.
   205         # synchronisation.
   204         msg = 'cannot lock source repository: %s\n' % err
   206         msg = 'cannot lock source repository: %s\n' % err
   205         pushop.ui.debug(msg)
   207         pushop.ui.debug(msg)
   206     try:
   208     try:
       
   209         if pushop.locallocked:
       
   210             pushop.trmanager = transactionmanager(repo,
       
   211                                                   'push-response',
       
   212                                                   pushop.remote.url())
   207         pushop.repo.checkpush(pushop)
   213         pushop.repo.checkpush(pushop)
   208         lock = None
   214         lock = None
   209         unbundle = pushop.remote.capable('unbundle')
   215         unbundle = pushop.remote.capable('unbundle')
   210         if not unbundle:
   216         if not unbundle:
   211             lock = pushop.remote.lock()
   217             lock = pushop.remote.lock()
   220             _pushobsolete(pushop)
   226             _pushobsolete(pushop)
   221             _pushbookmark(pushop)
   227             _pushbookmark(pushop)
   222         finally:
   228         finally:
   223             if lock is not None:
   229             if lock is not None:
   224                 lock.release()
   230                 lock.release()
       
   231         if pushop.trmanager:
       
   232             pushop.trmanager.close()
   225     finally:
   233     finally:
       
   234         if pushop.trmanager:
       
   235             pushop.trmanager.release()
   226         if locallock is not None:
   236         if locallock is not None:
   227             locallock.release()
   237             locallock.release()
   228 
   238 
   229     return pushop
   239     return pushop
   230 
   240 
   691                 pushop.ui.warn(_('updating %s to public failed!\n')
   701                 pushop.ui.warn(_('updating %s to public failed!\n')
   692                                % newremotehead)
   702                                % newremotehead)
   693 
   703 
   694 def _localphasemove(pushop, nodes, phase=phases.public):
   704 def _localphasemove(pushop, nodes, phase=phases.public):
   695     """move <nodes> to <phase> in the local source repo"""
   705     """move <nodes> to <phase> in the local source repo"""
   696     if pushop.locallocked:
   706     if pushop.trmanager:
   697         tr = pushop.repo.transaction('push-phase-sync')
   707         phases.advanceboundary(pushop.repo,
   698         try:
   708                                pushop.trmanager.transaction(),
   699             phases.advanceboundary(pushop.repo, tr, phase, nodes)
   709                                phase,
   700             tr.close()
   710                                nodes)
   701         finally:
       
   702             tr.release()
       
   703     else:
   711     else:
   704         # repo is not locked, do not change any phases!
   712         # repo is not locked, do not change any phases!
   705         # Informs the user that phases should have been moved when
   713         # Informs the user that phases should have been moved when
   706         # applicable.
   714         # applicable.
   707         actualmoves = [n for n in nodes if phase < pushop.repo[n].phase()]
   715         actualmoves = [n for n in nodes if phase < pushop.repo[n].phase()]