File xen-4.5-export.sh of Package xen

#!/bin/bash
set -e
unset LANG
unset ${!LC_*}
export TZ=UTC
#
xen_git_url=git://xenbits.xen.org/xen.git
xen_tag=staging-4.5
#
xz_opts="--compress --force --verbose -9 --extreme --threads=0"
commit_msg=.osc_xen_unstable_commit_msg.txt
td=`mktemp --directory --tmpdir=/dev/shm`
xf=${td}/xf
_x() {
	rm -rf "${td}"
}
trap _x EXIT
if test -z "${td}" ; then exit 1 ; fi

giturl_to_directory() {
	local url=$1
	local git_dir

	case "${url}" in
		git://xenbits.xen.org/xen.git)
		git_dir=~/work/src/xen.org/xen.git
		;;
		git://xenbits.xen.org/qemu-xen-traditional.git)
		git_dir=~/work/src/xen.org/qemu-xen-traditional.git
		;;
		git://xenbits.xen.org/qemu-xen.git)
		git_dir=~/work/src/xen.org/qemu-xen.git
		;;
		git://xenbits.xen.org/qemu-xen-4.5-testing.git)
		git_dir=~/work/src/xen.org/qemu-xen-traditional.git
		;;
		git://xenbits.xen.org/qemu-upstream-4.5-testing.git)
		git_dir=~/work/src/xen.org/qemu-xen.git
		;;
		git://xenbits.xen.org/seabios.git)
		git_dir=~/work/src/xen.org/seabios.git
		;;
		git://git.ipxe.org/ipxe.git)
		git_dir=~/work/src/xen.org/ipxe.git
		;;
		*)
		echo "${url} not known" >&2
		exit 1
		;;
	esac
	ls -d "${git_dir}/.git"
}

git_descr_2_hash() {
	local git_dir=$1
	local git_remote=$2
	local git_tag=$3
	local hash
	local err1=${td}/log.tag
	local err2=${td}/log.remote

	rm -f "${err1}" "${err2}"
	hash="`git --git-dir="${git_dir}" log --max-count=1 --pretty=format:%H ${git_tag} 2>${err1}`"
	if test -z "${hash}"
	then
		hash="${git_remote}/${git_tag}"
	fi
	hash="`git --git-dir="${git_dir}" log --max-count=1 --pretty=format:%H ${hash} 2>${err2}`"
	if test -z "${hash}"
	then
		echo "no hash for ${git_dir} ${git_remote} ${git_tag}"
		cat "${err1}"
		cat "${err2}"
		exit 1
	fi
	echo "${hash}"
}
git_commit_date() {
	local git_dir=$1
	local git_remote=$2
	local git_tag=$3
	local hash

	hash=`git_descr_2_hash ${git_dir} ${git_remote} ${git_tag}`
	git --git-dir="${git_dir}" log --max-count=1 --pretty=format:%ct "${hash}"
}

git_find_remote() {
	local git_dir=$1
	local git_url=$2
	local remote
	local url

	for remote in `git --git-dir="${git_dir}" remote`
	do
		url=`git --git-dir="${git_dir}" remote show -n ${remote} | sed -n '/Fetch URL:/s@^.*Fetch URL:[[:blank:]]\+@@p'`
		if test "${url}" = "${git_url}"
		then
			echo "$remote"
			return
		fi
	done
	echo "${git_dir} does not contain URL ${git_url}"
}

git_commit_abbrev() {
	local git_dir=$1
	local git_remote=$2
	local git_tag=$3
	local hash

	hash=`git_descr_2_hash ${git_dir} ${git_remote} ${git_tag}`
	git --git-dir="${git_dir}" log --max-count=1 --pretty=format:%h "${hash}"
}

get_xen_file() {
	local file=$1

	local git_dir=${xen_git_dir}
	local git_remote=${xen_git_remote}
	local git_tag=${xen_tag}

	git --git-dir="${git_dir}" show "${git_remote}/${git_tag}:${file}" > "${xf}"
}

unix_date_2_rpm_version() {
	local unix=$1

	date -u --date="@${unix}" +%Y%m%dT%H%M%S
}

tar_up_git() {
	local git_dir=$1
	local extract_dir=$2
	local git_hash=$3
	local suffix=.$4
	local out_dir=$PWD
	local time_stamp
	local rev=./files.txt

	time_stamp=`git --git-dir="${git_dir}" log --max-count=1 --pretty=format:%ct "${git_hash}" `

	if test -f "${extract_dir}.tar${suffix}"
	then
		existing=`date -r "${extract_dir}.tar${suffix}" +%s`
		if test "${time_stamp}" = "${existing}"
		then
			echo "${extract_dir}.tar${suffix} has expected timestamp '`date -d @${time_stamp}`'"
			return
		fi
		echo "${extract_dir}.tar${suffix} timestamp differs:"
		echo "expected: `date -d @${time_stamp}`"
		echo "actually: `date -d @${existing}`"
	fi

	
	if pushd "${td}" >/dev/null
	then
		rm -rf ${extract_dir} ${extract_dir}.tar ${extract_dir}.tar.* ${rev}
		git --git-dir="${git_dir}" archive --format=tar --prefix=${extract_dir}/ ${git_hash} | tar xf -
		find ${extract_dir} -type f | sort > ${rev}
		touch -d "`date -u -d \"@${time_stamp}\"`" ${rev}
		tar \
			--create \
			--numeric-owner \
			--owner=0 \
			--group=0 \
			--format=ustar \
			--full-time \
			--mtime=${rev} \
			--file=${extract_dir}.tar \
			--files-from=${rev}
		touch -r ${rev} ${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
		mv -fvt "$out_dir" "${extract_dir}.tar${suffix}"
		popd > /dev/null
	fi
}
#
##
###
##
#
xen_git_dir="`giturl_to_directory ${xen_git_url}`"
xen_git_remote=`git_find_remote ${xen_git_dir} ${xen_git_url}`
xen_git_hash=`git_descr_2_hash ${xen_git_dir} ${xen_git_remote} ${xen_tag}`
xen_commit_abbrev=`git_commit_abbrev ${xen_git_dir} ${xen_git_remote} ${xen_tag}`
xen_commit_unix_date="`git_commit_date ${xen_git_dir} ${xen_git_remote} ${xen_tag}`"
xen_extract_dir=xen-${xen_tag}

get_xen_file xen/Makefile
xen_version=`awk '/[[:blank:]]XEN_VERSION[[:blank:]]+=/ { print $4 }' ${xf}`.`awk '/[[:blank:]]XEN_SUBVERSION[[:blank:]]+=/ { print $4 }' ${xf}`
case "${xen_version}" in
	*.|.*) exit 1 ;;
	*) : good ;;
esac
xen_commit_rpm_date=`unix_date_2_rpm_version ${xen_commit_unix_date}`
git_changeset="`git --git-dir="${xen_git_dir}" log --max-count=1 '--pretty=format:%ci git:%h' ${xen_git_hash}`"

get_xen_file Config.mk
qemu_xen_traditional_git_url=` sed -n '/^QEMU_TRADITIONAL_URL.*git:\/\//{s@^.* @@;p;q}' ${xf} `
qemu_xen_traditional_git_dir="`giturl_to_directory ${qemu_xen_traditional_git_url}`"
qemu_xen_traditional_git_remote=`git_find_remote ${qemu_xen_traditional_git_dir} ${qemu_xen_traditional_git_url}`
qemu_xen_traditional_tag=` sed -n '/^QEMU_TRADITIONAL_REVISION/{/QEMU_TAG/d;s@^.* @@;p;q}' ${xf} `
qemu_xen_traditional_git_hash=`git_descr_2_hash ${qemu_xen_traditional_git_dir} ${qemu_xen_traditional_git_remote} ${qemu_xen_traditional_tag}`
qemu_xen_traditional_unix_date="`git_commit_date ${qemu_xen_traditional_git_dir} ${qemu_xen_traditional_git_remote} ${qemu_xen_traditional_tag}`"
qemu_xen_traditional_extract_dir=qemu-xen-traditional-dir-remote
#
qemu_xen_upstream_git_url=`sed -n '/^QEMU_UPSTREAM_URL.*git:\/\//{s@^.* @@;p;q}' ${xf}`
qemu_xen_upstream_git_dir="`giturl_to_directory ${qemu_xen_upstream_git_url}`"
qemu_xen_upstream_git_remote=`git_find_remote ${qemu_xen_upstream_git_dir} ${qemu_xen_upstream_git_url}`
qemu_xen_upstream_tag=`sed -n '/^QEMU_UPSTREAM_REVISION/{s@^.* @@;p;q}' ${xf}`
qemu_xen_upstream_git_hash="`git_descr_2_hash ${qemu_xen_upstream_git_dir} ${qemu_xen_upstream_git_remote} ${qemu_xen_upstream_tag}`"
qemu_xen_upstream_unix_date="`git_commit_date ${qemu_xen_upstream_git_dir} ${qemu_xen_upstream_git_remote} ${qemu_xen_upstream_tag}`"
qemu_xen_upstream_extract_dir=qemu-xen-dir-remote
#
seabios_git_url=`sed -n '/^SEABIOS_UPSTREAM_URL.*git:\/\//{;s@^.* @@;p;q}' ${xf}`
seabios_git_dir="`giturl_to_directory ${seabios_git_url}`"
seabios_git_remote=`git_find_remote ${seabios_git_dir} ${seabios_git_url}`
seabios_tag=`sed -n '/^SEABIOS_UPSTREAM_REVISION/{/SEABIOS_UPSTREAM_TAG/d;s@^.* @@;p;q}' ${xf}`
seabios_git_hash="`git_descr_2_hash ${seabios_git_dir} ${seabios_git_remote} ${seabios_tag}`"
seabios_unix_date="`git_commit_date ${seabios_git_dir} ${seabios_git_remote} ${seabios_tag}`"
seabios_extract_dir=seabios-dir-remote
#
get_xen_file tools/firmware/etherboot/Makefile
ipxe_git_url=`sed -n '/^IPXE_GIT_URL.*git:\/\//{s@^.* @@;p;q}' ${xf} `
ipxe_git_dir="`giturl_to_directory ${ipxe_git_url}`"
ipxe_git_remote=`git_find_remote ${ipxe_git_dir} ${ipxe_git_url}`
ipxe_tag=`sed -n '/^IPXE_GIT_TAG/{s@^.* @@;p;q}' ${xf} `
ipxe_git_hash="`git_descr_2_hash ${ipxe_git_dir} ${ipxe_git_remote} ${ipxe_tag}`"
ipxe_unix_date="`git_commit_date ${ipxe_git_dir} ${ipxe_git_remote} ${ipxe_tag}`"
ipxe_extract_dir=ipxe
#
spec_version="${xen_version}.${xen_commit_rpm_date}.${xen_commit_abbrev}"
#
time tar_up_git "${xen_git_dir}" "${xen_extract_dir}" "${xen_git_hash}" xz
#
time tar_up_git "${qemu_xen_traditional_git_dir}" "${qemu_xen_traditional_extract_dir}" "${qemu_xen_traditional_git_hash}" xz
#
time tar_up_git "${qemu_xen_upstream_git_dir}" "${qemu_xen_upstream_extract_dir}" "${qemu_xen_upstream_git_hash}" xz
#
time tar_up_git "${seabios_git_dir}" "${seabios_extract_dir}" "${seabios_git_hash}" xz
#
time tar_up_git "${ipxe_git_dir}" "${ipxe_extract_dir}" "${ipxe_git_hash}" xz
sed -i~ "
/^%define git_changeset /s@^.*@%define git_changeset ${git_changeset}@
/^%define xen_build_dir /s@^.*@%define xen_build_dir ${xen_extract_dir}@
/^Version:/s@^.*@Version:        ${spec_version}@
" xen.spec
rm -fv ${commit_msg}
cat > ${commit_msg} <<EOF
xen_commit ${xen_git_hash} ` env LC_ALL=C.UTF-8 date -u -d @${xen_commit_unix_date} `
seabios_tag ${seabios_git_hash} ` env LC_ALL=C.UTF-8 date -u -d @${seabios_unix_date} `
ipxe_tag ${ipxe_git_hash} ` env LC_ALL=C.UTF-8 date -u -d @${ipxe_unix_date} `
qemu_xen_traditional_tag ${qemu_xen_traditional_git_hash} ` env LC_ALL=C.UTF-8 date -u -d @${qemu_xen_traditional_unix_date} `
qemu_xen_upstream_tag ${qemu_xen_upstream_git_hash} ` env LC_ALL=C.UTF-8 date -u -d @${qemu_xen_upstream_unix_date} `
EOF
cat ${commit_msg}
openSUSE Build Service is sponsored by