Vraiment intéressé par cette partie (je suis en ce moment dans ce même genre de problème):
Les produits du build sont indexés par le contenu de la recette du build, et indexés une deuxième fois par le résultat : c'est ce deuxième hash qui est utilisé dans les dépendants du paquet, ce qui permet de construire un arbre de Merkle du système complet (et non seulement de ses sources), qui rend toute modification ultérieure facilement détectable.
J'ai l'impression que classiquement on hash les sources (sources + recette) pour faire une signature d'entrée et on indexe l'artefact produit en utilisant ce hash d'entrée. En passant cet index à l'étape suivante du build on peut réutiliser l'artefact. De proche en proche on identifie les signatures d'entrée de chaque build, et on est capable de trouver les artefacts correspondant à chacune de ces signatures.
Je n'arrive pas à imaginer comment tu utilises le deuxième hash (celui de l'artefact) comme index de dépendance : il faut maintenir une table de correspondance entre signature d'entrée et hash de l'artefact ? Si j'analyse mon arbre de build, je peux connaitre a priori l'ensemble des signatures d'entrée (tout dérive du hash des sources), mais j'ai besoin d'exécuter les build pour avoir le hash de l'artefact, et c'est là ou je ne comprends pas comment l'utiliser comme index de dépendance.
(en fait ce cas m'intéresse parce que pour des recettes légèrement différente on peut produire exactement le même artefact et arriver à identifier ce cas permet de ne pas refaire des builds inutilement).
Sur ce sujet je suis preneur de tout pointeur de documentation, article, présentation ... :)
# index d'entrée, index de sortie
Posté par fabien . En réponse à la dépêche Elpe, un compromis entre NixOS et Ubuntu. Évalué à 3.
Hello,
Vraiment intéressé par cette partie (je suis en ce moment dans ce même genre de problème):
J'ai l'impression que classiquement on hash les sources (sources + recette) pour faire une signature d'entrée et on indexe l'artefact produit en utilisant ce hash d'entrée. En passant cet index à l'étape suivante du build on peut réutiliser l'artefact. De proche en proche on identifie les signatures d'entrée de chaque build, et on est capable de trouver les artefacts correspondant à chacune de ces signatures.
Je n'arrive pas à imaginer comment tu utilises le deuxième hash (celui de l'artefact) comme index de dépendance : il faut maintenir une table de correspondance entre signature d'entrée et hash de l'artefact ? Si j'analyse mon arbre de build, je peux connaitre a priori l'ensemble des signatures d'entrée (tout dérive du hash des sources), mais j'ai besoin d'exécuter les build pour avoir le hash de l'artefact, et c'est là ou je ne comprends pas comment l'utiliser comme index de dépendance.
(en fait ce cas m'intéresse parce que pour des recettes légèrement différente on peut produire exactement le même artefact et arriver à identifier ce cas permet de ne pas refaire des builds inutilement).
Sur ce sujet je suis preneur de tout pointeur de documentation, article, présentation ... :)