X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=mkrelease.sh;h=334b4fb48eacc99f431853485e54fcde0bb9a2d7;hb=febfd9ffa34261dc6f9926bd47fae5353d17eee2;hp=cb1ffc557dcce74dab18445a7f057641143757e6;hpb=6631738e1acb537cd1582e54751457473b732fba;p=portage.git diff --git a/mkrelease.sh b/mkrelease.sh index cb1ffc557..334b4fb48 100755 --- a/mkrelease.sh +++ b/mkrelease.sh @@ -1,37 +1,52 @@ #!/bin/bash +# Copyright 2008-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 RELEASE_BUILDDIR=${RELEASE_BUILDDIR:-/var/tmp/portage-release} SOURCE_DIR=${RELEASE_BUILDDIR}/checkout -BRANCH=${BRANCH:-trunk} -REPOSITORY=svn+ssh://cvs.gentoo.org/var/svnroot/portage/main -SVN_LOCATION=${REPOSITORY}/${BRANCH} +BRANCH=${BRANCH:-master} +USE_TAG=false +CHANGELOG_REVISION= +UPLOAD_LOCATION= +RUNTESTS=false + +usage() { + echo "Usage: ${0##*/} [--changelog-rev ] [-t|--tag] [-u|--upload ] [--runtests] " + exit ${1:-0} +} die() { - echo $@ - echo "Usage: ${0##*/} [--anon] [-t|--tag] [-u|--upload ] " - exit 1 + printf 'error: %s\n' "$*" + usage 1 } -ARGS=$(getopt -o tu: --long anon,tag,upload: -n $(basename $0) -- "$@") +ARGS=$(getopt -o htu: --long help,changelog-rev:,runtests,tag,upload: \ + -n "${0##*/}" -- "$@") [ $? != 0 ] && die "initialization error" eval set -- "${ARGS}" while true; do - case "$1" in - --anon) - REPOSITORY=svn://anonsvn.gentoo.org/portage/main - SVN_LOCATION=${REPOSITORY}/${BRANCH} - shift + case $1 in + --changelog-rev) + CHANGELOG_REVISION=$2 + shift 2 ;; -t|--tag) - CREATE_TAG=true + USE_TAG=true shift ;; -u|--upload) - UPLOAD_LOCATION=${2} + UPLOAD_LOCATION=$2 shift 2 ;; + -h|--help) + usage + ;; + --runtests) + RUNTESTS=true + shift + ;; --) shift break @@ -42,49 +57,80 @@ while true; do esac done -[ -z "$1" ] && die "Need version argument" -[ -n "${1/[0-9]*}" ] && die "Invalid version argument" +[ $# != 1 ] && die "Need version argument" +[[ -n ${1/[0-9]*} ]] && die "Invalid version argument" -VERSION=${1} +VERSION=$1 RELEASE=portage-${VERSION} RELEASE_DIR=${RELEASE_BUILDDIR}/${RELEASE} RELEASE_TARBALL="${RELEASE_BUILDDIR}/${RELEASE}.tar.bz2" +TREE_ISH=${BRANCH} +if [[ ${USE_TAG} == "true" ]] ; then + TREE_ISH="v${VERSION}" +fi echo ">>> Cleaning working directories ${RELEASE_DIR} ${SOURCE_DIR}" rm -rf "${RELEASE_DIR}" "${SOURCE_DIR}" || die "directory cleanup failed" mkdir -p "${RELEASE_DIR}" || die "directory creation failed" +mkdir -p "${SOURCE_DIR}" || die "mkdir failed" -echo ">>> Starting Subversion export" -svn export "${SVN_LOCATION}" "${SOURCE_DIR}" > /dev/null || die "svn export failed" - -echo ">>> Creating Changelog" -svn2cl -o "${SOURCE_DIR}/ChangeLog" "${SVN_LOCATION}" || die "ChangeLog creation failed" +echo ">>> Starting GIT archive" +git archive --format=tar ${TREE_ISH} | \ + tar -xf - -C "${SOURCE_DIR}" || die "git archive failed" echo ">>> Building release tree" -cp -a "${SOURCE_DIR}/"{bin,cnf,doc,man,pym,src} "${RELEASE_DIR}/" || die "directory copy failed" -cp "${SOURCE_DIR}/"{ChangeLog,DEVELOPING,NEWS,RELEASE-NOTES,TEST-NOTES} \ +cp -a "${SOURCE_DIR}/"{bin,cnf,doc,man,misc,pym} "${RELEASE_DIR}/" || die "directory copy failed" +cp "${SOURCE_DIR}/"{DEVELOPING,LICENSE,Makefile,NEWS,README,RELEASE-NOTES,TEST-NOTES} \ "${RELEASE_DIR}/" || die "file copy failed" +if [[ ${RUNTESTS} == "true" ]] ; then + pushd "${SOURCE_DIR}" >/dev/null + ./runtests.sh --python-versions=supported || die "tests failed" + popd >/dev/null +fi + +rm -rf "${SOURCE_DIR}" || die "directory cleanup failed" + +echo ">>> Setting portage.VERSION" +sed -e "s/^VERSION=.*/VERSION=\"${VERSION}\"/" \ + -i "${RELEASE_DIR}/pym/portage/__init__.py" || \ + die "Failed to patch portage.VERSION" + +echo ">>> Creating Changelog" +git_log_opts="" +if [[ -n ${CHANGELOG_REVISION} ]] ; then + git_log_opts+=" ${CHANGELOG_REVISION}^..${TREE_ISH}" +else + git_log_opts+=" ${TREE_ISH}" +fi +skip_next=false +git log ${git_log_opts} | fmt -w 80 -p " " | while read -r ; do + if [[ ${skip_next} == "true" ]] ; then + skip_next=false + elif [[ ${REPLY} == " svn path="* ]] ; then + skip_next=true + else + echo "${REPLY}" + fi +done > "${RELEASE_DIR}/ChangeLog" || die "ChangeLog creation failed" + cd "${RELEASE_BUILDDIR}" echo ">>> Creating release tarball ${RELEASE_TARBALL}" -tar cfj "${RELEASE_TARBALL}" "${RELEASE}" || die "tarball creation failed" +tar --owner portage --group portage -cjf "${RELEASE_TARBALL}" "${RELEASE}" || \ + die "tarball creation failed" DISTDIR=$(portageq distdir) -if [ -n "${DISTDIR}" -a -d "${DISTDIR}" -a -w "${DISTDIR}" ]; then +if [[ -n ${DISTDIR} && -d ${DISTDIR} && -w ${DISTDIR} ]] ; then echo ">>> Copying release tarball into ${DISTDIR}" cp "${RELEASE_TARBALL}" "${DISTDIR}"/ || echo "!!! tarball copy failed" fi -if [ -n "${UPLOAD_LOCATION}" ]; then +if [[ -n ${UPLOAD_LOCATION} ]] ; then echo ">>> Uploading ${RELEASE_TARBALL} to ${UPLOAD_LOCATION}" scp "${RELEASE_TARBALL}" "dev.gentoo.org:${UPLOAD_LOCATION}" || die "upload failed" else - echo "${RELEASE_TARBALL} created" -fi - -if [ -n "${CREATE_TAG}" ]; then - echo ">>> Tagging ${VERSION} in repository" - svn cp ${SVN_LOCATION} ${REPOSITORY}/tags/${VERSION} || die "tagging failed" + du -h "${RELEASE_TARBALL}" fi +exit 0