Skip to content
Snippets Groups Projects
Commit 71e63fe6 authored by Pulkit Goyal's avatar Pulkit Goyal
Browse files

py3: handle keyword arguments correctly in hgext/patchbomb.py

The keys of keyword arguments must be str on Python 3 which is unicode. This
patch make sure we pass keyword arguments with keys are str everywhere in this
file and access the keys depending on whether they are bytes or str.

This patch uses pycompat.{byteskwargs|strkwargs} and somewhere it also added r''
to prevent transformer from adding a b'' over there.

Differential Revision: https://phab.mercurial-scm.org/D974
parent 5d436907
No related branches found
No related tags found
No related merge requests found
......@@ -89,6 +89,7 @@
mail,
node as nodemod,
patch,
pycompat,
registrar,
repair,
scmutil,
......@@ -318,7 +319,7 @@
tmpfn = os.path.join(tmpdir, 'bundle')
btype = ui.config('patchbomb', 'bundletype')
if btype:
opts['type'] = btype
opts[r'type'] = btype
try:
commands.bundle(ui, repo, tmpfn, dest, **opts)
return util.readfile(tmpfn)
......@@ -338,8 +339,8 @@
the user through the editor.
"""
ui = repo.ui
if opts.get('desc'):
body = open(opts.get('desc')).read()
if opts.get(r'desc'):
body = open(opts.get(r'desc')).read()
else:
ui.write(_('\nWrite the introductory message for the '
'patch series.\n\n'))
......@@ -359,9 +360,9 @@
"""
ui = repo.ui
_charsets = mail._charsets(ui)
subj = (opts.get('subject')
subj = (opts.get(r'subject')
or prompt(ui, 'Subject:', 'A bundle for your repository'))
body = _getdescription(repo, '', sender, **opts)
msg = emailmod.MIMEMultipart.MIMEMultipart()
if body:
......@@ -363,8 +364,8 @@
or prompt(ui, 'Subject:', 'A bundle for your repository'))
body = _getdescription(repo, '', sender, **opts)
msg = emailmod.MIMEMultipart.MIMEMultipart()
if body:
msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
msg.attach(mail.mimeencode(ui, body, _charsets, opts.get(r'test')))
datapart = emailmod.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
datapart.set_payload(bundle)
......@@ -369,7 +370,7 @@
datapart = emailmod.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
datapart.set_payload(bundle)
bundlename = '%s.hg' % opts.get('bundlename', 'bundle')
bundlename = '%s.hg' % opts.get(r'bundlename', 'bundle')
datapart.add_header('Content-Disposition', 'attachment',
filename=bundlename)
emailmod.Encoders.encode_base64(datapart)
msg.attach(datapart)
......@@ -372,8 +373,8 @@
datapart.add_header('Content-Disposition', 'attachment',
filename=bundlename)
emailmod.Encoders.encode_base64(datapart)
msg.attach(datapart)
msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get(r'test'))
return [(msg, subj, None)]
def _makeintro(repo, sender, revs, patches, **opts):
......@@ -384,5 +385,5 @@
_charsets = mail._charsets(ui)
# use the last revision which is likely to be a bookmarked head
prefix = _formatprefix(ui, repo, revs.last(), opts.get('flag'),
prefix = _formatprefix(ui, repo, revs.last(), opts.get(r'flag'),
0, len(patches), numbered=True)
......@@ -388,5 +389,5 @@
0, len(patches), numbered=True)
subj = (opts.get('subject') or
subj = (opts.get(r'subject') or
prompt(ui, '(optional) Subject: ', rest=prefix, default=''))
if not subj:
return None # skip intro if the user doesn't bother
......@@ -394,7 +395,7 @@
subj = prefix + ' ' + subj
body = ''
if opts.get('diffstat'):
if opts.get(r'diffstat'):
# generate a cumulative diffstat of the whole patch series
diffstat = patch.diffstat(sum(patches, []))
body = '\n' + diffstat
......@@ -402,5 +403,5 @@
diffstat = None
body = _getdescription(repo, body, sender, **opts)
msg = mail.mimeencode(ui, body, _charsets, opts.get('test'))
msg = mail.mimeencode(ui, body, _charsets, opts.get(r'test'))
msg['Subject'] = mail.headencode(ui, subj, _charsets,
......@@ -406,5 +407,5 @@
msg['Subject'] = mail.headencode(ui, subj, _charsets,
opts.get('test'))
opts.get(r'test'))
return (msg, subj, diffstat)
def _getpatchmsgs(repo, sender, revs, patchnames=None, **opts):
......@@ -414,6 +415,7 @@
This function returns a list of "email" tuples (subject, content, None).
"""
bytesopts = pycompat.byteskwargs(opts)
ui = repo.ui
_charsets = mail._charsets(ui)
patches = list(_getpatches(repo, revs, **opts))
......@@ -423,7 +425,7 @@
% len(patches))
# build the intro message, or skip it if the user declines
if introwanted(ui, opts, len(patches)):
if introwanted(ui, bytesopts, len(patches)):
msg = _makeintro(repo, sender, revs, patches, **opts)
if msg:
msgs.append(msg)
......@@ -437,8 +439,8 @@
for i, (r, p) in enumerate(zip(revs, patches)):
if patchnames:
name = patchnames[i]
msg = makepatch(ui, repo, r, p, opts, _charsets, i + 1,
len(patches), numbered, name)
msg = makepatch(ui, repo, r, p, bytesopts, _charsets,
i + 1, len(patches), numbered, name)
msgs.append(msg)
return msgs
......@@ -579,6 +581,7 @@
Before using this command, you will need to enable email in your
hgrc. See the [email] section in hgrc(5) for details.
'''
opts = pycompat.byteskwargs(opts)
_charsets = mail._charsets(ui)
......@@ -672,8 +675,9 @@
prompt(ui, 'From', ui.username()))
if bundle:
bundledata = _getbundle(repo, dest, **opts)
bundleopts = opts.copy()
bundleopts.pop('bundle', None) # already processed
stropts = pycompat.strkwargs(opts)
bundledata = _getbundle(repo, dest, **stropts)
bundleopts = stropts.copy()
bundleopts.pop(r'bundle', None) # already processed
msgs = _getbundlemsgs(repo, sender, bundledata, **bundleopts)
else:
......@@ -678,6 +682,6 @@
msgs = _getbundlemsgs(repo, sender, bundledata, **bundleopts)
else:
msgs = _getpatchmsgs(repo, sender, revs, **opts)
msgs = _getpatchmsgs(repo, sender, revs, **pycompat.strkwargs(opts))
showaddrs = []
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment