90 lines
3.1 KiB
Markdown
90 lines
3.1 KiB
Markdown
|
# Test 23 - Gestion des timestamps identiques
|
||
|
|
||
|
Ce test vérifie le comportement de `bake` comparé à `make` lorsque le fichier source et la cible ont des timestamps strictement identiques.
|
||
|
|
||
|
## Sommaire
|
||
|
- [Structure du test](#structure-du-test)
|
||
|
- [Contenu des fichiers de règles](#contenu-des-fichiers-de-règles)
|
||
|
- [Objectif du test](#objectif-du-test)
|
||
|
- [Scénario de test](#scénario-de-test)
|
||
|
- [Comment exécuter le test](#comment-exécuter-le-test)
|
||
|
- [Test manuel](#test-manuel)
|
||
|
- [Résultats attendus](#résultats-attendus)
|
||
|
- [Explications techniques](#explications-techniques)
|
||
|
|
||
|
## Structure du test
|
||
|
|
||
|
```
|
||
|
test-23-identical-timestamps/
|
||
|
├── README.md # Ce fichier
|
||
|
├── bake/
|
||
|
│ ├── Bakefile # Fichier de règles pour bake
|
||
|
│ ├── bakefile.jar # Exécutable de bake (JAR)
|
||
|
│ ├── input.txt # Fichier source
|
||
|
│ ├── output.txt # Fichier cible (avec timestamp identique)
|
||
|
└── make/
|
||
|
├── Makefile # Fichier de règles pour make
|
||
|
├── input.txt # Fichier source
|
||
|
└── output.txt # Fichier cible (avec timestamp identique)
|
||
|
```
|
||
|
|
||
|
## Contenu des fichiers de règles
|
||
|
|
||
|
Les fichiers `Makefile` et `Bakefile` contiennent les mêmes règles simples :
|
||
|
|
||
|
```makefile
|
||
|
all: output.txt
|
||
|
|
||
|
output.txt: input.txt
|
||
|
cat input.txt > output.txt
|
||
|
|
||
|
input.txt:
|
||
|
echo "Test" > input.txt
|
||
|
```
|
||
|
|
||
|
## Objectif du test
|
||
|
|
||
|
Ce test vérifie que `bake` se comporte comme `make` face à un cas particulier : quand le fichier source `input.txt` et la cible `output.txt` ont exactement le même timestamp. Ce scénario peut se produire lors de synchronisations de fichiers rapides ou d'opérations automatisées qui modifient simultanément les fichiers source et cible.
|
||
|
|
||
|
## Scénario de test
|
||
|
|
||
|
Le test suit les étapes suivantes :
|
||
|
1. Créer le fichier source `input.txt`
|
||
|
2. Générer la cible `output.txt` à partir du fichier source
|
||
|
3. Aligner les timestamps des deux fichiers pour qu'ils soient identiques
|
||
|
4. Exécuter `make` et `bake` pour observer s'ils considèrent la cible comme à jour
|
||
|
|
||
|
## Comment exécuter le test
|
||
|
|
||
|
### Test manuel
|
||
|
|
||
|
1. Pour Make :
|
||
|
```bash
|
||
|
cd make
|
||
|
make
|
||
|
# Aligner les timestamps des fichiers
|
||
|
touch -r input.txt output.txt
|
||
|
make
|
||
|
```
|
||
|
|
||
|
2. Pour Bake :
|
||
|
```bash
|
||
|
cd bake
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main
|
||
|
# Aligner les timestamps des fichiers
|
||
|
touch -r input.txt output.txt
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main
|
||
|
```
|
||
|
|
||
|
3. Comparez visuellement les deux résultats.
|
||
|
|
||
|
## Résultats attendus
|
||
|
|
||
|
- `make` et `bake` devraient considérer `output.txt` comme à jour et ne pas le reconstruire.
|
||
|
- Aucun message de recompilation ne devrait apparaître après la synchronisation des timestamps.
|
||
|
- Si `bake` ou `make` reconstruisent `output.txt`, cela indique une différence dans leur gestion des timestamps identiques.
|
||
|
|
||
|
## Explications techniques
|
||
|
|
||
|
En fonctionnement normal, `make` et `bake` vérifient la date de modification des fichiers pour déterminer s'il faut recompiler une cible. Lorsque la cible et sa dépendance ont le même timestamp, la cible est considérée à jour, et aucune action n'est entreprise. Ce test vérifie que `bake` suit bien cette logique.
|