MantisBT  Site | Plugring | Plugins API and Macros | Forum | English Forum | Code

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003443Far ManagerFindFilespublic2017-06-08 16:392017-06-15 03:21
Reportershmuel 
Assigned To 
PrioritynormalSeverityminorReproducibilityalways
StatusnewResolutionopen 
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
Attached Files

- Relationships

-  Notes
(0015385)
2useven10 (developer)
2017-06-09 08:41

Проблема индейцев
(0015386)
shmuel (developer)
2017-06-09 09:02

У меня в плагине есть и операция замены из панелей. Если один и тот же файл находить несколько раз, то и замены будут произведены несколько раз, что уже совсем будет плохо.
(0015387)
shmuel (developer)
2017-06-09 09:41

Интересно, что был период, когда AltF7 находил без дубликатов, а именно 398 файлов в моём эксперименте:
билд 1807 - найдено 1007 файлов
билд 3400 - найдено 1007 файлов
билд 3608 - найдено 1125 файлов
билд 4503 - найдено 1125 файлов
билд 4702 - найдено 398 файлов
билд 4795 - найдено 398 файлов
билд 4797 - найдено 1007 файлов
билд 4972 - найдено 1007 файлов
(0015388)
2useven10 (developer)
2017-06-09 10:45

Был. Но с побочными эффектами.
Выбор любого варианта как единственно правильного не будет устраивать всех.
(0015389)
shmuel (developer)
2017-06-09 11:46

0003255, на который вы ссылаетесь, разве имеет отношение к поиску по AltF7, там же о копировании идёт речь?
(0015390)
2useven10 (developer)
2017-06-09 12:21

Насколько я помню, в обоих случаях используется ScanTree.
(0015391)
shmuel (developer)
2017-06-09 12:33

Внутренняя кухня Фара к делу относиться не должна. Если используется одна и та же внутренняя функция, значит её можно вызывать с разными параметрами. Если нужного параметра нет - можно добавить.
(0015392)
2useven10 (developer)
2017-06-09 13:42

Сейчас параметра нет. Можете добавить что-нибудь вроде
FSCANTREE_DEDUP = 0x00000008
Код который был до b4796, вроде бы с этим справлялся.
Правда не уверен, что все будут согласны с тем, что поиск должен работать так...
(0015393)
DrKnS (administrator)
2017-06-09 14:13

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

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

Эксперименты "до 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


У меня все больше сомнений в необходимости этого хака.
Надо, наверное, выкинуть.
(0015394)
shmuel (developer)
2017-06-09 14:18

Сейчас заметил, что эта особенность (включать в обработку дубликаты) имеет место и на Quick View, то-есть и общее количество файлов, и суммарный их размер включают в себя соответственно количество и размер дубликатов.
(0015395)
2useven10 (developer)
2017-06-09 14:30
edited on: 2017-06-09 18:19

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

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

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

(0015396)
DrKnS (administrator)
2017-06-09 15:21

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

Как уже справедливо отмечено выше, идеального варианта нет и борьба с этим имеет побочные эффекты.
(0015397)
2useven10 (developer)
2017-06-09 16:39

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

изменения в 4796 небольшие.
скрестить ежа с ужом вполне можно.
сделал для теста почти автоматический мёрж и 1-2-3 схему - вполне работает.
(0015399)
DrKnS (administrator)
2017-06-09 18:34

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

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

На мой взгляд - чем меньше программа думает за пользователя, что ему лучше - тем лучше.
(0015400)
2useven10 (developer)
2017-06-09 19:21
edited on: 2017-06-09 19:23

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

(0015401)
DrKnS (administrator)
2017-06-09 20:13

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

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

Пользователь уже решил, что хочет дубли, создав такой линк и поставив птичку "ходить по симлинкам", разве нет?
(0015402)
shmuel (developer)
2017-06-09 20:21

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

На мой взгляд, если мы даём юзеру количество файлов и суммарный размер, то любой вариант, включающий дубли - это обман пользователя. Если реальных файлов, к примеру, 398, а мы говорим, что их 1007 - это обман.
(0015403)
DrKnS (administrator)
2017-06-09 20:28

Shmuel, "дубли не показывает, потому что вообще по линкам не ходит" или "дубли не показывает, потому что их каким-то образом фильтрует"?
(0015404)
DrKnS (administrator)
2017-06-09 20:30

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

К хардлинкам это тоже относится?
(0015405)
shmuel (developer)
2017-06-09 21:05
edited on: 2017-06-09 21:06

@DrKnS

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

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

(0015406)
2useven10 (developer)
2017-06-09 21:16

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

Нет. Я пользователь, я создал линки потому что они мне были нужны, удобны - причина не важна.
Когда я создавал линки, я ни разу не решал, что теперь хочу считать свои файлы в 5-ти экземплярах.
Но при этом мне это навязывают.
(0015424)
2useven10 (developer)
2017-06-14 20:06

Тотал считает дубли, если линк проходимый, т.е. сейчас 'как фар'.
Я бы сделал поиск и размер настраиваемыми с умолчанием - считать.
(0015425)
shmuel (developer)
2017-06-14 21:12
edited on: 2017-06-14 21:16

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


(0015426)
2useven10 (developer)
2017-06-14 22:55
edited on: 2017-06-14 22:56

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

(0015427)
shmuel (developer)
2017-06-14 22:59

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

Возможно (не проверял). Но он не считает дубликаты как файлы.
(0015428)
2useven10 (developer)
2017-06-14 23:03
edited on: 2017-06-15 03:21

точнее в хинте показывает их в 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



Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker