Skip to content

Commit 3751abb

Browse files
committed
Skip the geodiff logger callback on Intel macOS
1 parent abd91e4 commit 3751abb

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

‎mergin/merginproject.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import math
44
import os
5+
import platform
56
import re
67
import shutil
78
from typing import List, Optional, Dict
@@ -87,8 +88,10 @@ def _logger_callback(level, text_bytes):
8788
else:
8889
self.log.info("GEODIFF: " + text)
8990

90-
self.geodiff.set_logger_callback(_logger_callback)
91-
self.geodiff.set_maximum_logger_level(pygeodiff.GeoDiff.LevelDebug)
91+
# creating a ctypes callback hangs forever in the hardened QGIS build on Intel macOS
92+
if not (platform.system() == "Darwin" and platform.machine() == "x86_64"):
93+
self.geodiff.set_logger_callback(_logger_callback)
94+
self.geodiff.set_maximum_logger_level(pygeodiff.GeoDiff.LevelDebug)
9295

9396
def setup_logging(self, logger_name):
9497
"""Setup logging into project directory's .mergin/client-log.txt file."""

‎mergin/test/test_mergin_project.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
import shutil
33
import json
44
import tempfile
5+
from types import SimpleNamespace
56
import pytest
7+
from mergin import merginproject
68
from mergin.merginproject import MerginProject
79
from pygeodiff import GeoDiffLibError
810
from mergin.common import DeltaChangeType, PullActionType, ClientError
@@ -497,3 +499,19 @@ def test_update_project_role():
497499

498500
# the new role is on disk, not just in the in-memory cache
499501
assert MerginProject(project_dir).project_role() == "reader"
502+
503+
504+
@pytest.mark.parametrize(
505+
"system, machine, callback_set",
506+
[("Darwin", "x86_64", False), ("Darwin", "arm64", True), ("Linux", "x86_64", True)],
507+
)
508+
def test_geodiff_logger_callback_platforms(monkeypatch, system, machine, callback_set):
509+
"""The geodiff logger callback is skipped on Intel macOS, where creating it hangs QGIS."""
510+
callbacks = []
511+
monkeypatch.setattr(merginproject.pygeodiff.GeoDiff, "set_logger_callback", lambda self, cb: callbacks.append(cb))
512+
monkeypatch.setattr(merginproject, "platform", SimpleNamespace(system=lambda: system, machine=lambda: machine))
513+
514+
with tempfile.TemporaryDirectory() as tmp_dir:
515+
MerginProject(tmp_dir)
516+
517+
assert bool(callbacks) == callback_set

0 commit comments

Comments
 (0)