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}
openSUSE Build Service is sponsored by