Metadata-Version: 2.4
Name: citadel_project
Version: 0.1.0
Summary: Versioning sans perte : depot .citadel, annulation de toute operation, fusion a trois voies
Author: 
Keywords: versioning vcs citadel
Platform: ALL
Description-Content-Type: text/markdown
Requires-Dist: impmagic
Requires-Dist: zpp_args
Requires-Dist: zpp_color
Requires-Dist: zpp_config
Requires-Dist: zstandard
Dynamic: description
Dynamic: description-content-type
Dynamic: keywords
Dynamic: platform
Dynamic: requires-dist
Dynamic: summary

# Citadel

Versioning sans perte : un dÃ©pÃ´t `.citadel`, l'annulation de toute opÃ©ration, la fusion Ã  trois voies et les conflits
conservÃ©s comme donnÃ©es. MÃªme logique et mÃªme syntaxe que les commandes de dÃ©pÃ´t de nxs ; la seule diffÃ©rence est la
crÃ©ation : `citadel init` (au lieu de `nxs repo -i`). Le paquet est construit comme `nexus_project` (zpp_args, impmagic,
zpp_config, zpp_color) et ne dÃ©pend pas de lui.

```
pip install .
citadel init
citadel commit -m "premier"
```

## Commandes

| Commande | RÃ´le |
|---|---|
| `init` | crÃ©er un dÃ©pÃ´t dans le dossier courant |
| `status`, `log [-o] [-a] [-n N]`, `diff [A [B]]`, `show REV[:chemin]`, `tree [-C rev] [-s] [chemin]` | consulter |
| `commit -m MSG` | valider le travail en cours (rien Ã  valider : simple message) |
| `branch [-a NOM] [-d NOM] [-r ANCIEN NOUVEAU] [-S branche] [-C rev]` | lister, crÃ©er, supprimer, renommer |
| `switch [-c] [-f] NOM` / `merge [--no-ff] [-D dest] BRANCHE` | changer de branche, fusionner |
| `restore FICHIER... [-C rev] [-d dest]` | restaurer depuis une rÃ©vision |
| `tag [NOM [REV]]` | crÃ©er ou lister les tags |
| `undo [--to ID]`, `oplog [-a]` | annuler (un `undo` de l'`undo` refait), journal des opÃ©rations |
| `conflicts`, `conflict show\|edit CHEMIN`, `resolve CHEMIN --ours\|--theirs\|--base` | conflits |
| `track CHEMIN...` | suivre un fichier au-delÃ  de la limite de taille |
| `repo gc\|fsck\|info\|config [CLE [VALEUR]]`, `repo --purge [-y]` | maintenance et rÃ©glages **du dÃ©pÃ´t** |
| `config [CLE [VALEUR]]` | configuration **de citadel** (comme `nxs config`) |

`-n/--dry-run` simule (rien n'est Ã©crit) sur les commandes qui modifient le dÃ©pÃ´t. `-C` dÃ©signe toujours une rÃ©vision, `-c` crÃ©e.

## Configuration (`citadel config`)

Fichier `~\AppData\Local\Citadel\.config\citadel.yml` (Windows) ou `~/.config/Citadel/.config/citadel.yml`, crÃ©Ã© au premier
lancement (variable `CITADEL_CONFIG` pour en choisir un autre). Sans argument la commande liste les rÃ©glages ; avec une clÃ©
boolÃ©enne elle la bascule ; avec une clÃ© et une valeur elle l'Ã©crit.

| ClÃ© | RÃ´le |
|---|---|
| `logs.display`, `logs.date`, `logs.truecolor` | affichage des messages |
| `repo.auto_max_mb` | taille au-delÃ  de laquelle un fichier n'est pas capturÃ© automatiquement (dÃ©faut 10) |
| `repo.secret_patterns` | motifs de fichiers ignorÃ©s comme secrets (sÃ©parÃ©s par des virgules) |
| `repo.rename_threshold_pct` | ressemblance minimale pour proposer un renommage (dÃ©faut 60) |
| `repo.retention_days` | durÃ©e de conservation des Ã©tats de travail automatiques (dÃ©faut 30) |
| `repo.user` | auteur des commits, Â« Nom <email> Â» (sinon variable `CITADEL_USER`) |
| `repo.ignore` | motifs ignorÃ©s en plus de `.citadelignore`, sÃ©parÃ©s par des virgules |

Les clÃ©s `repo.*` (sauf `ignore`, appliquÃ©e Ã  chaque ouverture) sont copiÃ©es dans un dÃ©pÃ´t **au moment de sa crÃ©ation** :
ensuite chaque dÃ©pÃ´t garde les siennes, modifiables avec `citadel repo config`.

## Format

Le dossier `.citadel` est le mÃªme que celui de nxs (implÃ©mentation Rust et paquet `nexus_project`) : un dÃ©pÃ´t crÃ©Ã© par l'un se
lit avec l'autre. Empreintes SHA-256, segments compressÃ©s en zstd, gros fichiers en morceaux de 4 Mio. RÃ¨gles d'exclusion :
`.citadelignore` ; les fichiers qui ressemblent Ã  des secrets (`.env`, `*.pem`â€¦) sont ignorÃ©s par dÃ©faut.

## Utilisation en bibliothÃ¨que

```python
from citadel import open_repo
repo = open_repo(".", create=True)       # CitadelBackend
repo.commit("message")
```

## Tests

```
python -m unittest discover -s tests
```
