shell - descargar - locmetrics
CLOC ignora/excluye el archivo de lista(.clocignore) (1)
( Editar: ver la sección Uso apropiado en la parte inferior. )
Pregunta principal
¿Cómo puede hacer que cloc
use su --exclude-list-file=<file>
? Esencialmente, estoy tratando de alimentarlo con un archivo .clocignore
.
Comportamiento esperado
cloc
documentación de cloc
dice lo siguiente:
--exclude-list-file=<file> Ignore files and/or directories whose names
appear in <file>. <file> should have one entry
per line. Relative path names will be resolved
starting from the directory where cloc is
invoked. See also --list-file.
Intentos
El siguiente comando funciona como se espera:
cloc --exclude-dir=node_modules .
Pero este comando no excluye nada:
cloc --exclude-list-file=myignorefile .
Este es el contenido de myignorefile
:
node_modules
node_modules/
node_modules/*
node_modules/**
./node_modules
./node_modules/
./node_modules/*
./node_modules/**
/full/path/to/current/directory/node_modules
/full/path/to/current/directory/node_modules/
/full/path/to/current/directory/node_modules/*
/full/path/to/current/directory/node_modules/**
myignorefile
no myignorefile
error si myignorefile
no existe, por lo que no tengo comentarios sobre lo que está haciendo.
(Estoy ejecutando OS X e instalé cloc v1.60 a través de Homebrew).
Uso apropiado
tl; dr : el método especificado en la respuesta de @ Raman requiere que se especifique menos en .clocignore
y se ejecuta considerablemente más rápido.
Estimulado por la respuesta de @Raman, investigué el código fuente: cloc
de hecho respeta --exclude-list-file
pero lo procesa de manera diferente que --exclude-dir
de dos maneras importantes.
Nombre de archivo exacto versus ''parte de la ruta''
Primero, mientras que --exclude-dir
ignorará cualquier archivo cuyas rutas contengan las cadenas especificadas, --exclude-list-file
solo excluirá los archivos o directorios exactos especificados en .clocignore
.
Si tienes una estructura de directorios como esta:
.clocignore
node_modules/foo/first.js
app/node_modules/bar/second.js
Y el contenido de .clocignore
es justo
node_modules
Entonces cloc --exclude-list-file=.clocignore .
ignorará con éxito first.js
pero cuenta second.js
. Mientras que cloc --exclude-dir=node_modules .
ignorará a ambos.
Para lidiar con esto, .clocignore
necesita contener esto:
node_modules
app/node_modules
Actuación
En segundo lugar, el código fuente de cloc
parece agregar los directorios especificados en --exlude-dir
a una lista que se consulta antes de contar los archivos. Mientras que la lista de directorios descubiertos por --exclude-list-file
se consulta después de contar los archivos.
Lo que significa que --exclude-list-file
aún procesa los archivos, lo que puede ser lento, antes de ignorar sus resultados en el informe final. Esto se confirma mediante un experimento: en una base de código de ejemplo, se tardó medio segundo en ejecutar cloc
con --exclude-dir
, y 11 segundos en ejecutarse con un equivalente --exclude-list-file
.
La mejor solución que he encontrado es alimentar los contenidos de .clocignore
directamente a --exclude-dir
. Por ejemplo, si está usando bash
y tiene tr
disponible:
cloc --exclude-dir=$(tr ''/n'' '','' < .clocignore) .