Como usar o cloc para encontrar linhas de código em um pacote debian

1

cloc - utilitário de estatísticas para contar linhas de código

Agora a manpage menciona que ela pode ser usada para contar linhas de código de um tarball

cloc perl-5.10.0.tar.gz

Agora um pacote debian é como um tarball comprimido. Existe uma maneira de usar cloc para fazer o necessário.

Eu tentei: -

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

A saída não está correta. Eu tentei ver quantos arquivos estão no pacote debian e vi: -

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

Então, ou é um bug no cloc ou não apliquei corretamente. Para o registro, eu fiz o download do pacote debian do cloc para usar como exemplo (como é pequeno).

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

Aguarde respostas.

    
por shirish 10.05.2016 / 18:35

2 respostas

2

Você precisa executar cloc no pacote de origem, não no pacote binário - cloc_1.60-1.1_all.deb é o pacote binário.

Isso funciona:

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

e mostra

      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 faz o download do pacote de origem via o descritor especificado, e -d diz para não extrair a fonte. Você encontrará dget no pacote devscripts .

    
por 10.05.2016 / 18:39
1

Na verdade, é possível contar o código diretamente com o arquivo .deb - supondo que o arquivo .deb contenha código fonte - usando o switch --extract-with do cloc:

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

Isso é meio desajeitado embora. Eu adicionarei suporte nativo a arquivos .deb na próxima versão do cloc (a ser 1.68).

Observe também a diferença nas contagens entre o tarball e o .deb: o tarball contém a distribuição de fonte completa, enquanto o último só tem a ferramenta final a ser instalada. Como o cloc é todo o código fonte, ele pode ser contado; se fosse compilado, contar o .deb não funcionaria. Este truque não funciona com a maioria dos arquivos .deb, já que a maioria deles (eu acho) contém compiláveis.

    
por 11.05.2016 / 05:47