source: trunk/svn_add_id.sh @ 1367

Last change on this file since 1367 was 1367, checked in by bradbell, 11 years ago

add propset Id key set on for each modified file

  • Property svn:executable set to *
File size: 4.0 KB
Line 
1#! /bin/bash
2# $Id$
3# ----------------------------------------------------------------------------
4# Each of the cases in ext_list and file_list must be handled by the
5#       case "$ext" in
6# statment in the script below.
7#
8# List of extensions that are handled by svn_add_id.sh
9ext_list=" .sh .py .bat .c .h .cpp .hpp  .omh " 
10#
11# List of specific file names that are handled by svn_add_id.sh
12# (Assume no special grep pattern matching characters except for .)
13file_list=" makefile.am configure.ac "
14#
15# ----------------------------------------------------------------------------
16command="$0"
17directory="$1"
18dry_run="$2"
19if [ ! -d "$1" ] || ( [ "$2" != "" ] && [ "$2" != "--dry-run" ] )
20then
21        echo "\"$directory\" is not a directory"
22        echo
23        echo "usage: svn_add_id.sh directory --dry-run"
24        echo
25        echo "This command adds the Subversion keyword comamnd \$Id"
26        echo "to files in and below the specified directory."
27        echo "It also executes the command"
28        echo "  svn propset svn:keywords Id set on name"
29        echo "where name is the name of the file that was modified." 
30        echo
31        echo "If a file already has a Subversion \$Id comamnd, it is"
32        echo "not modified."
33        echo
34        echo "If --dry-run is specified, proposed changes are listed,"
35        echo "but no action is taken."
36        echo
37        echo "The shell variables ext_list and file_list determine which files"
38        echo "are checked; see the top of file $0" 
39        exit 1
40fi 
41#
42# list of files and subdirectories of the specified directory
43dir_list=`ls "$directory"`
44for name in $dir_list
45do
46        full_name="$directory/$name"
47        if [ -d "$full_name" ]
48        then
49                # This is a directory so run svn_add_id.sh on it
50                if ! $command "$full_name" "$dry_run"
51                then
52                        echo "Aborted $command $full_name $dry_run"
53                        exit 1
54                fi
55                # do not process this file
56                ext=""
57        else
58                ext=`echo $name | sed -e 's/.*\([.][^.]*\)/\1/' -e 's/[^.]*//'`
59                pattern=`echo "$ext" | sed -e 's/\.\(.*\)/ [.]\1 /'`
60                if ! echo "$ext_list" | grep "$pattern" > /dev/null
61                then
62                        # Not in extension list so do not process this file
63                        ext=""
64                else
65                        if grep '\$Id.*\$' $full_name > /dev/null
66                        then
67                                # $Id command is already in this file
68                                # so do not process it
69                                ext=""
70                        fi
71                fi
72                pattern=`echo "$name" | sed -e 's/\./[.]/g' -e 's/.*/ & /'`
73                if echo "$file_list" | grep "$pattern" > /dev/null
74                then
75                        if grep '\$Id.*\$' $full_name > /dev/null
76                        then
77                                # $Id command is already in this file
78                                # so do not process it
79                                ext=""
80                        fi
81                        ext="$name"
82                fi
83        fi
84        if [ "$ext" != "" ]
85        then
86                # Separate by cases in $ext_list or $file_list
87                case "$ext" in
88                        # Shell or python script file. Put Id command after
89                        # interpertor specification; e.g., ! /bin/bash
90                        .sh | .py )
91                        sed < $full_name > svn_add_id.$$ \
92                                -e '1,1s/^[^!]*$/# $Id$\n&/' \
93                                -e '1,1s/^# *!.*$/& \n# $Id$/'
94                        ;;
95
96                        # Dos batch file
97                       .bat )
98                        echo "rem \$Id\$" > svn_add_id.$$
99                        cat "$full_name" >> svn_add_id.$$
100                        ;;
101
102                        # C and C++ source code
103                       .c | .h | .cpp | .hpp )
104                        echo "/* \$Id\$ */" > svn_add_id.$$
105                        cat "$full_name" >> svn_add_id.$$
106                        ;;
107
108                        # OMhelp files
109                        .omh )
110                        echo "\$Id\$" > svn_add_id.$$
111                        cat "$full_name" >> svn_add_id.$$
112                        ;;
113
114                        # Automake input files
115                        makefile.am )
116                        sed < $full_name > svn_add_id.$$ \
117                                -e '1,1s/^.*$/# $Id$\n&/' 
118                        ;;
119
120                        # Autoconf input files
121                        configure.ac )
122                        sed < $full_name > svn_add_id.$$ \
123                                -e '1,1s/^.*$/dnl $Id$\n&/' 
124                        ;;
125
126                esac
127                # Must have matched one of the cases above because $ext is
128                # in $ext_list of $file_list
129                echo "$full_name"
130                if diff $full_name svn_add_id.$$
131                then
132                        echo "Cannot add \$Id command to $full_name"
133                        exit 1
134                fi
135                if [ "$dry_run" == "" ]
136                then
137                        if ! mv svn_add_id.$$ $full_name
138                        then
139                                echo "Cannot modify $full_name"
140                                exit 1
141                        fi
142                        if ! svn propset svn:keywords Id set on $full_name
143                        then
144                                echo "Cannot set Id keyword on for $full_name"
145                        fi
146                else
147                        if ! rm svn_add_id.$$
148                        then
149                                echo "Cannot remove svn_add_id.$$"
150                                exit 1
151                        fi
152                fi
153        fi
154done
155if [ -e svn_add_id.$$ ]
156then
157        echo "svn_add_id: file svn_add_id.$$ should have been deleted"
158        exit 1
159fi
160exit 0
Note: See TracBrowser for help on using the repository browser.