aboutsummaryrefslogtreecommitdiff
path: root/trunk/src/mkpatch
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mkpatch')
-rw-r--r--trunk/src/mkpatch194
1 files changed, 98 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
+