Маски файлов в API

Разработка Far.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Latest post of the previous page:

http://bugs.farmanager.com/view.php?id=1087
Еще про диалоги при ошибках в SetPanelDirectory. Не убедил. В итоге приходится самому до вызова проверять, что директория есть. В случае с хитрыми и длинными путями это еще и не так просто в Фарнет сделать. Нелепо это делать, а приходится, чтобы избегать диалога. (Авто-тесты не должны вставать из-за диалога, но это не единственная причина).
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

DrKnS wrote:Мне не сильно нравится новый код возврата тем, что ProcessName как бы BOOL, и если кто-то в коде делал так: [...]
- то условие тихо и незаметно сработает и для PNR_BADMASK тоже.
Но мы же ещё не закончили слом API, поэтому можно просто задокументировать ф-цию как возвращающую int, а в changelog'е упомянуть о несовместимости. Нельзя разрулить эту ситуацию, ничего не ломая (ну не добавлять же новую функцию).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

А я разделяю опасения DrKnS. Если просто поменять код возврата, то все будет продолжать работать, но неправильно. Это опасно, пользователи ченжлоги не читают, плагины не обновляют, ибо "вроде работает". А когда заметят, что не те файлы удалялись по маскам, будет поздно.

Давайте добавим новую функцию, а старая пусть возращает отлуп всегда. Через разумное время старую из апи убрать.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Маски файлов

Post by Alexey Samlyukov »

не годится. оставить одну, но в аргументах структура и код возврата int.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

DrKnS wrote:Мне не сильно нравится новый код возврата тем, что ProcessName как бы BOOL, и если кто-то в коде делал так:

Code: Select all

if(fsf.processname(blabla))
{
   MyHadronCollider->Collapse();
}
- то условие тихо и незаметно сработает и для PNR_BADMASK тоже.

Можете считать паранойей, да.
Тогда так (в новой! функциии)

Code: Select all

enum ProcessNameReturn {
    PNR_MATCH=0,
    PNR_NOMATCH=1,
    PNR_BADMASK=2
};
Это не гарантия от краха коллайдера по ошибке, но гораздо спокойней.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Alexey Samlyukov wrote:не годится. оставить одну, но в аргументах структура и код возврата int.
А что будет вызываться у тех, кто не обновит плагины?
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Маски файлов

Post by Denis »

Сейчас самый слом апи, так что если ломать, то лучше чем сейчас не будет :)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

Ну зачем же две функции для одного и того же? Я всё надеюсь, что слом API скоро закончится, но сейчас-то ведь можно ломать. А насчёт того, что "пользователи ченджлоги не читают" - это проблема только этих пользователей.

Есть компромиссный вариант (выше уже упоминалось) - оставить функцию как возвращающую BOOL, но добавить флаг: PN_DISABLEMESSAGEBOX или PN_ENABLEMESSAGEBOX, в зависимости от выбора поведения по умолчанию. (Лично мне этот компромисс не нравится, но он существует).
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

Как мне кажется, нашёл решение, которое ничего не ломает и всех должно устроить.
Просто добавить операцию PN_CHECKMASK (или PN_TESTMASK), первый параметр - маска, второй - игнорируется. Проверка маски на валидность.
Это логично - прежде, чем запускать поиск файла по маске на дереве, содержащем тысячи файлов, нужно сначала проверить маску.

Мнения?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Shmuel wrote:Мнения?
Вариант, да. Может и не перфектный, но может сойти.

Минус один - парсинг два раза будет делаться (сначала плуг зовет проверку, потом работу).

UPD - Точнее, на один вызов будет больше, это может и неважно, если файлов много. А если мало, то невелика потеря от лишней проверки. Так что нормальный вариант, а минус небольшой.
Last edited by NightRoman on Fri 02 Mar, 2012 11:34, edited 1 time in total.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

Кстати, последнее решение может обойтись даже без дополнительного кода операции: если второй параметр передан как NULL, считать это операцией проверки маски.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

Shmuel wrote:Мнения?
Флаги.

PN_SHOWERRORMESSAGE - показать сообщение, если маска не взлетела.
PN_VERBOSERESULT - вернуть подробный результат - <совпало/не совпало/кривая маска/тут_что_нибудь_еще_потом>

По умолчанию сообщения нет и результат булевый.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

DrKnS wrote:Флаги.

PN_SHOWERRORMESSAGE - показать сообщение, если маска не взлетела.
PN_VERBOSERESULT - вернуть подробный результат - <совпало/не совпало/кривая маска/тут_что_нибудь_еще_потом>

По умолчанию сообщения нет и результат булевый.
Не очень-то понял. Вам не нравится моё последнее предложение? Почему?

Это, конечно, тоже годится, типа подсовывать какое-то имя "abc" вторым параметром, указывая PN_VERBOSERESULT только для того, чтобы проверить маску, но выглядит несколько криво. Но да ладно, красота - не главное, важно, что плагин получает полный контроль над ситуацией.
Last edited by Shmuel on Fri 02 Mar, 2012 12:26, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

Shmuel wrote: Не очень-то понял. Вам не нравится моё последнее предложение? Почему?
Перечитал еще раз - нравится.
При проверке только результат возвращать и дальше плагин сам, или пусть фар опционально сообщение показывает?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Маски файлов

Post by Shmuel »

Можно и так, и так (если сообщение опционально).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Но все-таки на один парсинг будет больше. Может, все же одним вызовом все и решать - и работу (match|not-match), и проверку на валидость?
Post Reply

Return to “Development”