[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