Créer des patches
Notez bien que si vous utilisez un système de gestion de versions, il propose en général des commandes spécialisées pour créer des patches. Voir la section ci-dessous.
Pour créer un patch à partir d’un seul fichier, il faut penser,
avant de faire la moindre modification au fichier, à en faire une copie de sauvegarde (
backup) :
Code : Autre1
| cp fichier.c fichier.c.orig |
Ensuite vous pouvez modifier le fichier, tester vos changements, etc. Quand vous êtes satisfaits du résultat, créez un patch comme ceci :
Code : Autre1
| diff -u fichier.c.orig fichier.c > ma-super-fonctionnalite.patch |
Notes :
- Utilisez toujours le format de diff unifié, -u. N’oubliez pas l’option -u en ligne de commande.
- Faites toujours dans l’ordre diff -u vieux_fichier
nouveau_fichier, sinon vous obtiendrez ce qu’on appelle un "patch inversé".
Pour créer un patch de plusieurs fichiers à la fois (par exemple sur l’ensemble d’une version d’un logiciel), décompressez ses sources en deux endroits différents :
Code : Autre1
2
3
| tar zxf projet-1.0.tag.tz
mv projet-1.0 projet-1.0.orig
tar zxf projet-1.0.tag.tz |
Cela devrait créer deux répertoires comme ceci :
Citation$ ls projet-1.0.orig/ projet-1.0/
Faites vos modifications dans le second répertoire (celui qui n’est pas
.orig). Ensuite, pour créer un patch, revenez au répertoire parent et faites :
Code : Autre1
| diff -ur projet-1.0.orig projet-1.0 > super-truc.patch |
Lisez la page de manuel de la commande
diff pour plus d’informations.
Systèmes de gestion de versions
La plupart du temps, vous utiliserez en fait un système de gestion de versions tel que CVS, Subversion, git, Mercurial, etc. Ces temps-ci, il y en a beaucoup. Ils ont pour la plupart des commandes pour générer des patches automatiquement — vous récupérez le code, faites les modifications que vous voulez, et lancez la commande pour que le logiciel fasse le patch pour vous. La table ci-dessous donne quelques commandes courantes et des liens vers la documentation plus avancée :
Outils pour gérer des ensembles de patches
Le principal outil pour gérer des ensembles de patches est nommé
quilt. Il y a une bonne présentation de quilt
ici (en).
Git a des branches légères (une branche est une série de patches),
git-rebase --interactive .. permet de réordonner/modifier/réunir/séparer des groupes de modifications, il y a aussi
git stash et d’autres choses encore.
Licences logicielles
Les trois licences les plus courantes que vous rencontrerez sont :
Pour une liste plus complète, vous pouvez aller voir la page Wikipédia de
comparaison des licences libres.
Autres documents décrivant la soumission de patches
Les
Directives du noyau Linux sont assez semblables à cet article, et sont un
must-read si vous voulez soumettre votre code au noyau.
Le
fichier HACKING des coreutils décrit comment formater et envoyer des patches au projet GNU coreutils. Ça explique très en détail comment utiliser
git pour soumettre des patches. (Merci à Jim Meyering).