首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合`cloc`和` `git blame`

结合`cloc`和` `git blame`
EN

Stack Overflow用户
提问于 2014-08-25 19:19:00
回答 1查看 662关注 0票数 20

cloc使用户能够统计每种语言、每种类型(空白、注释或代码)在目录中存储的代码行数。

git blame使人们能够看到文件的哪一部分属于谁。

我正在寻找一种将两者结合起来的方法,这样就可以得到一个(三维)矩阵,列出每个用户每种语言每种类型的代码行。

有没有优雅的内置方法来做到这一点,或者应该“抛弃”每个用户的“指责”部分(通过在git blame之后运行grep ),并对它们运行cloc来计算每个用户的表?

编辑

天真的方法(基于@Jubobs的评论):

  1. 首先为目录中的每个文件生成一个错误文件(不需要使用类似grep "^[^(]*([^)]*)"的grep来捕获所有用户的列表,并使用sortgrep "^[^(]*($user)"检索唯一用户:使用

生成文件夹的卷影副本,并使用grep只保留该用户的行。

  1. 对卷影副本运行cloc。
  2. 对每个用户执行此操作,并存储结果并一起输出。<代码>H221<代码>G222

这或多或少说明了如何生成所需的输出。但是可以看到,这种方法进行了大量的复制(或者至少存储在内存中),并且可以通过一次而不是多次运行文件来计算每个用户的行数。

所需的输出

类似于:

代码语言:javascript
复制
+--------+--------------------------------+--------------------------------+
|User    | C#                             | XML                            |
+--------+-------+-------+---------+------+-------+-------+---------+------+
|        | files | blank | comment | code | files | blank | comment | code |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Foo    |    12 |    75 |     148 | 2711 |     2 |    42 |       0 |    0 |
| Bar    |   167 |  1795 |    1425 |    2 |    16 |     0 |     512 | 1678 | 
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Total  |   179 |  1870 |    1573 | 2713 |    18 |    42 |     512 | 1678 |
+--------+-------+-------+---------+------+-------+-------+---------+------+
EN

回答 1

Stack Overflow用户

发布于 2016-06-09 20:46:21

这是一个较老的问题,但它达到了我的兴趣的顶峰,所以我开始尝试解决它。这不是一个很好的报告,但它确实将数据放在csv中,其中的3列是:file extensionemail of committer# lines this user has committed for this file type。这也不像cloc那样给出空白的、注释的、代码行。如果我有时间,我会尝试让所有这些都很好地工作,但我认为这可能是一个“足够好”的解决方案,或者至少让你朝着正确的方向开始。

代码语言:javascript
复制
#!/bin/bash

LIST_OF_GIT_FILES=/tmp/gitfiles.txt
GIT_BLAME_COMBINED_RESULTS=/tmp/git-blame.txt
OUTPUT=/tmp/git-blame-output.txt
SUMMARY=code-summary.csv

rm $GIT_BLAME_COMBINED_RESULTS
git ls-files > $LIST_OF_GIT_FILES
while read p; do
  git blame -e -f $p >> $GIT_BLAME_COMBINED_RESULTS
done < $LIST_OF_GIT_FILES
awk -F ' ' '{print $2 "," $3}' $GIT_BLAME_COMBINED_RESULTS | tr -d '(<>' | awk -F ',' '{n = split($1, a, "."); print a[n] "," $2}' > $OUTPUT
sort $OUTPUT | uniq -c | sort -n | awk -F ' ' '{print $2 "," $1}' | sort > $SUMMARY

rm $GIT_BLAME_COMBINED_RESULTS
rm $LIST_OF_GIT_FILES
rm $OUTPUT
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25484745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档