Come posso applicare una patch -p0 da qualsiasi directory di lavoro?


26

Ho una patch con percorsi assoluti che desidero utilizzare. cioè le prime poche righe sono le seguenti.

--- /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml  2014-10-10 18:47:23.000000000 +1100
+++ /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod  2014-11-11 09:44:17.786200477 +1100

Tuttavia, non riesce a meno che non sia nella directory principale.

~$ cd
~$ sudo patch -i /tmp/fix_kde_icons.patch -p0
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
...
~$ cd /tmp
/tmp$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/tmp$ cd /usr
/usr$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/usr$ cd /
/$ sudo patch -i /tmp/fix_kde_icons.patch -p0
patching file /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml

C'è un modo per patchutilizzare il percorso assoluto con qualsiasi directory di lavoro?


Vorrei invece modificare la patch stessa.
Braiam,

@Braiam Quali modifiche specifiche avrei apportato alla patch? Fondamentalmente mi chiedo se posso evitare di specificare eventuali percorsi target nel patchcomando.
Sparhawk,

Qualche contesto, per favore. Stai cercando di applicare questa patch a un sistema in esecuzione? Se è così, perché? Qual è la tua distribuzione / sistema operativo? Cosa fa questa patch? Sembra una patch per una cosa di KDE. Quale componente? In generale, se la tua distribuzione non applica la patch per te, dovresti ricostruire il pacchetto pertinente dal sorgente con la patch applicata. E puoi tagliare la parte principale del percorso. Questo non dovrebbe essere un problema. Quanto tagli dipende dall'aspetto della fonte.
Faheem Mitha,

1
@FaheemMitha Sì, è in esecuzione, con Arch / KDE. Serve a correggere questo errore . La correzione funziona se applico manualmente le modifiche. Tuttavia, non penso che il contesto contenga così tanto in questo caso, in quanto posso replicare questo problema con un file di prova in /tmp/foo. Sono più interessato a una risposta generica che si applica a patch.
Sparhawk,

Risposte:


35

Guardando il codice sorgente della patch GNU, questo comportamento è integrato dalla versione 2.7. A partire dalla patch GNU 2.7.1, ..vengono accettati solo i percorsi relativi che non contengono , a meno che la directory corrente non sia la directory principale.

Per applicare una patch contenente percorsi assoluti, è possibile utilizzare

(cd / && sudo patch -p0) <foo.patch

Nelle recenti versioni della patch GNU, puoi semplicemente

sudo patch -d/ -p0 <foo.patch

Va bene, è quello che è. Tuttavia, se controlli i miei comandi, cd /usranche fallito, nonostante i file di destinazione si trovino in questa directory.
Sparhawk,

@Sparhawk Siamo spiacenti, la mia descrizione era in parte errata. Il test è: se la directory corrente non lo è /, rifiuta qualsiasi percorso assoluto o percorso contenente un ..componente.
Gilles 'SO- smetti di essere malvagio' l'

7
O più semplicemente,sudo patch -d/ -p0 <foo.patch
Qian,

@TheoYou Mi sono perso quel commento in quel momento. Dovresti scriverlo come una risposta.
Sparhawk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.