From 2b7aa883aff6419e934d79652b4801e6e77a8eeb Mon Sep 17 00:00:00 2001 From: gjb Date: Mon, 5 May 2014 23:01:01 +0000 Subject: Add a helper script for parsing 'svn log' for the 'Relnotes:' tag in case 'yes' is not explicitly the first string value following the tab. As it turns out, a number of commits have bypassed my filters (both email and 'svn log --search'), and this script returns the results I want when doing these searches. Sponsored by: The FreeBSD Foundation --- release/scripts/relnotes-search.sh | 133 +++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100755 release/scripts/relnotes-search.sh (limited to 'release') diff --git a/release/scripts/relnotes-search.sh b/release/scripts/relnotes-search.sh new file mode 100755 index 0000000..42d67fc --- /dev/null +++ b/release/scripts/relnotes-search.sh @@ -0,0 +1,133 @@ +#!/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})" + exit 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." + exit 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." + exit 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." + exit 2 + fi + # Does the directory exist? + if [ ! -d "${1}" ]; then + echo "Specified path (${1}) is not a directory." + exit 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}" + exit 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:?[^ ]*' ${1} > ${where} + return $? +} + +main "${@}" +exit $? -- cgit v1.1