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?= <[email protected]>
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

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to