#!/bin/bash set -euo pipefail IFS=$'\n\t' addHeader=false function usage { echo -e "Usage: $(basename $0) [OPTIONS] COMMIT" echo -e " Generate patch from COMMIT." echo -e " COMMIT is either:" echo -e " * a number of commit" echo -e " * a revision starting with r" echo -e "" echo -e "Available options:" echo -e " -h: add commit msg to the beginning of the patches" } while getopts ":h" opt; do case $opt in h) echo "Printing headers" addHeader=true ;; \?) echo "Invalid option: -$OPTARG" >&2 usage exit 1 ;; esac done shift $(( OPTIND - 1 )) if [ $# != 1 ]; then usage exit 1 fi revision=0 if [[ $1 == r* ]];then revisions=$(svn log -rHEAD:${1#r} | grep -e "^r[0-9]" | cut -f1 -d" " | cut -c2-) else nb_rev=$1 nb_rev=$((nb_rev+1)) revisions=$(svn log -l $nb_rev | grep -e "^r[0-9]" | cut -f1 -d" " | cut -c2-) fi i=0 prev=0 first=0 for rev in $revisions; do if [ $prev == 0 ]; then first=${rev} prev=${rev} continue fi commit_msg=$(svn log -r${prev}| sed '4q;d') commit_msg=${commit_msg// /_} commit_msg=${commit_msg//\//_} file_name=$(printf "%04d_r%d_%s.patch" ${i} ${prev} ${commit_msg}) i=$((i+1)) echo "Create path ${file_name}" if $addHeader; then svn log -r${prev} > $file_name svn diff -r${rev}:${prev} >> $file_name else svn diff -r${rev}:${prev} > $file_name fi prev=${rev} done root=$(svn info | grep "Relative URL" | cut -d"^" -f2) files=$(svn log -r${rev}:${first} --verbose | grep " [AM] " | awk '{print $2}' | sort -u | sed "s#${root}##" |sed "s#^/##" | sed '/^$/d') echo $files > modified_files