代码量统计脚本

本文介绍了一种使用shell命令diff和awk来统计代码量差异的方法,包括增加、删除和修改的部分,帮助开发者追踪项目变更。

有时候,想统计下自己项目的代码量,通过与之前的版本相比,可以找出增加、删除、修改的代码量。本文就是为了完成这样的任务。

 

用到的shell命令:

diff:找出两个版本之间文件的差异

awk:分析diff结果,计算总的代码量

 

codediff.sh

#!/bin/sh
#!/bin/awk
function help()
{
	clear
	echo "Usage:"
	echo "./sh CurrentDir OriginalDir"
	exit;
}
if [ $# -ne 2 ]
then
	help
fi

diffres=$1"_"$2".diff"
diff -PN $1 $2 | sed -n -e '/^[[:digit:]]/p' > $diffres
cat $diffres | awk \
'BEGIN{
	FS="\n"
	x=1
	an=0
	dn=0
	cn=0
	msg=""
}

/a/{
	msg=substr($1,index($1,"a")+1)
	after=substr(msg,index(msg,",")+1)
        before=substr(msg,0,index(msg,",")-1)
        if(index(msg,",") == 0)
        {
                before=after
        }
        an=an+after-before+1	
}
/c/{
	msg=substr($1,0,index($1,"c")-1)
	after=substr(msg,index(msg,",")+1)
	before=substr(msg,0,index(msg,",")-1)
	if(index(msg,",") == 0)
	{
		before=after
	}
	cn=cn+after-before+1
}
/d/{
	msg=substr($1,0,index($1,"d")-1)
	after=substr(msg,index(msg,",")+1)
        before=substr(msg,0,index(msg,",")-1)
        if(index(msg,",") == 0)
        {
                before=after
        }
        dn=dn+after-before+1
}

END{
	print "add number:   "an"\n"
	print "delete number :"dn"\n"
	print "modify number :"cn"\n"
}'

rm -rf $diffres


脚本分析:

diff -PN $1 $2 | sed -n -e '/^[[:digit:]]/p' > $diffres

 

该命令的执行结果类似于:

0a1,259
0a1,16
1,109d0
1,13d0
9a10,12
17,19d19
2,4c2,3
7c6
16c15
22,23c21,22
1,61d0

其中,a是增加,d是删除,c是修改

 

awk部分主要是执行对上述结果的分析,/a/分析新增的代码,即a之后的数字差值加1,同理,/c/和/d/完成相同的功能,只是,分析的是c或d之前的两个数字差加1。

 

注:该脚本在统计的时候并没有除去注释,如果想除去注释后再统计的话,可以参考http://blog.youkuaiyun.com/pngynghay/article/details/21443199在连接博客中,有除去注释的命令,直接拿过来用用就行了。

### 统计 GitLab 中代码提交量的 Python 脚本 为了统计 GitLab 上特定项目或整个群组中的代码提交数量,可以通过调用 GitLab 的 RESTful API 来实现。下面是一个基于 Python 编的简单脚本示例,该脚本能够遍历指定范围内的所有分支并计算总的提交次数。 #### 需求准备 在开始之前,需确保已安装 `requests` 库来处理 HTTP 请求,并拥有有效的 Personal Access Token 以便于向 GitLab 发起认证请求[^3]。 ```bash pip install requests ``` #### Python 脚本统计单个项目下的总提交数 ```python import requests def get_project_commits(project_id, private_token): url = f"https://gitlab.example.com/api/v4/projects/{project_id}/repository/commits" headers = {'PRIVATE-TOKEN': private_token} all_commits = [] page = 1 while True: params = {"per_page": 100, "page": page} # 每页最多返回100条记录 response = requests.get(url, headers=headers, params=params) commits = response.json() if not commits or 'error' in commits: break all_commits.extend(commits) page += 1 return len(all_commits), all_commits if __name__ == "__main__": project_id = input("请输入要查询的项目ID:") token = input("请输入您的私人访问令牌:") total_count, _ = get_project_commits(int(project_id), str(token)) print(f"该项目共有 {total_count} 次提交.") ``` 此段代码通过循环分页的方式获取所有的提交历史,直到没有更多数据为止。每次请求都会携带私有令牌作为身份验证凭证,从而允许程序读取受保护资源的信息。 对于想要批量统计多个项目的情况,则可以在上述基础上进一步封装函数,接受一组项目 ID 或者利用 GitLab 提供的相关接口先拉取目标组织下全部项目的列表再逐一分析其提交情况[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值