L'outil informatique patch est un programme Unix qui met à jour les fichiers texte selon les instructions contenues dans un fichier séparé, appelé fichier patch . Le fichier patch (également appelé patch en abrégé) est un fichier texte qui se compose d'une liste de différences et est produit en exécutant le programme diff associé avec le fichier d'origine et le fichier mis à jour comme arguments. La mise à jour des fichiers avec patch est souvent appelée application du patch ou simplement correction des fichiers.
Histoire
Le programme de patch original a été écrit par Larry Wall (qui a ensuite créé le langage de programmation Perl ) et publié sur (qui est devenu plus tard ) en mai 1985. mod.sourcescomp.sources.unix
patch a été ajouté à XPG4, qui est devenu plus tard POSIX . Le code de Wall reste la base des programmes « patch » fournis dans OpenBSD , FreeBSD , et schilytools. L' Open Software Foundation , qui a fusionné avec The Open Group , aurait maintenu une version dérivée.
Le projet GNU / FSF maintient son patch, dérivé de la version de Larry Wall. Le dépôt est différent de celui de GNU diffutils, mais la documentation est gérée ensemble.
Contexte d'utilisation
Développé par un programmeur pour d'autres programmeurs, le patch était fréquemment utilisé pour mettre à jour le code source vers une version plus récente. De ce fait, de nombreuses personnes ont fini par associer les patchs au code source, alors qu'ils peuvent en fait être appliqués à n'importe quel texte. Les fichiers patchés n'accumulent pas de texte inutile, ce que certaines personnes perçoivent en se basant sur la signification anglaise du mot ; patch est aussi capable de supprimer du texte que d'en ajouter.
Les correctifs décrits ici ne doivent pas être confondus avec les correctifs binaires , qui, bien que pouvant être conceptuellement similaires, sont distribués pour mettre à jour les fichiers binaires comprenant le programme vers une nouvelle version.
Correctifs dans le développement de logiciels
Les fichiers diff qui servent d'entrée au patch sont des fichiers texte lisibles, ce qui signifie qu'ils peuvent être facilement révisés ou modifiés par des humains avant utilisation.
En plus du programme « diff », les diffs peuvent également être produits par d'autres programmes, tels que Subversion , CVS , RCS , Mercurial et Git .
Les correctifs ont été le composant crucial de nombreux systèmes de contrôle de source , y compris CVS .
Différences avancées
Lorsque des différences plus avancées sont utilisées, les correctifs peuvent être appliqués même aux fichiers qui ont été modifiés entre-temps, tant que ces modifications n'interfèrent pas avec le correctif. Ceci est réalisé en utilisant des « différences de contexte » et des « différences unifiées » (également appelées « unidiffs »), qui entourent chaque changement avec le contexte , qui est le texte immédiatement avant et après la partie modifiée. Patch peut ensuite utiliser ce contexte pour localiser la région à corriger même si elle a été déplacée par des modifications antérieures dans le fichier, en utilisant les numéros de ligne dans les différences comme point de départ. En raison de cette propriété, les différences de contexte et unifiées sont la forme préférée de correctifs pour la soumission à de nombreux projets logiciels.
Les fonctionnalités ci-dessus rendent les diff et les patch particulièrement populaires pour l'échange de modifications sur des logiciels open source . Les personnes extérieures peuvent télécharger le dernier code source disponible au public, y apporter des modifications et les envoyer, sous forme de diff, à l'équipe de développement. Grâce aux diff, l'équipe de développement a la possibilité d'examiner efficacement les correctifs avant de les appliquer et peut les appliquer à une base de code plus récente que celle à laquelle le développeur extérieur avait accès.
Exemples d'utilisation
Pour créer un patch, on peut exécuter la commande suivante dans un shell :
$ diff -u oldFile newFile > mods.diff # -u indique à diff de générer un format de diff unifié
Pour appliquer un patch, on peut exécuter la commande suivante dans un shell :
$ patch < mods.diff Ceci indique à patch d'appliquer les modifications aux fichiers spécifiés décrits dans mods.diff. Les correctifs apportés aux fichiers des sous-répertoires nécessitent l' option supplémentaire, où le numéro est 1 si le répertoire de base de l'arborescence source est inclus dans le diff, et 0 sinon. -pnumber
Les correctifs peuvent être annulés ou inversés avec l' -Roption ' ' :
$ patch -R < mods.diff Dans certains cas, lorsque le fichier n'est pas identique à la version par rapport à laquelle la différence a été générée, le correctif ne pourra pas être appliqué correctement. Par exemple, si des lignes de texte sont insérées au début, les numéros de ligne référencés dans le correctif seront incorrects. patch est capable de récupérer ce problème en examinant les lignes voisines pour relocaliser le texte à corriger. Il récupérera également lorsque les lignes de contexte (pour les différences de contexte et unifiées) sont modifiées ; ce phénomène est appelé fuzz .
Ports de patch
Écrit à l'origine pour les systèmes Unix et similaires , patch a également été porté sur Windows et de nombreuses autres plateformes. Les ports Windows de patch sont fournis par GnuWin32 et UnxUtils .
Une patchcommande fait également partie des outils MSX-DOS2 d' ASCII pour MSX-DOS version 2.