(Изменение: см. Раздел " Надлежащее использование " внизу).
Основной вопрос
Как вы можете использовать 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.