]> gitweb.fluxo.info Git - simplepkg.git/commitdiff
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@809 04377dda-e619-0410...
authorrudson <rudson@04377dda-e619-0410-9926-eae83683ac58>
Sun, 7 Jun 2009 15:45:31 +0000 (15:45 +0000)
committerrudson <rudson@04377dda-e619-0410-9926-eae83683ac58>
Sun, 7 Jun 2009 15:45:31 +0000 (15:45 +0000)
trunk/src/mkpatch
trunk/src/mkpatch.old [new file with mode: 0755]

index 27d2720be90930d94a56ffe8f74bd99d95db3894..b800a04176cd459ff980f3598b89ac441c36c7d0 100644 (file)
@@ -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
 #   - #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 (executable)
index 0000000..bbf990b
--- /dev/null
@@ -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