Skip to content

Instantly share code, notes, and snippets.

@blech75
Forked from siddhadev/gist:5814802
Last active August 29, 2015 14:10
Show Gist options
  • Save blech75/4dd0de59334cf3d979f3 to your computer and use it in GitHub Desktop.
Save blech75/4dd0de59334cf3d979f3 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
### BEGIN mod by JSB 2014-12-03
# URL encode/decode functions courtesy of https://gist.github.com/cdown/1163649
#
urlencode() {
# urlencode <string>
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c"
esac
done
}
urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\x}"
}
#
### END mod by JSB 2014-12-03
usage(){
echo "Error $errcode $errorcode at line ${BASH_LINENO[0]} while executing: $BASH_COMMAND"
exit $errorcode
}
trap usage ERR
file="$1"
[ -f "$file" ] # must be a file
url=$(svn info "$file" | grep '^URL' | awk '{print $2}')
root=$(svn info "$file" | grep '^Working Copy Root' | awk -F':' '{print $2}')
rev=$(svn info "$file" | grep '^Revision' | awk -F':' '{print $2}')
name="$(basename $url)"
dir="$(dirname $url)"
tmp="$(mktemp -d .tmp.XXX)"
### mod by JSB 2014-12-03
# handle encoded chars in URL (spaces, etc.)
# this must be done post-basename/dirname
name="$(urldecode $name)"
dir="$(urldecode $dir)"
echo "Doing fresh checkout for: $name"
echo " URL: $dir"
echo " dest: $tmp"
echo " rev: $rev"
svn co -N -r $rev "$dir" "$tmp" >> /dev/null
hash=$(cd "$tmp" && sha1sum "$name" | awk '{print $1}')
corrupt=$(find ${root}/.svn/pristine -name $hash.svn-base)
svnbase=$(find ${tmp}/.svn/pristine -name $hash.svn-base)
corrupt_sum=$(md5sum "$corrupt" | awk '{print $1}')
svnbase_sum=$(md5sum "$svnbase" | awk '{print $1}')
if [[ "$corrupt_sum" != "$svnbase_sum" ]]
then
echo "Fixing .svn-base for $name"
echo " from: $corrupt_sum (corrupted)"
echo " to: $svnbase_sum (expected)"
echo " src: $svnbase"
echo " dest: $corrupt"
cp $svnbase $corrupt
else
echo "No corruption detected"
fi
rm -rf "$tmp"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment