source: projects/update-from-skel/trunk/update-from-skel.in @ 4572

Revision 4572, 3.3 KB checked in by yasumichi, 13 years ago (diff)

sdiff の出力桁数を指定

Line 
1#!/bin/bash
2
3# Directory
4prefix=@prefix@
5datarootdir=@datarootdir@
6datadir=@datadir@
7
8# Enable NLS
9export TEXTDOMAIN=update-from-skel
10export TEXTDOMAINDIR=@localedir@
11
12. gettext.sh
13
14# output when differential is detected.
15detect_different()
16{
17        echo
18        echo "`eval_gettext "==================="`"
19        echo "`eval_gettext "Detect differential"`"
20        echo "`eval_gettext "==================="`"
21}
22
23# process different files.
24proc_different()
25{
26        COLUMNS=$(tput cols)
27        HALFCOL=$(expr $COLUMNS / 2 - 2)
28
29        detect_different
30
31        ok=0
32        while [ $ok -eq 0 ]
33        do
34                printf "%-${HALFCOL}s%-${HALFCOL}s\n" ${myfile} ${skel}
35                echo
36                diff --side-by-side -W ${COLUMNS} $myfile $skel
37                # menu
38                echo "`eval_gettext "C) use Current file"`"
39                echo "`eval_gettext "T) use Template file"`"
40                echo "`eval_gettext "E) Edit on diff mode of vim"`"
41                echo "`eval_gettext "I) merge Intaractively by sdiff"`"
42                echo "`eval_gettext "Q) Quit"`"
43                echo -n "`eval_gettext "What do you do? > "`"
44                read command
45               
46                case "$command" in
47                c|C)
48                        ok=1
49                        ;;
50                t|T)
51                        echo "`eval_gettext "copy \\\$skel to \\\$myfile"`"
52                        cp -i $skel $myfile
53                        diff -q $skel $myfile >/dev/null 2>&1
54                        if [ $? -eq 0 ]; then
55                                ok=1
56                        fi
57                        ;;
58                e|E)
59                        vim +r$myfile -d $myfile.new $skel
60                        if [ -e $myfile.new ];then
61                                mv $myfile.new $myfile
62                        fi
63                        diff -q $skel $myfile >/dev/null 2>&1
64                        if [ $? -eq 0 ]; then
65                                ok=1
66                        fi
67                        ;;
68                i|I)
69                        sdiff -o $myfile.new -w ${COLUMNS} $myfile $skel
70                        mv $myfile.new $myfile
71                        ok=1
72                        ;;
73                q|Q)
74                        exit
75                        ;;
76                *)
77                        echo "`eval_gettext "You inputed wrong character."`"
78                        echo
79                        ;;
80                esac
81        done
82        echo
83}
84
85# process no exists file
86proc_no_exists()
87{
88        detect_different
89        echo "`eval_gettext "\\\$skel is exists, but \\\$myfile isn't exists."`"
90        echo
91        ok=0
92        while [ $ok -eq 0 ]
93        do
94                echo "`eval_gettext "C) Copy \\\$skel to \\\$myfile"`"
95                echo "`eval_gettext "N) Nothing to do"`"
96                echo "`eval_gettext "Q) Quit"`"
97                echo -n "`eval_gettext "What do you do? > "`"
98                read command
99               
100                case "$command" in
101                c|C)
102                        mkdir -p `dirname $myfile`
103                        cp $skel $myfile
104                        ok=1
105                        ;;
106                n|N)
107                        ok=1
108                        ;;
109                q|Q)
110                        exit
111                        ;;
112                *)
113                        echo "`eval_gettext "You inputed wrong character."`"
114                        echo
115                        ;;
116                esac
117        done
118}
119
120# process unexpected directory
121proc_dir()
122{
123        detect_different
124        echo "`eval_gettext "\\\$skel is file, but \\\$myfile is directory."`"
125        echo
126        ok=0
127        while [ $ok -eq 0 ]
128        do
129                echo "`eval_gettext "R) Remove directory (\\\$myfile) and copy \\\$skel to \\\$myfile"`"
130                echo "`eval_gettext "L) List contents of \\\$myfile"`"
131                echo "`eval_gettext "N) Nothing to do"`"
132                echo "`eval_gettext "Q) Quit"`"
133                echo -n "`eval_gettext "What do you do? > "`"
134                read command
135               
136                case "$command" in
137                r|R)
138                        rm -rf $myfile
139                        cp $skel $myfile
140                        ok=1
141                        ;;
142                l|L)
143                        ls $myfile
144                        ;;
145                n|N)
146                        ok=1
147                        ;;
148                q|Q)
149                        exit
150                        ;;
151                *)
152                        echo "`eval_gettext "You inputed wrong character."`"
153                        echo
154                        ;;
155                esac
156        done
157}
158
159# main loop
160for skel in `find /etc/skel -type f 2>/dev/null`
161do
162        myfile=`echo $skel | sed -e "s|/etc/skel|$HOME|"`
163        if [ -e $myfile -a -f $myfile ];then
164                diff -q $myfile $skel >/dev/null 2>&1
165                case $? in
166                0)
167                        echo "`eval_gettext "There is no different beetween \\\$myfile and \\\$skel ."`"
168                        ;;
169                1)
170                        proc_different
171                        ;;
172                2)
173                        echo "`eval_gettext "Unknown error was occured when compare beetween \\\$myfile and \\\$skel ."`"
174                        ;;
175                esac
176        elif [ -d $myfile ]; then
177                proc_dir
178        else
179                proc_no_exists
180        fi
181done
Note: See TracBrowser for help on using the repository browser.