update/patch: avoid applying patches directly in build repos

Switching branches and applying patches in the build repos will
unnecessarily touch many files, causing rebuilds of packages that didn't
really change; furthermore, it is filling the reflog with many entries.

Don't ever switch to base branch in the build repos and apply patches in
a temporary clone to avoid these issues.

In addition, GPG signing is generally disabled in the build repos to
override potential global configuration (as signing doesn't make sense and
will slow down rebases).
This commit is contained in:
Matthias Schiffer 2016-08-09 02:50:57 +02:00
parent 93deaad8a8
commit bb3db1795b
No known key found for this signature in database
GPG Key ID: 16EF3F64CB201D9C
2 changed files with 19 additions and 12 deletions

View File

@ -5,19 +5,27 @@ shopt -s nullglob
. "$GLUONDIR"/scripts/modules.sh
TMPDIR="$GLUON_BUILDDIR"/tmp
mkdir -p "$TMPDIR"
PATCHDIR="$TMPDIR"/patching
trap 'rm -rf "$PATCHDIR"' EXIT
for module in $GLUON_MODULES; do
echo "--- Patching module '$module' ---"
cd "$GLUONDIR"/$module
git checkout -B patching base
git clone -s -b base --single-branch "$GLUONDIR"/$module "$PATCHDIR" 2>/dev/null
cd "$PATCHDIR"
for patch in "$GLUONDIR"/patches/$module/*.patch; do
if ! git -c user.name='Gluon Patch Manager' -c user.email='gluon@void.example.com' -c commit.gpgsign=false am --whitespace=nowarn --committer-date-is-author-date "$patch"; then
git am --abort
git checkout patched
git branch -D patching
exit 1
fi
git -c user.name='Gluon Patch Manager' -c user.email='gluon@void.example.com' -c commit.gpgsign=false am --whitespace=nowarn --committer-date-is-author-date "$patch"
done
git branch -M patched
cd "$GLUONDIR"/$module
git fetch "$PATCHDIR" 2>/dev/null
git checkout -B patched FETCH_HEAD
git submodule update --init --recursive
rm -rf "$PATCHDIR"
done

View File

@ -14,8 +14,7 @@ for module in $GLUON_MODULES; do
mkdir -p "$GLUONDIR"/$module
cd "$GLUONDIR"/$module
git init
git config commit.gpgsign false
git checkout $commit 2>/dev/null || git fetch $repo $branch
git checkout -B base $commit
git submodule update --init --recursive
git branch -f base $commit 2>/dev/null || git fetch -f $repo $branch:base
done