#!/bin/sh

#svn_path="/home/svn"
svn_user="jin"
user_passwd="jin"
svn_path="/opt/svn"
password_file="passwd"
authz="authz.conf"
. ./profile

svn_http="\\
<Location /svn/>\\
  DAV svn\\
  SVNParentPath ${svn_path}\\
  SVNListParentPath on\\
  AuthType Basic\\
  AuthName \"svn repos\"\\
  AuthUserFile ${svn_path}/${password_file}\\
  AuthzSVNAccessFile ${svn_path}/${authz}\\
  #Satisfy Any\\
  Require valid-user\\
</Location>\\
\\
RedirectMatch ^(/svn)$ \$1/\\
"

inst_flag=0

inst_soft=`rpm -qa | grep expect`
if [[ "${inst_soft}" = "" ]]
then
	echo "==expect not installed===================="
	inst_flag=1
fi

inst_soft=`rpm -qa | grep httpd`
if [[ "${inst_soft}" = "" ]]
then
	echo "==httpd not installed===================="
	inst_flag=1
fi
inst_soft=`rpm -qa | grep subversion`
if [[ "${inst_soft}" = "" ]]
then
	echo "==subversion not installed===================="
	inst_flag=1
fi
inst_soft=`rpm -qa | grep mod_dav_svn`
if [[ "${inst_soft}" = "" ]]
then
	echo "==mod_dav_svn not installed===================="
	inst_flag=1
fi
inst_soft=`rpm -qa | grep vim`
if [[ "${inst_soft}" = "" ]]
then
	echo "==vim not installed===================="
	inst_flag=1
fi

if (( inst_flag == 1  ))
then
	echo "==exe ./intall_svn.sh===================="
	./intall_svn.sh
fi





echo "OPTIONS=\"-d -r ${svn_path}\"" > /etc/sysconfig/svnserve

##make  /opt/svn
if [ ! -d ${svn_path} ];then
	mkdir -p ${svn_path}
fi

##make  /opt/svn/authz.conf
if [ ! -f ${svn_path}/${authz} ];then
	echo "[groups]" > ${svn_path}/${authz}
	echo "admin = ${svn_user}" >> ${svn_path}/${authz}
	echo "" >> ${svn_path}/${authz}
	echo "[/]" >> ${svn_path}/${authz}
	echo "@admin = rw" >> ${svn_path}/${authz}
fi

##make /opt/svn/passwd
if [ ! -f ${svn_path}/${password_file} ];then
expect -c"
set timeout 600
spawn htpasswd -cm ${svn_path}/${password_file} ${svn_user}
        expect {
                        \"New password:\" {send \"${user_passwd}\r\"; exp_continue}
                        \"Re-type new password:\" {send \"${user_passwd}\r\";}
        }
        expect eof;"
fi

##make /opt/svn/passwd.conf
if [ ! -f ${svn_path}/passwd.conf ];then
	echo "[users]" > ${svn_path}/passwd.conf
	echo "jin = jin" >> ${svn_path}/passwd.conf
fi


file_list=`ls -1 *.bak`

##load files
for  file in ${file_list}
do
	#echo "===${file%_[0-9-]\.bak}==="
	repos_name=${file:0:${#file}-15}

	if [ ! -d ${svn_path}/${repos_name} ];then
		svnadmin create ${svn_path}/${repos_name}
	fi
	svnadmin load  ${svn_path}/${repos_name}  < ./${file} --ignore-uuid

	##svnserve.conf
	sed -i "s/^#[[:space:]]*realm[[:space:]]*=.*$/realm = ${svn_path//\//\\/}\/${repos_name}/g"  ${svn_path}/${repos_name}/conf/svnserve.conf
	sed -i "s/^#[[:space:]]*\(authz-db[[:space:]]*=\).*$/\1 ${svn_path//\//\\/}\/${authz}/g"  ${svn_path}/${repos_name}/conf/svnserve.conf
	sed -i "s/^#[[:space:]]*\(password-db[[:space:]]*=\).*$/\1 ${svn_path//\//\\/}\/passwd.conf/g"  ${svn_path}/${repos_name}/conf/svnserve.conf
	sed -i "s/^#[[:space:]]*\(auth-access[[:space:]]*=.*\)$/\1/g"  ${svn_path}/${repos_name}/conf/svnserve.conf
	sed -i "s/^#[[:space:]]*\(anon-access[[:space:]]*=\).*$/\1 none/g"  ${svn_path}/${repos_name}/conf/svnserve.conf

	##
done

svn_http_exist=`cat /etc/httpd/conf.d/subversion.conf | grep  -v ^# | grep SVNParentPath`
if [[ "${svn_http_exist}" = "" ]]
then
	echo "==add to subversion.conf===================="
	inset_line=`grep -nE "(authz_svn_module|dav_svn_module)" /etc/httpd/conf.d/subversion.conf  |  tail -1 | cut -f 1  -d:`
	let inset_line=inset_line+2
	sed -i "${inset_line}i${svn_http}"   /etc/httpd/conf.d/subversion.conf
else
	echo "==already exist in subversion.conf===================="
	sed -i "s/^\([[:space:]]*SVNParentPath\).*$/\1 ${svn_path//\//\\/}/g"  /etc/httpd/conf.d/subversion.conf
	sed -i "s/^\([[:space:]]*AuthUserFile\).*$/\1 ${svn_path//\//\\/}\/${password_file}/g"  /etc/httpd/conf.d/subversion.conf
	sed -i "s/^\([[:space:]]*AuthzSVNAccessFile\).*$/\1 ${svn_path//\//\\/}\/${authz}/g"  /etc/httpd/conf.d/subversion.conf
fi

chown -R apache.apache  ${svn_path}

chkconfig svnserve on
service svnserve restart
service  httpd restart

