[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [githax/master 2/3] Add a script to postprocess a log stream and remove trivial merges
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Tue, 11 Jan 2011 12:12:08 -0500
Subject: Add a script to postprocess a log stream and remove trivial merges
Commit: 9d7400c19c7f8f65bbaff1e19428aa8811e69b4c
---
hooks/logs_to_emails.pl | 7 ++++++-
hooks/remove_empty_merges.pl | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+), 1 deletions(-)
create mode 100755 hooks/remove_empty_merges.pl
diff --git a/hooks/logs_to_emails.pl b/hooks/logs_to_emails.pl
index 85715e2..39c2d87 100755
--- a/hooks/logs_to_emails.pl
+++ b/hooks/logs_to_emails.pl
@@ -11,10 +11,16 @@ use strict;
# --stat
# one of: -c, -m, --cc
# --reverse
+#
+# Note that if you're using this with remove_empty_merges.pl, you need
+# to put it in the pipeline _AFTER_ remove_empty_merges, since
+# remove_empty_merges consumes and produces git log output, whereas
+# this script consumes logs and produces emails.
# Suggested use in a commit script:
my $suggested_use = q[
git log --reverse -p --stat --cc "$oldrev..$newrev" |
+ remove_empty_merges.pl |
log_to_emails.pl "$projectname/${refname#refs/heads/}" |
formail -I "To: $recipients" \
-I "From: $GL_USER@xxxxxxxxxxxxxx" \
@@ -22,7 +28,6 @@ my $suggested_use = q[
] ;
# Deficiencies:
-# Doesn't omit conflict-free merges
# Doesn't do 003/231 counting in the subject line like format-patch does
my $waiting_for_commit = 1;
diff --git a/hooks/remove_empty_merges.pl b/hooks/remove_empty_merges.pl
new file mode 100755
index 0000000..0877ede
--- /dev/null
+++ b/hooks/remove_empty_merges.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/perl -w
+use warnings;
+use strict;
+
+# Post-process git log output and remove every entry that does not
+# contain a diff.
+#
+# The intended use-case is for you're using a log mode that generates
+# patches for nontrivial merges but not for trivial ones: you'll want
+# to mail out the messages that contain diffs, but not the ones that
+# don't.
+
+my $copying = 0;
+my $waiting_for_commit = 1;
+
+my @pending_lines = ();
+
+while (<>) {
+ my $is_commit = /^commit [0-9a-f]+/;
+ if ($copying) {
+ if (! $is_commit) {
+ print;
+ next;
+ }
+ $copying = 0;
+ }
+ @pending_lines = () if ($is_commit);
+
+ push @pending_lines, $_;
+ if (/^diff/) {
+ $copying = 1;
+
+ print @pending_lines;
+ @pending_lines = ();
+ }
+}
--
1.7.1