View Issue Details

IDProjectCategoryView StatusLast Update
0003443Far ManagerFindFilespublic2017-06-15 01:21
Reportershmuel Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Platformx86OSWindowsOS Version7
Product Version3.0 
Summary0003443: Среди результатов поиска Find File одни и те же файлы могут быть включены многократно
DescriptionСреди результатов поиска Find File одни и те же файлы могут быть включены многократно. Это происходит, если в путях поиска есть Junctions и/или Symlinks.
Steps To ReproduceWindows 7 Pro SP1 x64, Far 3.0.4972 x86.
Ищем файлы с маской *.txt внутри папки C:\Users с опциями "From the current folder" и "Search in symbolic links".
Find File (AltF7) находит 1007 файлов.
dir /s /a *.txt находит 398 файлов.
Additional InformationВсе пути из списка файлов, найденных с помощью "Find File", были преобразованы скриптом в эквивалентные пути, не содержащие Junctions или Symlinks. После удаления дубликатов оказалось, что количество файлов, оставшихся в списке, равно количеству файлов, выведенных командой dir, а именно, 398. Следовательно, некоторые файлы были представлены в списке 2 и более раз.

См. также обсуждение на форуме.
TagsNo tags attached.
Build

Activities

2useven10

2017-06-09 06:41

developer   bugnote:0015385

Проблема индейцев

shmuel

2017-06-09 07:02

developer   bugnote:0015386

У меня в плагине есть и операция замены из панелей. Если один и тот же файл находить несколько раз, то и замены будут произведены несколько раз, что уже совсем будет плохо.

shmuel

2017-06-09 07:41

developer   bugnote:0015387

Интересно, что был период, когда AltF7 находил без дубликатов, а именно 398 файлов в моём эксперименте:
билд 1807 - найдено 1007 файлов
билд 3400 - найдено 1007 файлов
билд 3608 - найдено 1125 файлов
билд 4503 - найдено 1125 файлов
билд 4702 - найдено 398 файлов
билд 4795 - найдено 398 файлов
билд 4797 - найдено 1007 файлов
билд 4972 - найдено 1007 файлов

2useven10

2017-06-09 08:45

developer   bugnote:0015388

Был. Но с побочными эффектами.
Выбор любого варианта как единственно правильного не будет устраивать всех.

shmuel

2017-06-09 09:46

developer   bugnote:0015389

0003255, на который вы ссылаетесь, разве имеет отношение к поиску по AltF7, там же о копировании идёт речь?

2useven10

2017-06-09 10:21

developer   bugnote:0015390

Насколько я помню, в обоих случаях используется ScanTree.

shmuel

2017-06-09 10:33

developer   bugnote:0015391

Внутренняя кухня Фара к делу относиться не должна. Если используется одна и та же внутренняя функция, значит её можно вызывать с разными параметрами. Если нужного параметра нет - можно добавить.

2useven10

2017-06-09 11:42

developer   bugnote:0015392

Сейчас параметра нет. Можете добавить что-нибудь вроде
FSCANTREE_DEDUP = 0x00000008
Код который был до b4796, вроде бы с этим справлялся.
Правда не уверен, что все будут согласны с тем, что поиск должен работать так...

DrKnS

2017-06-09 12:13

administrator   bugnote:0015393

> Проблема индейцев

Смешалисьвкучуконилюди.

Эксперименты "до b4796" к конкретно этому случаю не относятся вообще никак.

dir не находит дубликаты, потому что не заходит в All Users, Default User, Application Data, Documents и прочие симлинки в профиле, а не заходит он туда потому что делать это явно запрещено через ACL.

Far же, видя, что к симлинку нет доступа, вытаскивает из него реальный путь и идёт уже туда.

Проверить можно хотя бы так:

Index: farwinapi.cpp
===================================================================
--- farwinapi.cpp (revision 14957)
+++ farwinapi.cpp (working copy)
@@ -397,7 +397,7 @@
 
         if (!Handle && GetLastError() == ERROR_ACCESS_DENIED)
         {
- if (ScanSymLink)
+ if (false)
             {
                 auto strReal = Object;
                 // only links in path should be processed, not the object name itself


У меня все больше сомнений в необходимости этого хака.
Надо, наверное, выкинуть.

shmuel

2017-06-09 12:18

developer   bugnote:0015394

Сейчас заметил, что эта особенность (включать в обработку дубликаты) имеет место и на Quick View, то-есть и общее количество файлов, и суммарный их размер включают в себя соответственно количество и размер дубликатов.

2useven10

2017-06-09 12:30

developer   bugnote:0015395

Last edited: 2017-06-09 16:19

> Эксперименты "до b4796" к конкретно этому случаю не относятся вообще никак.

К разнице между dir и Alt-F7 не относятся.
А к дубликатам в поиске как раз имеет отношение.

Далеко не во все линки запрещён вход через ACL.
Так что дубликаты в поиске будут.
И проблема как раз в этом, и то что дубликаты будут и в выдаче dir /s проблему не отменяет.

DrKnS

2017-06-09 13:21

administrator   bugnote:0015396

В те, которые в ОС присутствуют по умолчанию - запрещён.
А если пользователь сам создаёт рекурсивные линки - это как раз то, что в первом комментарии.

Как уже справедливо отмечено выше, идеального варианта нет и борьба с этим имеет побочные эффекты.

2useven10

2017-06-09 14:39

developer   bugnote:0015397

Рекурсия не нужна.
Любой линк в поддерево от текущей точки приводит к дублированию того, что ниже линка.
Идеального варианта может и нет, но так:
[list=null]
  • сканирование при копировании - с дублями (как сейчас)
  • сканирование при поиске - без дублей
  • сканирование при подсчёте размера - выбор по настройке
  • [/list]на мой взгляд лучше, чем то что есть...

    2useven10

    2017-06-09 16:33

    developer   bugnote:0015398

    изменения в 4796 небольшие.
    скрестить ежа с ужом вполне можно.
    сделал для теста почти автоматический мёрж и 1-2-3 схему - вполне работает.

    DrKnS

    2017-06-09 16:34

    administrator   bugnote:0015399

    Линк в поддерево от грязи не заводится.
    Если пользователь его создал - значит на то была причина.
    Возможно, "настоящая" папка лежит глубоко и так просто удобнее.
    Возможно, слишком глубоко, глубже MAX_PATH, и это единственный способ нормально работать с файлами.
    Возможно, дерево громадно и часто используемые файлы удобнее вытащить наверх линком, чем ждать полчаса, пока просканируется всё.
    Возможно, что-то ещё.

    Если бы файлы по этому сокращенному пути перестали находиться при [x] Search in symbolic links - я бы, например, очень удивился и пошел писать багрепорт.

    На мой взгляд - чем меньше программа думает за пользователя, что ему лучше - тем лучше.

    2useven10

    2017-06-09 17:21

    developer   bugnote:0015400

    Last edited: 2017-06-09 17:23

    > чем меньше программа думает за пользователя, что ему лучше - тем лучше.
    >
    Совершенно согласен.
    Но текущая реализация как раз решает за пользователя, что ему не надо удалять дубли.
    И я знаю пользователей которым это не нравится :)
    Опция (хотя бы через far:config) - это возможность пользователю делать выбор самостоятельно.

    DrKnS

    2017-06-09 18:13

    administrator   bugnote:0015401

    > Но текущая реализация как раз решает за пользователя, что ему не надо удалять дубли.

    Весьма интересный подход.
    Можно сказать, что текущая реализация в том числе решает за пользователя, что он не хочет кофе, т. к. она его не заваривает.

    Пользователь уже решил, что хочет дубли, создав такой линк и поставив птичку "ходить по симлинкам", разве нет?

    shmuel

    2017-06-09 18:21

    developer   bugnote:0015402

    Это может и не очень весомый аргумент, но Total Commander дублей не показывает, и в суммарный размер и количество файлов (там, где у нас Quick View) дубли у него не входят.

    На мой взгляд, если мы даём юзеру количество файлов и суммарный размер, то любой вариант, включающий дубли - это обман пользователя. Если реальных файлов, к примеру, 398, а мы говорим, что их 1007 - это обман.

    DrKnS

    2017-06-09 18:28

    administrator   bugnote:0015403

    Shmuel, "дубли не показывает, потому что вообще по линкам не ходит" или "дубли не показывает, потому что их каким-то образом фильтрует"?

    DrKnS

    2017-06-09 18:30

    administrator   bugnote:0015404

    > любой вариант, включающий дубли - это обман пользователя

    К хардлинкам это тоже относится?

    shmuel

    2017-06-09 19:05

    developer   bugnote:0015405

    Last edited: 2017-06-09 19:06

    @DrKnS

    1. Total не показывает, видимо потому, что фильтрует. Точно сказать не могу.
    (Я в плагине пошёл по самому простому пути - при встрече симлинка сразу перехожу на реальную директорию).

    2. К хардлинкам это не относится. Если брать что-то за образец, то и Проводник, и Тотал их считают за отдельные файлы.

    2useven10

    2017-06-09 19:16

    developer   bugnote:0015406

    > Пользователь уже решил, что хочет дубли, создав такой линк и поставив птичку "ходить по симлинкам", разве нет?

    Нет. Я пользователь, я создал линки потому что они мне были нужны, удобны - причина не важна.
    Когда я создавал линки, я ни разу не решал, что теперь хочу считать свои файлы в 5-ти экземплярах.
    Но при этом мне это навязывают.

    2useven10

    2017-06-14 18:06

    developer   bugnote:0015424

    Тотал считает дубли, если линк проходимый, т.е. сейчас 'как фар'.
    Я бы сделал поиск и размер настраиваемыми с умолчанием - считать.

    shmuel

    2017-06-14 19:12

    developer   bugnote:0015425

    Last edited: 2017-06-14 19:16

    Сейчас произвёл опыт с созданием своего (то есть к которому есть свободный доступ) junction, указывающего на подпапку "соседней" папки. После чего проверил показания (1) dir и (2) Проводника для родительской папки.
    • dir посчитал ВСЁ, то есть дважды количество файлов и дважды их размер. Количество папок он вообще выдал ненормальное, учитывающее все . и ..
    • Проводник посчитал и количество файлов, и количество папок, и размер только по одному разу, то есть дубликаты в его результаты не попали.
    • Total посчитал и дубликаты отдельно, наподобие dir.

    2useven10

    2017-06-14 20:55

    developer   bugnote:0015426

    Last edited: 2017-06-14 20:56

    проводник считает линки на каталоги как файлы.

    shmuel

    2017-06-14 20:59

    developer   bugnote:0015427

    > проводник считает линки на каталоги как файлы.

    Возможно (не проверял). Но он не считает дубликаты как файлы.

    2useven10

    2017-06-14 21:03

    developer   bugnote:0015428

    Last edited: 2017-06-15 01:21

    точнее в хинте показывает их в files: ... (видно если мало элементов).
    а в общем количстве файлов в Properties вообще не учитывает.
    дубликатов да - нет ни в количестве файлов ни в общем размере.
    файловые хардлинки учитываются и в кол-ве файлов и в размере.
    файловые симлинки только в количестве файлов (даже если линк 'не внутрь').

    add: кстати, файловые симлинки текущий фар точно также в размере не учитывает, а в кол-ве файлов и поиске считает.

    Issue History

    Date Modified Username Field Change
    2017-06-08 14:39 shmuel New Issue
    2017-06-08 16:31 shmuel Steps to Reproduce Updated
    2017-06-09 06:41 2useven10 Note Added: 0015385
    2017-06-09 07:02 shmuel Note Added: 0015386
    2017-06-09 07:41 shmuel Note Added: 0015387
    2017-06-09 08:45 2useven10 Note Added: 0015388
    2017-06-09 09:46 shmuel Note Added: 0015389
    2017-06-09 10:21 2useven10 Note Added: 0015390
    2017-06-09 10:33 shmuel Note Added: 0015391
    2017-06-09 11:42 2useven10 Note Added: 0015392
    2017-06-09 12:13 DrKnS Note Added: 0015393
    2017-06-09 12:18 shmuel Note Added: 0015394
    2017-06-09 12:30 2useven10 Note Added: 0015395
    2017-06-09 13:21 DrKnS Note Added: 0015396
    2017-06-09 14:39 2useven10 Note Added: 0015397
    2017-06-09 16:19 2useven10 Note Edited: 0015395
    2017-06-09 16:33 2useven10 Note Added: 0015398
    2017-06-09 16:34 DrKnS Note Added: 0015399
    2017-06-09 17:21 2useven10 Note Added: 0015400
    2017-06-09 17:23 2useven10 Note Edited: 0015400
    2017-06-09 18:13 DrKnS Note Added: 0015401
    2017-06-09 18:21 shmuel Note Added: 0015402
    2017-06-09 18:28 DrKnS Note Added: 0015403
    2017-06-09 18:30 DrKnS Note Added: 0015404
    2017-06-09 19:05 shmuel Note Added: 0015405
    2017-06-09 19:06 shmuel Note Edited: 0015405
    2017-06-09 19:16 2useven10 Note Added: 0015406
    2017-06-14 18:06 2useven10 Note Added: 0015424
    2017-06-14 19:12 shmuel Note Added: 0015425
    2017-06-14 19:16 shmuel Note Edited: 0015425
    2017-06-14 20:55 2useven10 Note Added: 0015426
    2017-06-14 20:56 2useven10 Note Edited: 0015426
    2017-06-14 20:59 shmuel Note Added: 0015427
    2017-06-14 21:03 2useven10 Note Added: 0015428
    2017-06-14 21:05 2useven10 Note Edited: 0015428
    2017-06-14 21:15 2useven10 Note Edited: 0015428
    2017-06-14 21:15 2useven10 Note Edited: 0015428
    2017-06-15 01:21 2useven10 Note Edited: 0015428