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

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

update-from-skel をインポート

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