-
-
Save l04m33/4351714 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# get_src_url([url]) | |
get_src_url() | |
{ | |
local url=$1 | |
if [ "$url" == "" ]; then | |
local merged_path=`svn propget svn:mergeinfo | head -n 1 | cut -d':' -f1` | |
local root=`svn info | sed -n '/^Repository Root: / { s/Repository Root: //g; p; }'` | |
echo "$root$merged_path" | |
return 0 | |
fi | |
echo "$url" | |
return 0 | |
} | |
# get_src_unmerged_rev_list([url]) | |
get_src_unmerged_rev_list() | |
{ | |
local src_url=$(get_src_url "$1") | |
svn mergeinfo "$src_url" --show-revs eligible | tr -d 'r' | |
return 0 | |
} | |
# show_src_unmerged_log(url, rev_str) | |
show_src_unmerged_log() | |
{ | |
local src_url=$(get_src_url "$1") | |
local rev_str=$2 | |
if [ "$rev_str" == "" ]; then | |
echo "No changes." | less | |
else | |
svn log -v -c $rev_str $src_url | tee unmerged_revs.log | less | |
fi | |
return $? | |
} | |
# do_merge(url, rev_str) | |
do_merge() | |
{ | |
local src_url=$(get_src_url "$1") | |
local rev_str=$2 | |
if [ "$rev_str" == "" ]; then | |
echo "Nothing to merge." | |
else | |
svn merge -c $rev_str $src_url | |
fi | |
return $? | |
} | |
# do_sep_merge(url, rev_list) | |
do_sep_merge() | |
{ | |
local src_url=$(get_src_url "$1") | |
local rev_list=$2 | |
local rev | |
local m_answer | |
local rev_str="" | |
for rev in $rev_list; do | |
svn log -vc $rev "$src_url" | |
echo | |
echo -n "Merge rev. $rev? (y/N/break) " | |
read m_answer | |
echo | |
case "$m_answer" in | |
"y"|"Y") | |
rev_str="$rev,$rev_str" | |
;; | |
"b"|"B") | |
break | |
;; | |
*) | |
;; | |
esac | |
done | |
if [ "$rev_str" != "" ]; then | |
rev_str=${rev_str%,} | |
svn merge -c $rev_str "$src_url" | |
echo | |
echo "Done merging $rev_str." | |
echo | |
else | |
echo | |
echo "No revision(s) selected." | |
echo | |
fi | |
} | |
# ./merge_helper.sh [src url] | |
raw_unmerged=$(get_src_unmerged_rev_list "$1") | |
inc_raw_unmerged=`echo "$raw_unmerged" | sort -g` | |
dec_raw_unmerged=`echo "$raw_unmerged" | sort -g -r` | |
inc_unmerged=`echo $inc_raw_unmerged | sed 's/ /,/g'` | |
dec_unmerged=`echo $dec_raw_unmerged | sed 's/ /,/g'` | |
show_src_unmerged_log "$1" "$dec_unmerged" | |
echo | |
echo "$inc_unmerged" | |
echo | |
if [ "$inc_unmerged" != "" ]; then | |
echo -n "Merge all? (y/n/Abort) " | |
read merge_answer | |
echo | |
if [ "$merge_answer" == "y" -o "$merge_answer" == "Y" ]; then | |
do_merge "$1" "$inc_unmerged" | |
elif [ "$merge_answer" == "n" -o "$merge_answer" == "N" ]; then | |
do_sep_merge "$1" "$dec_raw_unmerged" | |
else | |
exit 0 | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment