source: palm/trunk/SCRIPTS/document_changes @ 1810

Last change on this file since 1810 was 1810, checked in by maronga, 6 years ago

update of document_changes

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 7.3 KB
Line 
1#!/bin/ksh
2#------------------------------------------------------------------------------#
3# This file is part of PALM.
4#
5# PALM is free software: you can redistribute it and/or modify it under the
6# terms of the GNU General Public License as published by the Free Software
7# Foundation, either version 3 of the License, or (at your option) any later
8# version.
9#
10# PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License along with
15# PALM. If not, see <http://www.gnu.org/licenses/>.
16#
17# Copyright 1997-2014  Leibniz Universitaet Hannover
18#------------------------------------------------------------------------------#
19#
20# Current revisions:
21# -----------------
22# document_changes now checks all subdirectories. Modified printing to screen.
23#
24# Former revisions:
25# -----------------
26# $Id: document_changes 1810 2016-04-05 20:25:29Z maronga $
27#
28# 1804 2016-04-05 16:30:18Z maronga
29# Removed printing of "this is an alpha version"
30#
31# 1326 2014-03-21 10:44:31Z maronga
32# Initial revision
33#
34# Description:
35# ------------
36# This tool moves text from "Current Revisions:" to "Former Revisions:" and
37# adds the svn timestamp. It works with the folders SOURCE and SCRIPTS
38#
39# Usage:
40# a) go to the source directory (e.g. current_version/trunk and perform:
41#    "document_changes",
42# b) or call "document_changes" directly and add the path to the source code as
43#    argument
44#    (e.g. document_changes trunk)
45#
46# Note:
47# The script will only work properly if the two following conditions are met:
48# 1) the 2nd line after "Current Revisions:" must contain text,
49# 2) the last line before "Former Revisions:" must not contain text.
50#------------------------------------------------------------------------------#
51
52#
53#-- define variables
54    comments=""         #: variable contains the CR text
55    comment_char=="!"   #: comment character
56    count_changes=0     #: count the number of files with CR text
57    count_files=0       #: count the number of files
58    fn=""               #: current file name to be scanned
59    file_firstchar=""   #: first character of filename
60    file_lastchar=""    #: last character of filename
61    file_extension=""   #: filename extension
62    found_comment=false #: true/false if a CR text was found
63    IFS=''              #: set standard delimiter to empty string
64    input_dir=""        #: directory of the source code
65    line=""             #: containts the current line of filename
66    line_count=0        #: counter to the line no. of the file
67    line_start=9999999  #: line no. where CR text starts
68    line_stop=0         #: line no. where CR text ends
69    line_tmp=""         #: first 19 characters of line
70    list_delete=""      #: contains the line no. that must be deleted from CR
71    timestamp=""        #: the svn timestamp of the file
72
73#
74#-- get input directory
75    input_dir=$1
76    if  [[ "$input_dir" == "" ]]
77    then
78       input_dir=`pwd`
79    fi
80   
81    printf "\n"
82    printf "#------------------------------------------------------------------------# \n"
83    printf "| \e[1mdocument_changes\e[0m                                                       | \n"
84    printf "|                                                                        | \n"
85    printf "| This tool moves the change comments in the all PALM file headers from  | \n"
86    printf "| 'Current revisions' to 'Former revisions' and saves the time stamp.    | \n" 
87    printf "#------------------------------------------------------------------------# \n"
88   
89    printf "\n  *** Checking files in $input_dir and all recursive subdirectories...\n"
90
91    IFS=$'\n';
92    for fn in $(find $input_dir -not -name '*.pdf' -and -not -name '*.x' -and -not -name '*.eps' -and -not -name '*.png' -and -not -name '*.svn*'); do
93
94#
95#--    exclude backup and invisible files
96       file_firstchar=${fn:0:1}
97       file_lastchar=`echo -n $fn| tail -c -1`
98       file_extension=${fn##*.}
99       if [[ "$file_firstchar" == "." || "$file_extension" == "x" || "$file_lastchar" == "~" || "$file_extension" == "tar" ]]
100       then
101          continue
102       fi
103       
104       (( count_files = count_files + 1 ))
105
106       line_count=0
107       found_comment=false
108       list_delete=""
109       line_start=9999999
110       line_stop=0
111       comments=""
112
113#
114#--    read one line at a time
115       while read line
116       do
117
118          (( line_count = line_count + 1 ))
119          line_tmp=""
120          line_tmp=${line:2:17}
121
122#
123#--       check if stopping point is reached
124          if [[ $line_stop -eq 0 && "$line_tmp" == "Former revisions:" ]]
125          then
126             line_stop=$line_count
127          fi
128
129#
130#--       check if starting point is reached
131          if [[ $line_start -eq 9999999 && "$line_tmp" == "Current revisions" ]]
132          then
133             (( line_start = line_count + 2 ))
134             comment_char=${line:0:1}
135          fi
136
137#
138#--       read comment line
139          if [[ $line_count -ge $line_start && $line_stop -eq 0 ]]
140          then
141
142#
143#--          check for empty comments
144             line_no_space=`echo ${line:2:10} | sed -e 's/^[ \t]*//'`
145             if [[ $line_count -eq $line_start && "$line_no_space" != "" ]]
146             then
147
148             
149                printf "\r%$(tput cols)s" " "   
150                printf "\r  \e[1;92m*** Comments found in $fn\e[0m\n"
151             
152                found_comment=true
153                cp $fn $fn~
154             fi
155
156#
157#--          when comments are found, save comment lines to $comments
158             if [[ "$found_comment" == true ]]
159             then
160                comments="$comments\n$line"
161                list_delete="$list_delete;${line_count}d"
162             fi
163          fi
164         
165#
166#--       get the timestamp from the current revision
167          if [[ "$comments" != "" && $line_count -eq $line_stop+2 ]]
168          then
169            timestamp=`echo $line | cut -d" " -s -f4-7`
170            comments="$comment_char $timestamp$comments"
171          fi
172
173       done <"$fn"
174
175       printf "\r%$(tput cols)s" " "   
176       printf "\r\e[1m  *** Searched files: $count_files. Comments found: $count_changes\e[0m."
177       
178#
179#--    move comments from current revisions to former revisions
180       if [[ "$found_comment" == true ]]
181       then
182
183          (( count_changes = count_changes + 1 ))
184
185#
186#--       insert comments to Former Revisions
187          (( line_stop = line_stop + 4 ))
188          sed -i "${line_stop}i$comments" $fn
189
190#
191#--       delete comments from current revisions and insert two blank lines
192          list_delete=${list_delete#?}
193          sed -i "$list_delete" $fn
194          sed -i "${line_start}i${comment_char} " $fn
195          sed -i "${line_start}i${comment_char} " $fn
196
197       fi
198
199    done
200
201#
202#-- inform the user about the changes
203    printf "\r%$(tput cols)s" " "
204    printf "\r\e[1m  *** Searched files: $count_files. Comments found: $count_changes\e[0m. - \e[1;32mfinished.\e[0m\n\n"
205
206    if  [[ $count_changes -gt 0 ]]
207    then
208       printf "  *** You can now proceed with\n      \e[0;91msvn commit -m 'last commit documented' trunk\e[0m\n"
209       printf "  *** Please do not forget to commit your changes in the changelog at\n      \e[0;91mhttps://palm.muk.uni-hannover.de/trac/wiki/doc/tec/changelog\e[0m!\n"   
210    else
211        printf "  *** No comments found in files!\n"   
212   
213    fi
Note: See TracBrowser for help on using the repository browser.