#!/bin/bash # # Copyrev - copies a revision from the Wireshark trunk to the current # directory. # # Usage: backport-rev # # $Id$ # # Copyright 2013 Gerald Combs # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # if [ -z "$VISUAL" ] ; then VISUAL=$EDITOR fi #Check if pbcopy (or similar) is available... if [ `builtin type -p pbcopy` ] ; then PBCOPY="pbcopy" fi if [ `builtin type -p xsel` ] ; then PBCOPY="xsel --clipboard --input" fi if [ `builtin type -p putclip` ] ; then PBCOPY="putclip" fi if [ -z "$PBCOPY" ] ; then echo "Can't find an clipboard copy. Check if pbcopy, xsel or putclip is installed in your system" exit 1 fi function exit_err { if [ -n "$*" ] ; then echo "$*" fi echo -n $patchfile | $PBCOPY echo "Patch saved to $patchfile and copied to pasteboard" if [ -n "$VISUAL" ] ; then "$VISUAL" $patchfile $logfile else echo "Can't find an editor. You'll have to open $patchfile and $logfile yourself." fi exit 1 } subdir="" trunk="trunk" while getopts "at:" opt ; do case $opt in a) subdir="/asn1" ;; t) trunk="trunk-$OPTARG" ;; \?) echo "Unknown option -$OPTARG" ;; esac done shift $((OPTIND-1)) svninfo="`svn info | grep ^URL | cut -f2 -d' '`" if [ -z "$svninfo" ] ; then exit_err "Can't find repository information. Are you running this from a Wireshark SVN directory?" fi svnurl=`dirname $svninfo` svnurl="$svnurl/$trunk" #svnurl="$HOME/Development/wireshark" rev="$1" patchfile="/tmp/copyrev-$rev.patch" logfile="/tmp/copyrev-$rev.log" oldrev=$(( $rev - 1 )) echo "Working on r$rev ($oldrev)" echo -n "Attempting 'svn merge' dry run. " if [ -n "$subdir" ] ; then cd .$subdir fi svn diff --diff-cmd /usr/bin/diff -x "-w -b -U 5" -c $rev $svnurl$subdir \ > $patchfile || exit_err "Error" svn log -v -r $rev $svnurl | sed -e 's/^..*/ &/' > $logfile || exit 1 merge_ok="Giving up. You'll have to merge the patch yourself." svn merge --dry-run -c$rev $svnurl | grep '^Summary' \ > /dev/null 2>&1 || merge_ok="OK" if [ "$merge_ok" != "OK" ] ; then dry_run_cmd="patch --batch --ignore-whitespace --strip=0 --dry-run" echo "Failed. Trying 'patch' dry run:" echo " $dry_run_cmd < $patchfile" echo "" $dry_run_cmd < $patchfile echo "" exit_err "$merge_ok" fi echo "$merge_ok" echo "Attempting 'svn merge' live run:" svn merge -c$rev $svnurl if [ -n "$subdir" ] ; then cd .. fi echo Done with r$rev echo "Copy over revisions from the trunk:" echo "" uniq < $logfile rm -v $patchfile $logfile # # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: # c-basic-offset: 4 # tab-width: 8 # indent-tabs-mode: nil # End: # # vi: set shiftwidth=4 tabstop=8 expandtab: # :indentSize=4:tabSize=8:noTabs=true: #