19 |
19 |
20 from . import common |
20 from . import common |
21 |
21 |
22 isremotebooksenabled = common.isremotebooksenabled |
22 isremotebooksenabled = common.isremotebooksenabled |
23 |
23 |
24 scratchbranchparttype = 'b2x:infinitepush' |
24 scratchbranchparttype = b'b2x:infinitepush' |
25 |
25 |
26 |
26 |
27 def getscratchbranchparts(repo, peer, outgoing, ui, bookmark): |
27 def getscratchbranchparts(repo, peer, outgoing, ui, bookmark): |
28 if not outgoing.missing: |
28 if not outgoing.missing: |
29 raise error.Abort(_('no commits to push')) |
29 raise error.Abort(_(b'no commits to push')) |
30 |
30 |
31 if scratchbranchparttype not in bundle2.bundle2caps(peer): |
31 if scratchbranchparttype not in bundle2.bundle2caps(peer): |
32 raise error.Abort(_('no server support for %r') % scratchbranchparttype) |
32 raise error.Abort( |
|
33 _(b'no server support for %r') % scratchbranchparttype |
|
34 ) |
33 |
35 |
34 _validaterevset( |
36 _validaterevset( |
35 repo, revsetlang.formatspec('%ln', outgoing.missing), bookmark |
37 repo, revsetlang.formatspec(b'%ln', outgoing.missing), bookmark |
36 ) |
38 ) |
37 |
39 |
38 supportedversions = changegroup.supportedoutgoingversions(repo) |
40 supportedversions = changegroup.supportedoutgoingversions(repo) |
39 # Explicitly avoid using '01' changegroup version in infinitepush to |
41 # Explicitly avoid using '01' changegroup version in infinitepush to |
40 # support general delta |
42 # support general delta |
41 supportedversions.discard('01') |
43 supportedversions.discard(b'01') |
42 cgversion = min(supportedversions) |
44 cgversion = min(supportedversions) |
43 _handlelfs(repo, outgoing.missing) |
45 _handlelfs(repo, outgoing.missing) |
44 cg = changegroup.makestream(repo, outgoing, cgversion, 'push') |
46 cg = changegroup.makestream(repo, outgoing, cgversion, b'push') |
45 |
47 |
46 params = {} |
48 params = {} |
47 params['cgversion'] = cgversion |
49 params[b'cgversion'] = cgversion |
48 if bookmark: |
50 if bookmark: |
49 params['bookmark'] = bookmark |
51 params[b'bookmark'] = bookmark |
50 # 'prevbooknode' is necessary for pushkey reply part |
52 # 'prevbooknode' is necessary for pushkey reply part |
51 params['bookprevnode'] = '' |
53 params[b'bookprevnode'] = b'' |
52 bookmarks = repo._bookmarks |
54 bookmarks = repo._bookmarks |
53 if bookmark in bookmarks: |
55 if bookmark in bookmarks: |
54 params['bookprevnode'] = nodemod.hex(bookmarks[bookmark]) |
56 params[b'bookprevnode'] = nodemod.hex(bookmarks[bookmark]) |
55 |
57 |
56 # Do not send pushback bundle2 part with bookmarks if remotenames extension |
58 # Do not send pushback bundle2 part with bookmarks if remotenames extension |
57 # is enabled. It will be handled manually in `_push()` |
59 # is enabled. It will be handled manually in `_push()` |
58 if not isremotebooksenabled(ui): |
60 if not isremotebooksenabled(ui): |
59 params['pushbackbookmarks'] = '1' |
61 params[b'pushbackbookmarks'] = b'1' |
60 |
62 |
61 parts = [] |
63 parts = [] |
62 |
64 |
63 # .upper() marks this as a mandatory part: server will abort if there's no |
65 # .upper() marks this as a mandatory part: server will abort if there's no |
64 # handler |
66 # handler |
74 |
76 |
75 |
77 |
76 def _validaterevset(repo, revset, bookmark): |
78 def _validaterevset(repo, revset, bookmark): |
77 """Abort if the revs to be pushed aren't valid for a scratch branch.""" |
79 """Abort if the revs to be pushed aren't valid for a scratch branch.""" |
78 if not repo.revs(revset): |
80 if not repo.revs(revset): |
79 raise error.Abort(_('nothing to push')) |
81 raise error.Abort(_(b'nothing to push')) |
80 if bookmark: |
82 if bookmark: |
81 # Allow bundle with many heads only if no bookmark is specified |
83 # Allow bundle with many heads only if no bookmark is specified |
82 heads = repo.revs('heads(%r)', revset) |
84 heads = repo.revs(b'heads(%r)', revset) |
83 if len(heads) > 1: |
85 if len(heads) > 1: |
84 raise error.Abort( |
86 raise error.Abort( |
85 _('cannot push more than one head to a scratch branch') |
87 _(b'cannot push more than one head to a scratch branch') |
86 ) |
88 ) |
87 |
89 |
88 |
90 |
89 def _handlelfs(repo, missing): |
91 def _handlelfs(repo, missing): |
90 '''Special case if lfs is enabled |
92 '''Special case if lfs is enabled |
91 |
93 |
92 If lfs is enabled then we need to call prepush hook |
94 If lfs is enabled then we need to call prepush hook |
93 to make sure large files are uploaded to lfs |
95 to make sure large files are uploaded to lfs |
94 ''' |
96 ''' |
95 try: |
97 try: |
96 lfsmod = extensions.find('lfs') |
98 lfsmod = extensions.find(b'lfs') |
97 lfsmod.wrapper.uploadblobsfromrevs(repo, missing) |
99 lfsmod.wrapper.uploadblobsfromrevs(repo, missing) |
98 except KeyError: |
100 except KeyError: |
99 # Ignore if lfs extension is not enabled |
101 # Ignore if lfs extension is not enabled |
100 return |
102 return |
101 |
103 |