Created
November 1, 2012 17:05
-
-
Save mcrispino/3995062 to your computer and use it in GitHub Desktop.
Script to merge the changes from a SVN repository into another
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 | |
# | |
# Merges the changes from a SVN repository into another. | |
# | |
# Useful when you have two branches or versions of the same project, | |
# and need to bring changes from one into the other. | |
# | |
# Usage: | |
# 1. > merge.sh <src_dir> <dest_dir> | |
# 2. > merve.sh <src_dir> <dest_dir> <revision_number> | |
# | |
# In the first case, it runs a 'svn status' command in the source directory | |
# to find the modified files | |
# | |
# In the second case, it runs a 'svn diff -r rev:HEAD' to find the modified files | |
# | |
# Note: tested on Mac OS X 10.7, with Xcode 4.5 | |
# | |
function pathForName { | |
if [ "$1" = "proj1" ]; then dir="$HOME/Documents/Projects/Project1/"; | |
elif [ "$1" = "proj2" ]; then dir="$HOME/Documents/Projects/Project2/"; | |
elif [ "$1" = "proj3" ]; then dir="$HOME/Documents/Projects/Project3/"; | |
elif [ "$1" = "proj4" ]; then dir="$HOME/Documents/Projects/Project4/"; | |
fi | |
} | |
function doMerge { | |
if [ "$stat" = "" ]; then | |
stat=$1; | |
else | |
f=${1#$SRC} | |
if [ "$stat" = "A" ]; then | |
ask "Copy $f? " "cp ${SRC}${f} ${DST}${f}"; | |
elif [ "$stat" = "M" ]; then | |
ask "Merge $f? " "opendiff ${SRC}${f} ${DST}${f} -merge ${DST}${f}"; | |
elif [ "$stat" = "D" ]; then | |
ask "Delete $f? " "rm ${DEST}${f}" | |
elif [ "$stat" = "?" ]; then | |
echo "Ignoring: $f => status = ${stat}"; | |
else | |
echo "Status unknown ($stat) for file $f"; | |
fi | |
stat=""; | |
fi | |
} | |
function ask { | |
while true; do | |
read -p "$1" yn | |
case $yn in | |
[Yy]* ) $2; break;; | |
[Nn]* ) break;; | |
* ) echo "Please answer yes or no.";; | |
esac | |
done | |
} | |
# Main | |
pathForName $1 | |
SRC=$dir | |
echo "Source => $SRC" | |
pathForName $2 | |
DST=$dir | |
echo "Destination => $DST" | |
stat="" | |
if [ "$3" = "" ]; then | |
for f in $(svn status $SRC); do doMerge "$f"; done | |
else | |
for f in $(svn diff -r $3:HEAD --summarize); do doMerge "$f"; done | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment