<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to mercurialhook-cppcheck-diff</title><link>https://sourceforge.net/p/cppcheck/wiki/mercurialhook-cppcheck-diff/</link><description>Recent changes to mercurialhook-cppcheck-diff</description><atom:link href="https://sourceforge.net/p/cppcheck/wiki/mercurialhook-cppcheck-diff/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 30 Sep 2014 14:59:57 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/cppcheck/wiki/mercurialhook-cppcheck-diff/feed" rel="self" type="application/rss+xml"/><item><title>mercurialhook-cppcheck-diff modified by Daniel Marjamäki</title><link>https://sourceforge.net/p/cppcheck/wiki/mercurialhook-cppcheck-diff/</link><description>&lt;div class="markdown_content"&gt;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;This script compares two files, passing them both through cppcheck, and examining the results for new messages in cppcheck. An example of using this script is in a &lt;a class="" href="/p/cppcheck/wiki/mercurialhook"&gt;pre-commit hook&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="tunable-values"&gt;Tunable values&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;FILTER_LINE_FILE currently filters out several messages from cppcheck's output. Tune this to remove excessively noisy checks, or checks you disagree with.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="script"&gt;Script&lt;/h2&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Hook script for checking two files, running cppcheck&lt;/span&gt;
&lt;span class="c"&gt;#  and looking for new cppcheck output&lt;/span&gt;
&lt;span class="c"&gt;# Licence : GPLv3+, 2013&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$# &lt;/span&gt;-ne 2 &lt;span class="o"&gt;]&lt;/span&gt; ; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="k"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"usage: original.cpp altered.cpp"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;#Check for missing programs&lt;/span&gt;
&lt;span class="c"&gt;#---&lt;/span&gt;
&lt;span class="nv"&gt;NEEDED_PROGRAMS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"tre-agrep diff"&lt;/span&gt;
&lt;span class="nv"&gt;MISSING_PROG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;span class="k"&gt;for &lt;/span&gt;i in &lt;span class="nv"&gt;$NEEDED_PROGRAMS&lt;/span&gt; 
&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="k"&gt;    if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; x&lt;span class="sb"&gt;`&lt;/span&gt;which &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; x&lt;span class="s2"&gt;""&lt;/span&gt;  &lt;span class="o"&gt;]&lt;/span&gt; ; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="k"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Missing program : "&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;
        &lt;span class="nv"&gt;MISSING_PROG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$MISSING_PROG&lt;/span&gt; -ne 0 &lt;span class="o"&gt;]&lt;/span&gt; ; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="k"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;exit &lt;/span&gt;1;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="c"&gt;#---&lt;/span&gt;

&lt;span class="nv"&gt;TMPDIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp

&lt;span class="nv"&gt;FILTER_LINE_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$TMPDIR&lt;/span&gt;/cppcheck-ignore
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'does not have a constructor&lt;/span&gt;
&lt;span class="s1"&gt;(information)&lt;/span&gt;
&lt;span class="s1"&gt;is not initialized in the constructor&lt;/span&gt;
&lt;span class="s1"&gt;C-style pointer casting&lt;/span&gt;
&lt;span class="s1"&gt;[Aa]ssert&lt;/span&gt;
&lt;span class="s1"&gt;convertion between'&lt;/span&gt; &amp;gt; &lt;span class="nv"&gt;$FILTER_LINE_FILE&lt;/span&gt;

&lt;span class="nv"&gt;DIFFTMP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$TMPDIR&lt;/span&gt;/diff-tmp

&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$TMPDIR&lt;/span&gt;/cppcheck-tmp

&lt;span class="c"&gt;#run cppcheck on both files&lt;/span&gt;
cppcheck -q --enable&lt;span class="o"&gt;=&lt;/span&gt;style,performance,portability --inconclusive &lt;span class="nv"&gt;$1&lt;/span&gt; 2&amp;gt;&amp;amp;1| grep -v -f &lt;span class="nv"&gt;$FILTER_LINE_FILE&lt;/span&gt; &amp;gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-a 
cppcheck -q --enable&lt;span class="o"&gt;=&lt;/span&gt;style,performance,portability --inconclusive &lt;span class="nv"&gt;$2&lt;/span&gt; 2&amp;gt;&amp;amp;1 | grep -v -f &lt;span class="nv"&gt;$FILTER_LINE_FILE&lt;/span&gt; &amp;gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-b

&lt;span class="c"&gt;#normalise names&lt;/span&gt;
sed -i &lt;span class="s2"&gt;"s@$1@filename@"&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-a
sed -i &lt;span class="s2"&gt;"s@$2@filename@"&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-b

&lt;span class="c"&gt;#create backups&lt;/span&gt;
cp &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-a &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-a.orig
cp &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-b &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-b.orig

&lt;span class="c"&gt;# Strip line numbers &lt;/span&gt;
&lt;span class="c"&gt;# Cppcheck can output multiple lline numbers, so cut them all&lt;/span&gt;
sed  -i &lt;span class="s1"&gt;'s/:[0-9]*\]/:]/g'&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-a
sed  -i &lt;span class="s1"&gt;'s/:[0-9]*\]/:]/g'&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-b

diff -uh &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-a &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASETMP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;-b | egrep &lt;span class="s1"&gt;'^\+'&lt;/span&gt; | egrep -v &lt;span class="s1"&gt;'^\+\+'&lt;/span&gt; | sed &lt;span class="s1"&gt;'s/^+//'&lt;/span&gt; &amp;gt; &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-diff

&lt;span class="c"&gt;#perform a near-string match, disallowing subsitution, or erase, &lt;/span&gt;
&lt;span class="c"&gt;# to  restore the file lines&lt;/span&gt;
&lt;span class="c"&gt;#---&lt;/span&gt;
&lt;span class="nv"&gt;SAVEIFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$IFS&lt;/span&gt;
&lt;span class="nv"&gt;IFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; -en &lt;span class="s2"&gt;"\n\b"&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
rm -f &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-matches
&lt;span class="k"&gt;for &lt;/span&gt;i in &lt;span class="sb"&gt;`&lt;/span&gt;cat &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-diff&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="k"&gt;    &lt;/span&gt;tre-agrep  -k -7 -D 100 -S 100  &lt;span class="s2"&gt;"$i"&lt;/span&gt; &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-b.orig  &amp;gt;&amp;gt; &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-matches
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;span class="nv"&gt;IFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$SAVEIFS&lt;/span&gt;
&lt;span class="c"&gt;#---&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-matches &lt;span class="o"&gt;]&lt;/span&gt;  ; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="k"&gt;    &lt;/span&gt;sed -i &lt;span class="s2"&gt;"s@filename@$1@"&lt;/span&gt; &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-matches
    cat &lt;span class="nv"&gt;$BASETMP&lt;/span&gt;-matches
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Daniel Marjamäki</dc:creator><pubDate>Tue, 30 Sep 2014 14:59:57 -0000</pubDate><guid>https://sourceforge.net63f9d15473c39a73e138771aa97a7a96bd9e315c</guid></item></channel></rss>