| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | #!/usr/bin/perl -w# To use this script: symlink it to .git/hooks/pre-push, then "git push"## This script is called by "git push" after it has checked the remote status,# but before anything has been pushed.  If this script exits with a non-zero# status nothing will be pushed.## This hook is called with the following parameters:## $1 -- Name of the remote to which the push is being done# $2 -- URL to which the push is being done## If pushing without using a named remote those arguments will be equal.## Information about the commits which are being pushed is supplied as lines to# the standard input in the form:##   <local ref> <local sha1> <remote ref> <remote sha1>use warnings;use strict;my $remote = $ARGV[0];my $url = $ARGV[1];#print("remote: $remote\n");#print("url: $url\n");$url =~ s/\.git$//;  # change myorg/myproject.git to myorg/myproject$url =~ s#^git\@github\.com\:#https://github.com/#i;my $commiturl = $url =~ /\Ahttps?:\/\/github.com\// ? "$url/commit/" : '';my $z40 = '0000000000000000000000000000000000000000';my $reported = 0;while (<STDIN>) {    chomp;    my ($local_ref, $local_sha, $remote_ref, $remote_sha) = split / /;    #print("local_ref: $local_ref\n");    #print("local_sha: $local_sha\n");    #print("remote_ref: $remote_ref\n");    #print("remote_sha: $remote_sha\n");    my $range = '';    if ($remote_sha eq $z40) {  # New branch, examine all commits        $range = $local_sha;    } else { # Update to existing branch, examine new commits        $range = "$remote_sha..$local_sha";    }    my $gitcmd = "git log --reverse --oneline --no-abbrev-commit '$range'";    open(GITPIPE, '-|', $gitcmd) or die("\n\n$0: Failed to run '$gitcmd': $!\n\nAbort push!\n\n");    while (<GITPIPE>) {        chomp;        if (/\A([a-fA-F0-9]+)\s+(.*?)\Z/) {            my $hash = $1;            my $msg = $2;            if (!$reported) {                print("\nCommits expected to be pushed:\n");                $reported = 1;            }            #print("hash: $hash\n");            #print("msg: $msg\n");            print("$commiturl$hash -- $msg\n");        } else {            die("$0: Unexpected output from '$gitcmd'!\n\nAbort push!\n\n");        }    }    die("\n\n$0: Failing exit code from running '$gitcmd'!\n\nAbort push!\n\n") if !close(GITPIPE);}print("\n") if $reported;exit(0);  # Let the push go forward.# vi: set ts=4 sw=4 expandtab:
 |