Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

patch / diff

8 réponses
Avatar
Rakotomandimby (R12y) Mihamina
Bonjour,

On m'a confié la mission d'introduire la notion de patch à un auditoire
qui débute en programmation et qui ne comprend rien à l'administration
système.

Je n'ai jamais patché volontairement un programme. Si je l'ai fait c'est
un script qui l'a fait à ma place (les gestionnaires de packages des
distributions pour lesquelles je fabrique des packages).

Je n'ai pas refusé parceque c'est une opportunité pour moi de me forcer
à aquérir ce savoir qui me manque.

Il y a cependant quelques questions... Les patches distribués sont
souvent avec une extension diff ou patch. Dois-je en déduire que les
patch sont distribués sous plusieurs "formats"? _un peu_ comme il existe
des gzips et des bzips?

Mon plus grand souci est au niveau du positionnement du répertoire à
partir duquel on génère le "fichier différentiel" et aussi de celui à
partir duquel on lance le patchage. Y a t il une attitude standard à
adopter? des options de patches communément utilisées?

Auriez-vous dans vos bookmarks un bon tutoriel qui traite de la chose, ce
qui me permettrait de ne pas réinventer la roue mais éventuellement
d'améliorer (si besoin est) celui qui existe déjà?

J'ai déjà un set de documents, mais si vous en avez un que vous trouvez
exceptionnel dans vos bookmarks, je suis interessé.

Merci beaucoup.

--
Miroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

8 réponses

Avatar
Pascal Bourguignon
"Rakotomandimby (R12y) Mihamina" writes:

Bonjour,

On m'a confié la mission d'introduire la notion de patch à un auditoire
qui débute en programmation et qui ne comprend rien à l'administration
système.

Je n'ai jamais patché volontairement un programme. Si je l'ai fait c'est
un script qui l'a fait à ma place (les gestionnaires de packages des
distributions pour lesquelles je fabrique des packages).

Je n'ai pas refusé parceque c'est une opportunité pour moi de me forcer
à aquérir ce savoir qui me manque.

Il y a cependant quelques questions... Les patches distribués sont
souvent avec une extension diff ou patch. Dois-je en déduire que les
patch sont distribués sous plusieurs "formats"? _un peu_ comme il existe
des gzips et des bzips?


En effet, on peut utiliser plusieurs formats de sortie de diff, mais
le mieux c'est d'utiliser celui produit par diff -u (diff -Naur).


Mon plus grand souci est au niveau du positionnement du répertoire à
partir duquel on génère le "fichier différentiel" et aussi de celui à
partir duquel on lance le patchage. Y a t il une attitude standard à
adopter? des options de patches communément utilisées?


Non, mais comme pour les tar, je préfère le faire pour tout le
répertoire, et utiliser patch -p1.


Auriez-vous dans vos bookmarks un bon tutoriel qui traite de la chose, ce
qui me permettrait de ne pas réinventer la roue mais éventuellement
d'améliorer (si besoin est) celui qui existe déjà?


Oui:

cp -r src src.original
cd src ; emacs * ; cd ..
diff -Naur src.original src | gzip > modifs.patch.gz


cp -r src.original src.nouveau
cd src.nouveau
gzip -d < ../modifs.patch.gz | patch -p1 -


(Rien de bien compliqué!)

J'ai déjà un set de documents, mais si vous en avez un que vous trouvez
exceptionnel dans vos bookmarks, je suis interessé.

Merci beaucoup.



Petit anecdote historique. Le mot "patch" nomme originellement les
bouts de cables utilisés dans les premiers ordinateurs où les
programmes étaient litéralement _cablés_ sur des panneaux amovibles:
on changeait de programme en changeant de panneau de programmation
dans le tabulateur. Quand il y avait une bogue dans ces "programmes",
on ajoutait ou en enlevait un cable, un patch pour le modifier en
espérant le corriger...

http://www.columbia.edu/acis/history/plugboard.html


--
__Pascal Bourguignon__ http://www.informatimago.com/
Grace personified,
I leap into the window.
I meant to do that.

Avatar
Nicolas George
Pascal Bourguignon wrote in message
:
Il y a cependant quelques questions... Les patches distribués sont
souvent avec une extension diff ou patch. Dois-je en déduire que les
patch sont distribués sous plusieurs "formats"? _un peu_ comme il existe
des gzips et des bzips?
En effet, on peut utiliser plusieurs formats de sortie de diff, mais

le mieux c'est d'utiliser celui produit par diff -u (diff -Naur).


<logicor>

Je ne suis pas d'accord. Oui, il y a plusieurs formats de patch, mais le
format utilisé n'est pas indiqué par l'extension .diff ou .patch, qui m'a
l'air de surtout dépendre de l'humeur de celui qui produit le fichier. Donc
non, il ne doit pas déduire l'un de l'autre.

</logicor>

Petit anecdote historique. Le mot "patch" nomme originellement les
bouts de cables utilisés dans les premiers ordinateurs où les
programmes étaient litéralement _cablés_ sur des panneaux amovibles:


Originellement, c'est beaucoup dire. À la base, un patch, c'est quand même
une pièce de tissu pour réparer un trou dans un vêtement (ou cacher un oeil
crevé).


Avatar
Bob qui Trolle
Rakotomandimby (R12y) Mihamina wrote:
Bonjour,

On m'a confié la mission d'introduire la notion de patch à un auditoire
qui débute en programmation et qui ne comprend rien à l'administration
système.


Je te conseille de jeter un oeil à :

http://encycl.opentopia.com/term/Diff

intéressant résumé de l'histoire de diff, ses origines, sa relation avec
ed (l'éditeur historique sous Unix), et sa relation avec SCCS, l'ancêtre
de RCS, lui-même ancêtre de CVS, à compléter par l'introduction par
Larry Wall (le codeur de PERL) de la commande patch.

http://encycl.opentopia.com/term/Patch_(Unix)

à noter : "The Berkeley distribution of Unix made a point of adding
the context format (-C) and recursion on filesystem directory structures
(-r). The GNU Project's diff application includes the unified context
format and is combined in a package with other diff and patch related
utilities."

Avatar
Laurent Wacrenier
Rakotomandimby (R12y) Mihamina écrit:
Mon plus grand souci est au niveau du positionnement du répertoire à
partir duquel on génère le "fichier différentiel" et aussi de celui à
partir duquel on lance le patchage. Y a t il une attitude standard à
adopter? des options de patches communément utilisées?


Aller dans le répertoire de la distribution et faire un
diff -u ancien nouveau
Sur le fichier modifié. S'il y a plusieurs fichiers, répeter
l'opération et concatener les sorties.

On peut faire le diff récursivement, mais il faut éviter de patcher
des fichiers auto générés. Éviter le copier-coller de patchs le résultat
peut être corrompu.

Avatar
Laurent Wacrenier
Bob qui Trolle écrit:
à noter : "The Berkeley distribution of Unix made a point of adding
the context format (-C) and recursion on filesystem directory structures


L'option pour le diff contextuel est "-c". À utiliser quand "-u" n'est
pas disponible (ex: HP-UX). "-C" permet d'augmenter le nombre de ligne
du contexte. C'est bien utile soit quand on veut montrer quelque chose
de précis ou quand le source est particulièrement aéré.

Avatar
drkm
Laurent Wacrenier <lwa@ teaser . fr> writes:

Éviter le copier-coller de patchs le résultat
peut être corrompu.


À quoi penses-tu en particulier ?

--drkm

Avatar
Laurent Wacrenier
drkm écrit:
Laurent Wacrenier <lwa@ teaser . fr> writes:

Éviter le copier-coller de patchs le résultat
peut être corrompu.


À quoi penses-tu en particulier ?


Aux tabulations remplacées par des espaces.

Éventuelement, les accents et autres caractères non ascii qui peuvent
changer d'encodage, mais il n'y en a pas trop dans les sources.


Avatar
Nicolas S.

En effet, on peut utiliser plusieurs formats de sortie de diff, mais
le mieux c'est d'utiliser celui produit par diff -u (diff -Naur).



<logicor>

Je ne suis pas d'accord. Oui, il y a plusieurs formats de patch, mais le
format utilisé n'est pas indiqué par l'extension .diff ou .patch, qui m'a
l'air de surtout dépendre de l'humeur de celui qui produit le fichier. Donc
non, il ne doit pas déduire l'un de l'autre.

</logicor>



Dans tous les cas, ne pas oublier de créer un petit document d'aide pour
indiquer les bonnes lignes de commande, et permettre d'appliquer
correctement le patch. Surtout si on a l'intention de le diffuser.

Cordialement,
Nicolas S.

--
Il est toujours sympa de laisser un petit message pour expliquer
comment on a réussi à se sortir d'une difficulté.
Cela aide les autres qui pourraient avoir rencontré les mêmes problèmes,
mais aussi les contributeurs. ;-)

E-mail: enlever "-heh" pour m'écrire.