diff options
Diffstat (limited to 'trunk/src/mkpatch')
-rw-r--r-- | trunk/src/mkpatch | 195 |
1 files changed, 97 insertions, 98 deletions
diff --git a/trunk/src/mkpatch b/trunk/src/mkpatch index b800a04..bbf990b 100644 --- a/trunk/src/mkpatch +++ b/trunk/src/mkpatch @@ -1,6 +1,6 @@ #!/bin/bash # -# MKPatch 2.0.0: Simple patch program to .mkbuild models +# mkpatch: Simple patch program to .mkbuild models # feedback: rudsonaalves at yahoo.com.br | gpl # # mkbuild is free software; you can redistribute it and/or modify it under the @@ -20,127 +20,126 @@ # - #2 Source_File # # Version: -PROG_VERSION=2.0 +PROG_VERSION=1.1 BASENAME=`basename $0` -if [ "$1" = "--help" -o "$1" = "-h" ]; then - echo "Use: $BASENAME <diff_file> <source_file>" - exit $ERROR_HELP -fi +function get_line { -# check number of parameters -[ $# -ne 2 ] && exit 102 + # get a line $1 from file $2 + [ $# -ne 2 ] && exit $ERROR_PAR_NUMBER + ! is_number $1 && exit $ERROR_NOT_NUMBER + [ ! -e $2 ] && exit $ERROR_FILE_NOTFOUND -# check diff_file exit -[ ! -e $1 ] && exit 100 + sed "$1 q;d" $2 +} -# check source_file exit -[ ! -e $2 ] && exit 100 +function get_diff_line { -# Change IFS to <ENTER> only -OLD_IFS=$IFS -IFS=' -' + # get diff line e return: + # - Action in Diff_Action + # - Diff Line in Diff_Str_Line + if [ $1 -gt $Diff_N_Lines ]; then + Diff_Action=" " + Diff_Str_Line="" + return 0 + fi + Line=`get_line $1 $2` + Diff_Action=`echo "$Line" | cut -c1` + Diff_Str_Line=`echo "$Line" | cut -c2-` +} -# Read file patch -index=0 -while read line; do - Diff_lines[index]="`echo $line | cut -c2-`" - Diff_action[index]="`echo $line | cut -c1`" - let index++ -done < $1 -let Diff_n_lines=index-1 -#for index in `seq 1 $Diff_n_lines`; do -# echo "Action:"${Diff_action[index]}"< Line:"${Diff_lines[index]}"<" -#done +# ---------------------------------------------------------------- +# ------------------- mkpatch program ---------------------------- +# common.sh library start +COMMON_SH="/usr/libexec/simplepkg/common.sh" +if [ -f "$COMMON_SH" ]; then + source $COMMON_SH +else + echo "$BASENAME: file $COMMON_SH not found. Check your $BASENAME installation" +fi -# Read source file -index=0 -while read line; do - Source_lines[index]="$line" - let index++ -done < $2 -let Source_n_lines=index-1 +# Load error codes +error_codes +# ---------------- -#for index in `seq 1 $Source_n_lines`; do -# echo "${Source_lines[index]}" -#done +if [ "$1" = "--help" -o "$1" = "-h" ]; then + echo "Use: $BASENAME <diff_file> <source_file>" + exit $ERROR_HELP +fi + +# Check input parameters +[ $# -ne 2 ] && exit $ERROR_PAR_NUMBER +[ ! -e $1 ] && exit $ERROR_FILE_NOTFOUND +[ ! -e $2 ] && exit $ERROR_FILE_NOTFOUND -IFS=$OLD_IFS +# Start variables +Diff_File=$1 +Source_File=$2 +Diff_N_Lines=`wc -l $1 | cut -f1 -d" "` +Source_N_Lines=`wc -l $2 | cut -f1 -d" "` -Source_index=0 -Diff_index=0 -Diff_pointer=0 -Status_diff=0 +# Start vars +Diff_Line=1 +Diff_Pointer=1 +Status_Diff=0 -Output="" -Output_index=0 +# Get frist Diff_File line +get_diff_line $Diff_Line $Diff_File || exit $? -#echo -e "\n\nStart Patch...\n\n" -#set -x -while [ $Source_index -le $Source_n_lines -a $Diff_index -le $Diff_n_lines ]; do +Source_Line=1 +# Get frist Source_File line +Source_Str_Line=`get_line $Source_Line $Source_File` || exit $? +while [ $Source_Line -le $Source_N_Lines ]; do # make Actions - #echo ">${Diff_action[Diff_index]}<" - case "${Diff_action[Diff_index]}" in + case $Diff_Action in '-') - if [ "${Source_lines[Source_index]}" == "${Diff_lines[Diff_index]}" ]; then - Status_diff=1 - let Diff_index++ + if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then + Status_Diff=1 + let Diff_Line++ else - Diff_index=$Diff_pointer - Status_diff=0 - Output[Output_index]="${Source_lines[Souce_index]}" - let Output_index++ + Diff_Line=$Diff_Pointer + Status_Diff=0 + echo "$Source_Str_Line" fi - let Source_index++ - ;; + get_diff_line $Diff_Line $Diff_File || exit $? + let Source_Line++ + Source_Str_Line=`get_line $Source_Line $Source_File` || exit $? + ;; '+') - Output[Output_index]="${Diff_lines[Diff_index]}" - let Diff_index++ - let Output_index++ - ;; + echo "$Diff_Str_Line" + let Diff_Line++ + get_diff_line $Diff_Line $Diff_File || exit $? + ;; ' ') - if [ "${Source_lines[Source_index]}" == "${Diff_lines[Diff_index]}" ]; then - Status_diff=1 - let Diff_index++ + if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then + Status_Diff=1 + let Diff_Line++ else - Status_diff=0 - Diff_index=$Diff_pointer + Status_Diff=0 + Diff_Line=$Diff_Pointer fi - Output[Output_index]="${Source_lines[Source_index]}" - let Output_index++ - let Source_index++ - ;; + echo "$Source_Str_Line" + get_diff_line $Diff_Line $Diff_File || exit $? + let Source_Line++ + Source_Str_Line=`get_line $Source_Line $Source_File` || exit $? + ;; '=') - let Diff_index++ - Status_diff=0 - Diff_pointer=$Diff_index - ;; - '*') + let Diff_Line++ + Status_Diff=0 + Diff_Pointer=$Diff_Line + get_diff_line $Diff_Line $Diff_File || exit $? + ;; + *) echo "Invalid diff action." - exit 600 - ;; + exit $ERROR_MKPATCH + ;; esac - #read ANS; clear -done -#set -x -if [ $Diff_index -gt $Diff_n_lines -a $Source_index -le $Source_n_lines ]; then - for index in `seq $Source_index $Source_n_lines`; do - Output[Output_index]="${Source_lines[index]}" - let Output_index++ - done -elif [ $Diff_index -le $Diff_n_lines ]; then - # Make others addline "+" in the end file - while [ "${Diff_Action[Diff_index]}" == "+" ]; do - Output[Output_index]="${Diff_lines[Diff_index]}" - let Diff_index++ - let Output_index++ - done -fi -#exit 1 -# Print Output file -for index in `seq 1 $Output_index`; do - echo "${Output[$index-1]}" done +# Make others addline "+" in the end file +while [ "$Diff_Action" = "+" -a $Diff_Line -le $Diff_N_Lines ]; do + echo "$Diff_Str_Line" + let Diff_Line++ + get_diff_line $Diff_Line $Diff_File || exit $? +done |