Files
MSYS2-packages/msys2-runtime/update-patches.sh
Johannes Schindelin 5dea2a9351 Upgrade the MSYS2 runtime to v3.1.4 (#1953)
* msys2-runtime: add a shell script to generate the patches from msys2/Cygwin

The idea is to commit a change incrementing the `pkgver`, then running
this script, and then amending the commit.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

* msys2-runtime: work around Cygwin's source code containing symlinks

It is a bit unfortunate that MSYS2 substitutes symlinks by deep copies,
by default. Git, for example, claims that it cannot do symlinks, but
Cygwin now needs this. Let's make do with that default.

The strategy we use is simple: we override the auto-detected
`core.symlinks` setting. That will result in a dirty worktree, of
course: deep copies are not symlinks, and `git status` will detect it.
But that does not matter, as the build will now work ("deep" copies of
those header files will work just as well as real symlinks would have
done).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

* msys2-runtime: upgrade to v3.1.4

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2020-05-18 08:55:21 +03:00

70 lines
1.9 KiB
Bash

#!/bin/sh
die () {
echo "$*" >&2
exit 1
}
cd "$(dirname "$0")" ||
die "Could not cd to msys2-runtime/"
git rev-parse --verify HEAD >/dev/null &&
git update-index -q --ignore-submodules --refresh &&
git diff-files --quiet --ignore-submodules &&
git diff-index --cached --quiet --ignore-submodules HEAD -- ||
die "Clean worktree required"
git rm 0*.patch ||
die "Could not remove previous patches"
base_tag=refs/tags/cygwin-"$(sed -ne 'y/./_/' -e 's/^pkgver=//p' <PKGBUILD)"-release
msys2_branch=refs/heads/msys2-${base_tag#refs/tags/cygwin-}
url=https://github.com/msys2/Cygwin
test -d msys2-runtime ||
git clone --bare $url msys2-runtime ||
die "Could not clone msys2-runtime"
git -C msys2-runtime fetch --no-tags $url $base_tag:$base_tag $msys2_branch:$msys2_branch
git -c core.abbrev=7 \
-c diff.renames=true \
-c format.from=false \
-c format.numbered=auto \
-c format.useAutoBase=false \
-C msys2-runtime \
format-patch \
--topo-order \
--diff-algorithm=default \
--no-attach \
--no-add-header \
--no-cover-letter \
--no-thread \
--suffix=.patch \
--subject-prefix=PATCH \
--output-directory .. \
$base_tag..$msys2_branch ||
die "Could not generate new patch set"
patches="$(ls -1 0*.patch)" &&
for p in $patches
do
sed -i 's/^\(Subject: \[PATCH [0-9]*\/\)[1-9][0-9]*/\1N/' $p ||
die "Could not fix Subject: line in $p"
done &&
git add $patches ||
die "Could not stage new patch set"
in_sources="$(echo "$patches" | sed "{s/^/ /;:1;N;s/\\n/\\\\n /;b1}")"
in_prepare="$(echo "$patches" | tr '\n' '\\' | sed -e 's/\\$//' -e 's/\\/ &&&n /g')"
sed -i -e "/^ 0.*\.patch$/{:1;N;/[^)]$/b1;s|.*|$in_sources)|}" \
-e "/^ *apply_git_am_with_msg /{:2;N;/[^}]$/b2;s|.*| apply_git_am_with_msg $in_prepare\\n\\}|}" \
PKGBUILD ||
die "Could not update the patch set in PKGBUILD"
updpkgsums ||
die "Could not update the patch set checksums in PKGBUILD"
git add PKGBUILD ||
die "Could not stage updates in PKGBUILD"