Archives par mot-clé : astuce

Commandes diff, patch mode d’emploi

Quelques tips pour bien utiliser la commande patch.

La commande diff

Cette commande permet de trouver les differences entre 2 fichiers. Elle vous retourne la ligne du fichier original et la ligne modifiée. Elle va nous permettre de créer le patch que nous pourrons ensuite appliquer. Il existe plusieurs types de patch. Celui qui est le plus répandu est le patch unifié car il apporte de la souplesse dans son application en permettant une certaine variation du fichier à patcher.

La commande patch

La commande patch va prendre en entré le resultat de la commande diff et va appliquer les changements sur le fichier désigné. Le fait d’avoir dans le patch la version originale et la version modifiée permet d’éviter de patcher un fichier qui n’est pas le bon, ou même de patcher un fichier déjà à jour.

Exemple :

diff -aburN --exclude=CVS* repertoire/reference/ repertoire/modifie/ > patch.diff

Cette commande crée un patch unifié. Interêt des options passées :

  • -a : traiter tout les fichiers comme du texte
  • -b : permet de ne pas tenir compte des différences sur les espaces
  • -u : faire un patch unifié
  • -r : parcourrir les sous répertoires
  • -N : permet de gérer les fichiers nouveaux
  • —exclude=CVS : permet d’exclure des fichiers ou répertoire de l’analyse.

Le patch ainsi fabriqué contient des éléments qui vont permettre à la commande patch de retrouver les fichiers à modifier à travers l’arborescense, puis de trouver les bonnes lignes, même si celles-ci ont légèrement été déplacées.

patch -p 1 < patch.diff

L’option -p N permet d’adapter l’aborescence d’origine du patch à l’arborescence que l’on est en train de traiter.

Applications Java serveur nécessitant un serveur X

Comment se passer d’un serveur X pour une application java qui en veut un alors qu’elle tourne sur un serveur qui n’est pas sensé en avoir : vous me suivez ?

Des applications java peuvent avoir besoin d’un serveur X pour faire du rendu de dessin. C’est le cas par exemple en cas d’utilisation de la bibliothèque de rendu de graphiques JChart ou avec JasperReport. On aura par exemple une stacktrace du genre :

java.lang.InternalError

Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.sun.awt.X11GraphicsEnvironment::initDisplay (native)

sun.awt.X11GraphicsEnvironment::<clinit> ( X11GraphicsEnvironment.java: 134 )

java.lang.Class::forName0 (native)

java.lang.Class::forName ( Class.java: 141 )

java.awt.GraphicsEnvironment::getLocalGraphicsEnvironment ( GraphicsEnvironment.java: 62 )

net.sf.jasperreports.engine.util.JRGraphEnvInitializer::initializeGraphEnv ( JRGraphEnvInitializer.java: 58 )

...

Cependant, sous les serveurs de production, on lance rarement un serveur X. Il faut donc utiliser soit :
– un serveur virtuel xvfb
– l’option -Djava.awt.headless=true [1] si on utilise Java 1.4 ou supérieur

PS : Cette astuce a été trouvée dans la doc de jCharts

[1] ou dans le code avec System.setProperty(“java.awt.headless”,”true”) ;