- *? *programmingЖуйк, такой вопрос, который я еще с утра хотел задать. Дело в том, что один из кусков личкрафтов зависит от архиватора xz — должен же менеджер распаковывать архивы с описаниями плагинов и самими плагинами. Так вот, что лучше делать?
• Вызывать системный xz, как это сделано сейчас, через QProcess (этакий system())? — тут вендосборщик запротестовал и сказал, что под вендой это выглядит костылем.
• Или таки линковаться с liblzma? — +1 зависимость к и так уже не самому короткому списку.
• Или вообще тащить исходники декомпрессора в своем дереве? — какой-то изврат же. И ваще, а если декомпрессор упадет? Лучше в отдельном процессе же.
Replies (67)
- @arrowdodger:На никсах — смотри на наличие внешней либы и линкйся к ней, если устраивает. На венде — юзай внутреннюю, на винде все так делают, ибо говно.from Gajim, 13 months ago
- @0xd34df00d:@Tishka17 Хреново жмет, да и нужно еще делать выкрутасы — отрезать первые байты от файла и все такое. Как-то совсем через жопу.
- @0xd34df00d:@arrowdodger Дело в том, что liblzma весьма хреново собирается под вендой, как и эмбеддед (второй и третий варианты). Кажется, студия не умеет C99 и придется патчить. Печально, что я забыл это в посте упомянуть.
- @Tishka17:@0xd34df00d зато без внешних зависимостей же. Да и нужно ли тебе сильное сжатие? А с первыми байтами плохо понял. Чтобы удалить лишне, надо же его сначала добавить туда
- @0xd34df00d:@MrFree Весьма ебко. Придется делать обертку поверх нижележащего метода — QProcess в первом случае, оборачивать в QThread или юзать какой QtConcurrent во втором и третьем.
- @arrowdodger:@0xd34df00d Прекомпилед бинариес нет под винду? Ты же не в сорцах будешь распространять свой личкрафт под венду?from Gajim, 13 months ago, in reply to /7
- @0xd34df00d:@Tishka17 Ты жать тоже будешь qcompress'ом? Вот выдержка из манов по qUncompress:
Note: If you want to use this function to uncompress external data compressed using zlib, you first need to prepend four bytes to the byte array that contain the expected length (as an unsigned integer) of the uncompressed data encoded in big-endian order (most significant byte first).
Олсо. там все подряд в иксемеле, а скрипты вообще тоже текстовые, поэтому есть ощущение, что профит от xz либо будет никакой, либо будет офигенный. Чутье подсказывает, что второе )from idead, 13 months ago, in reply to /8 - @0xd34df00d:@arrowdodger Прекомпилед бинарис чего, xz? Вроде только от мингва зависящий, что вообще идиотизм, ибо собираемся мы студией, и тащить два рантайма (пусть даже мингвовый и 10 килобайт) — перебор. Олсо, я забочусь о сборщике под венду же )from idead, 13 months ago, in reply to /10
- @arrowdodger:@wyldrodney М, ну да, зависимость от мингв отстой. Ну поколдуй, чтобы собиралось под винду, патчи отправь авторам. Полезное же дело.from Gajim, 13 months ago, in reply to /13
- @Tishka17:@0xd34df00d так сравни сначала разницу в сжатииfrom kitty [@home], 13 months ago, in reply to /11
- @Tishka17:@0xd34df00d никогда не юзал xz (что-то найти в системе не могу его даже), так что не знаю.from kitty [@home], 13 months ago, in reply to /17
- @0xd34df00d:@Tishka17 BTW qUncompress не сильно мне поможет разархивировать tar-архив, а такие тоже надо уметь. Лень лень лень писать свой костыль для обработки tar'ов.from idead, 13 months ago, in reply to /18
- @0xd34df00d:@analizer Варианты 2 и 3 ведут к осложнениям под вендой — liblzma вообще хреново собирается студией. Но в свете перехода на gzip/bzip все становится интереснее.from idead, 13 months ago, in reply to /21
- @0xd34df00d:@syncro Пичаль же. Придется ручками городить отдельные тредики на все это дело и все такое. И ВДРУГ АРХИВАТОР УПАДЕТ?from idead, 13 months ago, in reply to /24
- @syncro:@0xd34df00d выведешь сообщение красноглазому, что у него орхеватор с корявый и предложешь начать процесс заново, не ?from Psi+, 13 months ago, in reply to /25
- @0xd34df00d:@syncro Если архиватор упадет в основном личкрафтовом процессе, то лучше и все остальные личкрафты прибить. Вдруг он память попортит.from idead, 13 months ago, in reply to /27
- @syncro:@0xd34df00d а ты его не пускай в основном процессе тоfrom Psi+, 13 months ago, in reply to /28
- @0xd34df00d:@syncro А в каком пускать? А чем это тогда лучше, чем вызов unxz -c blabla через QProcess тот же?from idead, 13 months ago, in reply to /29
- @O01eg:@0xd34df00d Можно бинарник архиватора держать рядом с личкрафтами, в винде всё равно нету нормальной папки /binfrom Ψ+, 13 months ago, in reply to /30
- @0xd34df00d:@syncro А, то есть, вместо того, чтобы запускать уже готовый и написанный архиватор, я пишу свой и запускаю его? И это не выглядит, как говно?from idead, 13 months ago, in reply to /31
- @0xd34df00d:@O01eg Форневер какбе говорил, что xz-utils не особо под вендой запускаются. С другой стороны, раз мы все равно решили перейти на gzip, то все уже интереснее. Да и для gzip есть qUncompress — вполне штатная кутешная функция. Останется только ручками парсить tar.from idead, 13 months ago, in reply to /32
- @syncro:@0xd34df00d нет, ты же юзаешь библиотечку в которой все написано, а если тебе не нужен так сильно архиватор чтобы написать пару строк то он вообще не нужен, пусть узер зачивает коммандочки с пайпами. Такие помойму у тебя представления о юниксвее ?from Psi+, 13 months ago, in reply to /33
- @O01eg:@0xd34df00d У Qt же есть свою класс для работы с файловой системой?from Ψ+, 13 months ago, in reply to /34
- @syncro:кароче через купроцесс или другой эмулятор это уебанство, как прогресс показывать например будешь ?from Psi+, 13 months ago
- @0xd34df00d:@O01eg Хм, я опять подумал, что не нужно. Что легче создать папочку в /tmp, типа /tmp/staging, туда распаковать содержимое архива с пакетом (tar xvzf package.tar.gz -C /tmp/staging), а потом его перенести в ~/.leechcraft/..., или куда там.from idead, 13 months ago, in reply to /39
- @0xd34df00d:@syncro А зачем прогресс показывать? Если у тебя такая машина, что распаковка 1-10-100 килобайт заметна по времени, то у меня для тебя плохие новости, бро.from idead, 13 months ago, in reply to /40
- @syncro:@0xd34df00d вот ты в тмп насоздаешь говна, а програмко завалиться и не уберетfrom Psi+, 13 months ago, in reply to /42
- @O01eg:@0xd34df00d Да, распаковывать архивчик на гиг, это удобно.from Ψ+, 13 months ago, in reply to /41
- @0xd34df00d:@syncro Што. Распаковали в tmp, сделали move в ~.lc, всё. Никакого говна.from idead, 13 months ago, in reply to /43
- @0xd34df00d:@O01eg Ты видел экстеншон на гиг к файрфоксу, например? Или к хрому? Максимум — метр-два.from idead, 13 months ago, in reply to /44
- @O01eg:@0xd34df00d Ты делаешь распаковку архивов с расширениями?from Ψ+, 13 months ago, in reply to /46
- @syncro:а если скажим в следущей версии формат ключей поменяют, или настройка селинукса не позволит узеру всякое в тмп распаковывать) ?from Psi+, 13 months ago
- @0xd34df00d:@syncro Настройки селинукса — ну, будем думать, куда распаковывать. Какие варианты? Можно и в ~/tmp какой-нибудь.from idead, 13 months ago, in reply to /49
- @0xd34df00d:@wyldrodney Yeah, QTemporaryFile. Но если ты хочешь распаковать архив с сохранением структуры директорий, то оно не поможет.from idead, 13 months ago, in reply to /52
- @syncro:@0xd34df00d я только о том что распаковывать или вообще чета делать через купроцесс это уродливо и в линуксе гораздо в большей степени чем в говендеfrom Psi+, 13 months ago, in reply to /51
- @syncro:@0xd34df00d линкуйся с лзма или гзипом тем же для венды включай его сорцы в проект, в линуксах компиляй с системнымfrom Psi+, 13 months ago, in reply to /55
- @0xd34df00d:@analizer Так и надо сделать чтоле. Но блио, опять потом ныть народ будет и недовольничать.from idead, 13 months ago, in reply to /58
- @0xd34df00d:@syncro Блио. Придется изобретать свой tar. Свой tar. Свой tar.
Олсо, придется все равно куда-нибудь временно распаковывать, ога.from idead, 13 months ago, in reply to /57 - @O01eg:@0xd34df00d Зачем? Ты не можешь сделать виртуальный файл, который будет обращаться к архиву?from Ψ+, 13 months ago, in reply to /61
- @syncro:@0xd34df00d а что, сто килабайт никак не распаковать в оперативу ?from Psi+, 13 months ago, in reply to /61
- @0xd34df00d:@syncro Когда нужно распаковать архив с одним файлом, я так и делаю, а потом все читаю с stdout. Но у тебя есть архив с кучей файлов. Жду твои варианты по распаковке в оперативку.from idead, 13 months ago, in reply to /64
- @syncro:@0xd34df00d поочереди, записывая по месту назначения.from Psi+, 13 months ago, in reply to /65
- @0xd34df00d:@syncro А можно код? Пзязя. Ну или хотя бы псевдокот.from idead, 13 months ago, in reply to /66
- @0xd34df00d:@syncro Мне энивей надо учесть, какие файлы из архива достали, чтобы корректно их потом удалить, когда юзер решит снести экстеншон, например.from idead, 13 months ago, in reply to /68
- @syncro:@0xd34df00d тут темболее купроцесс не канает, он ведь может не все распаковать и какнить похитрому умереть что и не узнаешь)from Psi+, 13 months ago, in reply to /70
- @0xd34df00d:@syncro Да ты гонишь. Он при завершении говорит, как именно он завершился, с каким кодом возврата и все такое.from idead, 13 months ago, in reply to /71
- @syncro:@0xd34df00d ну вот а если в процессе основной процесс личкрафтов помреть юзер его перезапусти и что ?from Psi+, 13 months ago, in reply to /72
- @0xd34df00d:@syncro Ну так папка временной распаковки всегда одна и та же, и личкрафты ее прибивают перед следующей распаковкой.from idead, 13 months ago, in reply to /73