Use i- as prefix for the IPC path on macOS
With Qt 5.12, standarddir.runtime() gives us a path in /private/var/folders/... instead of /var/folders/... like before. Due to that change, the path length is 105 chars, which is too long for a named socket (104 seems to be okay). The complete name is just slightly too long, so using i- instead of ipc- fixes things... Fixes #4471 See #888
This commit is contained in:
parent
81889dd7bd
commit
99c8b80a46
@ -62,6 +62,9 @@ Changed
|
|||||||
`org.qutebrowser.qutebrowser.appdata.xml`.
|
`org.qutebrowser.qutebrowser.appdata.xml`.
|
||||||
- The `qute-pass` userscript now understands domains in gpg filenames
|
- The `qute-pass` userscript now understands domains in gpg filenames
|
||||||
in addition to directory names.
|
in addition to directory names.
|
||||||
|
- macOS: The IPC socket path used to communicate with existing instances
|
||||||
|
changed due to changes in Qt 5.12. Please make sure to quit qutebrowser
|
||||||
|
before upgrading.
|
||||||
|
|
||||||
Fixed
|
Fixed
|
||||||
~~~~~
|
~~~~~
|
||||||
|
@ -65,11 +65,9 @@ def _get_socketname(basedir):
|
|||||||
data_to_hash = '-'.join(parts_to_hash).encode('utf-8')
|
data_to_hash = '-'.join(parts_to_hash).encode('utf-8')
|
||||||
md5 = hashlib.md5(data_to_hash).hexdigest()
|
md5 = hashlib.md5(data_to_hash).hexdigest()
|
||||||
|
|
||||||
target_dir = standarddir.runtime()
|
prefix = 'i-' if utils.is_mac else 'ipc-'
|
||||||
|
filename = '{}{}'.format(prefix, md5)
|
||||||
parts = ['ipc']
|
return os.path.join(standarddir.runtime(), filename)
|
||||||
parts.append(md5)
|
|
||||||
return os.path.join(target_dir, '-'.join(parts))
|
|
||||||
|
|
||||||
|
|
||||||
class Error(Exception):
|
class Error(Exception):
|
||||||
|
@ -177,11 +177,6 @@ def md5(inp):
|
|||||||
|
|
||||||
class TestSocketName:
|
class TestSocketName:
|
||||||
|
|
||||||
POSIX_TESTS = [
|
|
||||||
(None, 'ipc-{}'.format(md5('testusername'))),
|
|
||||||
('/x', 'ipc-{}'.format(md5('testusername-/x'))),
|
|
||||||
]
|
|
||||||
|
|
||||||
WINDOWS_TESTS = [
|
WINDOWS_TESTS = [
|
||||||
(None, 'qutebrowser-testusername'),
|
(None, 'qutebrowser-testusername'),
|
||||||
('/x', 'qutebrowser-testusername-{}'.format(md5('/x'))),
|
('/x', 'qutebrowser-testusername-{}'.format(md5('/x'))),
|
||||||
@ -203,7 +198,10 @@ class TestSocketName:
|
|||||||
assert socketname == expected
|
assert socketname == expected
|
||||||
|
|
||||||
@pytest.mark.mac
|
@pytest.mark.mac
|
||||||
@pytest.mark.parametrize('basedir, expected', POSIX_TESTS)
|
@pytest.mark.parametrize('basedir, expected', [
|
||||||
|
(None, 'i-{}'.format(md5('testusername'))),
|
||||||
|
('/x', 'i-{}'.format(md5('testusername-/x'))),
|
||||||
|
])
|
||||||
def test_mac(self, basedir, expected):
|
def test_mac(self, basedir, expected):
|
||||||
socketname = ipc._get_socketname(basedir)
|
socketname = ipc._get_socketname(basedir)
|
||||||
parts = socketname.split(os.sep)
|
parts = socketname.split(os.sep)
|
||||||
@ -211,7 +209,10 @@ class TestSocketName:
|
|||||||
assert parts[-1] == expected
|
assert parts[-1] == expected
|
||||||
|
|
||||||
@pytest.mark.linux
|
@pytest.mark.linux
|
||||||
@pytest.mark.parametrize('basedir, expected', POSIX_TESTS)
|
@pytest.mark.parametrize('basedir, expected', [
|
||||||
|
(None, 'ipc-{}'.format(md5('testusername'))),
|
||||||
|
('/x', 'ipc-{}'.format(md5('testusername-/x'))),
|
||||||
|
])
|
||||||
def test_linux(self, basedir, fake_runtime_dir, expected):
|
def test_linux(self, basedir, fake_runtime_dir, expected):
|
||||||
socketname = ipc._get_socketname(basedir)
|
socketname = ipc._get_socketname(basedir)
|
||||||
expected_path = str(fake_runtime_dir / 'qutebrowser' / expected)
|
expected_path = str(fake_runtime_dir / 'qutebrowser' / expected)
|
||||||
@ -630,8 +631,6 @@ class TestSendOrListen:
|
|||||||
assert ret_client is None
|
assert ret_client is None
|
||||||
|
|
||||||
@pytest.mark.posix(reason="Unneeded on Windows")
|
@pytest.mark.posix(reason="Unneeded on Windows")
|
||||||
@pytest.mark.xfail(qtutils.version_check('5.12', compiled=False) and
|
|
||||||
utils.is_mac, reason="Broken, see #4471")
|
|
||||||
def test_correct_socket_name(self, args):
|
def test_correct_socket_name(self, args):
|
||||||
server = ipc.send_or_listen(args)
|
server = ipc.send_or_listen(args)
|
||||||
expected_dir = ipc._get_socketname(args.basedir)
|
expected_dir = ipc._get_socketname(args.basedir)
|
||||||
|
Loading…
Reference in New Issue
Block a user