A tool used to find files with the same name, but different content.
I've made it to refactor big amount of files which have been many times copy-pasted and than modified.
npm i -g code_deduplicator
code_deduplicator
This will display
-
Входящие данные
- target_folder - целевая папка
- variants_folder - папка с найденными вариантами, по умолчанию target_folder + "\variants"
- search_folder - папка в которой ищем дубликаты
-
filesFilter(): boolean
- Исключаем index.ts
- Исключаем node_modules
-
Создаем map, имя файла -> etalon, variants Set из вариантов содержимого
-
Сканируем variants_folder
- Подпапки - это имена файлов
- В них файлы с ничего не значащим именем - просто 1.ts,2.ts,3.ts, ...
- parseVariant - откусывает первую строку в метаданные // {isMerged:0}, остальная часть данных попадает в text
- Полученные тексты добавляем в Sets
-
Сканируем папку target_folder, добалвяем тексты в Sets
-
Сканируем папку search_folder
- Если нашли файл с совпадающим именем, то добавляем его в map, иначе - просто пропускаем
- Если текст уже есть в Sets, то тоже пропускаем такой файл
- Когда добавляем файл, сохраняем его исходный путь
- А вот если его нет в Sets, то добавляем туда и параллельно создаем файл в Variants
-
Сохраняем в бэке всю эту инфу
-
Обход папки делается через readDirRecursive
-
Как это будет работать в Web интерфейсе
-
В начале показывается окно с тремя полями
- search_folder
- target_folder
- variants_folder
- Показывается кнопка сканировать
-
Когда нажата эта кнопка в бэк уходит api = "runDeduplication" - который ищет дубликаты
-
Когда бэк нашел он отвечает json'ом, который содержит
- guid сканирования
- список файлов - расхождений
-
Список расхождений отображается как список-дерево с файлами
- Шапка = имя файла
- Внутри пункты с отступами с путями к альтернативным файлам
- Зеленые - те что merged, красными - те что не merged
-
При клике по альтернативному файлу показывается diff - [ ] Как сделать сравнивалку в Web'е? - [ ] Сделать api - [ ] apiGetFileDiff - отдает два файла - [ ] apiSetFileDiff - задает изменения обоих файлов - [ ] Сделать front - [ ] Запрашивает api - [ ] Нужно сделать таймер который откладывает автосохранение на 3 секунды - [ ] Нужно сделать кнопку "сохранить", она активна только если есть изменения - [ ] Рядом с кнопкой сделать автосохранение
-
При клике Merged и сохранить - файлы сохраняются, флаг isMerged = 1
-
При клике Unmerged и сохранить - файлы также сохраняются, флаг isMerged = 0
-