#!/bin/bash # --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: misc/target/functions.in # Copyright (C) 2004 - 2023 The T2 SDE Project # # This Copyright note is generated by scripts/Create-CopyPatch, # more information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2. # --- T2-COPYRIGHT-NOTE-END --- # copy, with special files # from to file-list copy_with_list_from_file () { ( cd $1; tar cSp --no-recursion --files-from=$3 ) | ( cd $2; tar xvSP ) | ( x=`wc -l`; echo "$x files transfered." ) } # copy out of T2 source without .svn files # from to copy_from_source () { list=`mktemp` # the sed is a work around for a find issue, outputting empty rows # in some versions ... find $1 -name '.svn' -prune -o -printf "%P\n" | sed '/^$/d' > $list cat $list copy_with_list_from_file $1 $2 $list rm -f $list } # copy out of T2 source without .svn files and does honor special files to # apply patches, change owner:group or permissions # from to copy_and_parse_from_source () { # the sed is a work around for a find issue, outputting empty rows # in some versions ... find $1 -name '.svn' -prune -o -printf "%P\n" | sed '/^$/d' | sort | while read file; do if [ -h $1/$file ]; then #echo "Symlink: $file" cp -afv $1/$file $2/$file elif [ -d $1/$file ]; then #echo "Dir: $file" mkdir -p $2/$file else cmd=`sed 2q $1/$file` if [[ $cmd = \#\![a-y]* ]]; then cmd=${cmd#\#\!}; code=${cmd%% *} #echo "Code $code Command: $cmd File: $file" args=`echo $cmd | wc -w` dirname=${file%/*} basename=${file##*/} pushd $2/$dirname > /dev/null #; set -x case $code in ln|cp) if [ $args -le 3 ]; then eval $cmd $basename else eval $cmd fi ;; chmod|chown|rm) if [ $args -le 2 ]; then eval $cmd $basename else eval $cmd fi ;; patch) patch -f < $1/$file ;; *) echo "Code: $code unknown"; exit 1 ;; esac #; set +x ; popd > /dev/null elif [[ $cmd = \#\!* ]]; then #echo Script $file cp -afv $1/$file $2/$file chmod +x $2/$file else #echo File $file cp -afv $1/$file $2/$file fi fi done } # link indentical files to save space link_identical_files() { ( while read ck fn; do if [ "$oldck" = "$ck" -a -s $fn ]; then echo "\"$fn -> $oldfn\"" rm $fn; ln $oldfn $fn else oldck=$ck; oldfn=$fn fi done < <( find -type f | xargs md5sum | sort ) ) | ( x=`wc -l`; echo "$x links created." ) }