Created
October 26, 2010 23:26
-
-
Save joshcarr/648079 to your computer and use it in GitHub Desktop.
SVN bash script to export changed files
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 | |
# USAGE: | |
# ./svn-export revision-from revision-to repository target-directory | |
# ./svn-export 20 25 svn://localhost/myrepository . | |
if [ ! $1 ] || [ ! $2 ] || [ ! $3 ] || [ ! $4 ]; then | |
echo "Please enter a revision from, revision to, SVN repository, and target directory" | |
exit | |
fi | |
# set up nice names for the incoming parameters to make the script more readable | |
revision_from=$1 | |
revision_to=$2 | |
repository=$3 | |
target_directory=$4 | |
# the grep is needed so we only get added/modified files and not the deleted ones or anything else | |
# if it's a modified directory it's " M" so won't show with this command (good) | |
# if it's an added directory it's still "A" so will show with this command (not so good) | |
for line in `svn diff --summarize -r$revision_from:$revision_to $repository | grep "^[AM]"` | |
do | |
# each line in the above command in the for loop is split into two: | |
# 1) the status line (containing A, M, AM, D etc) | |
# 2) the full repository and filename string | |
# so only export the file when it's not the status line | |
if [ $line != "A" ] && [ $line != "AM" ] && [ $line != "M" ]; then | |
# use sed to remove the repository from the full repo and filename | |
filename=`echo "$line" |sed "s|$repository||g"` | |
# don't export if it's a directory we've already created | |
if [ ! -d $target_directory$filename ]; then | |
directory=`dirname $filename` | |
mkdir -p $target_directory$directory | |
svn export -r $revision_to $line $target_directory$filename | |
fi | |
fi | |
done | |
# to summarize any deleted files or directories at the end of the script uncomment the following line | |
#svn diff --summarize -r$revision_from:$revision_to $repository | grep "^[D]" | |
# thx to: http://www.electrictoolbox.com/subversion-export-changed-files-cli/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
very nice!
star+1