diff --git a/inspect-skip-version-check.patch b/inspect-skip-version-check.patch new file mode 100644 index 0000000..02d083e --- /dev/null +++ b/inspect-skip-version-check.patch @@ -0,0 +1,24 @@ +From: Jean Delvare +Subject: inspect: Skip version check +Upstream: Committed (6a5fcdc24dc47419da4cd688fe7fbfa189c91976) + +Commit a626fcf8b95f2ff51701a00d65043b9f65207514 (setup: Skip version +check) is insufficient for spec file-based setup commands. inspect +itself also sources patchfns, so it must also skip the version check +explicitly. +--- + quilt/scripts/inspect.in | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/quilt/scripts/inspect.in ++++ b/quilt/scripts/inspect.in +@@ -8,6 +8,9 @@ + + : ${QUILT_DIR=@QUILT_DIR@} + ++# Version check is irrelevant to this script. ++skip_version_check=1 ++ + if ! [ -r $QUILT_DIR/scripts/patchfns ] + then + echo "Cannot read library $QUILT_DIR/scripts/patchfns" >&2 diff --git a/quilt-check-modified-series.patch b/quilt-check-modified-series.patch new file mode 100644 index 0000000..23db70b --- /dev/null +++ b/quilt-check-modified-series.patch @@ -0,0 +1,139 @@ +From: Jean Delvare +Subject: Check for series file consistency +Upstream: Submitted (2014-10-14) + +Quilt allows manual changes to the series file to some degree. For +example, adding comments or reordering patches in the unapplied +section of the series file is OK. However, changing the order of +applied patches breaks a number of assumptions and can cause quilt to +produce unexpected or confusing results. + +For example, starting from this: + ++ patches/01.patch += patches/02.patch + patches/03.patch + patches/04.patch + +and moving the last patch at the beginning of the series file, +"quilt series -v" will print: + ++ patches/04.patch ++ patches/01.patch += patches/02.patch + patches/03.patch + +That is, it will claim that 04.patch is applied, while it it not. +Likewise, 04.patch would be listed by neither "quilt applied" nor +"quilt unapplied". + +While addressing all such cases would certainly be possible, that +would require a significant amount of work, and would come with +performance penalties. It would also be difficult to be certain that +all issues have been found and addressed. So it seems more reasonable +to simply spot such manual changes to the series file and ask the user +to pop all patches to start from a clean state as needed. +--- + quilt/scripts/patchfns.in | 35 ++++++++++++++++++++++++++++++++--- + test/altered-series.test | 44 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 76 insertions(+), 3 deletions(-) + +--- a/quilt/scripts/patchfns.in ++++ b/quilt/scripts/patchfns.in +@@ -948,6 +948,24 @@ version_check() + return 1 + } + ++consistency_check() ++{ ++ local top applied patches ++ ++ top=$(top_patch) ++ applied=$(applied_before "$top") ++ patches=$(patches_before "$top") ++ ++ if [ "$applied" != "$patches" ] ++ then ++ return 1 ++ else ++ # Skip check until series file is modified again ++ touch "$DB" ++ return 0 ++ fi ++} ++ + print_patch() + { + echo "${QUILT_PATCHES_PREFIX:+$SUBDIR_DOWN$QUILT_PATCHES/}$1" +@@ -1094,10 +1112,21 @@ fi + + DB="$QUILT_PC/applied-patches" + +-if [ -z "$skip_version_check" ] && ! version_check ++if [ -z "$skip_version_check" ] + then +- printf $"The working tree was created by an older version of quilt. Please run 'quilt upgrade'.\n" >&2 +- exit 1 ++ if ! version_check ++ then ++ printf $"The working tree was created by an older version of quilt. Please run 'quilt upgrade'.\n" >&2 ++ exit 1 ++ fi ++ ++ # Check if series file was modified manually, and if this is the case, ++ # make sure it is still consistent with the applied patches ++ if [ -s "$DB" -a ! "$DB" -nt "$SERIES" ] && [ "$QUILT_COMMAND" != pop ] && ! consistency_check ++ then ++ printf $"The series file no longer matches the applied patches. Please run 'quilt pop -a'.\n" >&2 ++ exit 1 ++ fi + fi + ### Local Variables: + ### mode: shell-script +--- /dev/null ++++ b/test/altered-series.test +@@ -0,0 +1,44 @@ ++# Check that manual changes to the series file are detected ++ ++$ mkdir patches ++$ cat > patches/series ++< 01.patch ++< 02.patch ++< 03.patch ++ ++$ quilt push -q ++> Applying patch patches/01.patch ++> Patch patches/01.patch does not exist; applied empty patch ++> Now at patch patches/01.patch ++ ++$ quilt series -v ++> = patches/01.patch ++> patches/02.patch ++> patches/03.patch ++ ++# Touch the series file but preserve the order -> OK ++$ touch patches/series ++ ++$ quilt series -v ++> = patches/01.patch ++> patches/02.patch ++> patches/03.patch ++ ++# Change the order of the patch series -> complain ++$ cat > patches/series ++< 03.patch ++< 01.patch ++< 02.patch ++ ++$ quilt series -v ++> The series file no longer matches the applied patches. Please run 'quilt pop -a'. ++ ++$ quilt pop -a ++> Patch patches/01.patch appears to be empty, removing ++> ++> No patches applied ++ ++$ quilt series -v ++> patches/03.patch ++> patches/01.patch ++> patches/02.patch diff --git a/quilt.changes b/quilt.changes index c9d4ced..63b62af 100644 --- a/quilt.changes +++ b/quilt.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Tue Oct 14 13:07:53 CEST 2014 - jdelvare@suse.de + +- quilt-check-modified-series.patch: Check for series file + consistency. +- setup-fix-tar-with-long-options.patch, + inspect-skip-version-check.patch: Update upstream status. + +------------------------------------------------------------------- +Thu Oct 9 15:00:35 CEST 2014 - jdelvare@suse.de + +- inspect-skip-version-check.patch: Skip version check when + running "quilt setup" on a spec file. The previous fix only + worked when running "quilt setup" on a series file. + ------------------------------------------------------------------- Wed Oct 1 14:10:22 CEST 2014 - jdelvare@suse.de diff --git a/quilt.spec b/quilt.spec index ff49ee8..bc42cde 100644 --- a/quilt.spec +++ b/quilt.spec @@ -49,6 +49,8 @@ Patch7: setup-fix-tar-with-long-options.patch Patch8: quilt-format-options-pass-through.patch Patch9: pop-add-auto-refresh.patch Patch10: push-add-auto-refresh.patch +Patch11: inspect-skip-version-check.patch +Patch12: quilt-check-modified-series.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch Recommends: procmail @@ -78,6 +80,8 @@ http://www.zip.com.au/~akpm/linux/patches/. %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 +%patch12 -p1 %build # --with-rpmbuild=/usr/lib/rpm/rpmb: diff --git a/setup-fix-tar-with-long-options.patch b/setup-fix-tar-with-long-options.patch index 41dda57..39b91d3 100644 --- a/setup-fix-tar-with-long-options.patch +++ b/setup-fix-tar-with-long-options.patch @@ -1,6 +1,6 @@ From: Jean Delvare Subject: inspect: Handle long options passed to tar -Upstream: Submitted +Upstream: Committed (1e9f433f693b4ee09ebf3267222b11694448e81f) The command line interface to tar is complex and sometimes confusing, but we should still do our best to figure out where the file name is