项目中,相关的
配置管理人员需要经常将
测试库中的程序拉入基线库,今天无意中发现手工操作起来还很麻烦,所以就写了个脚本来执行。这样,如果以后再有开发需要入基线库,就直接将文件(带相对路径)写入file中执行脚本即可。
具体思路:
1. 将需要拉入基线库的文件放到file中。
2. 为了保持和SVN一致的目录结构,需要先获取文件上一层之前的相对路径。
3. 然后根据路径来逐一用mkdir -p 来创建相关文件夹。
4. 逐个进入文件夹执行svn export。
5. 因为是多个不同的路径,所以需要退回到执行前的路径。
file文件内容如下:
api.ali.com/api/api/inner_validate.inc
api.ali.com/api/host/api/order_cancel.php
api.ali.com/api/library/HTMLPurifier/URIFilter/HostBlacklist.php
for k in `cat file`;do ##读取SVN源文件
v=`echo $k | awk -F "[ /]" '{OFS="/";$NF="";print $0}'` #获取源文件对应的相对路径
echo "start to svn" >>tmp
##判断是否为目录或文件
f=`echo $i | awk -F "[ /]" '{OFS="/";print $NF}'`
#如果为文件
if (
test $v = $k );then #file中的变量为目录
echo "this is a folder"
#判断目录的上一层文件夹是否存在,如存在则不创建,不存在则创建
if (test -d "data/$k/");then
echo "the folder is exists"
cd data/$k/../; #进入相应文件夹
r=`svn export http://svn.dangdang.com/repos/test/$k --username "liufei" --password "liufei123" --force|wc -l`
echo "$r files"
if (test $r -gt 1 );then #如果SVN后带A符号的行数小于1则报错
echo "Svn successfully!"
else
echo -en "\033[41;36m The $k is svn fail! \033[0m"
fi
cd -
else
echo "create the folder"
mkdir -p data/$k;
cd data/$k/../; #进入相应文件夹
r=`svn export http://svn.dangdang.com/repos/test/$k --username "liufei" --password "liufei123" --force|wc -l`
echo "$r files"
if (test $r -gt 1 );then #如果SVN后带A符号的行数小于1则报错
echo "Svn successfully!"
else
echo -en "\033[41;36m The $k is svn fail! \033[0m"
fi
cd -
fi
else ##如果file中给出的为文件
echo "this is a file"
mkdir -p data/$v; #创建相对路径文件夹
cd data/$v #进入相应文件夹
r=`svn export http://svn.dangdang.com/repos/test/$k --username "liufei" --password "liufei123"|grep "^A"|wc -l`
#echo $r
if (test $r -eq 1 );then #如果SVN后带A符号的行数不为1则报错
echo "Svn successfully!"
else
echo -en "\033[41;36m The $k is svn fail! \033[0m"
fi
cd -
fi
done