feat(identity): rename user-visible identity to voculinux with one-time legacy import

The fork takes its own name everywhere a user can see it: binaries
(voculinux, voculinux-gui), desktop entry, autostart, tray, D-Bus
namespace (com.voculinux.Voculinux, no alias for the old name),
config/data/cache dirs, single-instance lock, IBus engine identity,
tray icons, resource prefixes, VOCULINUX_* environment names, and the
update-checker user agent. The internal Python module stays vocalinux
and the distribution metadata keeps the upstream URLs as provenance.

On first run a previous Vocalinux install's config.json, custom
dictionary, and portal restore token are copied once into the new
locations (new config always wins, no merge, no write-back); models
re-resolve through the pinned-checksum download path. An offline
naming-sweep test proves no old-name strings remain on user-visible
surfaces outside the allowlist.

Refs #18
This commit is contained in:
soubarnak
2026-11-06 01:29:39 +05:30
parent c565e6d946
commit ea7be5f111
251 changed files with 2449 additions and 1991 deletions
+12 -12
View File
@@ -44,9 +44,9 @@ def test_local_gate_isolates_outputs_and_retains_failed_diagnostics(
checkout = tmp_path / "checkout"
scripts = checkout / "scripts"
scripts.mkdir(parents=True)
template = checkout / "packaging/aur/vocalinux"
template = checkout / "packaging/aur/voculinux"
template.mkdir(parents=True)
shutil.copy2(ROOT / "packaging/aur/vocalinux/PKGBUILD", template / "PKGBUILD")
shutil.copy2(ROOT / "packaging/aur/voculinux/PKGBUILD", template / "PKGBUILD")
shutil.copy2(ROOT / "scripts/prepare_aur_source.py", scripts / "prepare_aur_source.py")
# Keep the real cleanup policy: shared dist/ would reject these outputs.
@@ -78,22 +78,22 @@ def test_local_gate_isolates_outputs_and_retains_failed_diagnostics(
if os.environ['AUR_GATE_TEST_FAILURE'] == 'build':
sys.exit(31)
args.output.mkdir(parents=True, exist_ok=True)
with tarfile.open(args.output / 'vocalinux-0.18.4.tar.gz', 'w:gz') as archive:
metadata = b'Name: vocalinux\\nVersion: 0.18.4\\n'
member = tarfile.TarInfo('vocalinux-0.18.4/PKG-INFO')
with tarfile.open(args.output / 'voculinux-0.18.4.tar.gz', 'w:gz') as archive:
metadata = b'Name: voculinux\\nVersion: 0.18.4\\n'
member = tarfile.TarInfo('voculinux-0.18.4/PKG-INFO')
member.size = len(metadata)
archive.addfile(member, io.BytesIO(metadata))
(args.output / 'vocalinux-0.18.4-py3-none-any.whl').write_text('new wheel')
(args.output / 'voculinux-0.18.4-py3-none-any.whl').write_text('new wheel')
"""))
# Existing packaging outputs, wheel diagnostics and dev tooling are not ours.
protected = {}
for name in (
"dist/vocalinux-0.18.4-py3-none-any.whl",
"dist/vocalinux-0.18.4.tar.gz",
"dist/Vocalinux-0.18.4-x86_64.AppImage",
"dist/vocalinux_0.18.4_amd64.deb",
"dist/vocalinux-0.18.4.x86_64.rpm",
"dist/voculinux-0.18.4-py3-none-any.whl",
"dist/voculinux-0.18.4.tar.gz",
"dist/Voculinux-0.18.4-x86_64.AppImage",
"dist/voculinux_0.18.4_amd64.deb",
"dist/voculinux-0.18.4.x86_64.rpm",
"build/reproducible-wheel/canonical.log",
".venv/keep.txt",
):
@@ -133,7 +133,7 @@ def test_local_gate_isolates_outputs_and_retains_failed_diagnostics(
source = next(arg.removesuffix(':/aur-source:ro') for arg in sys.argv
if arg.endswith(':/aur-source:ro'))
assert (Path(source) / 'PKGBUILD').is_file()
assert (Path(source) / 'vocalinux-0.18.4.tar.gz').is_file()
assert (Path(source) / 'voculinux-0.18.4.tar.gz').is_file()
assert 'AUR_SOURCE=/aur-source' in sys.argv
with open(os.environ['AUR_GATE_TEST_LOG'], 'a') as log:
log.write(json.dumps(['arch', source]) + '\\n')