fold committing into adding changelog header script
Graham Knop [Fri, 6 Nov 2015 23:04:47 +0000 (18:04 -0500)]
helpers/add-changelog-heading
helpers/changelog-context [deleted file]
lib/Distar.pm

index 85a0f9d..9d258db 100755 (executable)
@@ -1,23 +1,33 @@
 #!/usr/bin/env perl
 use strict;
 use warnings FATAL => 'all';
+use Getopt::Long qw(:config gnu_getopt);
+GetOptions(
+  "git"     => \my $git,
+) or die("Error in command line arguments\n");
 
 my $version = shift;
 my @ymd = (gmtime)[5,4,3];
 $ymd[0] += 1900;
 $ymd[1] += 1;
-my $changes_line = sprintf "%s - %i-%02i-%02i\n", $version, @ymd;
+my $changes_line = sprintf "%s - %i-%02i-%02i", $version, @ymd;
 
 foreach my $changes (@ARGV) {
     print "Adding $version heading to $changes.\n";
-    open my $fh, '+<', $changes
+    open my $fh, '+<:raw', $changes
       or die "Can't open $changes: $!";
+
     my $content = '';
-    my $done;
-    local $/ = $/;
+    my $context;
+
     while (<$fh>) {
-        if ($done) {
-            undef $/;
+        if (defined $context) {
+            if (/^\S/) {
+                local $/;
+                $content .= $_ . <$fh>;
+                last;
+            }
+            $context++;
         }
         elsif (/^v?(\d+(?:\.\d+)*)(\s+|$)/) {
             if ($1 eq $version) {
@@ -29,7 +39,8 @@ foreach my $changes (@ARGV) {
         }
         elsif (/^\s+[-*+#]/) {
             $content .= $changes_line;
-            $done = 1;
+            $content .= (/(\r?\n)/ || $content =~ /(\r?\n)/) ? $1 : "\n";
+            $context = 1;
         }
         $content .= $_;
     }
@@ -38,4 +49,9 @@ foreach my $changes (@ARGV) {
     truncate $fh, 0;
     print { $fh } $content;
     close $fh;
+
+    if ($git) {
+        local $ENV{GIT_DIFF_OPTS} = "-u$context";
+        system qw(git add -p), $changes;
+    }
 }
diff --git a/helpers/changelog-context b/helpers/changelog-context
deleted file mode 100755 (executable)
index 5ab2115..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings FATAL => 'all';
-
-my $version = shift or die "no version specified!";
-my $changelog = shift or die "no changelog file specified!";
-
-open my $fh, '<', $changelog
-  or die "can't open $changelog: $!";
-my $context;
-my $found_version;
-while (my $line = <$fh>) {
-  if ($found_version) {
-    last
-      if $line =~ /^\S/;
-    $context++;
-  }
-  elsif ($line =~ /^v?\Q$version\E/) {
-    $found_version = 1;
-  }
-}
-close $fh;
-die "couldn't find heading for $version!"
-  unless $found_version;
-
-print "$context\n";
index 804f684..62f39c0 100644 (file)
@@ -158,8 +158,7 @@ disttest: distmanicheck
 distmanicheck: create_distdir
        cd $(DISTVNAME) && $(ABSPERLRUN) "-MExtUtils::Manifest=manicheck" -e "exit manicheck"
 nextrelease:
-       $(ABSPERLRUN) Distar/helpers/add-changelog-heading $(VERSION) Changes
-       GIT_DIFF_OPTS=-u`$(ABSPERLRUN) Distar/helpers/changelog-context $(VERSION) Changes` git add -p Changes
+       $(ABSPERLRUN) Distar/helpers/add-changelog-heading --git $(VERSION) Changes
 refresh:
        cd Distar && git pull
        $(RM_F) $(FIRST_MAKEFILE)