[MERGE][#139318] bzr send @ win32: ensure that command line to invoking Thunderbird is 8-bit string, not unicode (because subprocess does not understand non-ascii unicode)
Aaron Bentley
aaron at aaronbentley.com
Thu Feb 28 13:12:03 GMT 2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Alexander Belchenko wrote:
> Aaron Bentley пишет:
>> Alexander Belchenko wrote:
>>> I think I should not
>>> touch paths (neither path to executable nor attachment).
>>
>> I think this isn't right. If the path to an executable or attachment is
>> unicode, then on Windows, won't Python raise a UnicodeEncodeError?
>
> It's work for me, because executable 'C:\Program Files\Mozilla
> Thunderbird\thunderbird.exe'
> is actually ascii string.
Yes, but you said it would be *wrong* to encode the path to the command.
I would like you to justify your statement, because I think it's wrong.
We know that python isn't auto-encoding on command arguments on
Windows-- that's why we have this bug. So it seems quite likely that we
also have to encode command paths.
> And ThunderbirdClient class turns attachment
> path to URL.
And therefore it's already a bytestring, not unicode? Fair enough.
> For executable path I agree, but not for attachment path. Otherwise
> Thunderbird
> will produce wrong URL.
It took me a while to understand you were saying that the URL was
already encoded. Re-encoding it wouldn't produce a wrong URL. If the
URL was ascii only, it would have no effect. If it included high-bit
characters, then calling .encode would force it to unicode, and that
would raise an exception.
>>> + cmdline = _get_compose_8bit_commandline(name, to, subject,
>>> + attach_path)
>>
>> Does this actually work? It looks like it should be
>> self._get_compose_8bit...
>
> I don't understand your note. Yes, it works, I tested it manually.
_get_compose_8bit_commandline is a method, not a function. But you're
calling it like a function.
When *I* test it, I get this:
$ ./bzr send
Using saved location: file:///home/abentley/bzrrepo/others/bzr.dev/
bzr: ERROR: exceptions.NameError: global name
'_get_compose_8bit_commandline' is not defined
Traceback (most recent call last):
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/commands.py", line
834, in run_bzr_catch_errors
return run_bzr(argv)
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/commands.py", line
790, in run_bzr
ret = run(*run_argv)
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/commands.py", line
492, in run_argv_aliases
return self.run(**all_cmd_args)
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/builtins.py", line
4070, in run
kwargs.get('from', '.'), mail_to, message)
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/builtins.py", line
4166, in _run
outfile.getvalue())
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/mail_client.py",
line 68, in compose_merge_request
'x-patch', '.patch')
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/mail_client.py",
line 131, in compose
self._compose(prompt, to, subject, pathname, mime_subtype, extension)
File "/home/abentley/bzr/bzr.ab.integration/bzrlib/mail_client.py",
line 147, in _compose
cmdline = _get_compose_8bit_commandline(name, to, subject,
NameError: global name '_get_compose_8bit_commandline' is not defined
>> I suppose drive letters can't be non-ascii, so this probably doesn't
>> matter, but it would be nice to do escape(win32_path[0].upper()) for
>> consistency.
>
> I think it's redundant here. Please, don't force me do this.
> I think it's not good idea.
It was just a suggestion.
Aaron
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFHxrMi0F+nu1YWqI0RAn/2AJ47mylBjoAPUv1N2uBuVG5wre/uIACfZk1e
o0eHdGrird+Ckn/1tdsLwjQ=
=zFkp
-----END PGP SIGNATURE-----
More information about the bazaar
mailing list