aboutsummaryrefslogtreecommitdiff
path: root/trunk/src/mkpatch
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mkpatch')
-rw-r--r--trunk/src/mkpatch195
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