Pagina 1 di 1

Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 15:48
da freax
allora faccio subito una premessa , il problema mi è nato su una NetBSD ma non essendoci forum di un certo livello sull'argomento , almeno a mia attuale conoscenza , e siccome la stessa utility è presente anche in ambito Linux , chiedo a voi come usarla .

allora io ho una Atheros 5007EG ( su un ASUS X50N ) , una scheda wifi che con i driver Atheros inclusi nel kernel non va e non è supportata ufficialmente , neanche dalla prossima FreeBSD 8 ( tanto per rimanere in ambito BSD ) a quanto pare ( HAL ritorna uno "status 13" ) , la stessa scheda è presente su un EEEPC e un tizio è riuscito a patchare qualcosa ... , diciamo che dal suo post non si evince molto , dice che ha un EEEPC 1000HA con la suddetta scheda e che la scheda wifi funziona perfettamente con NetBSD previa applicazione di questo file diff che patcha la distro ...

ok , adesso io ho un portatile diverso ma identico sistema operativo ( la patch andrebbe applicata su una NetBSD liscia ) , quante speranze ho di riciclare questa patch per il mio sistema ?

ftp://ftp.netbsd.org/pub/NetBSD/misc/mjf/ath_eee.diff

mi spiegate , anche velocemente , come fare ?

da quel poco che ho capito il comando prevede l'uso di 2 file , ma in realtà io ho solo la patch e non saprei neanche come usarla correttamente , considerato che non ho niente da perdere dato che appunto il mio sistema è fresco di installazione e potrei anche accettare di rifare tutto da 0 tanto ci metterei in più quei 5 minuti di installazione , mi azzardate qualche comando utile e qualche spiegazione ?

Re: Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 16:02
da tigerwalk
genericamente, devi copiare il file.diff nella directory dei sorgenti da patchare, spostarti nella directory e dare:
patch -p1 < file.diff

Re: Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 16:09
da freax
tigerwalk ha scritto:genericamente, devi copiare il file.diff nella directory dei sorgenti da patchare, spostarti nella directory e dare:
patch -p1 < file.diff
quindi è plausibile che debba entrare nella directory con i sorgenti dei driver Atheros del kernel e ricompilare poi il kernel stesso ?

Re: Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 16:43
da 414N
Occhio che quello non mi sembra un file diff prodotto da diff, quanto un file diff prodotto da git-diff (o simile).
Quindi può darsi che patch non riesca ad applicarlo senza qualche modifica.
Si tratta poi di tranciare le righe "descrittive", tipo

Codice: Seleziona tutto

Index: contrib/dev/ath/ah.h
===================================================================
RCS file: /cvsroot/src/sys/contrib/dev/ath/ah.h,v
retrieving revision 1.4
diff -u -r1.4 ah.h

Re: Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 16:53
da freax
414N ha scritto:Occhio che quello non mi sembra un file diff prodotto da diff, quanto un file diff prodotto da git-diff (o simile).
Quindi può darsi che patch non riesca ad applicarlo senza qualche modifica.
Si tratta poi di tranciare le righe "descrittive", tipo

Codice: Seleziona tutto

Index: contrib/dev/ath/ah.h
===================================================================
RCS file: /cvsroot/src/sys/contrib/dev/ath/ah.h,v
retrieving revision 1.4
diff -u -r1.4 ah.h
ho provato a lanciare il comando

Codice: Seleziona tutto

patch < ath_eee.diff
sia nella directory con i driver atheros nei sorgenti del kernel , sia nella home , mi viene chiesto a quali file applicare la patch ... bella domanda , come faccio a capirlo ?

come capisco quali linee togliere per fare come dici te ?

Re: Come si patcha con un file .diff ?

Inviato: lun 16 nov 2009, 17:31
da 414N
freax ha scritto: ho provato a lanciare il comando

Codice: Seleziona tutto

patch < ath_eee.diff
sia nella directory con i driver atheros nei sorgenti del kernel , sia nella home , mi viene chiesto a quali file applicare la patch ... bella domanda , come faccio a capirlo ?

come capisco quali linee togliere per fare come dici te ?
Ti sei dimenticato di specificare la profondità del percorso dei file. Mi spiego meglio:
i file da modificare nei file diff sono specificati tramite un percorso che, a seconda delle esigenze (leggi "di dove sei te con la shell"), può essere tranciato a piacimento con l'opzione -pN, dove N è il numero di componenti del percorso da affettare a mo' di mortadella :p .
Tocciando dal file incriminato:

Codice: Seleziona tutto

--- contrib/dev/ath/ah.h	5 Jun 2006 05:14:38 -0000	1.4
+++ contrib/dev/ath/ah.h	4 Jan 2008 13:02:58 -0000
queste due righe dicono a patch di andare a modificare il file contrib/dev/ath/ah.h, relativamente al path corrente nel quale hai lanciato patch.
Supponendo che tu sia in /usr/src/linux (so che sei su BSD, ma è per fare un esempio), specificando

Codice: Seleziona tutto

patch -p0 ... 
patch cercherà il file /usr/src/linux/contrib/dev/ath/ah.h e lo modificherà come specificato nel seguito.
Se specifichi, invece,

Codice: Seleziona tutto

patch -p1 ... 
il file cercato da patch sarà /usr/src/linux/dev/ath/ah.h, ovvero verrà eliminato il primo componente del path specificato nel file diff.
Per poter applicare una patch (di tipo diff), devi innanzitutto sapere dove si trovano i file interessati. Comincia a cercare il file ah.h e/o la directory ath (non so se su BSD sia disponibile il find che usiamo su Linux...) per capire dove dovrai piazzarti per applicare la patch.
Venendo al discorso delle righe "superflue", il problema è dovuto al fatto che il diff che è lì è un diff prodotto da CVS (mi correggo ora, non era git), che patch molto probabilmente non riuscirà a gestire (c'è della fuffa in più che non si aspetta).
Prova a vedere se riesci a trovare lo script Python nel pacchetto "Ethereal" del quale si parla in questa pagina creato proprio per convertire diff di cvs in diff "lisci".