[Scummvm-git-logs] scummvm-sites director-buildbot -> 4833e2bd5207d239dabc5b6f0c68337b915bd0c9

sev- noreply at scummvm.org
Fri Jul 3 20:19:20 UTC 2026


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm-sites' repo located at https://api.github.com/repos/scummvm/scummvm-sites .

Summary:
4833e2bd52 IMAGEDIFF: Sync with server


Commit: 4833e2bd5207d239dabc5b6f0c68337b915bd0c9
    https://github.com/scummvm/scummvm-sites/commit/4833e2bd5207d239dabc5b6f0c68337b915bd0c9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-07-03T22:19:04+02:00

Commit Message:
IMAGEDIFF: Sync with server

Changed paths:
    director/build_factory.py
    director/screenshot_diff.py
    director/targets.py
    imagediff/config.py
    imagediff/main.py
    imagediff/templates/target.html
    master.py


diff --git a/director/build_factory.py b/director/build_factory.py
index 211d784..461ab75 100644
--- a/director/build_factory.py
+++ b/director/build_factory.py
@@ -12,7 +12,9 @@ default_step_kwargs: dict[str, Any] = {"logEnviron": False}
 default_env: dict[str, str] = {
     "SDL_VIDEODRIVER": "dummy",
     "SDL_AUDIODRIVER": "dummy",
-    "ASAN_OPTIONS": "detect_leaks=1:abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1,fast_unwind_on_malloc=0",
+    #"ASAN_OPTIONS": "detect_leaks=1:abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1,fast_unwind_on_malloc=0",
+    # Remove fast_unwind_on_malloc as a test to see if buildtimes improve.
+    "ASAN_OPTIONS": "detect_leaks=1:abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1",
 }
 
 
diff --git a/director/screenshot_diff.py b/director/screenshot_diff.py
index 4259b5c..3526be0 100644
--- a/director/screenshot_diff.py
+++ b/director/screenshot_diff.py
@@ -17,16 +17,9 @@ EXIT_DIFF = 1
 EXIT_NO_BASELINE = 2
 EXIT_ERROR = 3
 
-_repo_root = os.path.dirname(os.path.dirname(__file__))
-_imagediff_dir = os.path.join(_repo_root, "imagediff")
 _seen_prefixes_name = ".screenshot_prefixes_seen"
 
-# imagediff/imagediff.py does `from config import SCREENSHOTS_DIR` at module
-# level, so imagediff/ must be on sys.path before we import it.
-if _imagediff_dir not in sys.path:
-    sys.path.insert(0, _imagediff_dir)
-
-import imagediff as _imagediff  # imagediff/imagediff.py
+from imagediff import imagediff as _imagediff  # imagediff/imagediff.py
 
 
 def _seen_prefixes_path(screenshots_dir: str, target: str, build: str) -> str:
diff --git a/director/targets.py b/director/targets.py
index 8a07925..d4c62a7 100644
--- a/director/targets.py
+++ b/director/targets.py
@@ -89,7 +89,9 @@ def generate_builder(target: TestTarget, workernames: list[str]) -> BuilderConfi
             command=[
                 "rsync",
                 "-av",
+                "--no-o",
                 "--delete",
+                "--link-dest", os.path.join(base_dir, to_directory),
                 os.path.join(base_dir, to_directory),
                 target.directory,
             ],
diff --git a/imagediff/config.py b/imagediff/config.py
index 785893b..db8eaf1 100644
--- a/imagediff/config.py
+++ b/imagediff/config.py
@@ -1,4 +1,7 @@
 import os
+from dotenv import load_dotenv
+
+load_dotenv()
 
 SCREENSHOTS_DIR = os.environ.get("SCREENSHOTS_DIR", "./screenshots/")
 CACHE_DIR = os.environ.get("CACHE_DIR", "./cache/")
diff --git a/imagediff/main.py b/imagediff/main.py
index 8ab7c94..488a6c1 100644
--- a/imagediff/main.py
+++ b/imagediff/main.py
@@ -1,6 +1,5 @@
 import os
 import json
-import sys
 import base64
 from io import BytesIO
 
@@ -10,11 +9,8 @@ from config import SCREENSHOTS_DIR
 
 from flask import Flask, render_template, jsonify, url_for, send_from_directory, request
 
-_imagediff_dir = os.path.dirname(__file__)
-if _imagediff_dir not in sys.path:
-    sys.path.insert(0, _imagediff_dir)
-
-from config import CACHE_DIR, SCREENSHOTS_DIR
+from imagediff.config import CACHE_DIR, SCREENSHOTS_DIR
+from imagediff.imagediff import image_diff, encode_image, movie_diff
 
 app = Flask(__name__)
 
@@ -119,7 +115,7 @@ def unescape_string(s: str) -> str:
         hi = next(s_iter, None)
     return orig_name
 
-def decode_string(orig: str) -> str:
+def decode_string2(orig: str) -> str:
     """
     Decode punyencoded strings
     """
@@ -137,6 +133,15 @@ def decode_string(orig: str) -> str:
     st = orig[4:].encode("ascii").decode("punycode")
     return unescape_string(st)
 
+def decode_string(orig: str) -> str:
+    """
+    Decode punyencoded strings
+    """
+    if not orig.startswith("xn--"):
+        return orig
+
+    st = orig[4:].encode("ascii").decode("punycode")
+    return unescape_string(st)
 
 # cache functions
 def get_cache_page_path(target, page):
@@ -244,6 +249,8 @@ def collect_movie_frames(target_path, builds):
         for file in build_files[build]:
             if not os.path.isfile(os.path.join(target_path, build, file)):
                 continue
+            if "-" not in file:
+                continue
 
 
             movie_name, frame_part = file.rsplit("-", 1)
@@ -610,7 +617,7 @@ def target_data_api(target):
         'target': target,
         'builds': display_builds,
         'movies': movies,
-        'display_movies': [decode_string(m) for m in movies],
+        'display_movies': [print(f"DEBUG movie: {repr(m)}") or decode_string(m) for m in movies],
         'continuous_bars': continuous_bars,
         'urls': urls
     }
@@ -803,4 +810,4 @@ def screenshots(filename):
     return send_from_directory(SCREENSHOTS_DIR, filename)
 
 if __name__ == '__main__':
-    app.run(debug=True, port=5001)
+    app.run(debug=True, host = '0.0.0.0', port=5002)
diff --git a/imagediff/templates/target.html b/imagediff/templates/target.html
index e9c4438..63df20e 100644
--- a/imagediff/templates/target.html
+++ b/imagediff/templates/target.html
@@ -157,7 +157,15 @@
 
         // Build API URL
         const target = '{{ target }}';
-        const apiUrl = `/api/target_data/${encodeURIComponent(target)}?page={{ page }}`;
+	// const apiUrl = `{{ url_for('target_data_api', target=target) }}?page={{ page }}`;
+	// const apiUrl = `{{ url_for('target_data_api', target=target) }}?page={{ page }}`;
+	const basePath = window.location.pathname.replace(/\/target\/[^/]*$/, '');
+        const apiUrl = `${basePath}/api/target_data/${encodeURIComponent(target)}?page={{ page }}`;
+	console.log('pathname:', window.location.pathname, 'basePath:', basePath);
+
+
+
+
 
         // Start timestamp for calculating loading time
         const startTime = new Date().getTime();
diff --git a/master.py b/master.py
index 17ded75..636d127 100644
--- a/master.py
+++ b/master.py
@@ -9,6 +9,9 @@ from buildbot.plugins import schedulers, util, worker
 from environs import Env
 from twisted.python import log
 
+env = Env()
+env.read_env()
+
 from director.build_factory import build_factory
 from director.discord import DiscordStatusPush
 from director.lingo_factory import lingo_factory




More information about the Scummvm-git-logs mailing list