diff options
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/git-notify | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/tools/git-notify b/tools/git-notify index 848cfe0d..6d5a564c 100755 --- a/tools/git-notify +++ b/tools/git-notify | |||
| @@ -102,6 +102,28 @@ sub xml_escape($) | |||
| 102 | return $str; | 102 | return $str; |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | # execute git-rev-list(1) with the given parameters and return the output | ||
| 106 | sub git_rev_list(@) | ||
| 107 | { | ||
| 108 | my @args = @_; | ||
| 109 | my $revlist = []; | ||
| 110 | my $pid = open REVLIST, "-|"; | ||
| 111 | |||
| 112 | die "Cannot open pipe: $!" if not defined $pid; | ||
| 113 | if (!$pid) | ||
| 114 | { | ||
| 115 | exec "git", "rev-list", @revlist_options, @args or die "Cannot execute rev-list: $!"; | ||
| 116 | } | ||
| 117 | while (<REVLIST>) | ||
| 118 | { | ||
| 119 | chomp; | ||
| 120 | die "Invalid commit: $_" if not /^[0-9a-f]{40}$/; | ||
| 121 | push @$revlist, $_; | ||
| 122 | } | ||
| 123 | close REVLIST or die $! ? "Cannot execute rev-list: $!" : "rev-list exited with status: $?"; | ||
| 124 | return $revlist; | ||
| 125 | } | ||
| 126 | |||
| 105 | # right-justify the left column of "left: right" elements, omit undefined elements | 127 | # right-justify the left column of "left: right" elements, omit undefined elements |
| 106 | sub format_table(@) | 128 | sub format_table(@) |
| 107 | { | 129 | { |
| @@ -353,19 +375,14 @@ sub send_cia_notice($$) | |||
| 353 | sub send_global_notice($$$) | 375 | sub send_global_notice($$$) |
| 354 | { | 376 | { |
| 355 | my ($ref, $old_sha1, $new_sha1) = @_; | 377 | my ($ref, $old_sha1, $new_sha1) = @_; |
| 356 | my @notice = (); | 378 | my $notice = git_rev_list("--pretty", "^$old_sha1", "$new_sha1", @exclude_list); |
| 357 | 379 | ||
| 358 | push @revlist_options, "--pretty"; | 380 | foreach my $rev (@$notice) |
| 359 | open LIST, "-|" or exec "git", "rev-list", @revlist_options, "^$old_sha1", "$new_sha1", @exclude_list or die "cannot exec git-rev-list"; | ||
| 360 | while (<LIST>) | ||
| 361 | { | 381 | { |
| 362 | chomp; | 382 | $rev =~ s/^commit /URL: $gitweb_url\/?a=commit;h=/ if $gitweb_url; |
| 363 | s/^commit /URL: $gitweb_url\/?a=commit;h=/ if $gitweb_url; | ||
| 364 | push @notice, $_; | ||
| 365 | } | 383 | } |
| 366 | close LIST; | ||
| 367 | 384 | ||
| 368 | mail_notification($commitlist_address, "New commits on branch $ref", "text/plain; charset=UTF-8", @notice); | 385 | mail_notification($commitlist_address, "New commits on branch $ref", "text/plain; charset=UTF-8", @$notice); |
| 369 | } | 386 | } |
| 370 | 387 | ||
| 371 | # send all the notices | 388 | # send all the notices |
