![如何使用 cloc 查找 debian 包中的代码行](https://linux22.com/image/88113/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20cloc%20%E6%9F%A5%E6%89%BE%20debian%20%E5%8C%85%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E8%A1%8C.png)
cloc - 用于计算代码行数的统计实用程序
现在联机帮助页提到它可以用于计算 tarball 的代码行数
cloc perl-5.10.0.tar.gz
现在 debian 包就像一个压缩的 tarball。有没有办法使用 cloc.
我试过 :-
[$] cloc cloc_1.60-1.1_all.deb
0 text files.
0 unique files.
1 file ignored.
输出不正确。我尝试查看 debian 软件包中有多少个文件,结果看到:-
[$] dpkg -L cloc
/.
/usr
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/cloc.1.gz
/usr/share/doc
/usr/share/doc/cloc
/usr/share/doc/cloc/changelog.Debian.gz
/usr/share/doc/cloc/changelog.gz
/usr/share/doc/cloc/copyright
/usr/bin
/usr/bin/cloc
所以要么是 cloc 中的错误,要么是我没有正确应用它。作为记录,我下载了 cloc 的 debian 包作为示例(因为它很小)。
[$] ls -lh cloc_1.60-1.1_all.deb
-rw-r--r-- 1 shirish shirish 88K Jul 24 2015 cloc_1.60-1.1_all.deb
期待答案。
答案1
您需要cloc
在源包上运行,而不是在二进制包上运行——cloc_1.60-1.1_all.deb
是二进制包。
这有效:
dget -d http://httpredir.debian.org/debian/pool/main/c/cloc/cloc_1.60-1.1.dsc
cloc cloc_1.60.orig.tar.gz
并展示
12 text files.
7 unique files.
9 files ignored.
http://cloc.sourceforge.net v 1.60 T=0.05 s (57.3 files/s, 176957.8 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Perl 2 666 978 7477
make 1 26 35 75
-------------------------------------------------------------------------------
SUM: 3 692 1013 7552
-------------------------------------------------------------------------------
dget
下载源码包通过给定的描述符,并-d
告诉它不要提取源。您会dget
在devscripts
包裹中找到。
答案2
实际上,可以直接使用 .deb 文件对代码进行计数——假设 .deb 文件包含源代码——使用 cloc 的 --extract-with 开关:
cloc --extract-with='dpkg-deb -x >FILE< .' ../cloc_1.60-1_all.deb
2 text files.
2 unique files.
1 file ignored.
https://github.com/AlDanial/cloc v 1.66 T=0.09 s (11.3 files/s, 102181.3 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Perl 1 661 966 7437
-------------------------------------------------------------------------------
但这有点笨拙。我将在下一版本的 cloc(1.68)中添加对 .deb 文件的本机支持。
另请注意 tarball 和 .deb 之间的计数差异:tarball 包含完整的源代码发行版,而后者仅包含要安装的最终工具。由于cloc都是源码,所以可以统计;如果已编译,则无法计算 .deb。这个技巧不适用于大多数 .deb 文件,因为它们中的大多数(我猜)包含已编译的可执行文件。