I have a patch with absolute paths that I wish to use. i.e. the first few lines are as follows.
--- /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
However, it fails unless I am in the root directory.
~$ 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
Is there a way to make patch use the absolute path with any working directory?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Looking at the source code of GNU patch, this behavior is built in since version 2.7. As of GNU patch 2.7.1, only relative paths not containing .. are accepted, unless the current directory is the root directory.
To apply a patch containing absolute paths, you can use
(cd / && sudo patch -p0) <foo.patch
In recent versions of GNU patch, you can simply
sudo patch -d/ -p0 <foo.patch
Method 2
With GNU patch 2.7.6 at least, the filename can be specified:
patch /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml /tmp/fix_kde_icons.patch
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0