OVH Cloud OVH Cloud

readline pb compatibilité unix/windows

3 réponses
Avatar
Damien Bardon
Bonjour,

Je travail sur un projet en java qui se trouve sur un serveur cvs. Certaines
personnes travaillent sur windows, d'autres linux. Une classe utilise
readline pour decortiquer un fichier de configuration. Le pb c que si on
modifie ce fichier de config sous linux, qu'on le renvoi sur cvs, et que
les developpeurs sous windows le recuperent, alors readline ne fonctionne
plus sous windows, cela parce que les caratères de fin de lignes sont
différents sous windows et sous linux.

Ca fonctionne en revanche dans l'autre sens (si le fichier est édité sous
windows, readline fonctionne sous linux).

Quelqu'un à t il une solution à ce pb ?

Merci bcp !!

Damien_

--
Web : http://tux-system.ath.cx
Gnomemeeting : damien83.ath.cx
E-mail : damien83@orange.fr

3 réponses

Avatar
oliv
Damien Bardon wrote:
Je travail sur un projet en java qui se trouve sur un serveur cvs. Certaines
personnes travaillent sur windows, d'autres linux. Une classe utilise
readline pour decortiquer un fichier de configuration. Le pb c que si on
modifie ce fichier de config sous linux, qu'on le renvoi sur cvs, et que
les developpeurs sous windows le recuperent, alors readline ne fonctionne
plus sous windows, cela parce que les caratères de fin de lignes sont
différents sous windows et sous linux.
En effet,

Mac : CR = 0DH = r
Nix : LF = 0AH = n
Dos : CR puis LF

Ce qui m'étonne c'est que normalement readLine() devrait détecter
correctement les uns comme les autres.

Alors pour contourner :
- choisir l'option CRLF dans l'éditeur s'il le permet
ou
- passer dans un filtre avant d'envoyer sur cvs

par exemple unix2dos qui doit pouvoir se trouver s'il n'est pas déjà
présent,

ou pour remplacer LF par CR+LF, cette commande :

sed 's/$/^M/g' <infile >outfile

(^M s'obtient selon systeme et clavier généralement par ctrl-v ctrl-m,
chez moi ctrl-v ctrl-j, ...)

vérifier par :
sed 's/$/^M/g' <petitfichier | hexdump

Comme ça le fichier sera toujours envoyé en format Windows et
l'avantage serait que c'est transparent au programme ?

--
oliv

Avatar
Damien Bardon
Merci bcp pour cette réponse tres complete. Mais c vraiment dommage que la
JVM de windows ne detecte pas LF !!! Je vais choisir l'option unix2dos je
crois. Mais sais tu s'il est possible d'ajouter à cvs un filtre automatique
qd tu lui envois un fichier ? (je n'ai pas trouvé dans les commandes cvs).

encore merci !!

oliv wrote:

Damien Bardon wrote:
Je travail sur un projet en java qui se trouve sur un serveur cvs.
Certaines personnes travaillent sur windows, d'autres linux. Une classe
utilise readline pour decortiquer un fichier de configuration. Le pb c
que si on modifie ce fichier de config sous linux, qu'on le renvoi sur
cvs, et que les developpeurs sous windows le recuperent, alors readline
ne fonctionne plus sous windows, cela parce que les caratères de fin de
lignes sont différents sous windows et sous linux.
En effet,

Mac : CR = 0DH = r
Nix : LF = 0AH = n
Dos : CR puis LF

Ce qui m'étonne c'est que normalement readLine() devrait détecter
correctement les uns comme les autres.

Alors pour contourner :
- choisir l'option CRLF dans l'éditeur s'il le permet
ou
- passer dans un filtre avant d'envoyer sur cvs

par exemple unix2dos qui doit pouvoir se trouver s'il n'est pas déjà
présent,

ou pour remplacer LF par CR+LF, cette commande :

sed 's/$/^M/g' <infile >outfile

(^M s'obtient selon systeme et clavier généralement par ctrl-v ctrl-m,
chez moi ctrl-v ctrl-j, ...)

vérifier par :
sed 's/$/^M/g' <petitfichier | hexdump

Comme ça le fichier sera toujours envoyé en format Windows et
l'avantage serait que c'est transparent au programme ?



--
Web : http://tux-system.ath.cx
Gnomemeeting : damien83.ath.cx
E-mail :


Avatar
oliv
Damien Bardon wrote:

Merci bcp pour cette réponse tres complete. Mais c vraiment dommage que la
JVM de windows ne detecte pas LF !!!
Malheureusement je n'ai pas de moyen de tester sous Windows

prochainement. Et à vrai dire je n'ai pas trouvé de moyen pour adapter
le comportement de readLine() bien que
System.getProperty("Line.separator") soit accessible.

Un connaisseur dans l'assistance saurait-il le faire ?

Je vais choisir l'option unix2dos je
crois. Mais sais tu s'il est possible d'ajouter à cvs un filtre automatique
qd tu lui envois un fichier ? (je n'ai pas trouvé dans les commandes cvs).
Il faudrait voir du côté des wrappers définis dans CVSROOT/cvswrappers

ou ~/.cvswrappers.

Ils permettent justement de lancer une commande sur matching d'un nom
de fichier, à l'upload ou au download.

voir par exemple :
http://developer.apple.com/documentation/DeveloperTools/cvs/cvs_156.html

--
oliv