[devel] файловые зависимости на раскрытые альтернативы
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Авг 20 00:55:19 MSD 2008
On Tue, Aug 19, 2008 at 08:13:01PM +0700, Mikhail Gusarov wrote:
> AT> + '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
> AT> + p=/usr/share/apps/kdewizard/pics/../../../design-current/kde
>
> А если перед началом этой операции схлопнуть каждый .. с предыдущим
> компонентом пути? Сломает ли это какую-нибудь другую ситуацию?
Короче, так и сделал. Вообще-то схлопывать ".." нельзя, если предыдущий
компонент пути является симлинком, который меняет глубину вложенности.
Но, в общем, это всё не для программирования на шелле, а вносить перл
в rpm-build я пока сознательно не хочу.
Тут есть маленькое оправдание: в случае c symlinks.req схлопывание
компонентов (с конца), соответствующих каталогу, в котором находится
симлинк, всегда будет корректным (потому что на вход symlinks.req
не подаются пути с промежуточными симлинками; т.е. в примере выше
%buildroot/usr/share/apps/kdewizard/pics -- это железно каталог без
промежуточных симлинков, от которого можно откусывать последние
компоненты, схлопывая их с первыми компонентами ".." значения симлинка).
Придётся пересобрить kdebase.
commit b46be108bdf00639d5f775efb150472a9544ea5f
Author: Alexey Tourbin <at на altlinux>
Date: Tue Aug 19 22:47:46 2008 +0400
find-package: updated check for file path components being alternatives
diff --git a/scripts/find-package.in b/scripts/find-package.in
index d74d375..9d471c0 100755
--- a/scripts/find-package.in
+++ b/scripts/find-package.in
@@ -152,8 +152,16 @@ FindByPath()
fi
# Is it an alternative? Path components can be alternatives, too.
- local p="$rep" alt_break= alt xalt xrep
+ local alt_break= alt xalt xrep p
xrep=$(readlink -vm "$rep")
+ # Blind cleanup-only canonicalization required (the same as CanonPath first pass),
+ # to fold intermediate path components. E.g. in /usr/share/foo/../java/rt.jar,
+ # /usr/share/foo might not exist, but [ -L .../rt.jar ] test should still work.
+ # XXX This "blind" technique is basically wrong -- one cannot always fold ".."
+ # along with previous path component, specifically if the previous path component
+ # is a symbolic link.
+ p=$(readlink -vm "/-$$-/$rep")
+ p=${p##/-$$-}
while [ -n "$p" ]; do
# Check each path component whether it is an alternative.
if [ -L "$p" ] && readlink -v "$p" |grep -qs '^/etc/alternatives/'; then
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080820/eb7d1322/attachment-0002.bin>
Подробная информация о списке рассылки Devel