Skip to content

Instantly share code, notes, and snippets.

@l04m33
Forked from anonymous/merge_helper.sh
Last active December 10, 2015 00:29
Show Gist options
  • Save l04m33/4351714 to your computer and use it in GitHub Desktop.
Save l04m33/4351714 to your computer and use it in GitHub Desktop.
#!/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