Blame docker-builder-data/build/script/common/helpers.sh

Ivan Mahonin e7fa50
# helpers
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
copy() {
Ivan Mahonin e7fa50
    local SRC=$1
Ivan Mahonin e7fa50
    local DEST=$2
Ivan Mahonin e7fa50
    if [ -d "$SRC" ]; then
Ivan Mahonin e7fa50
        if ! mkdir -p $DEST; then
Ivan Mahonin e7fa50
            return 1
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
        if [ "$(ls -A $1)" ]; then
Ivan Mahonin e7fa50
            if ! cp --remove-destination -rlP $SRC/* "$DEST/"; then
Ivan Mahonin e7fa50
                return 1
Ivan Mahonin e7fa50
            fi
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
    elif [ -f "$SRC" ]; then
Ivan Mahonin e7fa50
        if ! (mkdir -p `dirname $DEST` && cp --remove-destination -l "$SRC" "$DEST"); then
Ivan Mahonin e7fa50
            return 1
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
    else
Ivan Mahonin e7fa50
        return 1
Ivan Mahonin e7fa50
    fi
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
foreachfile() {
Ivan Mahonin e7fa50
    local FILE=$1
Ivan Mahonin e7fa50
    local COMMAND=$2
Ivan Mahonin f026f4
    if [ ! -e "$FILE" ]; then
Ivan Mahonin e7fa50
        return 1
Ivan Mahonin e7fa50
    fi
Ivan Mahonin e7fa50
    if [ -d "$FILE" ]; then    
Ivan Mahonin e7fa50
        ls -1 "$FILE" | while read SUBFILE; do
Ivan Mahonin e7fa50
            if ! $COMMAND "$FILE/$SUBFILE" ${@:3}; then
Ivan Mahonin e7fa50
                return 1
Ivan Mahonin e7fa50
            fi
Ivan Mahonin e7fa50
        done
Ivan Mahonin e7fa50
    fi
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
readdir() {
Ivan Mahonin e7fa50
    local FILE=$1
Ivan Mahonin e7fa50
    if [ -d "$FILE" ]; then
Ivan Mahonin e7fa50
        echo "directory begin"
Ivan Mahonin e7fa50
        ls -1 "$1" | while read SUBFILE; do
Ivan Mahonin e7fa50
            if [ "$SUBFILE" = ".git" ]; then
Ivan Mahonin e7fa50
                continue
Ivan Mahonin e7fa50
            fi
Ivan Mahonin e7fa50
            if [[ "$SUBFILE" == *.po ]]; then
Ivan Mahonin e7fa50
                continue
Ivan Mahonin e7fa50
            fi
Ivan Mahonin e7fa50
            local STAT=`stat -c%F:%a:%s "$FILE/$SUBFILE"`
Ivan Mahonin e7fa50
            echo "$STAT:$SUBFILE"
Ivan Mahonin e7fa50
            readdir "$FILE/$SUBFILE"
Ivan Mahonin e7fa50
        done
Ivan Mahonin e7fa50
        echo "directory end"
Ivan Mahonin e7fa50
    else
Ivan Mahonin e7fa50
        local MD5=`md5sum -b "$FILE"`
Ivan Mahonin e7fa50
        echo "file:${MD5:0:32}"
Ivan Mahonin e7fa50
    fi
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
md5() {
Ivan Mahonin e7fa50
    local FILE=$1
Ivan Mahonin e7fa50
    local MD5=`readdir "$FILE" | md5sum -b`
Ivan Mahonin e7fa50
    echo "${MD5:0:32}"
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
remove_recursive() {
Ivan Mahonin e7fa50
    local CURRENT_PATH="$1"
Ivan Mahonin e7fa50
    local NEEDLE="$2"
Ivan Mahonin e7fa50
    rm -f "$CURRENT_PATH/"$NEEDLE
Ivan Mahonin e7fa50
    for FILE in $CURRENT_PATH; do
Ivan Mahonin e7fa50
        if [ -d "$CURRENT_PATH/$FILE" ]; then
Ivan Mahonin e7fa50
            remove_recursive "$CURRENT_PATH/$FILE" "$NEEDLE"
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
    done
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
copy_system_lib() {
Ivan Mahonin e7fa50
    local SRC_NAME=$1
Ivan Mahonin e7fa50
    local DST_PATH=$2
Ivan Mahonin e7fa50
    cp --remove-destination /lib/x86_64-linux-gnu/$SRC_NAME* "$DST_PATH" &> /dev/null \
Ivan Mahonin e7fa50
     || cp --remove-destination /lib/i386-linux-gnu/$SRC_NAME* "$DST_PATH" &> /dev/null \
Ivan Mahonin e7fa50
     || cp --remove-destination /usr/lib/x86_64-linux-gnu/$SRC_NAME* "$DST_PATH" &> /dev/null \
Ivan Mahonin e7fa50
     || cp --remove-destination /usr/lib/i386-linux-gnu/$SRC_NAME* "$DST_PATH" &> /dev/null \
Ivan Mahonin e7fa50
     || (echo "$SRC_NAME not found in system libraries" && return 1)
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
add_license() {
Ivan Mahonin e7fa50
    local FILE="$1"
Ivan Mahonin e7fa50
    local FILE_IN_TITLE="$2"
Ivan Mahonin e7fa50
    local TARGET="$3"
Ivan Mahonin e7fa50
    if [ ! -z "$FILE_IN_TITLE" ]; then
Ivan Mahonin e7fa50
        echo ""                                      >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo "-------------------------------------" >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo "  File: $FILE_IN_TITLE"                >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo "-------------------------------------" >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo ""                                      >> "$TARGET" || return 1
Ivan Mahonin e7fa50
    else
Ivan Mahonin e7fa50
        echo ""                                      >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo "-------------------------------------" >> "$TARGET" || return 1
Ivan Mahonin e7fa50
        echo ""                                      >> "$TARGET" || return 1
Ivan Mahonin e7fa50
    fi
Ivan Mahonin e7fa50
    cat "$FILE"                                      >> "$TARGET" || return 1
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
copy_system_license() {
Ivan Mahonin e7fa50
    local SRC_NAMES=$1
Ivan Mahonin e7fa50
    local DST_PATH=$2
Ivan Mahonin e7fa50
    local SRC_NAME=
Ivan Mahonin e7fa50
    for SRC_NAME in $SRC_NAMES; do
Ivan Mahonin e7fa50
        rm -f "$DST_PATH/license-$SRC_NAME"
Ivan Mahonin e7fa50
    done
Ivan Mahonin e7fa50
    for SRC_NAME in $SRC_NAMES; do
Ivan Mahonin e7fa50
        local TARGET="$DST_PATH/license-$SRC_NAME"
Ivan Mahonin e7fa50
        local FILE=
Ivan Mahonin e7fa50
        if   [ -f "/usr/share/doc/$SRC_NAME/copyright" ]; then
Ivan Mahonin e7fa50
             FILE="/usr/share/doc/$SRC_NAME/copyright"
Ivan Mahonin e7fa50
        elif [ -d "/usr/share/licenses/$SRC_NAME" ]; then
Ivan Mahonin e7fa50
             FILE="/usr/share/licenses/$SRC_NAME"
Ivan Mahonin e7fa50
        elif [ -d "/usr/share/doc/$SRC_NAME" ]; then
Ivan Mahonin e7fa50
             FILE="/usr/share/doc/$SRC_NAME"
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
        if [ -f "$FILE" ]; then
Ivan Mahonin e7fa50
            add_license "$FILE" "$FILE" "$TARGET" || (echo "Cannot add license file: $FILE -> $TARGET"; return 1)
Ivan Mahonin e7fa50
        elif [ -d "$FILE" ]; then
Ivan Mahonin e7fa50
            ls -1 "$FILE" | while read SUBFILE; do
Ivan Mahonin e7fa50
                add_license "$FILE/$SUBFILE" "$FILE/$SUBFILE" "$TARGET" || (echo "Cannot add license file: $FILE/$SUBFILE -> $TARGET"; return 1)
Ivan Mahonin e7fa50
            done
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
        
Ivan Mahonin e7fa50
        if [ -f "$TARGET" ]; then
Ivan Mahonin e7fa50
            return 0
Ivan Mahonin e7fa50
        fi
Ivan Mahonin e7fa50
    done
Ivan Mahonin e7fa50
Ivan Mahonin e7fa50
    echo "Cannot found any license for one of system packages: $SRC_NAMES (for $DST_PATH)"
Ivan Mahonin e7fa50
    return 1
Ivan Mahonin e7fa50
}
Ivan Mahonin e7fa50