Ответ 1
Лучшее обходное решение, которое я нашел, - это .clocignore
содержимое .clocignore
непосредственно в --exclude-dir
. Например, если вы используете bash
и имеете tr
доступны:
cloc --exclude-dir=$(tr '\n' ',' < .clocignore) .
(Изменение: см. Раздел " Надлежащее использование " внизу).
Основной вопрос
Как вы можете использовать cloc
для использования cloc
--exclude-list-file=<file>
? По сути, я пытаюсь .clocignore
файл .clocignore
.
Ожидаемое поведение
Документация cloc
гласит следующее:
--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.
попытки
Следующая команда работает так, как ожидалось:
cloc --exclude-dir=node_modules .
Но эта команда ничего не исключает:
cloc --exclude-list-file=myignorefile .
Это содержимое 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/**
cloc
не является ошибкой, если myignorefile
не существует, поэтому у меня нет обратной связи с тем, что он делает.
(Я запускаю OS X и установил cloc
v1.60 через Homebrew.)
tl; dr - Метод, указанный в ответе @Raman, требует, чтобы меньше было указано в .clocignore
и выполняется значительно быстрее.
Подправленный @Raman ответом, я исследовал исходный код: cloc
действительно уважает --exclude-list-file
но обрабатывает его иначе, чем --exclude-dir
двумя важными способами.
Во-первых, в то время как --exclude-dir
будет игнорировать любые файлы, чьи пути содержат указанные строки, --exclude-list-file
будет исключать только точные файлы или каталоги, указанные в .clocignore
.
Если у вас есть такая структура каталогов:
.clocignore
node_modules/foo/first.js
app/node_modules/bar/second.js
И содержимое .clocignore
просто
node_modules
Затем cloc --exclude-list-file=.clocignore.
будет успешно игнорировать first.js
но считать second.js
. Если cloc --exclude-dir=node_modules.
будут игнорировать оба.
Чтобы справиться с этим, .clocignore
должен содержать следующее:
node_modules
app/node_modules
Во-вторых, исходный код cloc
похоже, добавляет каталоги, указанные в --exlude-dir
в список, который --exlude-dir
перед подсчетом файлов. В то время как список каталогов, обнаруженных в --exclude-list-file
рассматривается после подсчета файлов.
Значение, --exclude-list-file
все еще обрабатывает файлы, которые могут быть медленными, прежде чем игнорировать их результаты в окончательном отчете. Это подтверждается экспериментами: в примерной кодовой базе потребовалось полсекунды для запуска cloc
с cloc
--exclude-dir
и 11 секунд для запуска с эквивалентным --exclude-list-file
.
Лучшее обходное решение, которое я нашел, - это .clocignore
содержимое .clocignore
непосредственно в --exclude-dir
. Например, если вы используете bash
и имеете tr
доступны:
cloc --exclude-dir=$(tr '\n' ',' < .clocignore) .