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

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 :

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 :

    cd make
    make
    # Aligner les timestamps des fichiers
    touch -r input.txt output.txt
    make
    
  2. Pour Bake :

    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.