Blame 0023-dracut-functions-convert-absolute-symlinks-to-relati.patch

Harald Hoyer 428fde
From d4bb4316214022ae7902c5c45ab557f7ea8a5c39 Mon Sep 17 00:00:00 2001
Harald Hoyer 428fde
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 428fde
Date: Mon, 25 Jul 2011 10:25:44 +0200
Harald Hoyer 428fde
Subject: [PATCH] dracut-functions: convert absolute symlinks to relative
Harald Hoyer 428fde
Harald Hoyer 428fde
---
Harald Hoyer 428fde
 dracut-functions |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++---
Harald Hoyer 428fde
 1 files changed, 55 insertions(+), 4 deletions(-)
Harald Hoyer 428fde
Harald Hoyer 428fde
diff --git a/dracut-functions b/dracut-functions
Harald Hoyer 428fde
index cdb1964..2a45419 100755
Harald Hoyer 428fde
--- a/dracut-functions
Harald Hoyer 428fde
+++ b/dracut-functions
Harald Hoyer 428fde
@@ -82,6 +82,55 @@ print_vars() {
Harald Hoyer 428fde
     done
Harald Hoyer 428fde
 }
Harald Hoyer 428fde
 
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+convert_abs_rel() {
Harald Hoyer 428fde
+    local __current __absolute __abssize __cursize __i __level __newpath
Harald Hoyer 428fde
+#    PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): ';
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    if [[ "$1" == "$2" ]]
Harald Hoyer 428fde
+    then
Harald Hoyer 428fde
+        echo "."
Harald Hoyer 428fde
+        return
Harald Hoyer 428fde
+    fi
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    IFS="/"
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    __current=($1)
Harald Hoyer 428fde
+    __absolute=($2)
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    __abssize=${#__absolute[@]}
Harald Hoyer 428fde
+    __cursize=${#__current[@]}
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    while [[ ${__absolute[__level]} == ${__current[__level]} ]]
Harald Hoyer 428fde
+    do
Harald Hoyer 428fde
+        (( __level++ ))
Harald Hoyer 428fde
+        if (( __level > __abssize || __level > __cursize ))
Harald Hoyer 428fde
+        then
Harald Hoyer 428fde
+            break
Harald Hoyer 428fde
+        fi
Harald Hoyer 428fde
+    done
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    for ((__i = __level; __i < __cursize-1; __i++))
Harald Hoyer 428fde
+    do
Harald Hoyer 428fde
+        if ((__i > __level))
Harald Hoyer 428fde
+        then
Harald Hoyer 428fde
+            __newpath=$__newpath"/"
Harald Hoyer 428fde
+        fi
Harald Hoyer 428fde
+        __newpath=$__newpath".."
Harald Hoyer 428fde
+    done
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    for ((__i = __level; __i < __abssize; __i++))
Harald Hoyer 428fde
+    do
Harald Hoyer 428fde
+        if [[ -n $__newpath ]]
Harald Hoyer 428fde
+        then
Harald Hoyer 428fde
+            __newpath=$__newpath"/"
Harald Hoyer 428fde
+        fi
Harald Hoyer 428fde
+        __newpath=$__newpath${__absolute[__i]}
Harald Hoyer 428fde
+    done
Harald Hoyer 428fde
+
Harald Hoyer 428fde
+    echo "$__newpath"
Harald Hoyer 428fde
+}
Harald Hoyer 428fde
+
Harald Hoyer 428fde
 get_fs_env() {
Harald Hoyer 428fde
     [[ $1 ]] || return
Harald Hoyer 428fde
     unset ID_FS_TYPE
Harald Hoyer 428fde
@@ -228,10 +277,12 @@ inst_dir() {
Harald Hoyer 428fde
         if [[ -L $_file ]]; then
Harald Hoyer 428fde
             # create link as the original
Harald Hoyer 428fde
             local target=$(readlink "$_file")
Harald Hoyer 428fde
-            ln -sfn "$target" "${initdir}$_file" || return 1
Harald Hoyer 428fde
-            # resolve relative path and recursively install destination
Harald Hoyer 428fde
-            [[ $target == ${target#/} ]] && target="$(dirname "$_file")/$target"
Harald Hoyer 428fde
             inst_dir "$target"
Harald Hoyer 428fde
+            inst_symlink "$_file"
Harald Hoyer 428fde
+            #ln -sfn "$target" "${initdir}$_file" || return 1
Harald Hoyer 428fde
+            # resolve relative path and recursively install destination
Harald Hoyer 428fde
+            #[[ $target == ${target#/} ]] && target="$(dirname "$_file")/$target"
Harald Hoyer 428fde
+            #inst_dir "$target"
Harald Hoyer 428fde
         else
Harald Hoyer 428fde
             [[ -h ${initdir}$_file ]] && _file=$(readlink "${initdir}$_file")
Harald Hoyer 428fde
             # create directory
Harald Hoyer 428fde
@@ -409,7 +460,7 @@ inst_symlink() {
Harald Hoyer 428fde
         inst "$_realsrc" && mkdir -m 0755 -p "${_target%/*}" 
Harald Hoyer 428fde
     fi
Harald Hoyer 428fde
     if [[ -e "${_src}" ]]; then
Harald Hoyer 428fde
-        cp -aP "${_src}" "$_target"
Harald Hoyer 428fde
+        ln -sfn $(convert_abs_rel "${_src}" "${_realsrc}") "$_target"
Harald Hoyer 428fde
     else
Harald Hoyer 428fde
         ln -sfn "$_realsrc" "$_target"
Harald Hoyer 428fde
     fi