公司经常添加SVN项目。相关领导发一个邮件,注明权限什么的, 然后按这个权限添加。
现在这个脚本,直接把附件的excel文件直接添加, 导入。
#!/usr/bin/python
import xlrd
import os
import sys
import tempfile
def usage():
tmp = '''
useage:
./script excel_file [release username]
e.g.
./script abc.xls
./script abc-rel.xls xiao.mi
'''
print tmp
shread = { "xiaomi":"xiao.mi",
"lishi":"lishi" }
if os.getuid() != 0:
print "Non Root User!"
sys.exit(1)
if len(sys.argv) < 2:
usage()
sys.exit(1)
if not os.path.isfile(sys.argv[1]):
print "File Is Not Exist"
sys.exit(1)
file_type = int(os.popen("file %s | grep Excel | wc -l" % sys.argv[1]).read())
if file_type != 1:
print "File Is Not EXCEL FILE!"
sys.exit(1)
if not sys.argv[-1] in shread.values():
print "User Not Exist"
sys.exit(1)
data = xlrd.open_workbook(sys.argv[1])
table = data.sheets()[0]
svn_name = sys.argv[1].split('.')[0].upper()
svn_home = "/local_home/svn/"
svn_auth = "/etc/apache2/%s.authz" % svn_name
dav_svn = "/etc/apache2/mods-enabled/dav_svn.conf"
svn_tmp = tempfile.mkdtemp()
auth = '''
[groups]
shread = %s
[%s:/]
test = rw
@shread = r
* =
''' % (",".join(shread.values()), svn_name)
print "svn name is %s" % svn_name
if raw_input("Are You Sure Add This SVN? [y|n] \n" ) != 'y':
sys.exit(0)
if list(set(table.col_values(2))) == ['']:
os.makedirs(svn_tmp + "/" + svn_name + "/branches")
os.makedirs(svn_tmp + "/" + svn_name + "/tags")
os.makedirs(svn_tmp + "/" + svn_name + "/trunk")
auth = auth + '[' + svn_name + ':/branches]\n'
auth = auth + '%s = rw' % sys.argv[-1]
else:
for i in xrange(table.nrows):
tmp = table.row_values(i)
if list(set(tmp)) == ['']: #blank row
next
else:
if tmp[3] == '':
rw = "rw"
else:
if u"\u5199" in tmp[3]:
rw = "rw"
else:
rw = "r"
#======================
if shread.has_key(tmp[2].strip()):
tmp[2] = shread[tmp[2].strip()]
#======================
if tmp[0] == tmp[1] == '':
next
elif tmp[0] == '' and tmp[1] != '':
try:
tmp[0] = row0
except:
pass
svn_name = row0.split('/')[0]
svn_module = row0.replace(svn_name,'')
os.makedirs(svn_tmp + "/" + row0 + "/" + tmp[1])
auth = auth + '[' + svn_name + ":" + svn_module + "/" + tmp[1] + "]\n"
auth = auth + tmp[2] + " = " + rw + "\n"
else:
svn_name = tmp[0].split('/')[0]
svn_module = tmp[0].replace(svn_name,'')
row0 = tmp[0]
if tmp[1] != '':
os.makedirs(svn_tmp + "/" + tmp[0] + "/" + tmp[1])
auth = auth + '[' + svn_name + ":" + svn_module + "/" + tmp[1] + "]\n"
auth = auth + tmp[2] + " = " + rw + "\n"
else:
os.makedirs(svn_tmp + "/" + tmp[0])
auth = auth + '[' + svn_name + ":" + svn_module + "]\n"
auth = auth + tmp[2] + " = " + rw + "\n"
def wirte_file(filename,content,arg):
f = open(filename, arg)
f.write(content)
f.close()
apache_dav = '''
<Location /svn/%s>
DAV svn
SVNPath /local_home/svn/%s
AuthType Basic
AuthName "Subversion %s"
AuthBasicProvider ldap file
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://fw.163.net:389/ou=People,dc=163,dc=net?uid?sub?(objectClass=*)"
AuthzSVNAccessFile /etc/apache2/%s.authz
#AuthUserFile /etc/apache2/%s.passwd
Require valid-user
</Location>
''' % (svn_name,svn_name,svn_name,svn_name,svn_name)
os.system("svnadmin create %s" % (svn_home + svn_name))
os.system("chown -R www-data:subversion %s" % svn_home)
os.system("chmod -R g+rws %s" % (svn_home + svn_name))
wirte_file(dav_svn,apache_dav,'a')
wirte_file(svn_auth,auth,'w')
os.system("/etc/init.d/apache2 restart")
os.chdir(svn_tmp)
os.system("svn co http://%s.163.net/svn/%s --username=test --password=%s --no-auth-cache" % (str.lower(svn_name),svn_name,"123123"))
os.chdir("./" + svn_name)
folder = " ".join(os.listdir('.'))
os.system("svn add %s" % folder)
os.system("svn ci %s -m 'create by test' --username=test --password=%s --no-auth-cache" % (folder,"123123"))
os.chdir("/tmp")
os.system('rm -rf $(ls -1 /tmp | grep -E "tmp[a-zA-Z0-9]{6}")')
print "SVN ADD OK"
excel文件格式
目录 子目录 人员 权限
ABC/Code test xiaomi 读写
如果excel第三列都是空的, 则添加 release 版本
CentOS svn 使用本地用户认证
yum install httpd-devel mod_dav_svn pwauth # install mod-auth-external # github.com/phokz/mod-auth-external/releases # 解压后 apxs -c mod_authnz_external.c apxs -i -a mod_authnz_external.la
cat /etc/httpd/conf.d/svn.conf AddExternalAuth pwauth /usr/bin/pwauth SetExternalAuthMethod pwauth pipe <Location /svn/PROJECT> DAV svn SVNPath /disk2/svn/PROJECT AuthType Basic AuthName "Subversion PROJECT" AuthzSVNAccessFile /etc/httpd/PROJECT.authz AuthBasicProvider external AuthExternal pwauth Require valid-user </Location>
转载于:https://blog.51cto.com/abian/1589082