zoukankan      html  css  js  c++  java
  • 记-统计svn与git的log日志中的代码行变更

    任务要求

    统计指定时间内,指定git地址与svn地址上的所有人员的代码行变更情况。

    解决方案

    最初为根据数据库中存储的所有git与svn地址来统计所有人员的提交代码行。之后由于库中存储的地址不全,改为通过gitlab api,找到上面的所有仓库,之后统计代码行。svn由于数据库中地址存储较全,所以还是从库中获取地址。

    实际流程

    git代码行统计:

    任意一个git的ip地址内会包含很多仓库地址,每次调用api最多只能查出100条地址,需要设置起始查询的页数。

    所以先调用api查询出来一共有多少页(需要传入每次每页展示多少条数据)

    curl --head --header 'PRIVATE-TOKEN:Token秘钥' 'gitlab仓库ip地址/api/v4/projects?per_page=100'

    之后for循环每页,查询出该ip地址下所有的仓库地址。

    这是查询某一页的地址的命令,返回的是json结果。

    curl --header 'PRIVATE-TOKEN:Token秘钥' 'gitlab仓库ip地址/api/v4/projects?page=起始页数&per_page=查询条数'

    拿到仓库地址后,需要先将仓库clone下来。然后查询该仓库的所有分支,并循环切换每一个分支。

    1、先查询出在指定时间节点上的所有提交人

    git log  --format='%cn' --since="${start_time}" --until="${end_time}"

    2、对人名去重后遍历每一个提交人,

    然后查询出该人员在指定时间段内的所有提交hash码(每一次提交都会生成一个唯一的hash码)

    git log --format='%H' --committer="${name}" --since="${start_time}" --until="${end_time}"

    3、此时需要注意一点:如果我们以某一个分支为基础重新拉一个分支,那么旧分支的提交历史也被拉到新分支上,统计的时候就会造成重复统计(某一个人只提交了一次,但这次的提交历史会出现在多个分支上),但相同提交的hash值却不会重复。

    所以我们在查出“某个git地址的某个分支里的某次提交的hash值”后,需要将这条暂存起来,当统计该git地址的其他分支的时候,如果还出现这个提交hash值时,就不要统计了。

    4、在确定该此hash值没有重复后,根据该hash值查询出这次的提交详情

    git show ${chash}

    根据详情里面的+、-符号可以统计出增减的代码行,更具体的也能编写正则区分有效代码行、空行与注释行。

    到此时我们已经有了 在某个时间段内 某个git地址的某个分支的某个人的某次提交的代码变更行数详情。

    svn代码行统计:

    svn的提交历史的统计与git有所不同。

    svn不需要将仓库下载到本地,可以远程查看某一仓库地址的所有log日志。

    svn的查看历史代码行详情为两个步骤:

    一:可以通过命令

    svn log -v -r {"$start_time"}:{"$end_time"} ${now_url}

    查询出某个时间段内某个仓库地址的所有变更文件的路径,其中还包括了提交人和“变更的版本号”,但是看不到具体某文件的变更详情。

    二:可以通过命令

    svn diff -c ${rversion} ${fileurl}

    查询出具体某变更文件(包括路径)的某个版本的变更详情。

    所以第一步显示查询出所有变更文件路径,然后再对具体文件的具体版本进行变更详情的查询。

    此处我采用的统计方法有些不稳,我是遍历每一行,根据每一行的内容,来进行统计。

    1、如果当前行为"------------------------------------------------------------------------"

    则表示下一行该显示用户名和版本号了,然后下一行遍历是就正则出这两个信息。

    2、如果当前行为"Changed paths:"

    则表示下一行该正则出文件路径了

    此处需要对文件路径进行进一步排查,因为还存在很多:如图片文件等无法或不需要统计代码行的文件被提交的情况,这些文件就不需要进一步查看他们的内容变更详情。

    3、如果文件格式正确,则可以通过命令查询出该版本下此文件的变更详情,然后进行统计。

    依然可通过每行第一位的+-符号来判断具体行的变更情况。

    后续的一些处理操作:

    每次统计出结果后,可以将所有的统计参数传给其他脚本文件,最终将这次的统计结果传入数据库。

  • 相关阅读:
    函数响应式编程
    RxSwift
    Swift 5.1 新语法
    MVVM
    SwiftUI 九
    SwiftUI 八
    SwiftUI制作View可嵌套组件
    Swift 5.1 新语法
    MVVM
    Linux系统修改hostname,不用重启
  • 原文地址:https://www.cnblogs.com/red-code/p/10040472.html
Copyright © 2011-2022 走看看