View Issue Details

IDProjectCategoryView StatusLast Update
0003443Far ManagerFindFilespublic2017-06-15 03:21
ReportershmuelAssigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Platformx86OSWindowsOS Version7
Product Version3.0 
Target VersionFixed in Version 
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 08:41

developer   bugnote:0015385

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

shmuel

2017-06-09 09:02

developer   bugnote:0015386

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

shmuel

2017-06-09 09: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 10:45

developer   bugnote:0015388

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

shmuel

2017-06-09 11:46

developer   bugnote:0015389

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

2useven10

2017-06-09 12:21

developer   bugnote:0015390

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

shmuel

2017-06-09 12:33

developer   bugnote:0015391

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

2useven10

2017-06-09 13:42

developer   bugnote:0015392

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

DrKnS

2017-06-09 14: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 14:18

developer   bugnote:0015394

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

2useven10

2017-06-09 14:30

developer   bugnote:0015395

Last edited: 2017-06-09 18:19

View 2 revisions

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

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

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

DrKnS

2017-06-09 15:21

administrator   bugnote:0015396

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

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

2useven10

2017-06-09 16:39

developer   bugnote:0015397

Рекурсия не нужна.
Любой линк в поддерево от текущей точки приводит к дублированию того, что ниже линка.
Идеального варианта может и нет, но так:
  1. сканирование при копировании - с дублями (как сейчас)
  2. сканирование при поиске - без дублей
  3. сканирование при подсчёте размера - выбор по настройке
на мой взгляд лучше, чем то что есть...

2useven10

2017-06-09 18:33

developer   bugnote:0015398

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

DrKnS

2017-06-09 18:34

administrator   bugnote:0015399

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

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

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

2useven10

2017-06-09 19:21

developer   bugnote:0015400

Last edited: 2017-06-09 19:23

View 2 revisions

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

DrKnS

2017-06-09 20:13

administrator   bugnote:0015401

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

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

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

shmuel

2017-06-09 20:21

developer   bugnote:0015402

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

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

DrKnS

2017-06-09 20:28

administrator   bugnote:0015403

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

DrKnS

2017-06-09 20:30

administrator   bugnote:0015404

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

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

shmuel

2017-06-09 21:05

developer   bugnote:0015405

Last edited: 2017-06-09 21:06

View 2 revisions

@DrKnS

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

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

2useven10

2017-06-09 21:16

developer   bugnote:0015406

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

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

2useven10

2017-06-14 20:06

developer   bugnote:0015424

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

shmuel

2017-06-14 21:12

developer   bugnote:0015425

Last edited: 2017-06-14 21:16

View 2 revisions

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


2useven10

2017-06-14 22:55

developer   bugnote:0015426

Last edited: 2017-06-14 22:56

View 2 revisions

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

shmuel

2017-06-14 22:59

developer   bugnote:0015427

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

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

2useven10

2017-06-14 23:03

developer   bugnote:0015428

Last edited: 2017-06-15 03:21

View 5 revisions

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

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

Issue History

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