Bug 25992

Summary: filetrigger again.
Product: Sisyphus Reporter: viy <viy>
Component: fontconfigAssignee: Sergey V Turchin <zerg>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: shrek, zerg
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
fontconfig.filetrigger
none
fontconfig.filetrigger.zerg none

Description viy 2011-08-04 21:19:58 MSK
Сергей, Валерий, извиняюсь опять, 
поскольку fc-cache это fontcontfig, то неправильно привязываться 
к fints.dir, так как там его может и не быть, см.
http://lists.altlinux.org/pipermail/devel/2011-August/191583.html
поэтому предлагаю второй вариант.

#!/bin/sh -efu
egrep -o '^/usr/share/fonts/.+/.+\.(ttf|otf|ttc|pcf|pcf.gz|afm|pfb)$' |
sed -e 's,/[^/]*$,,' | sort -u |
while read -r font_dir; do
        [ -d "$font_dir" ] && fc-cache "$font_dir"
done
Comment 1 viy 2011-08-04 21:31:52 MSK
Created attachment 5035 [details]
fontconfig.filetrigger

прикладываю fontconfig.filetrigger
Comment 2 Sergey V Turchin 2011-08-05 15:37:59 MSK
А может все-таки проще
grep -qs '^/usr/share/fonts/' && /etc/firsttime.d/fontconfig ||:
?
Comment 3 viy 2011-08-05 15:58:13 MSK
(В ответ на комментарий №2)
> А может все-таки проще
> grep -qs '^/usr/share/fonts/' && /etc/firsttime.d/fontconfig ||:

Разница во времени выполнения составляет более 500 раз (повторные прогоны,
файловая система закеширована):

$ time sudo ls /usr/share/fonts |./fontconfig.filetrigger
sudo ls /usr/share/fonts  0,00s user 0,01s system 75% cpu 0,011 total
./fontconfig.filetrigger  0,00s user 0,00s system 36% cpu 0,011 total

$ time sudo /etc/firsttime.d/fontconfig             
Updating fonts cache:                                                   [ DONE ]
sudo /etc/firsttime.d/fontconfig  4,74s user 0,12s system 70% cpu 6,887 total
Comment 4 Sergey V Turchin 2011-08-05 16:38:08 MSK
(В ответ на комментарий №3)
> более 500 раз
Это сравнение ежа с ужом.
Для такого мой вариант должен обрабатывать в 500 раз больше шрифтов. Логично, не правда ли?
Единственный вариант, когда это может быть если в /usr/share/fonts обновились файлы, для которых fc-cache не нужно запускать вообще.
Comment 5 Sergey V Turchin 2011-08-05 16:40:57 MSK
Created attachment 5036 [details]
fontconfig.filetrigger.zerg
Comment 6 viy 2011-08-05 17:51:45 MSK
нет :)
Сергей, вы не обратили внимания на опцию --force в /etc/firsttime.d/fontconfig.
именно она дает разницу в 500 раз, так как делает ненужную работу.
как вам такой вариант?
#!/bin/sh -efu
grep -qs '^/usr/share/fonts/' && /usr/bin/fc-cache --system-only
Comment 7 Sergey V Turchin 2011-08-05 18:08:06 MSK
(В ответ на комментарий №6)
> --force
> именно она дает разницу в 500 раз, так как делает ненужную работу.
Для этого примерно в 500 раз каталогов больше должно сканироваться.
Это возможно только когда сканировать ничего не надо.
В общем, повторил то же самое другими словами.
Comment 8 Sergey V Turchin 2011-08-05 18:09:45 MSK
(В ответ на комментарий №6)
> как вам такой вариант?
> #!/bin/sh -efu
> grep -qs '^/usr/share/fonts/' && /usr/bin/fc-cache --system-only
Не против.

P.S.
Просто я за надежность, особенно, если ничего не стОит.
Comment 9 viy 2011-08-05 18:22:30 MSK
(В ответ на комментарий №7)
> (В ответ на комментарий №6)
> > --force
> > именно она дает разницу в 500 раз, так как делает ненужную работу.
> Для этого примерно в 500 раз каталогов больше должно сканироваться.

прошу прощения, но как я понимаю, что с --force, что без, fc-cache сканирует 
одинаковое число каталогов, но без --force, если в /var/cache/fontconfig
кеш уже найден, то fc-cache пойдет дальше, а с --force перегенерирует этот кеш заново. т.е. без --force fc-cache создаст кеш только для свежеустановленных 
пакетов, а с --force будет повторно обрабатывать все установленные шрифты.

без --force fc-cache отрабатывает мгновенно, а с --force
он требует 5 сек. для `rpm -qa| grep fonts- | wc`=62 пакетов скриптов
на машине athlonII250 12Gb memory.
Тогда на нетбуке или древней машине может и до минуты отрабатывать.
Что неприемлемо.
Comment 10 Sergey V Turchin 2011-08-05 18:48:04 MSK
(В ответ на комментарий №9)
> с --force будет повторно обрабатывать все установленные шрифты.
Да
 
> без --force fc-cache отрабатывает мгновенно
Нет, т.к. grep отсеет эти случаи.

>, а с --force он требует 5 сек.
Это и есть время его работы,
а 62 пакета Китайских и др. шрифтов даже идиот ставить не будет.

> может и до минуты отрабатывать. Что неприемлемо.
По мне это приемлимо, учитывая, что все равно шрифтов будет гораздо меньше.
Comment 11 Sergey V Turchin 2011-08-05 18:52:50 MSK
Валер, ты как насчет
#!/bin/sh -efu
grep -qs '^/usr/share/fonts/' && /usr/bin/fc-cache --system-only

?
Comment 12 viy 2011-08-05 19:00:38 MSK
(В ответ на комментарий №10)
> а 62 пакета Китайских и др. шрифтов даже идиот ставить не будет.
примеры из жизни есть. 

> > без --force fc-cache отрабатывает мгновенно
> Нет, т.к. grep отсеет эти случаи.
> >, а с --force он требует 5 сек.
> Это и есть время его работы,
при чем здесь grep? grep сработает, даже если установился или удалился только один шрифт.
а перегенерировать кеш заново для всех остальных шрифтов -- какой в этом смысл?
зря только время тратить.
Comment 13 Sergey V Turchin 2011-08-05 19:11:28 MSK
(В ответ на комментарий №12)
> (В ответ на комментарий №10)
> > а 62 пакета Китайских и др. шрифтов даже идиот ставить не будет.
> примеры из жизни есть. 
Ну, там машина вряд ли слабая.

> при чем здесь grep? grep сработает, даже если установился или удалился только
> один шрифт.
Даже если у нас появиться такой пакет, то его одного можно в расчет не принимать.

> а перегенерировать кеш заново для всех остальных шрифтов
> -- какой в этом смысл?
> зря только время тратить.
Случаи разные бывают. Так надежнее.
Comment 14 viy 2011-08-05 19:23:33 MSK
В общем, все предложенные реализации более корректны, чем имеющаяся, 
так что какая бы реализация ни была выбрана, это уже шаг вперед.
Суть моих замечаний в том, что некоторые из обсуждаемых здесь реализация
злоупотребляют опцией --force, см.
man fc-cache
       -f     Force  re-generation of apparently up-to-date cache files, over‐
              riding the timestamp checking.
что приведет к слишком тормозной реализации. та же реализация, но без
--force будет такой же корректной, но в сотни раз быстрее из-за отсутствия там re-generation of apparently up-to-date cache files.
Comment 15 Sergey V Turchin 2011-08-05 19:25:50 MSK
(В ответ на комментарий №14)
> без --force
да я ж писал, что не против
Comment 16 viy 2011-08-05 19:29:39 MSK
(В ответ на комментарий №15)
> да я ж писал, что не против
Сорри. Прошу прощения.
Comment 17 viy 2011-08-17 17:49:48 MSK
как там с улучшенным файлтриггером?
я уже больше сотни пакетов повыкладывал в расчете на этот файлтриггер,
не говоря уже и что полиси под него написал,
в общем, нужен срочно.
Comment 18 Sergey V Turchin 2011-08-17 17:53:45 MSK
Валер, ты доступен? А то я сделаю.
Comment 19 Repository Robot 2011-08-17 18:20:57 MSK
fontconfig-2.8.0-alt8 -> sisyphus:

* Wed Aug 17 2011 Valery Inozemtsev <shrek@altlinux> 2.8.0-alt8
- updated fontconfig.filetrigger (closes #25992)
Comment 20 Sergey V Turchin 2011-08-17 18:27:51 MSK
Ты uniq после sort забыл
Comment 21 Repository Robot 2011-08-18 20:02:41 MSK
fontconfig-2.8.0-alt8 -> t6:

* Wed Aug 17 2011 Valery Inozemtsev <shrek@altlinux> 2.8.0-alt8
- updated fontconfig.filetrigger (closes #25992)
Comment 22 Sergey V Turchin 2011-08-19 14:49:25 MSK
(В ответ на комментарий №20)
> Ты uniq после sort забыл
Фигню написал, извиняюсь