File xen-4.5-export.sh of Package xen
#!/bin/bash
set -e
unset LANG
unset ${!LC_*}
t=`mktemp --tmpdir=/dev/shm`
x() {
rm -fv "${t}"
}
trap x EXIT
if test -z "${t}" ; then exit 1 ; fi
xvers=4.5
xz_opts="--compress --force --verbose -9 --extreme --threads=0"
#
xen_unstable_srcdir=$1
qemu_xen_traditional_srcdir=$2
qemu_xen_upstream_srcdir=$3
xenalyze_srcdir=$4
ipxe_srcdir=$5
seabios_srcdir=$6
if test -z "${xen_unstable_srcdir}"
then
xen_unstable_srcdir=~/work/src/xen.org/releases/xen-releases.git
qemu_xen_traditional_srcdir=~/work/src/xen.org/releases/qemu-xen-releases.git
qemu_xen_upstream_srcdir=~/work/src/xen.org/releases/qemu-upstream-releases.git
xenalyze_srcdir=~/work/src/xen.org/xenalyze.hg
ipxe_srcdir=~/work/src/xen.org/ipxe.git
seabios_srcdir=~/work/src/xen.org/releases/seabios-releases.git
fi
#
commit_msg=.osc_xen_unstable_commit_msg.txt
d=$PWD
xen_tag=unstable/staging-${xvers}
qemu_xen_traditional_tag=
qemu_xen_upstream_tag=
xen_old_version=
xenalyze_hg_changeset=
ipxe_tag=
seabios_tag=
ioemu_xen_traditional_extract_dir=qemu-xen-traditional-dir-remote
ioemu_xen_upstream_extract_dir=qemu-xen-dir-remote
ipxe_extract_dir=ipxe
seabios_extract_dir=seabios-dir-remote
#
tar_up_git() {
local src_dir=$1
local extract_dir=$2
local git_tag=$3
local suffix=.$4
local date=
local touch_date=
echo "${extract_dir}"
#
rm -rf ${extract_dir}
date="$( pushd "${src_dir}" > /dev/null && git log --pretty=format:%ci ${git_tag}^..${git_tag} )"
echo "git tag '${git_tag} timestamp: '${date}'"
touch_date="`date -u -d \"${date}\" +%Y%m%d%H%M.%S`"
touch -t "${touch_date}" "${t}"
if test -f ${extract_dir}.tar${suffix}
then
if ! test "${t}" -nt ${extract_dir}.tar${suffix}
then
echo "git tag '${git_tag}' not newer than ${extract_dir}.tar${suffix}"
return
fi
fi
(
cd "${src_dir}" && test -d .git &&
git archive --format=tar --prefix=${extract_dir}/ ${git_tag}
) |
tar xfa -
for f in $(find ${extract_dir} -type f)
do
case "${f}" in
*.y)
touch -d "`date -u -d '@1'`" "${f}"
;;
*)
touch -d "`cd ${src_dir} ;f_rev=$(git rev-list --max-count=1 ${git_tag} -- ${f#*/}) ; git show -s --format=format:%ai ${f_rev} `" ${f}
;;
esac
done
(
cd "${src_dir}" &&
git whatchanged ${git_tag}
) > ${extract_dir}/git-whatchanged.txt
touch -t "${touch_date}" ${extract_dir}/git-whatchanged.txt
tar cfa ${extract_dir}.tar $(find ${extract_dir} -type f | sort)
touch -r ${extract_dir}/git-whatchanged.txt ${extract_dir}.tar
case "${suffix}" in
.xz)
xz ${xz_opts} ${extract_dir}.tar
;;
.bz2)
bzip2 -fv9 ${extract_dir}.tar
;;
.gz)
gzip -fv9 ${extract_dir}.tar
;;
*)
;;
esac
rm -rf ${extract_dir}
#
}
#
xen_old_version=`sed -n '/^Version:/ { s@^Version:[[:blank:]]*@@ ; p ; q }' xen.spec`
pushd "${xen_unstable_srcdir}"
git_changeset="`git log '--pretty=format:%ci git:%h' | sed 1q`"
git show ${xen_tag}:Config.mk > ${t}
qemu_xen_traditional_tag=` sed -n '/^QEMU_TRADITIONAL_REVISION/{/QEMU_TAG/d;s@^.* @@;p;q}' ${t}`
qemu_xen_upstream_tag=` sed -n '/^QEMU_UPSTREAM_REVISION/{s@^.* @@;p;q}' ${t}`
seabios_tag=` sed -n '/^SEABIOS_UPSTREAM_REVISION/{/SEABIOS_UPSTREAM_TAG/d;s@^.* @@;p;q}' ${t} `
git show ${xen_tag}:tools/firmware/etherboot/Makefile > ${t}
ipxe_tag=`sed -n '/^IPXE_GIT_TAG/{s@^.* @@;p;q}' ${t} `
for release in {0..99}
do
if git show RELEASE-${xvers}.$(( ${release} + 1 )) &> /dev/null
then
continue
fi
break
done
revs_after_release=`git log --oneline RELEASE-${xvers}.${release}..unstable/staging-${xvers} | wc -l`
popd
xen_version=${xvers}.${release}.${revs_after_release}
sed -i~ "
/^%define git_changeset /s@^.*@%define git_changeset ${git_changeset}@
/^Version:/s@^.*@Version: ${xen_version}@
" xen.spec
diff -u .osc/xen.spec xen.spec || :
#
xen_extract_dir=xen-${xen_version}
time tar_up_git "${xen_unstable_srcdir}" "${xen_extract_dir}" "${xen_tag}" xz
#
time tar_up_git "${qemu_xen_traditional_srcdir}" "${ioemu_xen_traditional_extract_dir}" "${qemu_xen_traditional_tag}" xz
#
time tar_up_git "${qemu_xen_upstream_srcdir}" "${ioemu_xen_upstream_extract_dir}" "${qemu_xen_upstream_tag}" xz
#
time tar_up_git "${seabios_srcdir}" "${seabios_extract_dir}" "${seabios_tag}" xz
#
time tar_up_git "${ipxe_srcdir}" "${ipxe_extract_dir}" "${ipxe_tag}" gz
#
pushd "${xenalyze_srcdir}"
xenalyze_hg_changeset="`hg parents --template "{date|date} {rev}:{node|short}"`"
time hg archive -t tar "${d}/%b.tar"
time xz ${xz_opts} "${d}/${xenalyze_srcdir##*/}.tar"
popd
#
echo "xen_old_version $xen_old_version"
echo "xen_version $xen_version"
if test "${xen_old_version}" != "${xen_version}"
then
for i in `ls -d *${xen_old_version}* 2>/dev/null`
do
rm -fvi "${i}"
done
fi
#
rm -fv ${commit_msg}
cat > ${commit_msg} <<EOF
git_changeset ${git_changeset}
xenalyze_hg_changeset ${xenalyze_hg_changeset}
seabios_tag ${seabios_tag} ` env LC_ALL=C.UTF-8 date -u -r ${seabios_extract_dir}* `
ipxe_tag ${ipxe_tag} ` env LC_ALL=C.UTF-8 date -u -r ${ipxe_extract_dir}.tar* `
qemu_xen_traditional_tag ${qemu_xen_traditional_tag} ` env LC_ALL=C.UTF-8 date -u -r ${ioemu_xen_traditional_extract_dir}* `
qemu_xen_upstream_tag ${qemu_xen_upstream_tag} ` env LC_ALL=C.UTF-8 date -u -r ${ioemu_xen_upstream_extract_dir}* `
EOF
cat ${commit_msg}