Date: Mon, 30 Mar 2015 21:13:13 +0000 (UTC) From: Rodrigo Osorio <rodrigo@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r382731 - head/Tools/scripts Message-ID: <201503302113.t2ULDD85022774@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rodrigo Date: Mon Mar 30 21:13:12 2015 New Revision: 382731 URL: https://svnweb.freebsd.org/changeset/ports/382731 QAT: https://qat.redports.org/buildarchive/r382731/ Log: Add getpatch.sh, a shell script only tool to download patch attachments on bug tracking systems Added: head/Tools/scripts/README.getpatch.sh (contents, props changed) head/Tools/scripts/getpatch.sh (contents, props changed) Modified: head/Tools/scripts/README Modified: head/Tools/scripts/README ============================================================================== --- head/Tools/scripts/README Mon Mar 30 21:05:05 2015 (r382730) +++ head/Tools/scripts/README Mon Mar 30 21:13:12 2015 (r382731) @@ -31,6 +31,7 @@ distclean - compare md5 sums of distfile explicit_lib_depends.sh - shows the current explicit dependency list of libs for a given installed port getpatch - downloads patch attachments from a Bug Tracking Systems +getpatch.sh - downloads patch attachments from a Bug Tracking Systems (plain shell script) getpr - downloads a problem report from GNATS and attempts to extract the patch, shar, uuencoded file from it. this probably needs to be checked for potential security problems. Added: head/Tools/scripts/README.getpatch.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/Tools/scripts/README.getpatch.sh Mon Mar 30 21:13:12 2015 (r382731) @@ -0,0 +1,37 @@ +getpatch.sh is a shell script to help me dealing +with bugzilla attachements. + +Usage: getpatch [-dp] <num> <num> ... + -d : download deprecate patches too + -p : store the patches in the current dir, instead of the dedicated directory +use the GETPATCH_DIR variable to define the root location for the downloaded patches + +Exemple1: simple usage +% getpatch 197844 +Bug ID: 197844 + + attachment 153202-fcgi.diff is obsolete, skip + + attachment 153215-fcgi.diff download success + >> Patches stored in /tmp/197844 + +Exemple2: download deprecated too +getpatch -d 197844 +Bug ID: 197844 + + attachment 153202-fcgi.diff download success + + attachment 153215-fcgi.diff download success + >> Patches stored in /tmp/197844 + +Exemple3: don't create a dedicate directory +% getpatch -p 197844 +Bug ID: 197844 + + attachment 153202-fcgi.diff is obsolete, skip + + attachment 153215-fcgi.diff download success + >> Patches stored in /tmp + +Exemple4: use GETPATCH_DIR +% setenv GETPATCH_DIR ~/patch-store/ +% getpatch 197844 +Bug ID: 197844 + + attachment 153202-fcgi.diff is obsolete, skip + + attachment 153215-fcgi.diff download success + >> Patches stored in /usr/home/rodrigo/patch-store/197844 + Added: head/Tools/scripts/getpatch.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/Tools/scripts/getpatch.sh Mon Mar 30 21:13:12 2015 (r382731) @@ -0,0 +1,182 @@ +#!/bin/sh + +# Copyright (c) 2015 Rodrigo Osorio +# All rights reserved. +# +# 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$ +# +# MAINTAINER= rodrigo@FreeBSD.org +# + +XML_URL='https://bugs.freebsd.org/bugzilla/show_bug.cgi?ctype=xml&id=' +GET_URL='https://bz-attachments.freebsd.org/attachment.cgi?id=' + +TEMP_DIR= +PR_DIR= +deprecate=0 +build_path=1 +verbose=0 + +usage() { + echo "usage: getpatch [-dp] tknum tknum ..." + echo " -d : download deprecate patches too" + echo " -p : store the patches in the current dir, instead of the dedicated bug id directory" + echo "use the GETPATCH_DIR variable to define the root location for the downloaded patches" + echo + exit 1 +} + +die() { + echo $@ + erase_env + exit 1 +} + +build_env() { + if [ -z ${TEMP_DIR} ]; then + TEMP_DIR=`mktemp -d -t 'getpatch'` + fi +} + +erase_env() { + if [ -n ${TEMP_DIR} ]; then + rm -rf ${TEMP_DIR} >/dev/null 2>&1 + fi +} + +getpatch() { + echo -n " + attachment ${2}-${3} " + if [ $deprecate -eq 1 ] || [ "$1" != "1" ]; then + if [ ! -f "${PR_DIR}${2}-${3}" ]; then + echo -n "download " + fetch --no-verify-peer -o "${PR_DIR}${2}-${3}" "${GET_URL}${2}" > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "error" + die "Unable to download ${GET_URL}${2}" + fi + echo "success" + else + echo "is present, skip" + fi + else + echo "is obsolete, skip" + fi +} + +parse_and_fetch(){ + + for patchline in `awk ' + /<\/attachment>/ { IN_ATTACH=0; + printf "%d>%s>%s\n",obsolete, patchid, patchname ; + } + /isobsolete/ || /ispatch/ && IN_ATTACH == 1 { + gsub(/^[ \t]+|[ \t]+$|"/, ""); + split($0,val,"="); + if(val[1] == "isobsolete") + obsolete = val[2]; + } + ( /<filename>/ || /<attachid>/ ) && IN_ATTACH == 1 { + gsub(/^[ \t]+|[ \t]+$/, ""); + gsub(/[<]/, ">"); + split($0,val,">"); + if(val[2] == "filename") + patchname=val[3]; + else if(val[2] == "attachid") + patchid=val[3]; + } + /<attachment/ { IN_ATTACH=1; + obsolete = 0; + patchid = ""; + patchname = ""; + } + ' $1 ` ; do + getpatch `echo $patchline | tr ">" " "` + done +} + +get_list_of_patches() { + ## Get xml file + PR_ID=$1 + echo "Bug ID: $1" + build_env + fetch --no-verify-peer -o "${TEMP_DIR}/my${1}.xml" "${XML_URL}${1}" > /dev/null 2>&1 + if [ $? -ne 0 ]; then + die "Can't upload ${XML_URL}${1}" + fi + ## Search for error + error_msg=`grep "bug error=" "${TEMP_DIR}/my${1}.xml"` + if [ -n "${error_msg}" ]; then + echo " !! Can't recover the bug attachements : " "`echo "${error_msg}" | cut -d '"' -f 2` !!" + return 1 + fi + + PR_DIR=${GETPATCH_DIR%%/} + if [ ${build_path} == 1 ]; then + PR_DIR=${PR_DIR}/${PR_ID}/ + fi + + if [ ! -d ${PR_DIR} ]; then + mkdir -p ${PR_DIR} + if [ $? != 0 ]; then + die "Can't create ${PR_DIR} directory" + fi + fi + + parse_and_fetch "${TEMP_DIR}/my${1}.xml" + echo -n " >> Patches stored in " + realpath ${PR_DIR} + +} + +trap "die 'Interruption caught, exit'" 2 3 6 9 14 15 + +if [ -z ${GETPATCH_DIR} ]; then + GETPATCH_DIR='.' +fi + + + +while getopts ":pd" arg; do + case "$arg" in + d ) deprecate=1 ;; + p ) build_path=0 ;; + * ) usage ;; + esac + shift +done + +if [ "$#" -eq 0 ]; then + usage + exit 1 +fi + +for arg in "$@"; do + if [ -z "`echo "${arg}" | sed 's/[0-9]//g'`" ]; then + get_list_of_patches ${arg} + else + echo "Error: ${arg} isn't a valid PR number" + exit 1 + fi +done +erase_env
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503302113.t2ULDD85022774>