设为首页 收藏本站
查看: 919|回复: 0

[经验分享] 利用git钩子,使用python语言获取提交的文件列表

[复制链接]

尚未签到

发表于 2018-9-17 13:30:52 | 显示全部楼层 |阅读模式
#!/usr/bin/env python  
#coding=utf-8
  
'''
  
该脚本在pre-receive或post-receive钩子中被调用,也可以直接将该文件作为git的钩子使用
  
若钩子为shell脚本,则需要加入以下代码调用该脚本:
  
while read line;do
  
        echo $line | python $PATH/pre-receive.py
  
done
  
当用户执行git push的时候会在远程版本库上触发此脚本
  
该脚本的主要作用:获取用户提交至版本库的文件列表,提交者及时间信息
  
'''
  

  

  
import sys,subprocess
  

  
__author__ = "liuzhenwei"
  

  
class Trigger(object):
  

  def __init__(self):
  '''
  初始化文件列表信息,提交者信息,提交时间,当前操作的分支
  '''
  self.pushAuthor = ""
  self.pushTime = ""
  self.fileList = []
  self.ref = ""
  

  def __getGitInfo(self):
  '''
  '''
  self.oldObject,self.newObject,self.ref = sys.stdin.readline().strip().split(' ')
  

  def __getPushInfo(self):
  '''
  git show命令获取push作者,时间,以及文件列表
  文件的路径为相对于版本库根目录的一个相对路径
  '''
  rev = subprocess.Popen('git rev-list '+self.newObject,shell=True,stdout=subprocess.PIPE)
  revList = rev.stdout.readlines()
  revList = [x.strip() for x in revList]
  #查找从上次提交self.oldObject之后还有多少次提交,即本次push提交的object列表
  indexOld = revList.index(self.oldObject)
  pushList = revList[:indexOld]
  

  #循环获取每次提交的文件列表
  for pObject in pushList:
  p = subprocess.Popen('git show '+pObject,shell=True,stdout=subprocess.PIPE)
  pipe = p.stdout.readlines()
  pipe = [x.strip() for x in pipe]
  

  self.pushAuthor = pipe[1].strip("Author:").strip()
  self.pushTime = pipe[2].strip("Date:").strip()
  self.fileList.extend([ '/'.join(fileName.split("/")[1:]) for fileName in pipe if fileName.startswith("+++") and not fileName.endswith("null")])
  

  def getGitPushInfo(self):
  '''
  返回文件列表信息,提交者信息,提交时间
  '''
  self.__getGitInfo()
  self.__getPushInfo()
  

  print "Time:",self.pushTime
  print "Author:",self.pushAuthor
  print "Ref:",self.ref
  print "Files:",self.fileList
  

  

  
if __name__ == "__main__":
  t = Trigger()
  t.getGitPushInfo()



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588460-1-1.html 上篇帖子: Git版本控制器基础总结(二) 下篇帖子: git安装个人记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表