mc-dev
mc-dev@conference.jabber.ru
[03:32:46] monkey зашёл в конференцию
[04:16:59] andrew_b зашёл в конференцию
[05:02:45] monkey вышел из конференции: Этого участника выгнали из комнаты за то, что он послал присутствие с ошибкой: remote-server-not-found
[05:12:33] monkey зашёл в конференцию
[06:07:04] repolainen зашёл в конференцию
[06:10:07] <repolainen> давно я папке не удалял, в которых нахожусь:
1. создаем папку /tmp/y
2. в левой панели переходим в /tmp/y, в правой переходим в /tmp
3. удаляем 'y' по F8
4. видим ошибку, которую нельзя извести: 'Внутренняя ошибка: vfs_path_get_by_index: incorrect index!'
[06:15:14] slavazanko/h зашёл в конференцию
[06:28:52] <andrew_b> Да, есть такое.
[06:58:16] <andrew_b> slavazanko/h: panel_reload().
Там
4161 panel_cwd_path = vfs_path_as_str (panel->cwd_vpath);
4169 last_slash = strrchr (panel_cwd_path, PATH_SEP);
4170 vfs_path_free (panel->cwd_vpath);
4171 if (last_slash == NULL || last_slash == panel_cwd_path)
4172 panel->cwd_vpath = vfs_path_from_str (PATH_SEP_STR);
4173 else
4174 {
4175 *last_slash = '\0';
4176 panel->cwd_vpath = vfs_path_clone (panel->cwd_vpath);
4177 }
Тут обращение к удалённой строке:
4170 vfs_path_free (panel->cwd_vpath);
4171 if (last_slash == NULL || last_slash == panel_cwd_path)
Это раз.
Мне кажется, что vfs_path_clone() будет выдавать некорректный результат, если обрезать строку vfs_path_t::str.
[06:58:48] <andrew_b> Наверное, нельзя напрямую лазить в vfs_path_t::str, как в
4175 *last_slash = '\0';
[07:01:36] <slavazanko/h> м-м-м. мдым. Проблем оказалось больше, чем профита :(
Ок, исправлю в клинапе
[07:02:02] <andrew_b> Кажись, мы ещё долго будем это вычищать.
[07:02:33] <andrew_b> А вроде как уже к релизу надо готовиться.
[07:02:44] <slavazanko/h> да не. Я сейчас просто поищу, где использкется vfs_path_as_str и вдумчиво посмотрю код.
[07:03:10] <andrew_b> Вот щас как раз конкретный случай давай исправим.
[07:03:33] <slavazanko/h> угу
[07:05:37] <andrew_b> Типа так:
diff --git a/src/filemanager/panel.c b/src/filemanager/panel.c
index 2768f26..217b374 100644
--- a/src/filemanager/panel.c
+++ b/src/filemanager/panel.c
@@ -4167,13 +4167,19 @@ panel_reload (WPanel * panel)
return;
}
last_slash = strrchr (panel_cwd_path, PATH_SEP);
- vfs_path_free (panel->cwd_vpath);
if (last_slash == NULL || last_slash == panel_cwd_path)
+ {
+ vfs_path_free (panel->cwd_vpath);
panel->cwd_vpath = vfs_path_from_str (PATH_SEP_STR);
+ }
else
{
+ vfs_path_t *tmp;
+
+ tmp = panel->cwd_vpath;
*last_slash = '\0';
- panel->cwd_vpath = vfs_path_clone (panel->cwd_vpath);
+ panel->cwd_vpath = vfs_path_from_str (panel_cwd_path);
+ vfs_path_free (tmp);
}
memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
show_dir (panel);
[07:06:03] <andrew_b> Но мне не нравится
*last_slash = '\0'
[07:06:47] <andrew_b> Если бы была копия panel_cwd_path, тогда ещё ничего.
[07:07:04] <slavazanko/h> разберусь...
[07:08:54] <andrew_b> diff --git a/src/filemanager/panel.c b/src/filemanager/panel.c
index 2768f26..baefbf6 100644
--- a/src/filemanager/panel.c
+++ b/src/filemanager/panel.c
@@ -4153,17 +4153,18 @@ panel_reload (WPanel * panel)
do
{
char *last_slash;
- const char *panel_cwd_path;
+ char *panel_cwd_path;
if (mc_chdir (panel->cwd_vpath) != -1)
break;
- panel_cwd_path = vfs_path_as_str (panel->cwd_vpath);
+ panel_cwd_path = g_strdup (vfs_path_as_str (panel->cwd_vpath));
if (panel_cwd_path[0] == PATH_SEP && panel_cwd_path[1] == '\0')
{
panel_clean_dir (panel);
panel->count = set_zero_dir (&panel->dir) ? 1 : 0;
+ g_free (panel_cwd_path);
return;
}
last_slash = strrchr (panel_cwd_path, PATH_SEP);
@@ -4173,8 +4174,9 @@ panel_reload (WPanel * panel)
else
{
*last_slash = '\0';
- panel->cwd_vpath = vfs_path_clone (panel->cwd_vpath);
+ panel->cwd_vpath = vfs_path_from_str (panel_cwd_path);
}
+ g_free (panel_cwd_path);
memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
show_dir (panel);
}
[08:07:19] slavazanko/h вышел из конференции
[08:11:50] slavazanko/h зашёл в конференцию
[08:41:30] slyfox^w зашёл в конференцию
[08:53:30] monkey вышел из конференции
[08:53:30] monkey зашёл в конференцию
[09:12:26] smind зашёл в конференцию
[09:18:58] <smind> slavazanko/h: м-м-м. мдым. Проблем оказалось больше, чем профита :(
вы о чём?
[09:20:08] <andrew_b> Вытаптываем неготивные последствия 2640b21bb9700aa51a70f35f9e10732c82a7366f
[09:20:15] <andrew_b> негативные
[09:29:49] smind вышел из конференции: Replaced by new connection
[09:29:59] smind зашёл в конференцию
[09:34:08] <smind> >andrew_b: Вытаптываем неготивные последствия
mc - ВСЁ?
[09:34:19] <smind> я из отпуска вернулся
[09:34:20] <slavazanko/h> чойта?
[09:34:23] <slavazanko/h> о!
[09:34:25] <slavazanko/h> ты с нами?
[09:34:29] <smind> да
[09:34:40] <slavazanko/h> гуд. Поревьювай тогда, плиз.
[09:34:44] <slavazanko/h> что там накопилось
[09:36:05] <andrew_b> А накопилось там изрядно.
[09:36:31] <smind> да
[09:36:42] <smind> я ещё вчера пытался...
[09:37:41] <andrew_b> Ниасилил?
[09:39:26] <smind> дак
[09:39:56] <smind> andrew_b, почему http://www.midnight-commander.org/changeset/501bba223f2286154acbb50686f3d6bc3a6dc176/ в клинапе... я вот не понял например
[09:41:18] <andrew_b> Ну... Могу убрать.
[09:42:08] <andrew_b> Убрал.
[09:42:52] <andrew_b> Ты с клинапом погоди пока.
[09:44:45] <smind> ?
[09:45:04] <andrew_b> Там работа идёт.
[09:45:07] <smind> наоборот мелкое влить и
[09:45:18] <smind> а потом пускай идёт работа
[09:45:31] <smind> а то может получиться "как всегда"
[09:46:09] <andrew_b> Слава в клинапе вытается исправить баги 2640b21bb9700aa51a70f35f9e10732c82a7366f.
[09:46:29] <smind> ээх
[09:46:31] <andrew_b> Смотри мелкое в https://www.midnight-commander.org/report/9
[09:46:31] <slavazanko/h> да
[09:46:55] <smind> клинап это именно что клинап
[09:47:04] <smind> а не заделывалка брешей
[09:47:14] <slavazanko/h> заделывание брешей после клинапа
[09:47:36] <andrew_b> У гас клинап -- это то, на что лень тикеты заводить.
[09:47:43] <smind> andrew_b: Слава в клинапе вытается исправить баги 2640b21bb9700aa51a70f35f9e10732c82a7366f.
а вот это и есть заделывание
[09:48:11] <smind> на исправление можно было бы и завести тикет
[09:48:26] <andrew_b> smind: ты посмотри, как твой любимый Фар разрабатывается. Вот где заделывание.
[09:48:39] <smind> эне..
[09:48:53] <smind> он любимый только снаружи
[09:48:58] slavazanko вышел из конференции
[09:49:14] <smind> то как там они гадят в каждом коммите мне даже смотреть страшно
[09:49:26] <smind> это плохой аргумент
[09:59:50] <slavazanko/h> Андрей, я подпушил в 1743_mcedit_file_size
но там остаётся проблема: тест в кору выпадает. наверное, надо как-то буфер проинициализировать правильно. Я сейчас не разбирался долго, как его правильно заюзать, потом поплотнее бранч гляну. Если не трудно, посмотри плиз последний коммит в ветке
[10:00:48] <andrew_b> ok
[10:01:04] <smind> >1743_mcedit_file_size
ok, потесчу
[10:27:00] <smind> andrew_b, у тебя на госуслугах есть экаунт?
[10:27:09] monkey вышел из конференции: Этого участника выгнали из комнаты за то, что он послал сообщение об ошибке другому участнику: remote-server-not-found
[10:27:14] <andrew_b> Да.
[10:28:24] <smind> проголосовал на сайте roi.ru за инициативу про машины?
[10:28:57] <andrew_b> Что за?
[10:29:20] <smind> Запрет чиновникам и сотрудникам компаний с государственным (муниципальным) участием приобетать легковые автомобили стоимостью свыше 1.5 миллионов рублей.
[10:29:57] <andrew_b> Служебные?
[10:40:22] <smind> да
[10:41:38] <andrew_b> Вспоминаю, что я за что-то хотел проголосовать, может быть, как раз и за это. Но аккаунта на Госуслугах им покахалось мало, и они захотели мой номер телефона.
[10:41:50] <andrew_b> А я не захотел.
[10:42:01] <andrew_b> Так мы и разошлись.
[10:44:45] <andrew_b> slavazanko/h: падало в парсере чисел из-за
char *option_filesize_threshold = NULL;
Можно сделать
-char *option_filesize_threshold = NULL;
+char *option_filesize_threshold = "64M";
можно добавить в парсер обработку NULL,
можно в самом тесте сделать
option_filesize_threshold = "64M";
[10:45:55] <slavazanko/h> гм... а в коде оно всегда будет проинициализировано? Или возможны случаи, когда оно с NULL будет?
[10:47:26] <andrew_b> Оно из конфига читается.
src/setup.c:
376 { "editor_filesize_threshold", &option_filesize_threshold, "64M" },
По идее, никогда NULL не будет.
[10:50:55] <andrew_b> В тесте добавлю.
[10:54:38] monkey зашёл в конференцию
[10:54:41] <smind> >Госуслугах им покахалось мало, и они захотели мой номер телефона.
вроде нет
[10:54:49] <smind> иди проголосуй
[10:54:53] monkey вышел из конференции: Этого участника выгнали из комнаты за то, что он послал сообщение об ошибке другому участнику: remote-server-not-found
[10:55:16] <andrew_b> Урл скажи.
[11:02:28] monkey зашёл в конференцию
[11:53:32] <smind> андрей
[11:55:59] imho2 зашёл в конференцию
[12:06:46] <smind> скажи почему так долго происходит переход от конца файла к началу?
[12:07:19] <andrew_b> О, я ждал этого вопроса!
[12:07:33] <andrew_b> В общем так.
[12:07:45] <smind> ага
[12:10:43] <andrew_b> В редакторе используется модель хранения текста, которая называется GapBuffer.
Суть его заключается в том, что текст хранится в двух буферах:
1. от начала файла и до позиции курсора
2. от курсора до конца файла.
Соответственно, при любом перемещении курсора часть текста переносится из одного буфера в другой. Всегда.
В предельном случае получаем прыжок из начала файла в конец или из конца в начало. При этом весь текст переносится из одного буфера в другой.
[12:11:54] <andrew_b> Текст копируется побайтно.
[12:12:27] <andrew_b> Можно, конечно, попробовать копировать блоками, но это тема для отдельного тикета.
[12:15:13] <smind> "там буфера какие-то перезаполняются?" это я написал, но вижу что версия моя оказалась верной
[12:16:20] <andrew_b> Дополнительное замедление производит раскраска синтаксиса.
[12:16:37] <smind> не
[12:16:47] <smind> да, но не сейчас
[12:17:36] <andrew_b> GapBuffer -- это простейший алгоритм.
[12:17:51] <andrew_b> Их много.
[12:17:56] <andrew_b> Например, дерево.
[12:18:37] <andrew_b> Но я переделать редактор не потяну.
[12:18:44] <smind> но мы же так кардинально не будем менять редактор?
[12:18:56] <smind> я не успеваю задавать вопросы
[12:19:00] <andrew_b> Нет.
[12:19:07] <smind> ты отвечаешь быстрее )
[12:19:35] <andrew_b> libastral.so обновил.
[12:27:02] <slyfox^w> :]
[12:40:12] Зоська Синицкая зашёл в конференцию
[13:00:32] <smind> - if [ ! -x $UNRAR -a -x $RAR ]; then
- UNRAR=$RAR
+ [ -z $UNRAR ] && UNRAR=$RAR
[13:00:45] <smind> откуда такая нелюбовь в if ?
[13:01:07] <andrew_b> Короче.
[13:01:38] <smind> но есть же общеупотребимая практика
[13:02:07] <andrew_b> Это спорно.
[13:02:59] <slavazanko/h> а кто спорит?
[13:03:35] <andrew_b> Не в это смысле.
[13:05:08] <slyfox^w> :]
[13:05:18] <slyfox^w> есть еще более извратский вариант
[13:05:34] <slyfox^w> ${UNRAR:-${RAR}}
[13:06:11] <slyfox^w> или ${UNRAR:=${RAR}} для установки и использования
[13:06:13] <andrew_b> А это не башизм?
[13:06:18] <slyfox^w> неа
[13:07:09] <slyfox^w> http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html 2.6.2 Parameter Expansion
[13:08:34] <andrew_b> Ну, можно и так.
[13:10:27] <slyfox^w> обычно, большие скрипты начинаются с установки дефолтов: ': ${CC:=gcc} ${...}', если не заданны как внешние переменные (основное дерево ебилдов gentoo всё в таких конструкциях, но там и башизма много :])
[13:14:56] <smind> попрошу без экстремизма
[13:16:50] <slyfox^w> it is not :]
[13:24:32] Зоська Синицкая вышел из конференции: Перезапуск по команде от psi+
[13:25:30] Зоська Синицкая зашёл в конференцию
[13:26:45] andrew_b вышел из конференции
[13:33:16] imho2 вышел из конференции
[14:13:08] <slavazanko/h> подфиксил и упорядочил в клинапе
[14:24:33] theMIROn зашёл в конференцию
[14:30:06] monkey вышел из конференции
[14:30:06] monkey зашёл в конференцию
[16:02:39] iliamaslakov зашёл в конференцию
[16:08:45] monkey вышел из конференции
[16:09:20] <theMIROn> hi, mcdudes
[16:09:36] <slavazanko/h> hi
[16:10:37] <theMIROn> I've asked about patchfs & patchutils here recently, any news?
[16:12:05] <slavazanko/h> would you reminder when you asked us here? Sorry, I don't remember, was a lot of events not so long time ago...
[16:15:12] monkey зашёл в конференцию
[16:20:07] slavazanko/h вышел из конференции
[16:27:58] andrew_b зашёл в конференцию
[16:30:12] <iliamaslakov> theMIROn, Привет
[16:30:37] <theMIROn> недавно писал тут, правда ночь.
[16:30:54] <theMIROn> идея следующая - сейчас patchfs использует перловый скрипт для разбора синтаксиса и чанков
[16:31:02] <iliamaslakov> да
[16:31:26] <theMIROn> на diff-ах размеров в 0,5-2Gb оно чуток тормозит :)
[16:31:36] <iliamaslakov> таак
[16:31:46] <iliamaslakov> а предложение?
[16:32:15] <theMIROn> при этом, утилиты из patchutils - работают с такими файлами в разы быстрее
[16:32:19] <theMIROn> на порядок даже быстрее
[16:32:50] <iliamaslakov> "на порядок" и есть в "разы" :)
[16:32:52] <theMIROn> в плане фильтрации, н-р. удаляем папку - фильтруем original по полному имени в dst за раз
[16:33:11] <theMIROn> копируем вовнутрь - аналогично добавлению
[16:33:27] <iliamaslakov> а патч то где?
[16:33:28] <theMIROn> ну 1 сутки vs 10 сек - это не на порядок, это в разы разы )
[16:33:38] <theMIROn> нету патча
[16:33:46] <iliamaslakov> 1 порядок это 10 раз
[16:33:48] <theMIROn> я ручками делал
[16:33:57] <iliamaslakov> 2 порядка 100 раз
[16:34:13] <theMIROn> 24*60*60 vs 10 это сколько порядков? )
[16:34:39] <theMIROn> вобщем, комьюнити, большая просьба рассмотреть этот фича реквест...
[16:35:03] <iliamaslakov> 4 порядка
[16:35:50] <theMIROn> я вот только не знаю даже, что насчет зависимости от patchutils. если делать изменения в patchfs скрипте, они потребуется
[16:36:00] <theMIROn> *ются
[16:36:47] <iliamaslakov> >фича реквест...
без патча, и описания идеи в тикете вряд ли "взлетит"
[16:37:59] <theMIROn> странно, неужели ни у кого нет диффов на пол гига и больше?
[16:38:45] <iliamaslakov> нет )
[16:38:53] <iliamaslakov> а где взять?
[16:41:17] <theMIROn> гм. ну например так: взять 2.4 и 3.10 ядра и сделать им diff -BurpN > huge.diff
[16:41:34] <iliamaslakov> )
[16:41:38] <theMIROn> а, не проще даже
[16:41:41] <theMIROn> одного достаточно
[16:41:49] <theMIROn> с пустой папкой )
[16:41:56] <andrew_b> slavazanko/h: кое-чего потерял.
[16:42:37] <andrew_b> Было
708 static void
709 put_other_path (void)
710 {
711 vfs_path_t *cwd_vpath;
712
713 if (get_other_type () != view_listing)
714 return;
Теперь
713 if (get_other_type () != view_listing)
714 return;
нету.
[16:43:35] <iliamaslakov> theMIROn, а как в патчфс с такой глыбой то работать?
[16:45:55] <theMIROn> паттерн простой: или отсекаем ненужное на будущее, или при copyoute - копируем только нужное, не перебирая его весь. т.е filterdiff -x/-i
[16:46:22] <iliamaslakov> theMIROn, т.е. ты экспериментально проверил что если не строить дерево на том-же huge.diff то скотость возрастает на порядки?
[16:46:30] <theMIROn> так же lsdiff можно заюзать для *быстрого" получения списка "файлов". только вот с размером... беда.
[16:47:20] <theMIROn> да. скорость при манипулировании с файлом возрастает из-за обработки по шаблону
[16:47:38] <theMIROn> а при чтении списка - из-за perl ops vs lsdiff
[16:48:00] <iliamaslakov> т.е. берём huge.diff в нём руками удаляем инфу о вложенности и открывая в patchfs всё начинает летать, так?
[16:49:52] <theMIROn> не. допустим есть дерево: a/dir1, a/dir2, a/dir3, dir2 ваще не интересно. но занимает 70% объема. берем и исключаем его filterdiff -x "a/dir2/*" > new.diff. уже с ним работать стандартным patchfs гораздо комфортнее
[16:49:56] <andrew_b> Можно сделать новый вариант patchfs и оставить старый. А выбирать их через какую-нибудь переменную окружения.
[16:50:01] <theMIROn> это - по факту - операция удаления
[16:50:44] <theMIROn> если из этого же примера интересно только a/dir3/file.c - то filterdiff -i "a/dir3/file.c" - т.е copyout
[16:51:39] <theMIROn> copyin - combinediff
[16:52:02] <theMIROn> andrew_b: угу, это acceptable
[16:52:56] <iliamaslakov> filterdiff -x "a/dir2/*" > new.diff. уже с ним работать
и как это сделать?
[16:54:35] <iliamaslakov> т.е. как это должно происходить визуально
[16:54:44] <theMIROn> iliamaslakov: да так же как сейчас в patchfs делается
[16:54:57] <iliamaslakov> что мы нажимаем что ожидаем?
[16:55:12] <iliamaslakov> шаг за шагом
[16:55:22] <theMIROn> а, вот ты про что. визуально никаких изменений
[16:55:42] <theMIROn> изменения только в extfs.d/patchfs
[16:56:20] <theMIROn> сейчас там parse(original) > tmpfile; cat tmpfile > original; rm tmpfile
[16:56:33] <iliamaslakov> понял...
[16:57:18] <theMIROn> parse() кадрый раз пробегается по всем ханкам, и, что хуже, вызывается по 1 разу на каждый вложенный файл, в случае с ядром - это капец
[16:57:36] <theMIROn> в случае filterdiff вложенное дерево - малоинтересно
[16:58:08] <theMIROn> filterdiff -x $dir[or file] > tmpfile
[16:58:18] <theMIROn> и т.п. за один раз и гораздо быстрее
[16:59:04] <theMIROn> аналогично с copyout (dilterdiff -i), copyin (combinediff)
[17:04:52] <theMIROn> c list будет проблемка - lsdiff не строит дерево и не возвращает размер файлов
[17:59:07] <andrew_b> slavazanko/h: немного исправил в клинапе.
[18:02:21] andrew_b вышел из конференции
[18:21:18] monkey вышел из конференции
[18:46:09] iliamaslakov вышел из конференции: Replaced by new connection
[18:46:10] iliamaslakov зашёл в конференцию
[20:05:05] theMIROn вышел из конференции
[20:05:13] theMIROn зашёл в конференцию
[20:06:04] theMIROn вышел из конференции
[20:07:55] theMIROn зашёл в конференцию
[20:10:54] theMIROn вышел из конференции: Miranda IM. Menshe. Pushche. Proshhe!
[20:11:12] theMIROn зашёл в конференцию
[20:12:04] theMIROn вышел из конференции
[20:26:18] D-ion вышел из конференции: Replaced by new connection
[20:26:21] D-ion зашёл в конференцию
[20:35:41] theMIROn зашёл в конференцию
[20:40:39] repolainen вышел из конференции: Replaced by new connection
[20:40:48] repolainen зашёл в конференцию
[20:52:35] theMIROn вышел из конференции
[20:53:00] Зоська Синицкая вышел из конференции
[21:29:12] iliamaslakov вышел из конференции: Machine going to sleep