feat(pcmirror) : le socle Rust de la synchro PC Mirror #2
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/socle-rust-pcmirror"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Carte : t_5a9f8dd3 — « PC Mirror 2/6 : socle Rust, CI et outil de synchro pcmirror ».
Ce que fait cette PR
La passe de synchronisation du PC Studio, réécrite en Rust dans
crates/pcmirror(bibliothèque + binaire
pcmirror) : configuration TOML, verrou, garde-fous,exclusions, corbeille datée, rapport JSON et télémétrie. Avec sa documentation
(
docs/PCMIRROR-RUST.md), l'exempleconfig/pcmirror.toml, leCHANGELOG.mddudépôt et le contrôle CI de la crate.
Rien n'est déployé : le PC exécute toujours
sync/pcmirror-sync.sh.Preuve : l'essai à blanc reproduit la passe en service
pcmirror run --dry-run -c config/pcmirror.toml(sortie complète en commentairede la carte). Face au script en service
/mnt/Media/Linux/pcmirror-sync.sh(129 lignes, sha256
cfe3a4b0…, mode 755) :média — script :
média — crate :
Mêmes drapeaux, même fichier de motifs (celui du miroir), mêmes six exclusions
fixes ; la crate ajoute
--exclude=/_rapports/pour ne pas effacer les rapportsqu'elle dépose (écart voulu n° 1).
personnel — script : boucle
for d in Documents Images Téléchargements,--backup --backup-dir="$REMOTE/_corbeille/$TODAY/PC-Home/$d", saut si le dossierest absent, garde-fou si le dossier local est vide face à une copie pleine.
personnel — crate : une commande par dossier, mêmes
--backup --backup-dir,mêmes saut et garde-fou, avec les phrases du script.
Même corbeille datée :
_corbeille/2026-10-15/PC-Home/<dossier>.Autres points mesurés : verrou
flock -n(un second passage sort 0 sans rienlancer),
_sync-progress.json{"pct":…,"rate":…}toutes les 4 s puis effacé,_last-sync.jsonaux mêmes clés que la référence figée(
tests/fixtures/synchro/_last-sync.json), purge de la corbeillefind /mirror/_corbeille -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -rf {} +.Écarts voulus (documentés dans
docs/PCMIRROR-RUST.md)_rapports/, y comprisquand la passe a été sautée ; le script n'écrivait que
_last-sync.json;--restaurer-homesort en 1 si une restauration échoue (le script sortait 0) ;flockautre qu'un verrou occupé remonte en erreur.Mesures
CI
Aucun exécutant Forgejo n'est rattaché à
foXaCe/pc-mirror(constat de la carte1/6, revérifié) : les commandes ci-dessus ont été lancées à la main, la CI ne
peut pas les rejouer tant qu'un exécutant n'est pas enregistré pour ce dépôt. Le
workflow
.forgejo/workflows/ci.ymlest prêt pour ce jour-là.La passe de synchronisation du PC Studio est réécrite en Rust : crate `crates/pcmirror` (bibliothèque et binaire), configuration TOML, verrou, garde-fous, exclusions, corbeille datée, rapport JSON et télémétrie aux mêmes clés que le script en service. La référence reste `sync/pcmirror-sync.sh`, que le PC exécute toujours : rien n'est déployé. `pcmirror run --dry-run` affiche les commandes `rsync` prévues et reproduit la passe décrite dans `docs/COMPORTEMENT-SYNCHRO.md`. - verrou `flock` sans attente, comme `flock -n` : un second passage n'attend pas et sort en 0 ; une panne de `flock` autre qu'un verrou occupé remonte au lieu de se faire passer pour une passe déjà en cours ; - garde-fous : média absent ou vide, hôte injoignable, dossier personnel vide face à une copie pleine, dossier personnel absent ignoré, `--ignorer-garde-fous` pour outrepasser un essai à la main ; - exclusions : les six motifs fixes du script, `_exclusions.txt` du miroir pour le transfert média, `/_rapports/` pour ne pas effacer les rapports déposés ; - rapport JSON de passe, déposé sur le miroir dans `_rapports/` ; télémétrie `_last-sync.json` et `_sync-progress.json` (`{"pct":…,"rate":…}` toutes les 4 s), aux clés du script ; - CI Forgejo : formatage, `clippy` sans avertissement, tests lançant un vrai `rsync` dans `/tmp`, relecture des fichiers de référence. Mesures : 68 tests passés (`cargo test --release --locked`), `clippy --all-targets -D warnings` sans avertissement, couverture 89,15 % des régions / 87,58 % des lignes. Référence de parité : le script en service `/mnt/Media/Linux/pcmirror-sync.sh` (129 lignes, sha256 `cfe3a4b0…`).Note pour la relecture : la branche part de
hermes/cartographie-pc-mirror(la carte 1/6, PR #1), comme le prévoit l'atelier.mainn'ayant encore que l'import initial, le diff contient donc les 8 commits de la carte 1/6 (fixtures, docs de comportement, workflow) en plus des deux commits de cette carte. Fusionner cette PR fusionne l'ensemble ; la PR #1 devient alors redondante.Contenu propre à cette carte :
crates/pcmirror/(12 modules +tests/passe_complete.rs),Cargo.toml/Cargo.lock,config/pcmirror.toml,docs/PCMIRROR-RUST.md,CHANGELOG.md,.env.example, et la partie Rust de.forgejo/workflows/ci.yml.Mesures sur le poste (CI non exécutable, voir le corps de la PR) :
fusion-auto: pas de fusion, la CI est rouge (Crate pcmirror, Crate pcmirror). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.