Commit Graph
146 Commits
Author SHA1 Message Date
Abdessamad Derraz fa7977d2c3 fix: ask again for a tip older than the pin
A branch tip is cached for six hours. scummvm-standalone was pinned on
6f7b060d while the cache still held 77d80d7, its ancestor, so profile_sync
showed a HEAD behind the pin and a bump would have moved it backwards. A
tip that is a strict ancestor of the pin is now asked for again.
2026-10-24 02:00:21 +02:00
Abdessamad Derraz 5a3f621e94 fix: read the mirror of a gone source
select_views stopped on the first repository that answered as gone, so
yuzu's source_mirror was never read and the profile stayed unchecked. A
gone repository is now passed over, and a profile declared gone that
answers only through its mirror is not reported as a contradiction.
2026-10-23 19:13:48 +02:00
Abdessamad Derraz 82bf236a5a feat: hold an upstream pin a port vendors
upstream_frozen says why upstream_commit stays: the port vendors that
upstream tree, synced to that release, or merged that commit. The view
is then read at its own pin, the way pin_frozen holds source_commit, and
a bump leaves it. Outside a GitHub fork network nothing else could tell
aps3e's vendored RPCS3 1f080485 from an upstream read on a date.
2026-10-23 17:30:20 +02:00
Abdessamad Derraz 01465ecf6b fix: ignore a release older than the tag
--check-version said pcsx2x6's v0.2.22 was older than its code because
the pin holds release v0.2.20, the latest the project published. A
release that is an ancestor of the declared tag is not a later one.
2026-10-23 17:26:25 +02:00
Abdessamad Derraz 19f22da75f fix: write prose and quoted refs as written
A folded run rewritten whole keeps its separators (boom3, mame), a
double-quoted source_ref is matched as the loader reads it and escaped on
write (etlegacy), two files sharing a name take their build mode in the
field path (supermodel Games.xml), and a project word ending the line
before a path marks the citation external (genesis_plus_gx_expanded).
2026-10-23 17:23:01 +02:00
Abdessamad Derraz 6f8d3dede3 fix: read prose where its path is written
realign_prose stripped a path prefix, or read a path two repositories
share, in the repository whose pin moved, while the profile meant the
other. hatarib's hatari/src/tos.c became hatari/hatari's src/tos.c, and
freej2me_plus's fork citations were read in hex007/freej2me: 32 and 8
citations asked to be read again although their files were unchanged.
The path as written now decides first, and a shared path belongs to the
repository declared first, as in attribution.

test_a_frozen_build_files_its_content_with_the_build_that_follows paired
every pin_frozen profile with every live one of the same source. It now
skips platform builds (built_by), and requires the frozen systems to be
a subset: a later release can add a board (advancemame's coh1002v).
2026-10-23 16:41:04 +02:00
Abdessamad Derraz 861b89dd44 feat: follow a fork's base as its upstream head
For a port that is a GitHub fork of its upstream, the upstream code it
carries is the merge base of the two, not upstream's HEAD. The bump moved
upstream_commit to upstream HEAD on snes9x, kronos, np2kai and others
whose pin was that base. The upstream view's head is now the merge base
GitHub's compare names, the way _follow_submodule already reads a
vendored submodule. Outside a fork network the HEAD stays.
2026-10-23 16:25:56 +02:00
Abdessamad Derraz 2d48cde8d6 fix: judge each recaled citation at its own place
A sentence written in two fields was located over the whole file, found
twice and left in both: the writer now searches the lines of its own
scalar. A structured ref was judged pending when its old text appeared
anywhere, so a chain of shifts (tr1x cut2 508 to 531, cut3 531 to 552)
held the pin on the values the previous entries took: it is now looked
up at its own field.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz 97c960484c fix: read the file a detected literal names
A printf conversion glued to a name, a name with spaces cut to its last
word, an extension list, and an identifier in code were reported as new
files.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz 5fba72f1a3 fix: map a file edited line for line as changed 2026-10-23 16:21:04 +02:00
Abdessamad Derraz 42dfc87e24 fix: recale wrapped and comment prose citations
The recale skipped runs in YAML comments and runs wrapped over two
lines of a literal block, while the pin check counted them: the run
wrote nothing and said nothing. Both are now rewritten at their located
position. A citation that still cannot move is named on stderr and the
profile is left untouched.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz e63bdd23c2 fix: name only the pin moves a bump keeps
A bump rolled back for stale prose still printed the pins it would have
set (yaps2: upstream_commit -> 7fe1e55 after "nothing was written").
2026-10-23 15:57:19 +02:00
Abdessamad Derraz d1a6e96820 fix: check the prose a bump leaves behind
The prose guard read citations under the pins a profile held before the
write. A bump that moves upstream_commit alone could then leave prose the
report had judged in the fork under the new upstream pin: ten profiles
(dolphin-mmjr2, hatari, xenios among them) came out of a bump with prose
to read again. The written file is now read again and the original bytes
put back when a citation is left under an older pin.

A pin_frozen reason was printed as a tag name ("pinned to tag EmuELEC,
the only platform..."); it now reads "pin held (...)".
2026-10-23 15:50:51 +02:00
Abdessamad Derraz 9dd2a3d95f fix: date-order tags and scope the write guard
check_version read latest_tag as the first entry of GitHub's REST
listing, which sorts by name (nesoid: 2.5 before 2.5-4, gargoyle:
stable-20090825 before 2026.1.1), and found the declared tag only on that
first page of 100. The newest tag now comes from GraphQL by commit date,
and the declared one is asked for by name on GitHub, GitLab and Forgejo.

The clean-tree guard of the write modes looked at the whole emulators
directory: a loop of --emulator X --rebase-refs refused every profile
after the first it wrote. It now looks at the selected profiles only.
2026-10-23 15:40:56 +02:00
Abdessamad Derraz 18fc5ce53f fix: leave platform-built pins to a reader
bump_commit advanced any profile whose refs all anchored at HEAD. On a
built_by profile the pin is the commit a platform compiles (mame0258,
mame0278, gsplus-legacy at recalbox gsplus.mk:8-9), so HEAD is a build
nobody ships under that name. The bump now refuses those profiles.
2026-10-23 15:35:51 +02:00
Abdessamad Derraz de6f616bb9 docs: split a docstring sentence in profile_sync 2026-10-23 15:34:11 +02:00
Abdessamad Derraz a293887145 feat: place the pin against its version tag
--check-version said only that core_version names a tag other than the
pin. It now counts the pin against that tag (after it, before it, or off
its history), and names the latest release when the pin already contains
it. Of 52 warnings, 43 are builds between releases; ares, boytacean,
nesoid and primehack name an older release than their code, vkquake and
vkquake2 a later one.
2026-10-23 15:24:21 +02:00
Abdessamad Derraz d458cf653a fix: wait out a 429 and keep the pass going
A single 429 from git.libretro.com on cemu's tree ended profile_sync --all
with a traceback and no report for the other 646 profiles. upstream now
waits a 429 out (Retry-After up to 120 s, else 5, 20, 60 s), as
base_scraper already did, and stops asking a host that outlasts the
waits. profile_sync reports that profile as rate limited, fails the run,
and carries on with the other forges.
2026-10-23 15:02:48 +02:00
Abdessamad Derraz 36427edbb2 fix: point source refs at paths held at the pin
trident cites the Panda3DS fork 3dsTrident vendors as a submodule, now
its upstream at the submodule pin 69095ee6. pce-emu, uqm and stonesoup
wrote paths from a subdirectory (PCE.emu/, sc2/, crawl-ref/), nesoid
named two Java files without their directory; lines unchanged, each read
at the pin.

The pages no longer take a binary citation (DesktopKinect.dll, an
address continuing a BAM.dll range) for a source path, and a Forgejo
tree is read page by page: mirrors/Ryujinx holds 4704 entries, 1000 a
page.
2026-10-23 13:11:48 +02:00
Abdessamad Derraz 3276754102 fix: end profile history at a deleted namesake 2026-10-22 08:15:15 +02:00
Abdessamad Derraz 8643d4a4ea chore: merge audit fixes (site)
# Conflicts:
#	emulators/flycast.yml
#	emulators/primehack.yml
2026-10-21 11:48:30 +02:00
Abdessamad Derraz a492e68045 fix: read a tagged upstream at its tag only
detect_pinned_tag matched core_version against every view, so an upstream_commit set to the release tag a port was cut from (triforce on Dolphin 2407, dosbox_pure on 1.0-preview7, GroovyMAME on mame0289) froze the whole profile: the port was no longer compared with its HEAD and bump_commit refused. Only the documented build's repository freezes the profile now. An upstream on its tag is self-checked at that tag, is not reported orphaned, and a bump leaves upstream_commit on it.
2026-10-21 10:34:46 +02:00
Abdessamad Derraz fd1d1b7b96 chore: merge round 2 fixes (pins)
# Conflicts:
#	install.ps1
#	install.sh
2026-10-21 10:31:09 +02:00
Abdessamad Derraz d87e1035ed chore: drop a clause semicolon in profile_sync 2026-10-21 10:24:39 +02:00
Abdessamad Derraz 3d2a521f8a fix: match profile_sync --system as verify does
--system compared the raw id, so the normalized spelling printed by verify.py --list-systems selected 1 Saturn profile of 11. The hint now counts the spellings that listing prints.
2026-10-21 09:52:13 +02:00
Abdessamad Derraz 6877512af7 feat: carry new upstream names and hashes in json
--detect-new-files and --watch-hashes were printed only by the text report and refused with --json, so check_freshness --profiles never saw a name or hash the cited code gained. Both now live on the report, and check_freshness passes them and marks such a profile stale.
2026-10-21 09:51:14 +02:00
Abdessamad Derraz 9409ec12b3 fix: keep the two mt32emu.h citations together
Each MT-32 entry cites the SHA-1 line and the ROMInfo line of one
mt32emu.h. dosbox_pure wrote them under two repository words, so the
ROMInfo line was self-checked alone and read MOVED onto the SHA-1 line.
Both now sit in the port that carries the file, and in the upstream for
dosbox-pure-unleashed, whose tree has no src/gui.

A recale that lands on a line a sibling part already cites goes to
review, and a part settled by its anchor keeps that anchor's repository.
2026-10-21 09:50:40 +02:00
Abdessamad Derraz fd9a9b14f8 fix: map rows edited in place one to one
A replace opcode of equal size is a line-by-line edit. Collapsing it onto its first line sent every ref citing a table row to the first row.
2026-10-21 09:48:33 +02:00
Abdessamad Derraz 6c2204a7a8 chore: merge tooling follow-up
# Conflicts:
#	tests/test_audit_regressions.py
2026-10-21 06:50:20 +02:00
Abdessamad Derraz 85a44d9bf7 chore: merge amiberry and hatari re-profile
# Conflicts:
#	README.md
#	emulators/amiberry.yml
#	install/batocera.json
#	install/emudeck.json
#	install/lakka.json
#	install/recalbox.json
#	install/retroarch.json
#	install/retrobat.json
#	install/retrodeck.json
#	install/rocknix.json
2026-10-21 06:21:30 +02:00
Abdessamad Derraz 5ce7ab8386 fix: self-check a ref in every repository
A prose citation of the port's own lines was read only in the upstream file that a source_ref attributes the path to, and a range past that file's end came back GONE although the port carries it.
2026-10-21 06:18:00 +02:00
Abdessamad Derraz 57ac252482 feat: check the profiles a branch adds or edits
profile_sync gains --changed (added or edited profiles, uncommitted
ones included) and --added, both against the merge base of --base
(origin/main by default). CONTRIBUTING runs --changed --strict instead
of one --emulator call per new profile, and the CI job runs --added
in place of its own diff loop.
2026-10-21 06:09:55 +02:00
Abdessamad Derraz b784a73d5c fix: name a repository the forge renamed
GitHub, GitLab and Gitea redirect a renamed repository, and every call
follows the redirect: AloysHF/NicaiEmu answers as AloysHF/CoolbarEmu
and the profile read as current. profile_sync now reads the name the
forge answers under and counts a move as review work.
2026-10-21 06:09:31 +02:00
Abdessamad Derraz d6fc66274f fix: let check_freshness read the profile report
check_freshness ran profile_sync with --json and the detection flags,
which profile_sync refuses, so --profiles always reported an unreadable
report. The version check now lives on the report and travels in the
JSON and markdown outputs; check_freshness asks for --json
--check-version only.
2026-10-21 06:09:15 +02:00
Abdessamad Derraz 73d73e0f2a chore: merge audit fixes (profsync) 2026-10-21 05:44:32 +02:00
Abdessamad Derraz b464ed9202 fix: count prose that holds the pin as review work
The triage, --changed-only and --strict counted refs only. Prose that
--realign-prose would move or refuse blocks every recale and bump, and
blastem read 0 to review. Each report now carries that reading. The
triage also gets a header, a closing count, and one sampling notice per
run instead of one per profile.
2026-10-21 05:24:17 +02:00
Abdessamad Derraz 805ca3bb6b fix: pass over a profile revision that won't parse
One unparsable commit in a profile's history stopped the walk and
marked every older prose citation unknown, which refused the recale and
bump for good (lindbergh-loader, df7346b3). The revision is now passed
over unless the pins differ on its two sides while the field's
citations changed across it.
2026-10-21 05:18:49 +02:00
Abdessamad Derraz 31566ce618 fix: read a past pin only for its own repository
A source_commit string from before the field was keyed by mode pinned
the standalone repository, yet was read as a writing pin for every mode.
xenia-edge then saw its libretro pin move under unchanged prose, and
the recale and bump were refused.
2026-10-21 05:17:01 +02:00
Abdessamad Derraz 64b2967ffb fix: read a source_ref role per part, prose too
The role a part writes (source or upstream) was kept per path, first
met first kept, so a later part naming the other role was read in the
other repository. In prose the word source made a citation external
and the word upstream was dropped. The role now travels on each part.
2026-10-21 05:14:47 +02:00
Abdessamad Derraz 7095aa61e7 fix: make maintainer tool output actionable
--emulator accepts a buildbot core name from a profile's cores:, and a
mistyped target gets the closest names instead of every target. diff_truth
shows destinations and reports unpaired entries as evidence, not removals.
The verify summary counts discrepancies, a shared destination names both
systems, a truth hash conflict names both cores, and pipeline steps carry
their place in the real run instead of N/8. Every GitHub API caller takes
the token from github_token(), which falls back to gh auth token.
2026-10-21 04:42:01 +02:00
Abdessamad Derraz f6ac473e78 docs: no double hyphen used as a dash
The home page's methodology list and a few comments wrote ' -- ' where a colon or parentheses belong.
2026-10-20 06:23:02 +02:00
Abdessamad Derraz 2cba2383ca refactor: move the prose citation grammar
The site linked prose citations through profile_sync, which made the site build depend on the checker. The prose runs and their patterns move to sourceref, the grammar module both read, and profile_sync re-exports them.
2026-10-20 06:06:34 +02:00
Abdessamad Derraz dec0fdc163 feat: each citation names the code that asks
A profile that reads a libretro core and the original emulator cited both trees alike, and readers could not tell whether the core or the emulator asked for a file. A cited path now opens with source or upstream, the repository its lines are in. Emulator code a port carries is attributed upstream when the original holds the same value on the cited line.

profile_sync --attribute-refs writes the words from where the lines are found and follows a word already written. The site links each citation to that repository's pin, labels it libretro core or upstream emulator, and says on each file card whose code asks for it. A recale keeps the word, and mame_ref_audit reads the tree it names.
2026-10-20 05:52:13 +02:00
Abdessamad Derraz adea35e12a fix: a recale keeps the repository word of a ref
A source_ref written as `stella src/a.c:120` names the repository its lines are in. The path is read without the word, and --rebase-refs wrote the new span back without it, losing the attribution.
2026-10-20 05:46:09 +02:00
Abdessamad Derraz 77389236e6 feat: record a release with no genuine copy
Paid Android emulators announce versions that circulate only rebuilt or re-signed. The profile stays on the newest unmodified build, and version_source.no_genuine_copy names the release searched for, so check_freshness stops flagging it until the page announces a later one.
2026-10-20 04:49:24 +02:00
Abdessamad Derraz 282f8d5d0a feat: watch the release page of off-forge profiles
About forty profiles describe projects published outside any forge (Altirra, ePSXe, DraStic, mednafen, xroar). profile_sync skipped them as an unsupported host and check_freshness reported the same UNKNOWN line every run, so a new release adding a firmware went unseen. A profile can now name the page announcing its releases and a pattern for the version: --check-version reads it, and check_freshness --profiles calls the profile stale when the page announces another version than core_version.
2026-10-20 04:28:27 +02:00
Abdessamad Derraz 392a5d68cc fix: strict sync fails a profile it cannot check
profile_sync skipped a profile whose repository no longer answers, which carries no pin, or whose declared death the forge contradicts, with empty counts. --strict counted refs to review only, so the CI job meant to stop an unchecked new profile passed a mistyped repository. Such skips now fail a strict run. An unsupported host, a declared takedown and a profile without refs stay accepted.
2026-10-20 02:23:56 +02:00
Abdessamad Derraz d1ff233990 fix: profile_sync reports in English
The summary line and the markdown table header were the only French strings among the project's command output.
2026-10-20 00:29:57 +02:00
Abdessamad Derraz 6bfd73f4f8 fix: a truncated tree does not prove a file gone
When the forge truncates the HEAD tree, the rename search cannot see every path, yet a bare filename it did not find was reported GONE. eden's fs_paths.h and path_util.cpp exist under src/common/fs/. Such a citation is now AMBIGUOUS with the reason, as the realign path already says unclear and never absent.
2026-10-20 00:15:39 +02:00
Abdessamad Derraz d62ada2e6e fix: read a citation wrapped before its colon
jgenesis, ioquake3, yquake2, playdiaemu, samcoupe, skyline and plastic wrap a citation as `path.ext` then `:N-M` on the next line. The collector only joined a line ending with a colon or comma, so these runs were never compared and a bump moved the pin past them silently. They are now read, as wrapped runs that hold the pin until rewritten.
2026-10-20 00:14:43 +02:00