1

cloc - statistics utility to count lines of code

Now the manpage mentions that it can be used to count lines of code of a tarball

cloc perl-5.10.0.tar.gz

Now a debian package is just like a compressed tarball. Is there a way to use cloc.

I tried :-

[$] cloc cloc_1.60-1.1_all.deb                                                                                                    
       0 text files.
       0 unique files.                              
       1 file ignored.

The output isn't correct. I tried to see how many files are in the debian package and saw :-

[$] 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

So either it's a bug in cloc or I didn't apply it correctly. For the record, I have downloaded the debian package of cloc to use as an example (as it's small).

[$] 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

Look forward for answers.

2

You need to run cloc on the source package, not on the binary package — cloc_1.60-1.1_all.deb is the binary package.

This works:

dget -d http://httpredir.debian.org/debian/pool/main/c/cloc/cloc_1.60-1.1.dsc
cloc cloc_1.60.orig.tar.gz

and shows

      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 downloads the source package via the given descriptor, and -d tells it not to extract the source. You'll find dget in the devscripts package.

1

Actually it is possible to count code directly with the .deb file--assuming the .deb file contains source code--using cloc's --extract-with switch:

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
-------------------------------------------------------------------------------

That's kind of clunky though. I will add native support for .deb files in the next release of cloc (to be 1.68).

Also note the difference in counts between the tarball and the .deb: the tarball contains the full source distribution while the latter only has the final tool to be installed. Since the cloc is all source code, it can be counted; if it were compiled, counting the .deb wouldn't work. This trick won't work with most .deb files as most of them (I'm guessing) contain compiled executables.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.