forked from pool/quilt
Accepting request 854517 from home:jdelvare:branches:devel:tools:scm
- Handle git-generated patches which include symbolic link manipulation (savannah bug #59479). - quilt setup: procfs resolves links, so we must do the same (bsc#1179023). - quilt.spec: Recommend "ed", as the annotate command requires it. OBS-URL: https://build.opensuse.org/request/show/854517 OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm/quilt?expand=0&rev=122
This commit is contained in:
parent
d747e66ac5
commit
a1d18c6c3f
164
backup-files-restore-symbolic-links.patch
Normal file
164
backup-files-restore-symbolic-links.patch
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
From: Jean Delvare <jdelvare@suse.de>
|
||||||
|
Date: Wed, 9 Dec 2020 11:39:56 +0100
|
||||||
|
Subject: backup-files: Restore symbolic links
|
||||||
|
Patch-mainline: yes
|
||||||
|
Git-commit: 26f7bc93d2bbe49a96d23f879b24e82651392497
|
||||||
|
References: https://savannah.nongnu.org/bugs/index.php?59479
|
||||||
|
|
||||||
|
As "patch" originally did not handle symbolic links, backup-files
|
||||||
|
didn't have to care about them either. But now that git has
|
||||||
|
introduced an extended syntax which allows manipulating symbolic
|
||||||
|
links in patch files, "quilt push" may create or delete symbolic
|
||||||
|
links, which means that backup-files must support such operations
|
||||||
|
too.
|
||||||
|
|
||||||
|
Also extend the backup-files test case to cover these operations.
|
||||||
|
|
||||||
|
This fixes bug #59479:
|
||||||
|
https://savannah.nongnu.org/bugs/index.php?59479
|
||||||
|
|
||||||
|
Signed-off-by: Jean Delvare <jdelvare@suse.de>
|
||||||
|
---
|
||||||
|
quilt/scripts/backup-files.in | 40 ++++++++++++++++++++++++++++++----------
|
||||||
|
test/backup-files.test | 33 +++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 63 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
--- a/quilt/scripts/backup-files.in
|
||||||
|
+++ b/quilt/scripts/backup-files.in
|
||||||
|
@@ -89,7 +89,7 @@ backup()
|
||||||
|
dir=$(dirname "$backup")
|
||||||
|
[ -d "$dir" ] || mkdir -p "$dir"
|
||||||
|
|
||||||
|
- if [ -e "$file" ]; then
|
||||||
|
+ if [ -L "$file" -o -e "$file" ]; then
|
||||||
|
$ECHO "Copying $file"
|
||||||
|
if [ -n "$OPT_NOLINKS" -a "$(stat @STAT_HARDLINK@ "$file")" = 1 ]; then
|
||||||
|
cp -p "$file" "$backup"
|
||||||
|
@@ -110,24 +110,28 @@ restore()
|
||||||
|
local file=$1
|
||||||
|
local backup=$OPT_PREFIX$file
|
||||||
|
|
||||||
|
- if [ ! -e "$backup" ]; then
|
||||||
|
+ if [ ! -L "$backup" -a ! -e "$backup" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
- if [ -s "$backup" ]; then
|
||||||
|
+ if [ -L "$backup" -o -s "$backup" ]; then
|
||||||
|
$ECHO "Restoring $file"
|
||||||
|
- if [ -e "$file" ]; then
|
||||||
|
+ if [ -L "$file" -o -e "$file" ]; then
|
||||||
|
rm "$file"
|
||||||
|
else
|
||||||
|
mkdir -p "$(dirname "$file")"
|
||||||
|
fi
|
||||||
|
- ln "$backup" "$file" 2>&4 || cp -p "$backup" "$file"
|
||||||
|
+ if [ -L "$backup" ]; then
|
||||||
|
+ ln -s "$(readlink "$backup")" "$file"
|
||||||
|
+ else
|
||||||
|
+ ln "$backup" "$file" 2>&4 || cp -p "$backup" "$file"
|
||||||
|
+ fi
|
||||||
|
|
||||||
|
- if [ -n "$OPT_TOUCH" ]; then
|
||||||
|
+ if [ -n "$OPT_TOUCH" -a ! -L "$file" ]; then
|
||||||
|
touch "$file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
$ECHO "Removing $file"
|
||||||
|
- if [ -e "$file" ]; then
|
||||||
|
+ if [ -L "$file" -o -e "$file" ]; then
|
||||||
|
rm "$file"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
@@ -145,11 +149,13 @@ restore_all()
|
||||||
|
# Store the list of files to process
|
||||||
|
EMPTY_FILES=$(gen_tempfile)
|
||||||
|
NONEMPTY_FILES=$(gen_tempfile)
|
||||||
|
- trap "rm -f \"$EMPTY_FILES\" \"$NONEMPTY_FILES\"" EXIT
|
||||||
|
+ LINK_FILES=$(gen_tempfile)
|
||||||
|
+ trap "rm -f \"$EMPTY_FILES\" \"$NONEMPTY_FILES\" \"$LINK_FILES\"" EXIT
|
||||||
|
|
||||||
|
cd "$OPT_PREFIX"
|
||||||
|
find . -type f -size 0 -print0 > "$EMPTY_FILES"
|
||||||
|
find . -type f -size +0 -print0 > "$NONEMPTY_FILES"
|
||||||
|
+ find . -type l -print0 > "$LINK_FILES"
|
||||||
|
cd "$OLDPWD"
|
||||||
|
|
||||||
|
if [ -s "$EMPTY_FILES" ]; then
|
||||||
|
@@ -189,6 +195,20 @@ restore_all()
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ if [ -s "$LINK_FILES" ]; then
|
||||||
|
+ (cd "$OPT_PREFIX" && find . -type d -print0) \
|
||||||
|
+ | xargs -0 mkdir -p
|
||||||
|
+
|
||||||
|
+ while read -d $'\0' -r
|
||||||
|
+ do
|
||||||
|
+ local file=${REPLY#./}
|
||||||
|
+ local backup=$OPT_PREFIX$file
|
||||||
|
+
|
||||||
|
+ $ECHO "Restoring $file"
|
||||||
|
+ ln -sf "$(readlink "$backup")" "$file"
|
||||||
|
+ done < "$LINK_FILES"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
if [ -z "$OPT_KEEP_BACKUP" ]; then
|
||||||
|
rm -rf "$OPT_PREFIX"
|
||||||
|
fi
|
||||||
|
@@ -212,7 +232,7 @@ copy()
|
||||||
|
dir=$(dirname "$backup")
|
||||||
|
[ -d "$dir" ] || mkdir -p "$dir"
|
||||||
|
|
||||||
|
- if [ -e "$file" ]; then
|
||||||
|
+ if [ -L "$file" -o -e "$file" ]; then
|
||||||
|
$ECHO "Copying $file"
|
||||||
|
cp -p "$file" "$backup"
|
||||||
|
else
|
||||||
|
@@ -234,7 +254,7 @@ copy_many()
|
||||||
|
cat "$OPT_FILE" \
|
||||||
|
| while read
|
||||||
|
do
|
||||||
|
- if [ -e "$REPLY" ]; then
|
||||||
|
+ if [ -L "$REPLY" -o -e "$REPLY" ]; then
|
||||||
|
printf '%s\0' "$REPLY" >&3
|
||||||
|
else
|
||||||
|
# This is a rare case, not worth optimizing
|
||||||
|
--- a/test/backup-files.test
|
||||||
|
+++ b/test/backup-files.test
|
||||||
|
@@ -229,3 +229,36 @@ Unit test of the backup-files script.
|
||||||
|
> 1
|
||||||
|
$ [ ! -s new ] || echo "file snapshot/new should be empty"
|
||||||
|
$ rm -rf snapshot
|
||||||
|
+
|
||||||
|
+ # Test backup and restoration of a symbolic link
|
||||||
|
+ $ mkdir dir
|
||||||
|
+ $ ln -s foo dir/link
|
||||||
|
+ $ readlink dir/link
|
||||||
|
+ > foo
|
||||||
|
+ $ %{QUILT_DIR}/scripts/backup-files -B backup/ -b dir/link
|
||||||
|
+ > Copying dir/link
|
||||||
|
+ $ readlink backup/dir/link
|
||||||
|
+ > foo
|
||||||
|
+ $ rm -f dir/link
|
||||||
|
+ $ echo crap > dir/link
|
||||||
|
+ $ %{QUILT_DIR}/scripts/backup-files -B backup/ -r -k dir/link
|
||||||
|
+ > Restoring dir/link
|
||||||
|
+ $ readlink dir/link
|
||||||
|
+ > foo
|
||||||
|
+
|
||||||
|
+ # Same but reading from a file
|
||||||
|
+ $ rm -f dir/link
|
||||||
|
+ $ echo crap > dir/link
|
||||||
|
+ $ %{QUILT_DIR}/scripts/backup-files -B backup/ -r -k -f -
|
||||||
|
+ < dir/link
|
||||||
|
+ > Restoring dir/link
|
||||||
|
+ $ readlink dir/link
|
||||||
|
+ > foo
|
||||||
|
+
|
||||||
|
+ # Same but without specifying the file
|
||||||
|
+ $ rm -f dir/link
|
||||||
|
+ $ echo crap > dir/link
|
||||||
|
+ $ %{QUILT_DIR}/scripts/backup-files -B backup/ -r -
|
||||||
|
+ > Restoring dir/link
|
||||||
|
+ $ readlink dir/link
|
||||||
|
+ > foo
|
38
inspect-handle-link-in-path.patch
Normal file
38
inspect-handle-link-in-path.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From: Jean Delvare <jdelvare@suse.de>
|
||||||
|
Subject: inspect-wrapper: procfs resolves links
|
||||||
|
Patch-mainline: yes
|
||||||
|
Git-commit: 6363f217b08b07cabbbe09d2d2ddc68596502e38
|
||||||
|
References: boo#1179023
|
||||||
|
|
||||||
|
When patch files are passed through stdin, we get the actual patch
|
||||||
|
file name from procfs. It turns out that procfs resolves symbolic
|
||||||
|
links, and that breaks our later attempt to strip the prefix from
|
||||||
|
the path to extract a relative path to the patch file.
|
||||||
|
|
||||||
|
This is solved by also resolving symbolic links in the prefix
|
||||||
|
before stripping it.
|
||||||
|
|
||||||
|
Signed-off-by: Jean Delvare <jdelvare@suse.de>
|
||||||
|
---
|
||||||
|
quilt/scripts/inspect-wrapper.in | 10 +++++++++-
|
||||||
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/quilt/scripts/inspect-wrapper.in
|
||||||
|
+++ b/quilt/scripts/inspect-wrapper.in
|
||||||
|
@@ -268,7 +268,15 @@ esac
|
||||||
|
if [ -n "$QUILT_SETUP_FAST" -a -z "$inputfile" ]
|
||||||
|
then
|
||||||
|
inputfile=$(readlink /proc/self/fd/0)
|
||||||
|
- [ "${inputfile:0:1}" = / -a -f "$inputfile" ] || inputfile=
|
||||||
|
+ if [ "${inputfile:0:1}" = / -a -f "$inputfile" ]
|
||||||
|
+ then
|
||||||
|
+ # procfs resolved the symlinks, so do the same, otherwise the
|
||||||
|
+ # path prefix won't match
|
||||||
|
+ RPM_SOURCE_DIR=$(cd -P "$RPM_SOURCE_DIR" && echo "$PWD")/
|
||||||
|
+ else
|
||||||
|
+ # Didn't work, so fall back to the slow method
|
||||||
|
+ inputfile=
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$inputfile" ]
|
@ -1,3 +1,17 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 9 14:15:38 UTC 2020 - Jean Delvare <jdelvare@suse.com>
|
||||||
|
|
||||||
|
- backup-files-restore-symbolic-links.patch: Handle git-generated
|
||||||
|
patches which include symbolic link manipulation (savannah bug
|
||||||
|
#59479).
|
||||||
|
- quilt.spec: Recommend "ed", as the annotate command requires it.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Nov 24 14:37:49 UTC 2020 - Jean Delvare <jdelvare@suse.com>
|
||||||
|
|
||||||
|
- inspect-handle-link-in-path.patch: inspect-wrapper: procfs
|
||||||
|
resolves links, so we must do the same (bsc#1179023)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 29 16:06:38 UTC 2019 - Jean Delvare <jdelvare@suse.com>
|
Fri Mar 29 16:06:38 UTC 2019 - Jean Delvare <jdelvare@suse.com>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package quilt
|
# spec file for package quilt
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2020 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -35,18 +35,21 @@ Requires: less
|
|||||||
Requires: mktemp
|
Requires: mktemp
|
||||||
Requires: patch
|
Requires: patch
|
||||||
Requires: perl
|
Requires: perl
|
||||||
Url: http://savannah.nongnu.org/projects/quilt
|
URL: http://savannah.nongnu.org/projects/quilt
|
||||||
Source: %{name}-%{version}.tar.bz2
|
Source: %{name}-%{version}.tar.bz2
|
||||||
Source1: suse-start-quilt-mode.el
|
Source1: suse-start-quilt-mode.el
|
||||||
Patch1: expand.diff
|
Patch1: expand.diff
|
||||||
Patch2: quilt-support-vimdiff.patch
|
Patch2: quilt-support-vimdiff.patch
|
||||||
Patch3: test-faildiff-workaround-order-bug.patch
|
Patch3: test-faildiff-workaround-order-bug.patch
|
||||||
Patch4: suse-workaround-pseudo-release.patch
|
Patch4: suse-workaround-pseudo-release.patch
|
||||||
|
Patch5: inspect-handle-link-in-path.patch
|
||||||
|
Patch6: backup-files-restore-symbolic-links.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
%if 0%{?suse_version}
|
%if 0%{?suse_version}
|
||||||
Recommends: procmail
|
Recommends: procmail
|
||||||
Recommends: bzip2
|
Recommends: bzip2
|
||||||
|
Recommends: ed
|
||||||
Recommends: /usr/bin/rpmbuild
|
Recommends: /usr/bin/rpmbuild
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?suse_version} > 1120
|
%if 0%{?suse_version} > 1120
|
||||||
@ -64,6 +67,8 @@ un-applied, refreshed, and more.
|
|||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# --with-rpmbuild=/usr/lib/rpm/rpmb:
|
# --with-rpmbuild=/usr/lib/rpm/rpmb:
|
||||||
|
Loading…
Reference in New Issue
Block a user