scripts/annotate.pl     |  235 ++++++++++++++++++++++++++++++++++++++++++++++++
 scripts/aoo-annotate.pl |  153 -------------------------------
 2 files changed, 235 insertions(+), 153 deletions(-)

New commits:
commit 56fd9e74b4a085e504ca3f43497a7a7e5a516383
Author: Michael Meeks <michael.me...@suse.com>
Date:   Thu Feb 28 16:15:39 2013 +0000

    rename.

diff --git a/scripts/annotate.pl b/scripts/annotate.pl
new file mode 100755
index 0000000..9fe42e4
--- /dev/null
+++ b/scripts/annotate.pl
@@ -0,0 +1,235 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my %valid_reasons = (
+    'ignore' => 1,
+    'merged as' => 1,
+    'prefer' => 1,
+    'reject' => 1
+);
+
+sub clean_note($)
+{
+    my $note = shift;
+    chomp ($note); # ideally sanitise to pull out our notes ...
+    $note =~ m/\n/ && die "multi-line note\n";
+    return $note;
+}
+
+sub fetch_git_notes($)
+{
+    my $git_dir = shift;
+    `(cd '$git_dir'; git --no-pager fetch origin 
refs/notes/commits:refs/notes/commits)`;
+}
+
+sub push_git_notes($)
+{
+    my $git_dir = shift;
+    `(cd '$git_dir'; git --no-pager push origin 
refs/notes/commits:refs/notes/commits)`;
+}
+
+# starts with a git hash;
+sub validate_git_hash($)
+{
+    my $hash = shift;
+    return 0 if (! ($hash =~ m/^([0-9a-fA-F]{40})/) );
+    return 1;
+}
+
+sub validate_check_note($)
+{
+    my $note_text = shift;
+    $note_text =~ m/^(\S+):\s+(.+)$/ || die "note: '$note_text' is missing a 
explanation: reason";
+    my $reason = $1;
+    my $expl = $2;
+
+    if (!defined $valid_reasons{$reason}) {
+       my @reasons = keys %valid_reasons;
+       print STDERR "Invalid reason: '$reason' - valid reasons are @reasons\n";
+       exit 1;
+    } elsif ($reason eq 'merged as' || $reason eq 'prefer') {
+       validate_git_hash($expl) ||
+           die "reason '$reason' must have an explanation beginning with a git 
hash\n";
+    }
+}
+
+sub read_log($)
+{
+    my $git_dir = shift;
+    my @revisions;
+    my $outputh;
+
+#    print STDERR "read revisions:\n";
+    open ($outputh, "cd '$git_dir' ; git --no-pager log 
--pretty='%H,%cn,%ce,%cd,>>%s<<>>%N<<' aoo/approx-3.4.0..origin/aoo/trunk|") || 
die "can't get git log: $!";
+    while (<$outputh>) {
+       my $line = $_;
+       chomp ($line);
+#      print STDERR "line '$line'\n";
+       my %commit;
+       $line =~ s/^(\S+),([^,]+),([^,]+),([^,]+),>>(.*)<<>>(.*)$// || die 
"badly formatted line: $line";
+       $commit{hash} = $1;
+       $commit{name} = $2;
+       $commit{email} = $3;
+       $commit{date} = $4;
+       $commit{subject} = $5;
+       my $note = $6;
+
+#      print STDERR "here - note is $note\n";
+       while (1) {
+#          print STDERR "note: $note";
+           if ($note =~ s/<<//) {
+#              print STDERR "no match !";
+               last;
+           } else {
+               $note = $note . readline $outputh;
+           }
+       }
+
+       $commit{note} = clean_note($note);
+       push @revisions, \%commit;
+    }
+    close ($outputh);
+
+    return \@revisions;
+}
+
+sub dump_breakdown($)
+{
+    my $revs = shift;
+
+    my $rev_count = scalar (@{$revs});
+    my $annotated = 0;
+    my %frequency;
+    my $contiguous = 0;
+    my $in_start_run = 1;
+    for my $rev (reverse @{$revs}) {
+       if($rev->{note} ne "") {
+           my $stem = $rev->{note};
+           $stem =~ s/^merged as.*$/merged as:/;
+           $stem =~ s/^prefer.*$/prefer:/;
+           $stem =~ s/^reject.*$/reject:/;
+           $frequency{$stem} = 0 if (!defined $frequency{$stem});
+           $frequency{$stem}++;
+           $annotated++;
+           $contiguous++ if ($in_start_run);
+       } else {
+           $in_start_run = 0;
+       }
+    }
+
+    print "$annotated annotations of $rev_count commits\n";
+    for my $stem (sort { $frequency{$b} <=> $frequency{$a} } keys %frequency) {
+       print "$frequency{$stem}\t$stem\n";
+    }
+    print "contiguous annotations: $contiguous\n";
+}
+
+sub sanity_check_revs($$)
+{
+    my $git_dir = shift;
+    my $revs = shift;
+    my $note_count = 0;
+    for my $rev (@{$revs}) {
+       my $note = $rev->{note};
+       $note_count++ if ($note ne "");
+    }
+    if ($note_count < 100) {
+       print STDERR "It looks as if you have not fetched your git notes please 
do\n";
+       print STDERR "( cd $git_dir ; git fetch origin 
refs/notes/commits:refs/notes/commits )\n";
+       exit 1;
+    }
+}
+
+sub usage()
+{
+    print STDERR "Usage: aoo-annotate.pl [args] [--git /path/to/git] ['merged 
as: 1234' <hash>]\n";
+    print STDERR "annotate AOO commits as to their status\n";
+    print STDERR "\n";
+    print STDERR "  -a, --all     list all commits regardless of status\n";
+    print STDERR "  -g, --git <d> pass a path to a git repository [default is 
cwd]\n";
+    print STDERR "  -l, --list    list all un-annotated commits\n";
+    print STDERR "  -n, --notes   list just commits with notes\n";
+    print STDERR "  -h, --help    show this\n";
+    print STDERR "  -s, --stats   show stats on merging\n";
+    print STDERR "  -f, --fetch   fetch latest notes\n";
+}
+
+my $git_dir;
+my $stats = 0;
+my $all = 0;
+my $list = 0;
+my $notes = 0;
+my $fetch = 0;
+my $note_text;
+my $note_hash;
+
+while (my $arg = shift @ARGV) {
+    if ($arg eq '--help' || $arg eq '-h') {
+       usage();
+       exit;
+    } elsif ($arg eq '--stats' || $arg eq '-s') {
+       $stats = 1;
+    } elsif ($arg eq '--fetch' || $arg eq '-f') {
+       $fetch = 1;
+    } elsif ($arg eq '--list' || $arg eq '-l') {
+       $list = 1;
+    } elsif ($arg eq '--all' || $arg eq '-a') {
+       $all = 1;
+       $list = 1;
+    } elsif ($arg eq '--notes' || $arg eq '-n') {
+       $notes = 1;
+    } elsif ($arg eq '--git' || $arg eq '-g') {
+       $git_dir = shift @ARGV;
+    } elsif (!defined $note_text) {
+       $note_text = $arg;
+    } elsif (!defined $note_hash) {
+       $note_hash = $arg;
+    } else {
+       usage ();
+       die "unknown argument: $arg";
+    }
+}
+
+if (!defined $git_dir) {
+    $git_dir = `pwd`;
+    chomp ($git_dir);
+}
+
+if (!$list && !$stats) {
+
+    print "$note_text' '$note_hash\n";
+    if (!defined $note_text || !defined $note_hash) {
+       usage();
+       die "need some note text";
+    }
+
+    validate_check_note($note_text);
+    validate_git_hash($note_hash) ||
+           die "Hash on master '$note_hash' doesn't look like a git hash\n";
+
+    fetch_git_notes($git_dir);
+    `( cd '$git_dir' ; git --no-pager notes add -m '$note_text' $note_hash )`;
+    push_git_notes($git_dir);
+} else {
+    fetch_git_notes($git_dir) if ($fetch);
+
+    my $revs = read_log($git_dir);
+    sanity_check_revs($git_dir, $revs);
+
+    if ($list) {
+       print STDERR "Commits:\n";
+       for my $rev (@{$revs}) {
+           my $note = $rev->{note};
+           chomp ($note);
+           my $has_note = ($note ne "");
+           my $printit = $all || ($has_note && $notes) || (!$has_note && 
!$notes);
+           print "$rev->{hash}\t$rev->{note}\t$rev->{name}\t$rev->{subject}\n" 
if ($printit);
+       }
+    }
+
+    if ($stats == 1) {
+       print STDERR "\n" if ($list);
+       dump_breakdown ($revs);
+    }
+}
diff --git a/scripts/aoo-annotate.pl b/scripts/aoo-annotate.pl
deleted file mode 100755
index 9fe42e4..0000000
--- a/scripts/aoo-annotate.pl
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-my %valid_reasons = (
-    'ignore' => 1,
-    'merged as' => 1,
-    'prefer' => 1,
-    'reject' => 1
-);
-
-sub clean_note($)
-{
-    my $note = shift;
-    chomp ($note); # ideally sanitise to pull out our notes ...
-    $note =~ m/\n/ && die "multi-line note\n";
-    return $note;
-}
-
-sub fetch_git_notes($)
-{
-    my $git_dir = shift;
-    `(cd '$git_dir'; git --no-pager fetch origin 
refs/notes/commits:refs/notes/commits)`;
-}
-
-sub push_git_notes($)
-{
-    my $git_dir = shift;
-    `(cd '$git_dir'; git --no-pager push origin 
refs/notes/commits:refs/notes/commits)`;
-}
-
-# starts with a git hash;
-sub validate_git_hash($)
-{
-    my $hash = shift;
-    return 0 if (! ($hash =~ m/^([0-9a-fA-F]{40})/) );
-    return 1;
-}
-
-sub validate_check_note($)
-{
-    my $note_text = shift;
-    $note_text =~ m/^(\S+):\s+(.+)$/ || die "note: '$note_text' is missing a 
explanation: reason";
-    my $reason = $1;
-    my $expl = $2;
-
-    if (!defined $valid_reasons{$reason}) {
-       my @reasons = keys %valid_reasons;
-       print STDERR "Invalid reason: '$reason' - valid reasons are @reasons\n";
-       exit 1;
-    } elsif ($reason eq 'merged as' || $reason eq 'prefer') {
-       validate_git_hash($expl) ||
-           die "reason '$reason' must have an explanation beginning with a git 
hash\n";
-    }
-}
-
-sub read_log($)
-{
-    my $git_dir = shift;
-    my @revisions;
-    my $outputh;
-
-#    print STDERR "read revisions:\n";
-    open ($outputh, "cd '$git_dir' ; git --no-pager log 
--pretty='%H,%cn,%ce,%cd,>>%s<<>>%N<<' aoo/approx-3.4.0..origin/aoo/trunk|") || 
die "can't get git log: $!";
-    while (<$outputh>) {
-       my $line = $_;
-       chomp ($line);
-#      print STDERR "line '$line'\n";
-       my %commit;
-       $line =~ s/^(\S+),([^,]+),([^,]+),([^,]+),>>(.*)<<>>(.*)$// || die 
"badly formatted line: $line";
-       $commit{hash} = $1;
-       $commit{name} = $2;
-       $commit{email} = $3;
-       $commit{date} = $4;
-       $commit{subject} = $5;
-       my $note = $6;
-
-#      print STDERR "here - note is $note\n";
-       while (1) {
-#          print STDERR "note: $note";
-           if ($note =~ s/<<//) {
-#              print STDERR "no match !";
-               last;
-           } else {
-               $note = $note . readline $outputh;
-           }
-       }
-
-       $commit{note} = clean_note($note);
-       push @revisions, \%commit;
-    }
-    close ($outputh);
-
-    return \@revisions;
-}
-
-sub dump_breakdown($)
-{
-    my $revs = shift;
-
-    my $rev_count = scalar (@{$revs});
-    my $annotated = 0;
-    my %frequency;
-    my $contiguous = 0;
-    my $in_start_run = 1;
-    for my $rev (reverse @{$revs}) {
-       if($rev->{note} ne "") {
-           my $stem = $rev->{note};
-           $stem =~ s/^merged as.*$/merged as:/;
-           $stem =~ s/^prefer.*$/prefer:/;
-           $stem =~ s/^reject.*$/reject:/;
-           $frequency{$stem} = 0 if (!defined $frequency{$stem});
-           $frequency{$stem}++;
-           $annotated++;
-           $contiguous++ if ($in_start_run);
-       } else {
-           $in_start_run = 0;
-       }
-    }
-
-    print "$annotated annotations of $rev_count commits\n";
-    for my $stem (sort { $frequency{$b} <=> $frequency{$a} } keys %frequency) {
-       print "$frequency{$stem}\t$stem\n";
-    }
-    print "contiguous annotations: $contiguous\n";
-}
-
-sub sanity_check_revs($$)
-{
-    my $git_dir = shift;
-    my $revs = shift;
-    my $note_count = 0;
-    for my $rev (@{$revs}) {
-       my $note = $rev->{note};
-       $note_count++ if ($note ne "");
-    }
-    if ($note_count < 100) {
-       print STDERR "It looks as if you have not fetched your git notes please 
do\n";
-       print STDERR "( cd $git_dir ; git fetch origin 
refs/notes/commits:refs/notes/commits )\n";
-       exit 1;
-    }
-}
-
-sub usage()
-{
-    print STDERR "Usage: aoo-annotate.pl [args] [--git /path/to/git] ['merged 
as: 1234' <hash>]\n";
-    print STDERR "annotate AOO commits as to their status\n";
-    print STDERR "\n";
-    print STDERR "  -a, --all     list all commits regardless of status\n";
-    print STDERR "  -g, --git <d> pass a path to a git repository [default is 
cwd]\n";
-    print STDERR "  -l, --list    list all un-annotated commits\n";
-    print STDERR "  -n, --notes   list just commits with notes\n";
-    print STDERR "  -h, --help    show this\n";
-    print STDERR "  -s, --stats   show stats on merging\n";
-    print STDERR "  -f, --fetch   fetch latest notes\n";
-}
-
-my $git_dir;
-my $stats = 0;
-my $all = 0;
-my $list = 0;
-my $notes = 0;
-my $fetch = 0;
-my $note_text;
-my $note_hash;
-
-while (my $arg = shift @ARGV) {
-    if ($arg eq '--help' || $arg eq '-h') {
-       usage();
-       exit;
-    } elsif ($arg eq '--stats' || $arg eq '-s') {
-       $stats = 1;
-    } elsif ($arg eq '--fetch' || $arg eq '-f') {
-       $fetch = 1;
-    } elsif ($arg eq '--list' || $arg eq '-l') {
-       $list = 1;
-    } elsif ($arg eq '--all' || $arg eq '-a') {
-       $all = 1;
-       $list = 1;
-    } elsif ($arg eq '--notes' || $arg eq '-n') {
-       $notes = 1;
-    } elsif ($arg eq '--git' || $arg eq '-g') {
-       $git_dir = shift @ARGV;
-    } elsif (!defined $note_text) {
-       $note_text = $arg;
-    } elsif (!defined $note_hash) {
-       $note_hash = $arg;
-    } else {
-       usage ();
-       die "unknown argument: $arg";
-    }
-}
-
-if (!defined $git_dir) {
-    $git_dir = `pwd`;
-    chomp ($git_dir);
-}
-
-if (!$list && !$stats) {
-
-    print "$note_text' '$note_hash\n";
-    if (!defined $note_text || !defined $note_hash) {
-       usage();
-       die "need some note text";
-    }
-
-    validate_check_note($note_text);
-    validate_git_hash($note_hash) ||
-           die "Hash on master '$note_hash' doesn't look like a git hash\n";
-
-    fetch_git_notes($git_dir);
-    `( cd '$git_dir' ; git --no-pager notes add -m '$note_text' $note_hash )`;
-    push_git_notes($git_dir);
-} else {
-    fetch_git_notes($git_dir) if ($fetch);
-
-    my $revs = read_log($git_dir);
-    sanity_check_revs($git_dir, $revs);
-
-    if ($list) {
-       print STDERR "Commits:\n";
-       for my $rev (@{$revs}) {
-           my $note = $rev->{note};
-           chomp ($note);
-           my $has_note = ($note ne "");
-           my $printit = $all || ($has_note && $notes) || (!$has_note && 
!$notes);
-           print "$rev->{hash}\t$rev->{note}\t$rev->{name}\t$rev->{subject}\n" 
if ($printit);
-       }
-    }
-
-    if ($stats == 1) {
-       print STDERR "\n" if ($list);
-       dump_breakdown ($revs);
-    }
-}
commit 90cedadfe6f18e7b507fc2ab01dac5442d517c9b
Author: Michael Meeks <michael.me...@suse.com>
Date:   Thu Feb 28 16:12:22 2013 +0000

    add ability to create push/pull notes etc.

diff --git a/scripts/aoo-annotate.pl b/scripts/aoo-annotate.pl
index ab02309..9fe42e4 100755
--- a/scripts/aoo-annotate.pl
+++ b/scripts/aoo-annotate.pl
@@ -2,6 +2,13 @@
 
 use strict;
 
+my %valid_reasons = (
+    'ignore' => 1,
+    'merged as' => 1,
+    'prefer' => 1,
+    'reject' => 1
+);
+
 sub clean_note($)
 {
     my $note = shift;
@@ -10,6 +17,43 @@ sub clean_note($)
     return $note;
 }
 
+sub fetch_git_notes($)
+{
+    my $git_dir = shift;
+    `(cd '$git_dir'; git --no-pager fetch origin 
refs/notes/commits:refs/notes/commits)`;
+}
+
+sub push_git_notes($)
+{
+    my $git_dir = shift;
+    `(cd '$git_dir'; git --no-pager push origin 
refs/notes/commits:refs/notes/commits)`;
+}
+
+# starts with a git hash;
+sub validate_git_hash($)
+{
+    my $hash = shift;
+    return 0 if (! ($hash =~ m/^([0-9a-fA-F]{40})/) );
+    return 1;
+}
+
+sub validate_check_note($)
+{
+    my $note_text = shift;
+    $note_text =~ m/^(\S+):\s+(.+)$/ || die "note: '$note_text' is missing a 
explanation: reason";
+    my $reason = $1;
+    my $expl = $2;
+
+    if (!defined $valid_reasons{$reason}) {
+       my @reasons = keys %valid_reasons;
+       print STDERR "Invalid reason: '$reason' - valid reasons are @reasons\n";
+       exit 1;
+    } elsif ($reason eq 'merged as' || $reason eq 'prefer') {
+       validate_git_hash($expl) ||
+           die "reason '$reason' must have an explanation beginning with a git 
hash\n";
+    }
+}
+
 sub read_log($)
 {
     my $git_dir = shift;
@@ -17,7 +61,7 @@ sub read_log($)
     my $outputh;
 
 #    print STDERR "read revisions:\n";
-    open ($outputh, "cd $git_dir ; git --no-pager log 
--pretty='%H,%cn,%ce,%cd,>>%s<<>>%N<<' aoo/approx-3.4.0..origin/aoo/trunk|") || 
die "can't get git log: $!";
+    open ($outputh, "cd '$git_dir' ; git --no-pager log 
--pretty='%H,%cn,%ce,%cd,>>%s<<>>%N<<' aoo/approx-3.4.0..origin/aoo/trunk|") || 
die "can't get git log: $!";
     while (<$outputh>) {
        my $line = $_;
        chomp ($line);
@@ -99,32 +143,48 @@ sub sanity_check_revs($$)
 
 sub usage()
 {
-    print STDERR "Usage: aoo-annotate.pl [args] [/path/to/git]\n";
+    print STDERR "Usage: aoo-annotate.pl [args] [--git /path/to/git] ['merged 
as: 1234' <hash>]\n";
     print STDERR "annotate AOO commits as to their status\n";
     print STDERR "\n";
-    print STDERR "  -a, --all    list all commits regardless of status\n";
-    print STDERR "  -n, --notes  list just commits with notes\n";
-    print STDERR "  -h, --help   show this\n";
-    print STDERR "  -s, --stats  show stats on merging\n";
+    print STDERR "  -a, --all     list all commits regardless of status\n";
+    print STDERR "  -g, --git <d> pass a path to a git repository [default is 
cwd]\n";
+    print STDERR "  -l, --list    list all un-annotated commits\n";
+    print STDERR "  -n, --notes   list just commits with notes\n";
+    print STDERR "  -h, --help    show this\n";
+    print STDERR "  -s, --stats   show stats on merging\n";
+    print STDERR "  -f, --fetch   fetch latest notes\n";
 }
 
 my $git_dir;
 my $stats = 0;
 my $all = 0;
+my $list = 0;
 my $notes = 0;
+my $fetch = 0;
+my $note_text;
+my $note_hash;
 
-for my $arg (@ARGV) {
+while (my $arg = shift @ARGV) {
     if ($arg eq '--help' || $arg eq '-h') {
        usage();
        exit;
     } elsif ($arg eq '--stats' || $arg eq '-s') {
        $stats = 1;
+    } elsif ($arg eq '--fetch' || $arg eq '-f') {
+       $fetch = 1;
+    } elsif ($arg eq '--list' || $arg eq '-l') {
+       $list = 1;
     } elsif ($arg eq '--all' || $arg eq '-a') {
        $all = 1;
+       $list = 1;
     } elsif ($arg eq '--notes' || $arg eq '-n') {
        $notes = 1;
-    } elsif (!defined $git_dir) {
-       $git_dir = $arg;
+    } elsif ($arg eq '--git' || $arg eq '-g') {
+       $git_dir = shift @ARGV;
+    } elsif (!defined $note_text) {
+       $note_text = $arg;
+    } elsif (!defined $note_hash) {
+       $note_hash = $arg;
     } else {
        usage ();
        die "unknown argument: $arg";
@@ -133,21 +193,43 @@ for my $arg (@ARGV) {
 
 if (!defined $git_dir) {
     $git_dir = `pwd`;
+    chomp ($git_dir);
 }
 
-my $revs = read_log($git_dir);
-sanity_check_revs($git_dir, $revs);
+if (!$list && !$stats) {
 
-print STDERR "Commits:\n";
-for my $rev (@{$revs}) {
-    my $note = $rev->{note};
-    chomp ($note);
-    my $has_note = ($note ne "");
-    my $printit = $all || ($has_note && $notes) || (!$has_note && !$notes);
-    print "$rev->{hash}\t$rev->{note}\t$rev->{name}\t$rev->{subject}\n" if 
($printit);
-}
+    print "$note_text' '$note_hash\n";
+    if (!defined $note_text || !defined $note_hash) {
+       usage();
+       die "need some note text";
+    }
 
-if ($stats == 1) {
-    print STDERR "\n";
-    dump_breakdown ($revs);
+    validate_check_note($note_text);
+    validate_git_hash($note_hash) ||
+           die "Hash on master '$note_hash' doesn't look like a git hash\n";
+
+    fetch_git_notes($git_dir);
+    `( cd '$git_dir' ; git --no-pager notes add -m '$note_text' $note_hash )`;
+    push_git_notes($git_dir);
+} else {
+    fetch_git_notes($git_dir) if ($fetch);
+
+    my $revs = read_log($git_dir);
+    sanity_check_revs($git_dir, $revs);
+
+    if ($list) {
+       print STDERR "Commits:\n";
+       for my $rev (@{$revs}) {
+           my $note = $rev->{note};
+           chomp ($note);
+           my $has_note = ($note ne "");
+           my $printit = $all || ($has_note && $notes) || (!$has_note && 
!$notes);
+           print "$rev->{hash}\t$rev->{note}\t$rev->{name}\t$rev->{subject}\n" 
if ($printit);
+       }
+    }
+
+    if ($stats == 1) {
+       print STDERR "\n" if ($list);
+       dump_breakdown ($revs);
+    }
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to