Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Hi all,

This is my first easy hack. I made change in the function
check_and_fix_whitespace() the filter all the files that don't match the
list given in the wiki (c, cpp, cxx, h, hrc, hxx, idl, in, java, map, mk,
MK, pmk, pl, pm, sdi, sh, src, tab, xcu, xml)

This patches is release under the LGPLv3+/MPL.


Cheers
Maxime
From abad7922b457fb3c7b27b969944f9c3cc1b51753 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maxime=20C=C3=B4t=C3=A9?= <cote.maxime1@gmail.com>
Date: Mon, 18 Apr 2011 21:39:50 -0400
Subject: [PATCH] Easy hack Improve git pre-commit hook

Change of the function check_and_fix_whitespace() to check only file with the extension listed 
(c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|mk|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml)
---
 git-hooks/pre-commit |   55 +++++++++++++++++++++++++------------------------
 1 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit
index 6817990..6c6fe4e 100755
--- a/git-hooks/pre-commit
+++ b/git-hooks/pre-commit
@@ -18,11 +18,6 @@ $ENV{LC_ALL} = "C";
 sub fix_whitespace($$) {
     my ( $file, $lines ) = @_;
 
-    # usually we have nothing to do ;-)
-    return if ( keys( %{$lines} ) == 0 ||
-                $file eq "" || $file eq "GNUmakefile" ||
-                !( $file =~ 
/\.(c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|MK|pl|pm|pmk|py|sdi|sh|src|tab)/ ) );
-
     open( IN, "$file" ) || die "Cannot open $file for reading";
     my ( $out, $tmpfile ) = mkstemp( "/tmp/whitespace-fixing-XXXXXX" );
 
@@ -66,36 +61,42 @@ sub check_and_fix_whitespace($)
         my $fd;
         ( $fd, $stash ) = mkstemp( "/tmp/unstaged-changes-XXXXXX" );
         close( $fd );
+
         # this will keep the staged changes
         system( "git diff > $stash" );
         system( "git checkout ." );
     }
-    open( IN, "git diff-index -p --no-prefix --cached $head -- |" ) || die "Cannot get git 
diff-index";
-    while ( my $line = <IN> ) {
-        if ( $line =~ /^\+\+\+ (.*)/ ) {
+    open( FILES, "git diff-index --cached --name-only $head |" ) || die "Cannot run git 
diff-index.";
+    while( my $file = <FILES> ) {
+        chomp( $file );
+        if ( $file ne "GNUmakefile" &&
+           ( $file =~ /\.(c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|MK|pl|pm|pmk|py|sdi|sh|src|tab)/ ) 
) {
+            open( F, "git diff-index -p --cached $head -- $file |" );
+            while ( my $line = <F> ) {
+                if ( $line =~ /^\+\+\+ (.*)/ ) {
+                    %lines = ();
+                    $line_no = 0;
+                    $line_max = -1;
+                }
+                elsif ( $line =~ /^@@ -[0-9]+,[0-9]+ \+([0-9]+),([0-9]+) @@/ ) {
+                    $line_no = $1;
+                    $line_max = $line_no + $2;
+                }
+                elsif ( ( $line_no < $line_max ) && ( $line =~ /^[ +]/ ) ) {
+                    if ( $line =~ /^\+.*[ \t]$/ ) {
+                        $lines{$line_no} = 1;
+                    }
+                    ++$line_no;
+                }
+            }
             fix_whitespace( $file, \%lines );
-            $file = $1;
-            %lines = ();
-            $line_no = 0;
-            $line_max = -1;
-        }
-        elsif ( $line =~ /^@@ -[0-9]+,[0-9]+ \+([0-9]+),([0-9]+) @@/ ) {
-            $line_no = $1;
-            $line_max = $line_no + $2;
-        }
-        elsif ( ( $line_no < $line_max ) && ( $line =~ /^[ +]/ ) ) {
-            if ( $line =~ /^\+.*[ \t]$/ ) {
-                $lines{$line_no} = 1;
+            close( IN );
+            if ($stash) {
+                system( "git apply < $stash" );
+                unlink( $stash );
             }
-            ++$line_no;
         }
     }
-    fix_whitespace( $file, \%lines );
-    close( IN );
-    if ($stash) {
-        system( "git apply < $stash" );
-        unlink( $stash );
-    }
 }
 
 # Do the work :-)
-- 
1.7.4.4


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.