76 lines
2.9 KiB
Diff
76 lines
2.9 KiB
Diff
|
(part of)
|
||
|
commit 0019b6e68af9bda8b368a7073e5eb927607f00e2
|
||
|
Author: Sławomir Nizio <slawomir.nizio@sabayon.org>
|
||
|
Date: Sat Mar 21 22:08:50 2020 +0100
|
||
|
|
||
|
[entropy.misc, rigo] fix file-like objects with Python 3
|
||
|
|
||
|
FakeOutFile and LogFile need .buffer like Python 3 "text" file objects
|
||
|
which is needed when in rigo standard output/error is replaced, and then
|
||
|
it reaches Portage which does this:
|
||
|
|
||
|
if sys.hexversion >= 0x3000000 and fd in (sys.stdout, sys.stderr):
|
||
|
fd = fd.buffer
|
||
|
fd.write(mystr)
|
||
|
|
||
|
(/usr/lib64/python3.6/site-packages/portage/util/__init__.py).
|
||
|
|
||
|
Entropy internal code did not need this.
|
||
|
|
||
|
Note, after this commit, changes done previously:
|
||
|
1)
|
||
|
commit 0869912ec4c630d2946e835b2585367e233c1c15
|
||
|
|
||
|
[entropy.spm] Rigo related Python 3 fix
|
||
|
|
||
|
File "/usr/lib64/python3.6/site-packages/entropy/spm/plugins/interfaces/portage_plugin/__init__.py", line 101, in _pusher
|
||
|
self._std.buffer.write(chunk)
|
||
|
AttributeError: 'FakeOutFile' object has no attribute 'buffer'
|
||
|
|
||
|
2)
|
||
|
commit 8700aade27cb4117bf102afc7bd22ba6acfd8aa8
|
||
|
|
||
|
[entropy.spm, rigo] Rigo related Python 3 fixes
|
||
|
|
||
|
1)
|
||
|
File "/usr/lib/python-exec/python3.6/RigoDaemon_app.py", line 362, in _pusher
|
||
|
fobj.write(chunk)
|
||
|
TypeError: write() argument must be str, not bytes
|
||
|
|
||
|
2)
|
||
|
File "/usr/lib64/python3.6/site-packages/entropy/spm/plugins/interfaces/portage_plugin/__init__.py", line 77, in __init__
|
||
|
self.buffer = Writer(self, self._std.buffer)
|
||
|
AttributeError: 'FakeOutFile' object has no attribute 'buffer'
|
||
|
|
||
|
(...)
|
||
|
|
||
|
could be likely reverted; not tested, it could be better to have them anyway to
|
||
|
avoid futher re/encoding/checks if conversions are needed (subjective).
|
||
|
|
||
|
Fixes bug 5899.
|
||
|
|
||
|
diff --git a/app/RigoDaemon_app.py b/app/RigoDaemon_app.py
|
||
|
index 39c4aeefe..33b45e5b8 100755
|
||
|
--- a/app/RigoDaemon_app.py
|
||
|
+++ b/app/RigoDaemon_app.py
|
||
|
@@ -79,7 +79,7 @@ from entropy.exceptions import DependenciesNotFound, \
|
||
|
EntropyPackageException, InterruptError, RepositoryError
|
||
|
from entropy.i18n import _
|
||
|
from entropy.misc import LogFile, ParallelTask, TimeScheduled, \
|
||
|
- ReadersWritersSemaphore
|
||
|
+ ReadersWritersSemaphore, FileobjCompatBuffer
|
||
|
from entropy.fetchers import UrlFetcher, MultipleUrlFetcher
|
||
|
from entropy.output import TextInterface, purple, teal
|
||
|
from entropy.client.interfaces import Client
|
||
|
@@ -340,6 +340,10 @@ class FakeOutFile(object):
|
||
|
self._app_mgmt_mutex = app_mgmt_mutex
|
||
|
self._app_mgmt_notes = app_mgmt_notes
|
||
|
self._rfd, self._wfd = os.pipe()
|
||
|
+
|
||
|
+ if const_is_python3():
|
||
|
+ self.buffer = FileobjCompatBuffer(self)
|
||
|
+
|
||
|
task = ParallelTask(self._pusher)
|
||
|
task.name = "FakeOutFilePusher"
|
||
|
task.daemon = True
|