aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trunk/src/mkpatch194
-rwxr-xr-xtrunk/src/mkpatch.old145
2 files changed, 243 insertions, 96 deletions
diff --git a/trunk/src/mkpatch b/trunk/src/mkpatch
index 27d2720..b800a04 100644
--- a/trunk/src/mkpatch
+++ b/trunk/src/mkpatch
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# mkpatch: Simple patch program to .mkbuild models
+# MKPatch 2.0.0: 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,125 +20,127 @@
# - #2 Source_File
#
# Version:
-PROG_VERSION=1.1
+PROG_VERSION=2.0
BASENAME=`basename $0`
-function get_line {
+if [ "$1" = "--help" -o "$1" = "-h" ]; then
+ echo "Use: $BASENAME <diff_file> <source_file>"
+ exit $ERROR_HELP
+fi
- # 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 number of parameters
+[ $# -ne 2 ] && exit 102
- sed "$1 q;d" $2
-}
+# check diff_file exit
+[ ! -e $1 ] && exit 100
-function get_diff_line {
+# check source_file exit
+[ ! -e $2 ] && exit 100
- # 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-`
-}
+# Change IFS to <ENTER> only
+OLD_IFS=$IFS
+IFS='
+'
+# 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
-# ----------------------------------------------------------------
-# ------------------- mkpatch program ----------------------------
-# common.sh library start
-COMMON_SH="/usr/libexec/simplepkg/common.sh"
-if [ -f "$COMMON_SH" ]; then
- source $COMMON_SH
-else
- echo $error "$BASENAME: file $COMMON_SH not found. Check your $BASENAME installation"
-fi
-# Load error codes
-error_codes
-# ----------------
+#for index in `seq 1 $Diff_n_lines`; do
+# echo "Action:"${Diff_action[index]}"< Line:"${Diff_lines[index]}"<"
+#done
-if [ "$1" = "--help" -o "$1" = "-h" ]; then
- echo "Use: $BASENAME <diff_file> <source_file>"
- exit $ERROR_HELP
-fi
+# Read source file
+index=0
+while read line; do
+ Source_lines[index]="$line"
+ let index++
+done < $2
+let Source_n_lines=index-1
-# Check input parameters
-[ $# -ne 2 ] && exit $ERROR_PAR_NUMBER
-[ ! -e $1 ] && exit $ERROR_FILE_NOTFOUND
-[ ! -e $2 ] && exit $ERROR_FILE_NOTFOUND
+#for index in `seq 1 $Source_n_lines`; do
+# echo "${Source_lines[index]}"
+#done
-# 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" "`
+IFS=$OLD_IFS
-# Start vars
-Diff_Line=1
-Diff_Pointer=1
-Status_Diff=0
+Source_index=0
+Diff_index=0
+Diff_pointer=0
+Status_diff=0
-# Get frist Diff_File line
-get_diff_line $Diff_Line $Diff_File || exit $?
+Output=""
+Output_index=0
-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
+#echo -e "\n\nStart Patch...\n\n"
+#set -x
+while [ $Source_index -le $Source_n_lines -a $Diff_index -le $Diff_n_lines ]; do
# make Actions
- case $Diff_Action in
+ #echo ">${Diff_action[Diff_index]}<"
+ case "${Diff_action[Diff_index]}" in
'-')
- if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then
- Status_Diff=1
- let Diff_Line++
+ if [ "${Source_lines[Source_index]}" == "${Diff_lines[Diff_index]}" ]; then
+ Status_diff=1
+ let Diff_index++
else
- Diff_Line=$Diff_Pointer
- Status_Diff=0
- echo "$Source_Str_Line"
+ Diff_index=$Diff_pointer
+ Status_diff=0
+ Output[Output_index]="${Source_lines[Souce_index]}"
+ let Output_index++
fi
- get_diff_line $Diff_Line $Diff_File || exit $?
- let Source_Line++
- Source_Str_Line=`get_line $Source_Line $Source_File` || exit $?
- ;;
+ let Source_index++
+ ;;
'+')
- echo "$Diff_Str_Line"
- let Diff_Line++
- get_diff_line $Diff_Line $Diff_File || exit $?
- ;;
+ Output[Output_index]="${Diff_lines[Diff_index]}"
+ let Diff_index++
+ let Output_index++
+ ;;
' ')
- if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then
- Status_Diff=1
- let Diff_Line++
+ if [ "${Source_lines[Source_index]}" == "${Diff_lines[Diff_index]}" ]; then
+ Status_diff=1
+ let Diff_index++
else
- Status_Diff=0
- Diff_Line=$Diff_Pointer
+ Status_diff=0
+ Diff_index=$Diff_pointer
fi
- 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 $?
- ;;
+ Output[Output_index]="${Source_lines[Source_index]}"
+ let Output_index++
+ let Source_index++
+ ;;
'=')
- let Diff_Line++
- Status_Diff=0
- Diff_Pointer=$Diff_Line
- get_diff_line $Diff_Line $Diff_File || exit $?
- ;;
- *)
+ let Diff_index++
+ Status_diff=0
+ Diff_pointer=$Diff_index
+ ;;
+ '*')
echo "Invalid diff action."
- exit $ERROR_MKPATCH
- ;;
+ exit 600
+ ;;
esac
+ #read ANS; clear
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 $?
+#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
+
diff --git a/trunk/src/mkpatch.old b/trunk/src/mkpatch.old
new file mode 100755
index 0000000..bbf990b
--- /dev/null
+++ b/trunk/src/mkpatch.old
@@ -0,0 +1,145 @@
+#!/bin/bash
+#
+# 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
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# mkbuild is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+# Input:
+# - $1 Diff_File
+# - #2 Source_File
+#
+# Version:
+PROG_VERSION=1.1
+BASENAME=`basename $0`
+
+function get_line {
+
+ # 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
+
+ sed "$1 q;d" $2
+}
+
+function get_diff_line {
+
+ # 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-`
+}
+
+
+# ----------------------------------------------------------------
+# ------------------- 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
+
+# Load error codes
+error_codes
+# ----------------
+
+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
+
+# 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" "`
+
+# Start vars
+Diff_Line=1
+Diff_Pointer=1
+Status_Diff=0
+
+# Get frist Diff_File line
+get_diff_line $Diff_Line $Diff_File || exit $?
+
+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
+ case $Diff_Action in
+ '-')
+ if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then
+ Status_Diff=1
+ let Diff_Line++
+ else
+ Diff_Line=$Diff_Pointer
+ Status_Diff=0
+ echo "$Source_Str_Line"
+ fi
+ get_diff_line $Diff_Line $Diff_File || exit $?
+ let Source_Line++
+ Source_Str_Line=`get_line $Source_Line $Source_File` || exit $?
+ ;;
+ '+')
+ echo "$Diff_Str_Line"
+ let Diff_Line++
+ get_diff_line $Diff_Line $Diff_File || exit $?
+ ;;
+ ' ')
+ if [ "$Source_Str_Line" = "$Diff_Str_Line" ]; then
+ Status_Diff=1
+ let Diff_Line++
+ else
+ Status_Diff=0
+ Diff_Line=$Diff_Pointer
+ fi
+ 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_Line++
+ Status_Diff=0
+ Diff_Pointer=$Diff_Line
+ get_diff_line $Diff_Line $Diff_File || exit $?
+ ;;
+ *)
+ echo "Invalid diff action."
+ exit $ERROR_MKPATCH
+ ;;
+ esac
+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