/code_deduplicator

Primary LanguageTypeScriptMIT LicenseMIT

code_deduplicator

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.

Usage

npm i -g code_deduplicator

code_deduplicator

This will display

Todo

  • Входящие данные

    • 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