Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions mergin/merginproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import logging
import math
import os
import platform
import re
import shutil
from typing import List, Optional, Dict
Expand Down Expand Up @@ -87,8 +88,10 @@ def _logger_callback(level, text_bytes):
else:
self.log.info("GEODIFF: " + text)

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

def setup_logging(self, logger_name):
"""Setup logging into project directory's .mergin/client-log.txt file."""
Expand Down
18 changes: 18 additions & 0 deletions mergin/test/test_mergin_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import shutil
import json
import tempfile
from types import SimpleNamespace
import pytest
from mergin import merginproject
from mergin.merginproject import MerginProject
from pygeodiff import GeoDiffLibError
from mergin.common import DeltaChangeType, PullActionType, ClientError
Expand Down Expand Up @@ -497,3 +499,19 @@ def test_update_project_role():

# the new role is on disk, not just in the in-memory cache
assert MerginProject(project_dir).project_role() == "reader"


@pytest.mark.parametrize(
"system, machine, callback_set",
[("Darwin", "x86_64", False), ("Darwin", "arm64", True), ("Linux", "x86_64", True)],
)
def test_geodiff_logger_callback_platforms(monkeypatch, system, machine, callback_set):
"""The geodiff logger callback is skipped on Intel macOS, where creating it hangs QGIS."""
callbacks = []
monkeypatch.setattr(merginproject.pygeodiff.GeoDiff, "set_logger_callback", lambda self, cb: callbacks.append(cb))
monkeypatch.setattr(merginproject, "platform", SimpleNamespace(system=lambda: system, machine=lambda: machine))

with tempfile.TemporaryDirectory() as tmp_dir:
MerginProject(tmp_dir)

assert bool(callbacks) == callback_set
Loading