Merge the projects/release-git branch to head.
This allows building 13.x from Git instead of Subversion. No MFC to stable branches is planned at this time. [1] Discussed with: git working group [1] Sponsored by: Rubicon Communications, LLC (netgate.com)
This commit is contained in:
commit
92fb4f8a61
@ -510,6 +510,15 @@ VCS_REVISION= $$(echo r${_VCS_REVISION})
|
||||
.export VCS_REVISION
|
||||
.endif
|
||||
|
||||
.if !defined(GIT_CMD) || empty(GIT_CMD)
|
||||
. for _P in /usr/bin /usr/local/bin
|
||||
. if exists(${_P}/git)
|
||||
GIT_CMD= ${_P}/git
|
||||
. endif
|
||||
. endfor
|
||||
.export GIT_CMD
|
||||
.endif
|
||||
|
||||
.if !defined(OSRELDATE)
|
||||
.if exists(/usr/include/osreldate.h)
|
||||
OSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
|
||||
|
@ -90,15 +90,6 @@ EXTRA_PACKAGES+= src.txz
|
||||
.endif
|
||||
.if !defined(NODOC)
|
||||
EXTRA_PACKAGES+= reldoc
|
||||
. if !defined(SVN) || empty(SVN)
|
||||
. for S in svn svnlite
|
||||
. for D in /usr/local/bin /usr/bin
|
||||
. if(exists(${D}/${S}))
|
||||
SVN?= ${D}/${S}
|
||||
. endif
|
||||
. endfor
|
||||
. endfor
|
||||
. endif
|
||||
.endif
|
||||
|
||||
RELEASE_TARGETS= ftp
|
||||
@ -173,7 +164,6 @@ ports.txz:
|
||||
reldoc:
|
||||
cd ${DOCDIR}/en_US.ISO8859-1/htdocs/releases/${REVISION}R && \
|
||||
env MAN4DIR=${WORLDDIR}/share/man/man4 \
|
||||
SVN=${SVN} \
|
||||
_BRANCH=${BRANCH} \
|
||||
${MAKE} all install clean "FORMATS=html txt" \
|
||||
INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc \
|
||||
@ -336,4 +326,5 @@ release-install:
|
||||
cd ${DESTDIR} && sha512 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512
|
||||
cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256
|
||||
|
||||
.include "${.CURDIR}/Makefile.inc1"
|
||||
.include "${.CURDIR}/Makefile.vm"
|
||||
|
@ -17,7 +17,7 @@ AZURE${VAR}!= grep -E ^AZURE${VAR} ${AZURE_UPLOAD_CONF} | awk -F' ' '{print $$2}
|
||||
.endif
|
||||
|
||||
.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
|
||||
SNAPSHOT_DATE!= date +-%Y-%m-%d
|
||||
SNAPSHOT_DATE!= date +-${BUILDDATE}
|
||||
.endif
|
||||
|
||||
AZURE_TARGET:= ${OSRELEASE}${SNAPSHOT_DATE}.vhd
|
||||
|
@ -5,32 +5,8 @@
|
||||
# Makefile for creating an EC2 AMI from a disk image.
|
||||
#
|
||||
|
||||
# Figure out where SVN is
|
||||
.if !defined(SVN_CMD) || empty(SVN_CMD)
|
||||
. for _P in /usr/bin /usr/local/bin
|
||||
. for _S in svn svnlite
|
||||
. if exists(${_P}/${_S})
|
||||
SVN_CMD= ${_P}/${_S}
|
||||
. endif
|
||||
. endfor
|
||||
. endfor
|
||||
.endif
|
||||
.if exists(${SRCTOP}/.svn)
|
||||
. if empty(EC2_SVNBRANCH)
|
||||
EC2_SVNBRANCH!= ${SVN_CMD} info --show-item relative-url ${WORLDDIR} 2>/dev/null | sed -e 's/\^\///'
|
||||
. export EC2_SVNBRANCH
|
||||
. endif
|
||||
. if empty(EC2_SVNREV)
|
||||
EC2_SVNREV!= ${SVN_CMD} info --show-item last-changed-revision ${WORLDDIR} 2>/dev/null || true
|
||||
. export EC2_SVNREV
|
||||
. endif
|
||||
.else
|
||||
EC2_SVNBRANCH= unknown
|
||||
EC2_SVNREV= unknown
|
||||
.endif
|
||||
|
||||
.if ${BRANCH} == "CURRENT" || ${BRANCH} == "STABLE" || ${BRANCH} == "PRERELEASE"
|
||||
AMINAMESUFFIX!= date +-%Y-%m-%d
|
||||
AMINAMESUFFIX!= date +-${BUILDDATE}
|
||||
.endif
|
||||
.if defined(EC2PUBLIC) && !empty(EC2PUBLIC)
|
||||
PUBLISH= --public
|
||||
@ -40,7 +16,7 @@ PUBLICSNAP= --publicsnap
|
||||
.endif
|
||||
.if defined(EC2SNSTOPIC) && !empty(EC2SNSTOPIC)
|
||||
EC2SNSREL= ${REVISION}-${BRANCH}
|
||||
EC2SNSVERS= ${EC2_SVNBRANCH}@${EC2_SVNREV}
|
||||
EC2SNSVERS= ${GITBRANCH}@${GITREV}
|
||||
.endif
|
||||
.if ${TARGET_ARCH} != "amd64"
|
||||
EC2ARCH= --${TARGET_ARCH:S/aarch64/arm64/}
|
||||
@ -89,7 +65,7 @@ ec2ami: cw-ec2 ${CW_EC2_PORTINSTALL}
|
||||
${EC2ARCH} --sriov --ena \
|
||||
${.OBJDIR}/ec2.raw \
|
||||
"${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX}" \
|
||||
"${TYPE}/${TARGET} ${EC2_SVNBRANCH}@${EC2_SVNREV}" \
|
||||
"${TYPE}/${TARGET} ${GITBRANCH}@${GITREV}" \
|
||||
${AWSREGION} ${AWSBUCKET} ${AWSKEYFILE} \
|
||||
${EC2SNSTOPIC} ${EC2SNSREL} ${EC2SNSVERS}
|
||||
@touch ${.TARGET}
|
||||
|
@ -24,8 +24,7 @@ GCE_FAMILY= ${TYPE:tl}-${REVISION:S,.,-,}
|
||||
.endif
|
||||
|
||||
.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
|
||||
_SNAPSHOT_DATE!= date +%Y%m%d
|
||||
SNAPSHOT_DATE= -v${_SNAPSHOT_DATE}
|
||||
SNAPSHOT_DATE= -v${BUILDDATE}
|
||||
GCE_FAMILY_SUFX= -snap
|
||||
.endif
|
||||
|
||||
|
31
release/Makefile.inc1
Normal file
31
release/Makefile.inc1
Normal file
@ -0,0 +1,31 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# Figure out where the git binary is.
|
||||
.for _P in /usr/bin /usr/local/bin
|
||||
. if !defined(GIT_CMD) || empty(GIT_CMD)
|
||||
. if exists(${_P}/git)
|
||||
GIT_CMD= ${_P}/git
|
||||
. endif
|
||||
. endif
|
||||
.endfor
|
||||
.if !defined(GIT_CMD) && empty(GIT_CMD)
|
||||
. error "Git binary not found. Set GIT_CMD appropriately."
|
||||
.endif
|
||||
|
||||
# Set the git branch and hash to export where needed.
|
||||
.if !defined(GITBRANCH) || empty(GITBRANCH)
|
||||
GITBRANCH!= ${GIT_CMD} -C ${.CURDIR} rev-parse --abbrev-ref HEAD 2>/dev/null | sed -e 's/\^\///'
|
||||
.export GITBRANCH
|
||||
.endif
|
||||
.if !defined(GITREV) || empty(GITREV)
|
||||
GITREV!= ${GIT_CMD} -C ${.CURDIR} rev-parse --verify --short HEAD 2>/dev/null || true
|
||||
.export GITREV
|
||||
.endif
|
||||
|
||||
# Set the build date, primarily for snapshot builds.
|
||||
.if !defined(BUILDDATE) || empty(BUILDDATE)
|
||||
BUILDDATE!= date +%Y%m%d
|
||||
.export BUILDDATE
|
||||
.endif
|
@ -19,7 +19,6 @@ FTPDIR?= ${RELEASEDIR}/ftp-stage
|
||||
.if exists(${RELEASEDIR})
|
||||
STAGE_TARGETS?= iso-images-stage
|
||||
.endif
|
||||
SRCBRANCH!= ${SVN_CMD} info --show-item relative-url ${WORLDDIR}
|
||||
|
||||
.if (defined(EMBEDDED_TARGET) && !empty(EMBEDDED_TARGET)) || (defined(EMBEDDEDBUILD) && !empty(EMBEDDEDBUILD))
|
||||
. if ${TARGET:Marm*} != "" || ${EMBEDDED_TARGET:Marm*} != ""
|
||||
@ -31,26 +30,10 @@ EMBEDDED= 1
|
||||
.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE" || ${BRANCH:MALPHA*} != ""
|
||||
SNAPSHOT= 1
|
||||
TLD?= ${FTPDIR}/snapshots
|
||||
. if !defined(SVNREVISION) || empty(SVNREVISION)
|
||||
. for _D in /usr/bin /usr/local/bin
|
||||
. for _S in svnversion svnliteversion
|
||||
. if exists(${_D}/${_S})
|
||||
SVNVERSION?= ${_D}/${_S}
|
||||
. endif
|
||||
. endfor
|
||||
. endfor
|
||||
. if exists(${SVNVERSION}) && !empty(SVNVERSION)
|
||||
SVNREVISION!= ${SVNVERSION} ${WORLDDIR}/Makefile
|
||||
. endif
|
||||
. endif # !defined(SVNREVISION)
|
||||
. if !defined(BUILDDATE) || empty(BUILDDATE)
|
||||
. if exists(${.CURDIR}/${.OBJDIR}/dist/base/bin/sh)
|
||||
BUILDDATE!= cd ${.CURDIR} && date -j -f '%s' $$(stat -f "%c" ${.OBJDIR}/dist/base/bin/sh) +%Y%m%d
|
||||
. else
|
||||
.if !defined(BUILDDATE) || empty(BUILDDATE)
|
||||
BUILDDATE!= date +%Y%m%d
|
||||
. endif
|
||||
. endif
|
||||
_SNAP_SUFFIX:= ${BUILDDATE}-r${SVNREVISION}
|
||||
.endif
|
||||
_SNAP_SUFFIX:= ${BUILDDATE}-${GITREV}
|
||||
.else
|
||||
# release
|
||||
SNAPSHOT=
|
||||
@ -187,8 +170,8 @@ iso-images-stage:
|
||||
mkdir -p ${FTP_DIR}
|
||||
cp -p ${RELEASEDIR}/ftp/*.txz ${RELEASEDIR}/ftp/MANIFEST ${FTP_DIR}
|
||||
echo ${BUILDDATE} > ${FTP_DIR}/BUILDDATE
|
||||
echo ${SRCBRANCH} > ${FTP_DIR}/SRCBRANCH
|
||||
echo r${SVNREVISION} > ${FTP_DIR}/REVISION
|
||||
echo ${GITBRANCH} > ${FTP_DIR}/GITBRANCH
|
||||
echo ${GITREV} > ${FTP_DIR}/REVISION
|
||||
cd ${TLD}/${TARGET} && \
|
||||
ln -s ${TARGET_ARCH}/${REVISION}-${BRANCH} \
|
||||
${REVISION}-${BRANCH}
|
||||
|
@ -29,7 +29,7 @@ ATLAS${VAR}:= ${VAGRANT${VAR}}
|
||||
.endif
|
||||
|
||||
.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
|
||||
SNAPSHOT_DATE!= date +-%Y%m%d
|
||||
SNAPSHOT_DATE!= date +-${BUILDDATE}
|
||||
.endif
|
||||
|
||||
VAGRANT_VERSION!= date +%Y.%m.%d
|
||||
|
@ -12,23 +12,19 @@
|
||||
## Set the directory within which the release will be built.
|
||||
CHROOTDIR="/scratch"
|
||||
|
||||
## Set the svn host.
|
||||
SVNROOT="svn://svn.FreeBSD.org/"
|
||||
## Set the version control system host.
|
||||
GITROOT="https://cgit-beta.freebsd.org/"
|
||||
GITSRC="src.git"
|
||||
GITPORTS="ports.git"
|
||||
GITDOC="doc.git"
|
||||
|
||||
## Set the src/, ports/, and doc/ branches or tags.
|
||||
SRCBRANCH="base/head@rHEAD"
|
||||
DOCBRANCH="doc/head@rHEAD"
|
||||
PORTBRANCH="ports/head@rHEAD"
|
||||
SRCBRANCH="main"
|
||||
DOCBRANCH="main"
|
||||
PORTBRANCH="main"
|
||||
|
||||
## Run svn co --force for src checkout.
|
||||
#SRC_FORCE_CHECKOUT=yes
|
||||
|
||||
## Sample configuration for using git instead of svn.
|
||||
#VCSCMD="/usr/local/bin/git clone --branch master"
|
||||
#SVNROOT=""
|
||||
#SRCBRANCH="https://github.com/freebsd/freebsd"
|
||||
#DOCBRANCH="https://github.com/freebsd/freebsd-doc"
|
||||
#PORTBRANCH="https://github.com/freebsd/freebsd-ports"
|
||||
## Sample configuration for using git from ports.
|
||||
#GITCMD="/usr/local/bin/git clone -q --branch main"
|
||||
|
||||
## Set to override the default target architecture.
|
||||
#TARGET="amd64"
|
||||
|
@ -1,6 +1,7 @@
|
||||
#!/bin/sh
|
||||
#-
|
||||
# Copyright (c) 2013-2018 The FreeBSD Foundation
|
||||
# Copyright (c) 2020 Rubicon Communications, LLC (netgate.com)
|
||||
# Copyright (c) 2013-2019 The FreeBSD Foundation
|
||||
# Copyright (c) 2013 Glen Barber
|
||||
# Copyright (c) 2011 Nathan Whitehorn
|
||||
# All rights reserved.
|
||||
@ -38,7 +39,7 @@
|
||||
|
||||
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
|
||||
|
||||
VERSION=2
|
||||
VERSION=3
|
||||
|
||||
# Prototypes that can be redefined per-chroot or per-target.
|
||||
load_chroot_env() { }
|
||||
@ -51,7 +52,7 @@ usage() {
|
||||
}
|
||||
|
||||
# env_setup(): Set up the default build environment variables, such as the
|
||||
# CHROOTDIR, VCSCMD, SVNROOT, etc. This is called before the release.conf
|
||||
# CHROOTDIR, VCSCMD, GITROOT, etc. This is called before the release.conf
|
||||
# file is sourced, if '-c <release.conf>' is specified.
|
||||
env_setup() {
|
||||
# The directory within which the release will be built.
|
||||
@ -60,27 +61,29 @@ env_setup() {
|
||||
|
||||
# The default version control system command to obtain the sources.
|
||||
for _dir in /usr/bin /usr/local/bin; do
|
||||
for _svn in svn svnlite; do
|
||||
[ -x "${_dir}/${_svn}" ] && VCSCMD="${_dir}/${_svn}"
|
||||
[ ! -z "${VCSCMD}" ] && break 2
|
||||
done
|
||||
[ -x "${_dir}/git" ] && VCSCMD="/${_dir}/git"
|
||||
[ ! -z "${VCSCMD}" ] && break 2
|
||||
done
|
||||
VCSCMD="${VCSCMD} checkout"
|
||||
|
||||
# The default svn checkout server, and svn branches for src/, doc/,
|
||||
if [ -z "${VCSCMD}" ]; then
|
||||
echo "*** The devel/git port/package is required."
|
||||
exit 1
|
||||
fi
|
||||
VCSCMD="/usr/local/bin/git clone -q"
|
||||
|
||||
# The default git checkout server, and branches for src/, doc/,
|
||||
# and ports/.
|
||||
SVNROOT="svn://svn.FreeBSD.org/"
|
||||
SRCBRANCH="base/head@rHEAD"
|
||||
DOCBRANCH="doc/head@rHEAD"
|
||||
PORTBRANCH="ports/head@rHEAD"
|
||||
GITROOT="https://cgit-beta.FreeBSD.org/"
|
||||
SRCBRANCH="main"
|
||||
DOCBRANCH="main"
|
||||
PORTBRANCH="main"
|
||||
GITSRC="src.git"
|
||||
GITPORTS="ports.git"
|
||||
GITDOC="doc.git"
|
||||
|
||||
# Set for embedded device builds.
|
||||
EMBEDDEDBUILD=
|
||||
|
||||
# Sometimes one needs to checkout src with --force svn option.
|
||||
# If custom kernel configs copied to src tree before checkout, e.g.
|
||||
SRC_FORCE_CHECKOUT=
|
||||
|
||||
# The default make.conf and src.conf to use. Set to /dev/null
|
||||
# by default to avoid polluting the chroot(8) environment with
|
||||
# non-default settings.
|
||||
@ -128,20 +131,11 @@ env_setup() {
|
||||
# in env_setup() if '-c <release.conf>' is specified.
|
||||
env_check() {
|
||||
chroot_build_release_cmd="chroot_build_release"
|
||||
# Fix for backwards-compatibility with release.conf that does not have
|
||||
# the trailing '/'.
|
||||
case ${SVNROOT} in
|
||||
*svn*)
|
||||
SVNROOT="${SVNROOT}/"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Prefix the branches with the SVNROOT for the full checkout URL.
|
||||
SRCBRANCH="${SVNROOT}${SRCBRANCH}"
|
||||
DOCBRANCH="${SVNROOT}${DOCBRANCH}"
|
||||
PORTBRANCH="${SVNROOT}${PORTBRANCH}"
|
||||
# Prefix the branches with the GITROOT for the full checkout URL.
|
||||
SRC="${GITROOT}${GITSRC}"
|
||||
DOC="${GITROOT}${GITDOC}"
|
||||
PORT="${GITROOT}${GITPORTS}"
|
||||
|
||||
if [ -n "${EMBEDDEDBUILD}" ]; then
|
||||
WITH_DVD=
|
||||
@ -187,11 +181,6 @@ env_check() {
|
||||
else
|
||||
ARCH_FLAGS=
|
||||
fi
|
||||
# Force src checkout if configured
|
||||
FORCE_SRC_KEY=
|
||||
if [ -n "${SRC_FORCE_CHECKOUT}" ]; then
|
||||
FORCE_SRC_KEY="--force"
|
||||
fi
|
||||
|
||||
if [ -z "${CHROOTDIR}" ]; then
|
||||
echo "Please set CHROOTDIR."
|
||||
@ -231,13 +220,13 @@ chroot_setup() {
|
||||
mkdir -p ${CHROOTDIR}/usr
|
||||
|
||||
if [ -z "${SRC_UPDATE_SKIP}" ]; then
|
||||
${VCSCMD} ${FORCE_SRC_KEY} ${SRCBRANCH} ${CHROOTDIR}/usr/src
|
||||
${VCSCMD} ${SRC} -b ${SRCBRANCH} ${CHROOTDIR}/usr/src
|
||||
fi
|
||||
if [ -z "${NODOC}" ] && [ -z "${DOC_UPDATE_SKIP}" ]; then
|
||||
${VCSCMD} ${DOCBRANCH} ${CHROOTDIR}/usr/doc
|
||||
${VCSCMD} ${DOC} -b ${DOCBRANCH} ${CHROOTDIR}/usr/doc
|
||||
fi
|
||||
if [ -z "${NOPORTS}" ] && [ -z "${PORTS_UPDATE_SKIP}" ]; then
|
||||
${VCSCMD} ${PORTBRANCH} ${CHROOTDIR}/usr/ports
|
||||
${VCSCMD} ${PORT} -b ${PORTBRANCH} ${CHROOTDIR}/usr/ports
|
||||
fi
|
||||
|
||||
if [ -z "${CHROOTBUILD_SKIP}" ]; then
|
||||
@ -274,6 +263,26 @@ extra_chroot_setup() {
|
||||
cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF}
|
||||
fi
|
||||
|
||||
# Install git from ports or packages if the ports tree is
|
||||
# available and VCSCMD is unset.
|
||||
_gitcmd="$(which git)"
|
||||
if [ -d ${CHROOTDIR}/usr/ports -a -z "${_gitcmd}" ]; then
|
||||
# Trick the ports 'run-autotools-fixup' target to do the right
|
||||
# thing.
|
||||
_OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U)
|
||||
REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION)
|
||||
BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH)
|
||||
UNAME_r=${REVISION}-${BRANCH}
|
||||
GITUNSETOPTS="CONTRIB CURL CVS GITWEB GUI HTMLDOCS"
|
||||
GITUNSETOPTS="${GITUNSETOPTS} ICONV NLS P4 PERL"
|
||||
GITUNSETOPTS="${GITUNSETOPTS} SEND_EMAIL SUBTREE SVN"
|
||||
GITUNSETOPTS="${GITUNSETOPTS} PCRE PCRE2"
|
||||
eval chroot ${CHROOTDIR} env OPTIONS_UNSET=\"${GITUNSETOPTS}\" \
|
||||
make -C /usr/ports/devel/git FORCE_PKG_REGISTER=1 \
|
||||
WRKDIRPREFIX=/tmp/ports \
|
||||
DISTDIR=/tmp/distfiles \
|
||||
install clean distclean
|
||||
fi
|
||||
if [ -d ${CHROOTDIR}/usr/ports ]; then
|
||||
# Trick the ports 'run-autotools-fixup' target to do the right
|
||||
# thing.
|
||||
|
@ -1,133 +0,0 @@
|
||||
#!/bin/sh
|
||||
#-
|
||||
# Copyright (c) 2014 The FreeBSD Foundation
|
||||
# All rights reserved.
|
||||
#
|
||||
# This software were developed by Glen Barber
|
||||
# under sponsorship from the FreeBSD Foundation.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
set -C
|
||||
|
||||
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
|
||||
export PATH
|
||||
|
||||
usage() {
|
||||
echo "Usage:"
|
||||
echo -n "$(basename ${0}) [-rNNNNNN]"
|
||||
echo " [-l /path/for/output] /path/to/branch"
|
||||
echo " -r: The oldest commit to include in the search"
|
||||
echo ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
main() {
|
||||
while getopts "l:r:" arg ; do
|
||||
case ${arg} in
|
||||
l)
|
||||
# Disallow '-rNNNNNN' argument for oldest
|
||||
# revision # from becoming the log file
|
||||
# accidentally.
|
||||
where="${OPTARG##-r*}"
|
||||
[ -z "${where}" ] && usage
|
||||
if [ -e "${where}" ]; then
|
||||
echo "Log file already exists:"
|
||||
echo " (${where})"
|
||||
return 2
|
||||
fi
|
||||
;;
|
||||
r)
|
||||
rev="${OPTARG##-r}"
|
||||
c=$(echo -n ${rev} | tr -d '0-9' | wc -c)
|
||||
if [ ${c} -ne 0 ]; then
|
||||
echo "Revision number must be numeric."
|
||||
return 2
|
||||
fi
|
||||
# Since the last specified revision is
|
||||
# specified, mangle the variable to
|
||||
# make svn syntax happy.
|
||||
rev="-r${rev}:rHEAD"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $(( ${OPTIND} - 1 ))
|
||||
|
||||
# This assumes a local working copy, which svn search
|
||||
# allows exactly one repository path (although the root
|
||||
# can still be the path).
|
||||
[ "$#" -ne 1 ] && usage
|
||||
|
||||
# If no log file, write to stdout.
|
||||
[ -z "${where}" ] && where=/dev/stdout
|
||||
|
||||
svn=
|
||||
# Where is svn?
|
||||
for s in /usr/bin /usr/local/bin; do
|
||||
if [ -x ${s}/svn ]; then
|
||||
svn=${s}/svn
|
||||
break
|
||||
fi
|
||||
if [ -x ${s}/svnlite ]; then
|
||||
svn=${s}/svnlite
|
||||
break
|
||||
fi
|
||||
done
|
||||
# Did we find svn?
|
||||
if [ -z "${svn}" ]; then
|
||||
echo "svn(1) binary not found."
|
||||
return 2
|
||||
fi
|
||||
# Is more than one path specified? (This should never
|
||||
# be triggered, because the argument count is checked
|
||||
# above, but better safe than sorry.)
|
||||
if [ $# -gt 1 ]; then
|
||||
echo "Cannot specify more than one working path."
|
||||
return 2
|
||||
fi
|
||||
# Does the directory exist?
|
||||
if [ ! -d "${1}" ]; then
|
||||
echo "Specified path (${1}) is not a directory."
|
||||
return 2
|
||||
fi
|
||||
# Is it a subversion repository checkout?
|
||||
${svn} info ${1} >/dev/null 2>&1
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Cannot determine svn repository information for ${1}"
|
||||
return 2
|
||||
fi
|
||||
|
||||
# All tests passed. Let's see what can possibly go wrong
|
||||
# from here. The search string specified should match this
|
||||
# in PCRE speak: ':[\t ]*'
|
||||
${svn} log ${rev} --search 'Relnotes:*[A-Za-z0-9]*' ${1} > ${where}
|
||||
return $?
|
||||
}
|
||||
|
||||
main "${@}"
|
||||
exit $?
|
Loading…
Reference in New Issue
Block a user