On 07/29/2011 11:01 AM, Miklos Vajna wrote:
On Wed, Jul 27, 2011 at 03:53:18PM +0200, Thomas Arnhold<tho...@arnhold.org>  
wrote:
I think this was not intended. Simple solution would be to add some
'<<<<<<<  HEAD' .* '=======' .* '>>>>>>>  master' stuff to git hooks. So
git would block commits with conflicts.

Good idea - care to send a patch? The pre-commit hook is at
git-hooks/pre-commit in bootstrap.git.

Yeah, I've already found that file. Strangely we already have such a check: http://cgit.freedesktop.org/libreoffice/bootstrap/tree/git-hooks/pre-commit#n61

And this check works! I've added a suspicious line to a random file '<<<<<<< HEAD' and git commit won't accept this with the according error message.

So if you do a simple 'git commit' you won't be able to commit those lines. But if you are in a merge conflict and have to run 'git add FILE' and 'git rebase --continue' those lines are accepted. That's why Bjoerns merge had those in there...

So I tried to add an additional hook 'pre-rebase' (see attachment), but it doesn't work. This is a modification of 'pre-commit'. Maybe the problem occurs on 'git add FILE' and not at the step 'git rebase --continue'. But for 'git add' there are no hooks as far as I know.

You could try to reproduce it:

git reset --hard HEAD~1
generate a merge conflict
git commit
git pull -r
git add ...
git rebase --continue
...

Thomas
#!/usr/bin/env perl

# A hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message
# if it wants to stop the commit.

use strict;
use File::Temp qw/ :mktemp  /;
use File::Copy;
use Cwd;

$ENV{LC_ALL} = "C";

sub check_whitespaces($)
{
    my ($h) = @_;

    my $found_bad = 0;
    my $filename;
    my $reported_filename = "";
    my $lineno;
    sub bad_line {
        my ($why, $line) = @_;
        if (!$found_bad) {
            print STDERR "*\n";
            print STDERR "* You have some suspicious patch lines:\n";
            print STDERR "*\n";
            $found_bad = 1;
        }
        if ($reported_filename ne $filename) {
            print STDERR "* In $filename\n";
            $reported_filename = $filename;
        }
        print STDERR "* $why (line $lineno)\n";
        print STDERR "$filename:$lineno:$line\n";
    }
    open( FILES, "git-diff-index -p -M --cached $h |" ) ||  die "Cannot run git 
diff-index.";
    while (<FILES>) {
        if (m|^diff --git a/(.*) b/\1$|) {
            $filename = $1;
            next;
        }
        if (/^@@ -\S+ \+(\d+)/) {
            $lineno = $1 - 1;
            next;
        }
        if (/^ /) {
            $lineno++;
            next;
        }
        if (s/^\+//) {
            $lineno++;
            chomp;
            if (/^(?:[<>=]){7}/) {
                bad_line("unresolved merge conflict", $_);
            }
        }
    }
    if ( $found_bad)
    {
        exit($found_bad);
    }
}

# Do the work :-)

# Initial commit: diff against an empty tree object
my $against="4b825dc642cb6eb9a060e54bf8d69288fbee4904";
if ( system( "git rev-parse --verify HEAD >/dev/null 2>&1" ) == 0 ) {
    $against="HEAD"
}

# fix whitespace in code
check_whitespaces( $against );

# all OK
exit( 0 );
# vi:set shiftwidth=4 expandtab:
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to