Xcos: put ANNOTATION at the end on sortAndFill
[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/xcos/src/java/org/scilab/modules/xcos/Controller.java' "
80     echo "  git config --add astyle.ignored 'scilab/modules/xcos/src/java/org/scilab/modules/xcos/JavaController.java' "
81     echo "  git config --add astyle.ignored 'scilab/modules/xcos/src/java/org/scilab/modules/xcos/Kind.java' "
82     echo "  git config --add astyle.ignored 'scilab/modules/xcos/src/java/org/scilab/modules/xcos/ObjectProperties.java' "
83     echo "  git config --add astyle.ignored 'scilab/modules/scicos/src/scicos_sundials/*' "
84
85     echo
86
87     ASTYLE_IGNORED=""
88 else
89     ASTYLE_IGNORED="$(find $(git config --get-all astyle.ignored))"
90 fi
91
92 # indent / format file by type
93 #
94 indent() {
95     # getting against as the current commit
96     if git rev-parse --verify HEAD >/dev/null 2>&1
97     then
98         local against=HEAD
99     else
100         # Initial commit: diff against an empty tree object
101         local against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
102     fi
103
104     # get the modified files per kind filtering out ignored files and call the
105     # __indent_XXX helper
106
107     FILES=$(git diff --cached --name-only --diff-filter=ACM $against |grep -E "\.(xcos|xml|xsl)$" |grep -v -F "$XMLINDENT_IGNORED")
108     [ -z "$FILES" ] || __indent_xml;
109
110     FILES=$(git diff --cached --name-only --diff-filter=ACM $against |grep -E "\.(h|c|hxx|cpp)$" |grep -v -F "$ASTYLE_IGNORED")
111     [ -z "$FILES" ] || __indent_C;
112
113     FILES=$(git diff --cached --name-only --diff-filter=ACM $against |grep -E "\.java$" |grep -v -F "$ASTYLE_IGNORED")
114     [ -z "$FILES" ] || __indent_java;
115
116     FILES=$(git diff --cached --name-only --diff-filter=ACM $against |grep -E "\.(sce|sci|tst)$")
117     [ -z "$FILES" ] || __indent_scilab;
118
119     return 0;
120 }
121
122 # Indent the file with xmlindent if this is an xcos file
123 __indent_xml() {
124     if test ! -x "$XMLINDENT"
125     then
126         return 1;
127     fi
128
129     echo "Formatting" "$FILES"
130     "$XMLINDENT" -w -i 4 $FILES || return 2;
131     git add $FILES || return 3;
132 }
133
134 # Pre process before the indent
135 __pre_indent() {
136     if test ! -x "$ASTYLE"
137     then
138         return 1;
139     fi
140
141     echo "Indenting" $FILES
142     return 0;
143 }
144
145 # post process after the indent
146 __post_indent() {
147     git add $FILES
148 }
149
150 COMMON_ASTYLE_ARGS="--pad-header --suffix=none --pad-oper --indent-col1-comments --indent-switches --indent=spaces=4 --add-brackets --formatted"
151
152 # Indent the file with `astyle' if this is a C/CPP file
153 __indent_C() {
154     __pre_indent || return 1
155     $ASTYLE $COMMON_ASTYLE_ARGS --style=bsd $FILES || return 2
156     __post_indent || return 3
157     return 0
158 }
159
160 # Indent the file with `astyle' if this is a Java file
161 __indent_java() {
162     __pre_indent || return 1
163     $ASTYLE $COMMON_ASTYLE_ARGS --style=java $FILES || return 2
164     __post_indent || return 3
165     return 0
166 }
167
168 # Indent the file with `scinotes' if this is a Scilab file
169 __indent_scilab() {
170     __pre_indent || return 1
171
172     TMPFILE="scinotes_indent.sce"
173     echo "files = [" >$TMPFILE
174     printf "'%s'\n" $FILES >>$TMPFILE
175     echo "];" >>$TMPFILE
176
177     echo "scinotes(files, ['indent','trailing','quote'])" >>$TMPFILE
178     echo "exit(0)" >>$TMPFILE
179
180     if test -f scilab/scilab-bin; then
181         scilab/bin/scilab -nw -f $TMPFILE || return 2
182     else
183         if test -f scilab/bin/WScilex.exe; then
184             scilab/bin/wscilex.exe -nw -f $TMPFILE || return 2
185         else
186             echo "Scilab has not been built."
187             rm $TMPFILE
188             return 4
189         fi
190     fi
191     rm $TMPFILE
192
193     __post_indent || return 3
194     return 0
195 }
196
197 indent