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