1 #!/usr/local/bin/python
   2 #coding=utf-8
   3 import sys,os,time
   4 LOOK = "/usr/local/bin/svnlook"
   5 SVN = "/usr/local/bin/svn"
   6 LOGFILE = "/path/to/u/hooks/log/post-commit.log"
   7 f = open( LOGFILE, "a+" )
   8 TSTAMP = "%s"%time.strftime("%y-%m-%d %H:%M:%S", time.localtime())
   9 def autoco(dirs,svn,mark,aim,mod):
  10     """自动检出指定项目的代码到指定目录
  11         - dirs  本次修改了的目录
  12         - svn svn 命令所在地
  13         - mark  匹配项
  14         - aim   输出目标
  15         - mod   检出的模块
  16        要求目标路径有预先检出的环境!
  17     """
  18     if mark in dirs:
  19         print >> f,TSTAMP+" %s marked::%s >>>> updating..."%(("+"*7),mark)
  20         upsvn = svn+" update %s"%(aim+mod)
  21         print >> f,TSTAMP+" "+"+"*7
  22         up = os.popen(upsvn).read().strip()
  23         print >> f,up
  24     else:
  25         print >> f,TSTAMP+" -------- marked null >>> update::nothing"
  26 def changedirs(look,rev,repos):
  27     """使用 svnlook 得到修改的路径
  28     """
  29     dirs = os.popen( LOOK+" changed -r "+ rev + " " + repos).read().strip()
  30     return dirs
  31 def usage():
  32     print "Usage: " + sys.argv[0] + " REPOS REV\n"
  33     print >> f,TSTAMP+"Usage: " + sys.argv[0] + " REPOS REV"
  34     sys.exit(0)
  35 if __name__ == '__main__':
  36     if len(sys.argv) != 3:
  37         usage()
  38     repos = sys.argv[1]
  39     rev = sys.argv[2]
  40     print >> f,TSTAMP+" repos::"+repos+" rev::"+rev
  41     ## Blog事务
  42     autoco(changedirs(LOOK,rev,repos),SVN
  43         ,"pyblosxom"
  44         ,"/path/to/ur/pyblosxom"
  45         ,"")