|
Siddhesh Poyarekar |
9ede0d0 |
#!/bin/sh
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Given a git source repo, generate a tarball from the desired branch, modify
|
|
Siddhesh Poyarekar |
9ede0d0 |
# the spec file and upload it to lookaside cache if the tarball unpacks and
|
|
Siddhesh Poyarekar |
9ede0d0 |
# gets patched cleanly.
|
|
Siddhesh Poyarekar |
8e19d63 |
#
|
|
Siddhesh Poyarekar |
8e19d63 |
# Usage:
|
|
Siddhesh Poyarekar |
8e19d63 |
#
|
|
Siddhesh Poyarekar |
8e19d63 |
# 1. Invoke the script as follows:
|
|
Siddhesh Poyarekar |
8e19d63 |
#
|
|
Siddhesh Poyarekar |
8e19d63 |
# ./sync-upstream.sh upstream-repo
|
|
Siddhesh Poyarekar |
8e19d63 |
#
|
|
Siddhesh Poyarekar |
8e19d63 |
# where upstream-repo is the path to the synced upstream git repo.
|
|
Siddhesh Poyarekar |
8e19d63 |
#
|
|
Siddhesh Poyarekar |
8e19d63 |
# 2. Watch the script run. If it proceeds to building the package, then
|
|
Siddhesh Poyarekar |
8e19d63 |
# everything seems good and you just need to test the build after it
|
|
Siddhesh Poyarekar |
8e19d63 |
# is complete. If it exits before the build (you'll know if you read
|
|
Siddhesh Poyarekar |
8e19d63 |
# the output of the script) then manual intervention is required to
|
|
Siddhesh Poyarekar |
8e19d63 |
# complete the sync. This will typically happen when a patch fails
|
|
Siddhesh Poyarekar |
8e19d63 |
# to apply on the new sources.
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# Development branch:
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# * As long as the branch is "master" the repository is treated as
|
|
Carlos O'Donell |
e5c3314 |
# development and synchronization updates are fully automatic.
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# Stable branches:
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# * Once you branch to a stable Fedora release adjust branch.
|
|
Carlos O'Donell |
e5c3314 |
# e.g. release/2.23/master
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# * Set branch_name to the name of the relase
|
|
Carlos O'Donell |
e5c3314 |
# e.g. 2.23
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Carlos O'Donell |
e5c3314 |
# * The sync script will automatically stop before commit, push, build
|
|
Carlos O'Donell |
e5c3314 |
# for production branches, so you have to review the results and then
|
|
Carlos O'Donell |
e5c3314 |
# do those steps yourself.
|
|
Carlos O'Donell |
e5c3314 |
#
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
set -e
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# We want to sync from master by default. Change this if you want to sync from
|
|
Siddhesh Poyarekar |
9ede0d0 |
# another branch.
|
|
Siddhesh Poyarekar |
9ede0d0 |
branch=master
|
|
Carlos O'Donell |
99a6d4d |
# Avoid slashes in branch name.
|
|
Carlos O'Donell |
99a6d4d |
branch_name=master
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# We can't do anything without an upstream repo
|
|
Siddhesh Poyarekar |
9ede0d0 |
if [ $# -ne 1 ]; then
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "Usage: $0 <path-to-upstream-repo>" 1>&2
|
|
Siddhesh Poyarekar |
9ede0d0 |
exit 1
|
|
Siddhesh Poyarekar |
9ede0d0 |
fi
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
upstream=$1
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
srcdir=$(git --git-dir=$upstream/.git describe $branch)
|
|
Siddhesh Poyarekar |
9ede0d0 |
cursrc=$(sed -ne 's/^%define glibcsrcdir \(.*\)/\1/p' glibc.spec)
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Upstream has not moved forward since the last sync.
|
|
Siddhesh Poyarekar |
9ede0d0 |
# TODO: Some time in the future, we might want to only sync when upstream has
|
|
Siddhesh Poyarekar |
9ede0d0 |
# advanced more than a certain number of commits, say, 42.
|
|
Siddhesh Poyarekar |
9ede0d0 |
if [ "$cursrc" = "$srcdir" ]; then
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Already in sync with upstream."
|
|
Siddhesh Poyarekar |
9ede0d0 |
exit 0
|
|
Siddhesh Poyarekar |
9ede0d0 |
fi
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Generate and gzip the tarball from the desired branch of the repository.
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Generating tarball."
|
|
Siddhesh Poyarekar |
9ede0d0 |
git --git-dir="$upstream/.git" archive --prefix="$srcdir/" "$branch" \
|
|
Siddhesh Poyarekar |
9ede0d0 |
> "$srcdir.tar"
|
|
Siddhesh Poyarekar |
9ede0d0 |
gzip -9 "$srcdir.tar"
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Created $srcdir.tar.gz"
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Our changelog header
|
|
Siddhesh Poyarekar |
9ede0d0 |
cldate=$(date +'%a %b %d %Y')
|
|
Siddhesh Poyarekar |
9ede0d0 |
clname=$(git config --get user.name)
|
|
Siddhesh Poyarekar |
9ede0d0 |
clemail=$(git config --get user.email | sed 's/@/\\@/')
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Getting our version and release number from the spec file.
|
|
Siddhesh Poyarekar |
9ede0d0 |
nv=$(perl -ne 's/^%define glibcversion (.+)/printf("%s-", $1)/e;' \
|
|
Siddhesh Poyarekar |
9ede0d0 |
-e 's/^%define glibcrelease ([0-9]+).*/printf("%d\n", $1 + 1)/e;' \
|
|
Siddhesh Poyarekar |
9ede0d0 |
glibc.spec)
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Our changelog entry.
|
|
Siddhesh Poyarekar |
3708995 |
changelog="* $cldate $clname <$clemail> - $nv\n- Auto-sync with upstream $branch.\n"
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Change the glibcsrcdir variable, bump up the release number and add an extra
|
|
Siddhesh Poyarekar |
9ede0d0 |
# entry to the changelog.
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Updating spec file."
|
|
Siddhesh Poyarekar |
9ede0d0 |
perl -pi \
|
|
Siddhesh Poyarekar |
9ede0d0 |
-e "s/^(%define glibcsrcdir ).+/\$1$srcdir/;
|
|
Siddhesh Poyarekar |
9ede0d0 |
s/^(%define glibcrelease )(\d+)/print(\$1); print(\$2 + 1);'';/e;
|
|
Siddhesh Poyarekar |
9ede0d0 |
s/^(%changelog)$/\$1\n$changelog/" \
|
|
Siddhesh Poyarekar |
9ede0d0 |
glibc.spec
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Carlos O'Donell |
fe4ad2a |
function print_steps {
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ (a) Updating sources e.g. fedpkg new-sources $srcdir.tar.gz"
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ (b) Committing changes e.g. git commit -a"
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ (c) Pushing to fedora e.g. fedpkg push"
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ (d) Building fedora branch e.g. fedpkg build"
|
|
Carlos O'Donell |
fe4ad2a |
}
|
|
Carlos O'Donell |
fe4ad2a |
|
|
Siddhesh Poyarekar |
9ede0d0 |
function prep_failed {
|
|
Siddhesh Poyarekar |
9ede0d0 |
# fedpkg prep failed.
|
|
Siddhesh Poyarekar |
9ede0d0 |
if [ $? -ne 0 ]; then
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Source prep failed."
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ The 'sources' file is unmodified. Manually use $srcdir.tar.gz."
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ Check the output in $tmpfile and fix things before:"
|
|
Carlos O'Donell |
fe4ad2a |
print_steps
|
|
Siddhesh Poyarekar |
9ede0d0 |
false
|
|
Siddhesh Poyarekar |
9ede0d0 |
fi
|
|
Siddhesh Poyarekar |
9ede0d0 |
}
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Carlos O'Donell |
e5c3314 |
function build_failed {
|
|
Carlos O'Donell |
e5c3314 |
# fedpkg build failed.
|
|
Carlos O'Donell |
e5c3314 |
if [ $? -ne 0 ]; then
|
|
Carlos O'Donell |
e5c3314 |
echo "+ Building the package failed (or was interrupted)."
|
|
Carlos O'Donell |
e5c3314 |
echo "+ Check the koji logs for final status."
|
|
Carlos O'Donell |
e5c3314 |
false
|
|
Carlos O'Donell |
e5c3314 |
fi
|
|
Carlos O'Donell |
e5c3314 |
}
|
|
Carlos O'Donell |
e5c3314 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Testing if fedpkg prep works."
|
|
Siddhesh Poyarekar |
9ede0d0 |
tmpfile=$(mktemp fedpkg-prep.out-XXXX)
|
|
Siddhesh Poyarekar |
9ede0d0 |
|
|
Siddhesh Poyarekar |
9ede0d0 |
trap prep_failed EXIT
|
|
Siddhesh Poyarekar |
9ede0d0 |
fedpkg prep > "$tmpfile" 2>&1
|
|
Siddhesh Poyarekar |
9ede0d0 |
# Remove mess created by fedpkg prep
|
|
Siddhesh Poyarekar |
9ede0d0 |
rm -f "$tmpfile"
|
|
Siddhesh Poyarekar |
9ede0d0 |
rm -rf "$srcdir"
|
|
Siddhesh Poyarekar |
9ede0d0 |
echo "+ Source prep is clean, so we're good to go."
|
|
Siddhesh Poyarekar |
9ede0d0 |
fedpkg new-sources "$srcdir.tar.gz"
|
|
Carlos O'Donell |
99a6d4d |
if [ $branch == "master" ]; then
|
|
Carlos O'Donell |
e5c3314 |
git commit -a -m "Auto-sync with upstream $branch."
|
|
Carlos O'Donell |
e5c3314 |
fedpkg push
|
|
Carlos O'Donell |
e5c3314 |
trap build_failed EXIT
|
|
Carlos O'Donell |
e5c3314 |
fedpkg build
|
|
Carlos O'Donell |
e5c3314 |
echo "+ Done!"
|
|
Carlos O'Donell |
99a6d4d |
else
|
|
Carlos O'Donell |
e5c3314 |
echo "+ This is a non-development branch."
|
|
Carlos O'Donell |
e5c3314 |
echo "+ Please review the results of the sync."
|
|
Carlos O'Donell |
fe4ad2a |
echo "+ Once reviewed you need to:"
|
|
Carlos O'Donell |
fe4ad2a |
print_steps
|
|
Carlos O'Donell |
99a6d4d |
fi
|