Help: fix bad xcos image export with Command_bode.xcos
[scilab.git] / git_hooks / pre-commit
1 #!/usr/bin/env sh
2 #
3 # Hook used to indent files before commiting
4 #
5
6
7 #
8 # Pre-conditions
9 #
10 if test -d ".git/rebase-merge"          || \
11    test -d ".git/rebase-apply"          || \
12    test -f ".git/MERGE_HEAD"            || \
13    test -f ".git/CHERRY_PICK_HEAD"      || \
14    test -f ".git/BISECT_LOG"
15 then
16     exit 0
17 fi
18
19 #
20 # Configuration check
21 #
22 XMLINDENT="$(git config --get hooks.xmlindent)"
23 if test ! -x "$XMLINDENT"
24 then
25     echo "Unable to find xmlindent executable on the configuration."
26     echo
27     echo "Please configure it with :"
28     echo "  git config --global hooks.xmlindent C:/path/to/xmlindent"
29     echo " or "
30     echo "  git config --global hooks.xmlindent /usr/bin/xmlindent"
31     echo
32 fi
33
34 if test -z "$(git config --get-all xmlindent.ignored)"
35 then
36     echo "Unable to find xmlindent ignored list on the configuration, ignored"
37     echo
38     echo "You can configure it with :"
39     echo "  git config --add xmlindent.ignored 'scilab/Visual-Studio-settings/*.xml' "
40     echo "  git config --add xmlindent.ignored 'scilab/checkstyle/*.xml' "
41     echo
42     
43     XMLINDENT_IGNORED=""
44 else
45     XMLINDENT_IGNORED="$(find $(git config --get-all xmlindent.ignored))"
46 fi
47
48 ASTYLE="$(git config --get hooks.astyle)"
49 if test ! -x "$ASTYLE"
50 then
51     echo "Unable to find astyle executable on the configuration."
52     echo
53     echo "Please configure it with :"
54     echo "  git config --global hooks.astyle C:/path/to/astyle"
55     echo " or "
56     echo "  git config --global hooks.astyle /usr/bin/astyle"
57     echo
58 fi
59
60 if test -z "$(git config --get-all astyle.ignored)"
61 then
62     echo "Unable to find astyle ignored list on the configuration, ignored"
63     echo
64     echo "You can configure it with :"
65     echo "  git config --add astyle.ignored 'scilab/modules/*/src/jni/*.hxx' "
66     echo "  git config --add astyle.ignored 'scilab/modules/*/src/jni/*.cpp' "
67     echo "  git config --add astyle.ignored 'scilab/modules/*/src/jni/*.c' "
68     echo "  git config --add astyle.ignored 'scilab/modules/javasci/src/java/org/scilab/modules/javasci/Call_Scilab*.java' "
69     echo "  git config --add astyle.ignored 'scilab/modules/renderer/src/java/org/scilab/modules/renderer/FigureScilabCall*.java' "
70     echo "  git config --add astyle.ignored 'scilab/modules/helptools/src/java/org/scilab/modules/helptools/SynopsisLexer.java' "
71     echo "  git config --add astyle.ignored 'scilab/modules/helptools/src/java/org/scilab/modules/helptools/XML/XMLLexer.java' "
72     echo "  git config --add astyle.ignored 'scilab/modules/helptools/src/java/org/scilab/modules/helptools/c/CLexer.java' "
73     echo "  git config --add astyle.ignored 'scilab/modules/helptools/src/java/org/scilab/modules/helptools/java/JavaLexer.java' "
74     echo "  git config --add astyle.ignored 'scilab/modules/helptools/src/java/org/scilab/modules/helptools/scilab/ScilabLexer.java' "
75     echo "  git config --add astyle.ignored 'scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/FunctionScanner.java' "
76     echo "  git config --add astyle.ignored 'scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/IndentScanner.java' "
77     echo "  git config --add astyle.ignored 'scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/MatchingBlockScanner.java' "
78     echo "  git config --add astyle.ignored 'scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/ScilabLexer.java' "
79     echo "  git config --add astyle.ignored 'scilab/modules/scicos/src/scicos_sundials/*' "
80     
81     echo
82     
83     ASTYLE_IGNORED=""
84 else
85     ASTYLE_IGNORED="$(find $(git config --get-all astyle.ignored))"
86 fi
87
88 # indent / format file by type
89 #
90 indent() {
91     # getting against as the current commit
92     if git rev-parse --verify HEAD >/dev/null 2>&1
93     then
94         local against=HEAD
95     else
96         # Initial commit: diff against an empty tree object
97         local against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
98     fi
99
100     # loop on modified files
101     git diff --cached --name-only $against |while read file;
102     do
103         local ext=$(expr "$file" : ".*\(\..*\)")
104         case $ext in
105         .xcos|.xml|.xsl)
106             __indent_xml;
107         ;;
108         .h|.c|.hxx|.cpp)
109             __indent_C;
110         ;;
111         .java)
112             __indent_java;
113         ;;
114         .sce|.sci)
115             __indent_scilab;
116         ;;
117         esac
118     done
119
120     return 0;
121 }
122
123 # Indent the file with xmlindent if this is an xcos file
124 __indent_xml() {
125
126     if test ! -x "$XMLINDENT"
127     then
128         return 1;
129     fi
130     if test ! -f $file
131     then
132         return 2;
133     fi
134
135     # ignored globs
136     if test -n "$XMLINDENT_IGNORED"
137     then
138         echo $XMLINDENT_IGNORED |grep -q $file
139         if test $? -eq 0
140         then
141             echo "Formatting" $file    ": ignored"
142             return 3;
143         fi
144     fi
145
146     echo "Formatting" $file
147     "$XMLINDENT" -w -i 4 "$file" || return 4;
148     git add "$file" || return 5;
149 }
150
151 # Pre process before the indent
152 __pre_indent() {
153     if test ! -x "$ASTYLE"
154     then
155         return 1;
156     fi
157     if test ! -f $file
158     then
159         return 2;
160     fi
161
162     # ignored globs
163     if test -n "$ASTYLE_IGNORED"
164     then
165         echo $ASTYLE_IGNORED |grep -q "$file"
166         if test $? -eq 0
167         then
168             echo "Indenting" $file    ": ignored"
169             return 3;
170         fi
171     fi
172
173     echo "Indenting" $file
174     return 0;
175 }
176
177 # post process after the indent
178 __post_indent() {
179     git add "$file"
180 }
181
182 COMMON_ASTYLE_ARGS="--pad-header --suffix=none --pad-oper --indent-col1-comments --indent-switches --indent=spaces=4 --add-brackets --formatted"
183
184 # Indent the file with `astyle' if this is a C/CPP file
185 __indent_C() {
186     __pre_indent || return 1
187     $ASTYLE $COMMON_ASTYLE_ARGS --style=bsd "$file" || return 2
188     __post_indent || return 3
189     return 0
190 }
191
192 # Indent the file with `astyle' if this is a Java file
193 __indent_java() {
194     __pre_indent || return 1
195     $ASTYLE $COMMON_ASTYLE_ARGS --style=java "$file" || return 2
196     __post_indent || return 3
197     return 0
198 }
199
200 # Indent the file with `scinotes' if this is a Scilab file
201 __indent_scilab() {
202     __pre_indent || return 1
203     if test -f scilab/scilab-bin; then
204         scilab/bin/scinotes -indent "$file" || return 2
205     else
206         if test -f scilab/bin/WScilex.exe; then
207             scilab/bin/scilex.exe -e "scinotes('$file', ['indent','trailing','quote'])" || return 2
208         else
209             echo "Scilab has not been built."
210             return 4
211         fi
212     fi
213
214     __post_indent || return 3
215     return 0
216 }
217
218 indent
219