aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-21 10:00:55 +0200
committerDanilo M. <danix@danix.xyz>2026-10-21 10:00:55 +0200
commit1af9f9022d22c6b11a1457f46aefc0828820d36b (patch)
tree2121a2598d09b2e240d1eb368ede60efdd70a5e4
parent84f9e0cbbdc83953011ab6a23788d71561c7c7ed (diff)
downloadsb-builder-1af9f9022d22c6b11a1457f46aefc0828820d36b.tar.gz
sb-builder-1af9f9022d22c6b11a1457f46aefc0828820d36b.zip
Repository: wrapped ChangeLog items, drop overtaken reloads
gen_repos_files puts a long package path alone on an indented line, its text on the next: 78 of 546 packages showed no ChangeLog. A Refresh overtaken by a later one no longer overwrites the newer scan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--sb_builder/repository.py18
-rw-r--r--tests/test_gui.py3
2 files changed, 14 insertions, 7 deletions
diff --git a/sb_builder/repository.py b/sb_builder/repository.py
index 3cead0d..29f4291 100644
--- a/sb_builder/repository.py
+++ b/sb_builder/repository.py
@@ -32,7 +32,8 @@ from .packages import OVERLAYS, table
from .ui import SP, action, chip, group_label, search_field
PKGFILE = re.compile(r"^(?P<name>.+)-(?P<version>[^-]+)-(?P<arch>[^-]+)-(?P<build>[^-]+)\.t[gx]z$")
-ITEM = re.compile(r"^([^/\s]+/[^/\s]+)/[^/\s]+\.t[gx]z:\s*(.*)$") # category/pkg/file: text
+# category/pkg/file: text; a long one is indented, its text on the next line
+ITEM = re.compile(r"^\s*([^/\s]+/[^/\s]+)/[^/\s]+\.t[gx]z:\s*(.*)$")
MONTHS = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split()
@@ -91,7 +92,7 @@ def changelog(text):
out.setdefault(m.group(1), []).append((when, parts))
elif parts is not None and line.startswith(" ") and line.strip():
parts.append(line.strip())
- return {k: [(t, " ".join(p)) for t, p in v] for k, v in out.items()}
+ return {k: [(t, " ".join(p).strip()) for t, p in v] for k, v in out.items()}
def scan(path):
@@ -203,7 +204,7 @@ def detail_html(r):
class RepositoryTab(QWidget):
packages_requested = pyqtSignal(str) # package to show in the Packages tab
- scanned = pyqtSignal(object, str) # scan() result or None, error; from the loader thread
+ scanned = pyqtSignal(int, object, str) # reload number, scan() or None, error; from the thread
def __init__(self, cfg, parent=None):
super().__init__(parent)
@@ -258,6 +259,7 @@ class RepositoryTab(QWidget):
self.actions = [] # nothing to change here: Publish lives in Packages
self.view_actions = [action(self, "Refresh", "view-refresh", SP.SP_BrowserReload, self.reload)]
self.loaded = False
+ self.generation = 0
self.stats = QLabel(wordWrap=True)
self.count = QLabel()
@@ -275,15 +277,19 @@ class RepositoryTab(QWidget):
self.loaded = True
self.stats.setText("loading…")
path = self.cfg["repository"]["path"]
+ self.generation += 1
+ gen = self.generation
def work():
try:
- self.scanned.emit(scan(path), "")
+ self.scanned.emit(gen, scan(path), "")
except OSError as e:
- self.scanned.emit(None, str(e))
+ self.scanned.emit(gen, None, str(e))
threading.Thread(target=work, daemon=True).start()
- def _loaded(self, data, err):
+ def _loaded(self, gen, data, err):
+ if gen != self.generation:
+ return # an older Refresh, overtaken
self.model.set_rows(data["rows"] if data else [])
self.stats.setText(err or summary(data))
self.update_count()
diff --git a/tests/test_gui.py b/tests/test_gui.py
index 73146c1..7d0b7dd 100644
--- a/tests/test_gui.py
+++ b/tests/test_gui.py
@@ -336,7 +336,8 @@ CHANGELOG = """+--------------------------+
Tue Oct 20 18:00:50 UTC 2026
personal/foo/foo-1.0-x86_64-2_tag.txz: Updated for
version 1.0.
-libraries/bar-baz/bar-baz-2.1-x86_64-1_tag.txz: Added.
+ libraries/bar-baz/bar-baz-2.1-x86_64-1_tag.txz:
+ Added.
+--------------------------+