5704 opts.setdefault(b'rev', []).append(b) |
5704 opts.setdefault(b'rev', []).append(b) |
5705 else: |
5705 else: |
5706 # if we try to push a deleted bookmark, translate it to null |
5706 # if we try to push a deleted bookmark, translate it to null |
5707 # this lets simultaneous -r, -b options continue working |
5707 # this lets simultaneous -r, -b options continue working |
5708 opts.setdefault(b'rev', []).append(b"null") |
5708 opts.setdefault(b'rev', []).append(b"null") |
5709 |
5709 if True: |
5710 path = ui.getpath(dest, default=(b'default-push', b'default')) |
5710 path = ui.getpath(dest, default=(b'default-push', b'default')) |
5711 if not path: |
5711 if not path: |
5712 raise error.ConfigError( |
5712 raise error.ConfigError( |
5713 _(b'default repository not configured!'), |
5713 _(b'default repository not configured!'), |
5714 hint=_(b"see 'hg help config.paths'"), |
5714 hint=_(b"see 'hg help config.paths'"), |
|
5715 ) |
|
5716 dest = path.pushloc or path.loc |
|
5717 branches = (path.branch, opts.get(b'branch') or []) |
|
5718 ui.status(_(b'pushing to %s\n') % util.hidepassword(dest)) |
|
5719 revs, checkout = hg.addbranchrevs( |
|
5720 repo, repo, branches, opts.get(b'rev') |
5715 ) |
5721 ) |
5716 dest = path.pushloc or path.loc |
5722 other = hg.peer(repo, opts, dest) |
5717 branches = (path.branch, opts.get(b'branch') or []) |
5723 |
5718 ui.status(_(b'pushing to %s\n') % util.hidepassword(dest)) |
5724 try: |
5719 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get(b'rev')) |
5725 if revs: |
5720 other = hg.peer(repo, opts, dest) |
5726 revs = [repo[r].node() for r in scmutil.revrange(repo, revs)] |
5721 |
5727 if not revs: |
5722 try: |
5728 raise error.InputError( |
5723 if revs: |
5729 _(b"specified revisions evaluate to an empty set"), |
5724 revs = [repo[r].node() for r in scmutil.revrange(repo, revs)] |
5730 hint=_(b"use different revision arguments"), |
5725 if not revs: |
5731 ) |
|
5732 elif path.pushrev: |
|
5733 # It doesn't make any sense to specify ancestor revisions. So limit |
|
5734 # to DAG heads to make discovery simpler. |
|
5735 expr = revsetlang.formatspec(b'heads(%r)', path.pushrev) |
|
5736 revs = scmutil.revrange(repo, [expr]) |
|
5737 revs = [repo[rev].node() for rev in revs] |
|
5738 if not revs: |
|
5739 raise error.InputError( |
|
5740 _( |
|
5741 b'default push revset for path evaluates to an empty set' |
|
5742 ) |
|
5743 ) |
|
5744 elif ui.configbool(b'commands', b'push.require-revs'): |
5726 raise error.InputError( |
5745 raise error.InputError( |
5727 _(b"specified revisions evaluate to an empty set"), |
5746 _(b'no revisions specified to push'), |
5728 hint=_(b"use different revision arguments"), |
5747 hint=_(b'did you mean "hg push -r ."?'), |
5729 ) |
5748 ) |
5730 elif path.pushrev: |
5749 |
5731 # It doesn't make any sense to specify ancestor revisions. So limit |
5750 repo._subtoppath = dest |
5732 # to DAG heads to make discovery simpler. |
5751 try: |
5733 expr = revsetlang.formatspec(b'heads(%r)', path.pushrev) |
5752 # push subrepos depth-first for coherent ordering |
5734 revs = scmutil.revrange(repo, [expr]) |
5753 c = repo[b'.'] |
5735 revs = [repo[rev].node() for rev in revs] |
5754 subs = c.substate # only repos that are committed |
5736 if not revs: |
5755 for s in sorted(subs): |
5737 raise error.InputError( |
5756 result = c.sub(s).push(opts) |
5738 _(b'default push revset for path evaluates to an empty set') |
5757 if result == 0: |
5739 ) |
5758 return not result |
5740 elif ui.configbool(b'commands', b'push.require-revs'): |
5759 finally: |
5741 raise error.InputError( |
5760 del repo._subtoppath |
5742 _(b'no revisions specified to push'), |
5761 |
5743 hint=_(b'did you mean "hg push -r ."?'), |
5762 opargs = dict( |
|
5763 opts.get(b'opargs', {}) |
|
5764 ) # copy opargs since we may mutate it |
|
5765 opargs.setdefault(b'pushvars', []).extend(opts.get(b'pushvars', [])) |
|
5766 |
|
5767 pushop = exchange.push( |
|
5768 repo, |
|
5769 other, |
|
5770 opts.get(b'force'), |
|
5771 revs=revs, |
|
5772 newbranch=opts.get(b'new_branch'), |
|
5773 bookmarks=opts.get(b'bookmark', ()), |
|
5774 publish=opts.get(b'publish'), |
|
5775 opargs=opargs, |
5744 ) |
5776 ) |
5745 |
5777 |
5746 repo._subtoppath = dest |
5778 result = not pushop.cgresult |
5747 try: |
5779 |
5748 # push subrepos depth-first for coherent ordering |
5780 if pushop.bkresult is not None: |
5749 c = repo[b'.'] |
5781 if pushop.bkresult == 2: |
5750 subs = c.substate # only repos that are committed |
5782 result = 2 |
5751 for s in sorted(subs): |
5783 elif not result and pushop.bkresult: |
5752 result = c.sub(s).push(opts) |
5784 result = 2 |
5753 if result == 0: |
|
5754 return not result |
|
5755 finally: |
5785 finally: |
5756 del repo._subtoppath |
5786 other.close() |
5757 |
|
5758 opargs = dict( |
|
5759 opts.get(b'opargs', {}) |
|
5760 ) # copy opargs since we may mutate it |
|
5761 opargs.setdefault(b'pushvars', []).extend(opts.get(b'pushvars', [])) |
|
5762 |
|
5763 pushop = exchange.push( |
|
5764 repo, |
|
5765 other, |
|
5766 opts.get(b'force'), |
|
5767 revs=revs, |
|
5768 newbranch=opts.get(b'new_branch'), |
|
5769 bookmarks=opts.get(b'bookmark', ()), |
|
5770 publish=opts.get(b'publish'), |
|
5771 opargs=opargs, |
|
5772 ) |
|
5773 |
|
5774 result = not pushop.cgresult |
|
5775 |
|
5776 if pushop.bkresult is not None: |
|
5777 if pushop.bkresult == 2: |
|
5778 result = 2 |
|
5779 elif not result and pushop.bkresult: |
|
5780 result = 2 |
|
5781 finally: |
|
5782 other.close() |
|
5783 return result |
5787 return result |
5784 |
5788 |
5785 |
5789 |
5786 @command( |
5790 @command( |
5787 b'recover', |
5791 b'recover', |