File: check_dirs_equal.sh

package info (click to toggle)
arb 6.0.6-8
  • links: PTS, VCS
  • area: non-free
  • in suites: sid, trixie
  • size: 66,204 kB
  • sloc: ansic: 394,911; cpp: 250,290; makefile: 19,644; sh: 15,879; perl: 10,473; fortran: 6,019; ruby: 683; xml: 503; python: 53; awk: 32
file content (127 lines) | stat: -rwxr-xr-x 2,876 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

SED=${ARBHOME}/SH/arb_sed

check_existance_in() {
    local OTHER=$1
    local FILE=$2
    local RESULT=true

    while [ ! -z "$FILE" ]; do
        if [ ! -e $OTHER/$FILE ]; then
            echo "$OTHER/$FILE:0: Error: has not been generated"
            RESULT=false
        fi
        shift
        FILE=$2
    done
    $RESULT
}

check_equality() {
    local OLDDIR=$1
    local NEWDIR=$2
    local NAME=$3
    local RESULT=true

    while [ ! -z "$NAME" ]; do
        local OLDFILE=$OLDDIR/$NAME
        local NEWFILE=$NEWDIR/$NAME

        if [ ! -d $OLDFILE -a ! -d $NEWFILE ]; then
            local OPTIONS=
            OPTIONS="$OPTIONS --unified=3"
            OPTIONS="$OPTIONS --ignore-tab-expansion"
            OPTIONS="$OPTIONS --ignore-space-change"
            OPTIONS="$OPTIONS --ignore-blank-lines"
            OPTIONS="$OPTIONS --ignore-all-space"
            OPTIONS="$OPTIONS"

            local TMPFILE=/tmp/check_dirs_equal.$$

            diff $OPTIONS $OLDFILE $NEWFILE > $TMPFILE

            local ISDIFF=`wc -l <$TMPFILE`
            if [ "$ISDIFF" != "0" ]; then
                echo "-------------------- diff start"
                $ARBHOME/SOURCE_TOOLS/diff2grep.pl < $TMPFILE 
                echo "-------------------- diff end"
                RESULT=false
            fi

            rm $TMPFILE
        fi
        shift
        NAME=$3
    done
    $RESULT
}

get_files() {
    # returns relative paths of files matching WILDCARD 
    local DIR=$1
    local WILDCARD=$2
    ( \
        cd $DIR || exit; \
        find -P . -name "$WILDCARD" \
        | grep -v '\/\.svn\/' \
        | grep -v '\/patches\.arb\/' \
        | $SED 's/^\.\///' \
        )
}

check_missing() {
    local D1=$1
    local D2=$2
    local WILDCARD="$3"

    local FILES1=`get_files $D1 "$WILDCARD"`
    local FILES2=`get_files $D2 "$WILDCARD"`

    local RESULT=true
    
    check_existance_in $D2 $FILES1 || RESULT=false
    check_existance_in $D1 $FILES2 || RESULT=false

    $RESULT
}

compare_dirs() {
    local NEWDIR=$1
    local OLDDIR=$2
    local WILDCARD="$3"

    local NEWFILES=`get_files $NEWDIR "$WILDCARD"`

    local RESULT=true
    
    check_missing $NEWDIR $OLDDIR "$WILDCARD" || RESULT=false
    check_equality $OLDDIR $NEWDIR $NEWFILES || RESULT=false

    $RESULT
}

# --------------------

GLOBAL_NEWDIR=$1
GLOBAL_OLDDIR=$2
GLOBAL_WILDCARD="$3"

if [ -z "$GLOBAL_WILDCARD" ]; then
    echo "Usage: check_dirs_equal.sh newdir olddir wildcard"
    echo "Recursively compares two directory-trees"
    false
else
    cd $GLOBAL_NEWDIR || exit
    GLOBAL_NEWDIR=`pwd`
    cd - >/dev/null
    cd $GLOBAL_OLDDIR || exit
    GLOBAL_OLDDIR=`pwd`
    cd - >/dev/null

    # echo "GLOBAL_NEWDIR='$GLOBAL_NEWDIR'"
    # echo "GLOBAL_OLDDIR='$GLOBAL_OLDDIR'"
    
    compare_dirs $GLOBAL_NEWDIR $GLOBAL_OLDDIR "$GLOBAL_WILDCARD" 
fi