mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-20 05:28:04 +00:00
Another approach.
This commit is contained in:
parent
e142f051b4
commit
dd89ca6d4f
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@ -91,11 +91,13 @@ jobs:
|
|||||||
|
|
||||||
# On Windows, a non-blocking pipe might respond (when emulating Unix-y
|
# On Windows, a non-blocking pipe might respond (when emulating Unix-y
|
||||||
# API) with ENOSPC to indicate buffer full. Trial doesn't handle this
|
# API) with ENOSPC to indicate buffer full. Trial doesn't handle this
|
||||||
# well. So, we pipe the output through cat to make buffer handling someone
|
# well. So, we pipe the output through pipethrough that will hopefully be
|
||||||
# else's problem.
|
# able to do the right thing by using Windows APIs.
|
||||||
- name: Run tox for corresponding Python version
|
- name: Run tox for corresponding Python version
|
||||||
if: ${{ contains(matrix.os, 'windows') }}
|
if: ${{ contains(matrix.os, 'windows') }}
|
||||||
run: python -m tox | cat
|
run: |
|
||||||
|
pip install twisted
|
||||||
|
python -m tox | python misc/windows-enospc/passthrough.py
|
||||||
|
|
||||||
- name: Upload eliot.log
|
- name: Upload eliot.log
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
38
misc/windows-enospc/passthrough.py
Normal file
38
misc/windows-enospc/passthrough.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
"""
|
||||||
|
Writing to non-blocking pipe can result in ENOSPC when using Unix APIs on
|
||||||
|
Windows. So, this program passes through data from stdin to stdout, using
|
||||||
|
Windows APIs instead of Unix-y APIs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from twisted.internet.stdio import StandardIO
|
||||||
|
from twisted.internet import reactor
|
||||||
|
from twisted.internet.protocol import Protocol
|
||||||
|
from twisted.internet.interfaces import IHalfCloseableProtocol
|
||||||
|
from twisted.internet.error import ReactorNotRunning
|
||||||
|
from zope.interface import implementer
|
||||||
|
|
||||||
|
@implementer(IHalfCloseableProtocol)
|
||||||
|
class Passthrough(Protocol):
|
||||||
|
def readConnectionLost(self):
|
||||||
|
self.transport.loseConnection()
|
||||||
|
|
||||||
|
def writeConnectionLost(self):
|
||||||
|
try:
|
||||||
|
reactor.stop()
|
||||||
|
except ReactorNotRunning:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def dataReceived(self, data):
|
||||||
|
self.transport.write(data)
|
||||||
|
|
||||||
|
def connectionLost(self, reason):
|
||||||
|
try:
|
||||||
|
reactor.stop()
|
||||||
|
except ReactorNotRunning:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
std = StandardIO(Passthrough())
|
||||||
|
reactor.run()
|
Loading…
Reference in New Issue
Block a user