diff options
author | Mike Frysinger <vapier@google.com> | 2019-11-15 01:19:03 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2019-11-16 23:55:30 +0000 |
commit | 70c54dc2550084ed022a2f134065a011f37f30aa (patch) | |
tree | 6086cb67a1b1f928892b4d47d1b77a069b5ae31f /editor.py | |
parent | 6da17751ca4e3b90834ca763f448ddc39b32651b (diff) | |
download | git-repo-70c54dc2550084ed022a2f134065a011f37f30aa.tar.gz |
upload/editor: fix bytes/string confusion
The upload module tries to turn the strings into bytes before passing
to EditString, but it combines bytes & strings causing an error. The
return value might be bytes or string, but the caller only expects a
string. Lets simplify this by sticking to strings everywhere and have
EditString take care of converting to/from bytes when reading/writing
the underlying files. This also avoids possible locale confusion when
reading the file by forcing UTF-8 everywhere.
Bug: https://crbug.com/gerrit/11929
Change-Id: I07b146170c5e8b5b0500a2c79e4213cd12140a96
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/245621
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'editor.py')
-rw-r--r-- | editor.py | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -68,11 +68,14 @@ least one of these before using this command.""", file=sys.stderr) | |||
68 | def EditString(cls, data): | 68 | def EditString(cls, data): |
69 | """Opens an editor to edit the given content. | 69 | """Opens an editor to edit the given content. |
70 | 70 | ||
71 | Args: | 71 | Args: |
72 | data : the text to edit | 72 | data: The text to edit. |
73 | 73 | ||
74 | Returns: | 74 | Returns: |
75 | new value of edited text; None if editing did not succeed | 75 | New value of edited text. |
76 | |||
77 | Raises: | ||
78 | EditorError: The editor failed to run. | ||
76 | """ | 79 | """ |
77 | editor = cls._GetEditor() | 80 | editor = cls._GetEditor() |
78 | if editor == ':': | 81 | if editor == ':': |
@@ -80,7 +83,7 @@ least one of these before using this command.""", file=sys.stderr) | |||
80 | 83 | ||
81 | fd, path = tempfile.mkstemp() | 84 | fd, path = tempfile.mkstemp() |
82 | try: | 85 | try: |
83 | os.write(fd, data) | 86 | os.write(fd, data.encode('utf-8')) |
84 | os.close(fd) | 87 | os.close(fd) |
85 | fd = None | 88 | fd = None |
86 | 89 | ||
@@ -106,8 +109,8 @@ least one of these before using this command.""", file=sys.stderr) | |||
106 | raise EditorError('editor failed with exit status %d: %s %s' | 109 | raise EditorError('editor failed with exit status %d: %s %s' |
107 | % (rc, editor, path)) | 110 | % (rc, editor, path)) |
108 | 111 | ||
109 | with open(path) as fd2: | 112 | with open(path, mode='rb') as fd2: |
110 | return fd2.read() | 113 | return fd2.read().decode('utf-8') |
111 | finally: | 114 | finally: |
112 | if fd: | 115 | if fd: |
113 | os.close(fd) | 116 | os.close(fd) |