92 lines
2.4 KiB
Perl
92 lines
2.4 KiB
Perl
#!perl
|
|
use strict;
|
|
sub run(@) {
|
|
open PROC, "-|", @_ or die("Cannot run $_[0]: $!");
|
|
my @out;
|
|
while (<PROC>) {
|
|
chomp;
|
|
push @out, $_;
|
|
}
|
|
close PROC;
|
|
return @out;
|
|
}
|
|
|
|
my @tags = run("git", "tag");
|
|
my @v = run("git", "show", "HEAD:VERSION");
|
|
my $v = $v[0];
|
|
|
|
my $tagfile = ".git/TAG_EDITMSG";
|
|
open TAGFILE, ">", $tagfile
|
|
or die("Cannot create file for editing tag message: $!");
|
|
select TAGFILE;
|
|
print "TinyCBOR release $v\n";
|
|
print "\n";
|
|
print "# Write something nice about this release here\n";
|
|
|
|
# Do we have a commit template?
|
|
my @result = run("git", "config", "--get", "commit.template");
|
|
if (scalar @result) {
|
|
open TEMPLATE, "<", $result[0];
|
|
map { print $_; } <TEMPLATE>;
|
|
close TEMPLATE;
|
|
}
|
|
|
|
print "\n";
|
|
print "# Commit log\n";
|
|
open LOG, "-|", "git", "shortlog", "-e", "--no-merges", "--not", @tags;
|
|
map { print "# $_"; } <LOG>;
|
|
close LOG;
|
|
|
|
print "# Header diff:\n";
|
|
open DIFF, "-|", "git", "diff", "HEAD", "--not", @tags, "--", 'src/*.h', ':!*_p.h';
|
|
map { print "# $_"; } <DIFF>;
|
|
close DIFF;
|
|
|
|
select STDOUT;
|
|
close TAGFILE;
|
|
|
|
# Run the editor.
|
|
# We use system so that stdin, stdout and stderr are forwarded.
|
|
@result = run("git", "var", "GIT_EDITOR");
|
|
@result = ($result[0], $tagfile);
|
|
system @result;
|
|
exit ($? >> 8) if $?;
|
|
|
|
# Create the tag
|
|
# Also using system so that hte user can see the output.
|
|
system("git", "tag", "-a", "-F", $tagfile, split(' ', $ENV{GITTAGFLAGS}), "v$v");
|
|
exit ($? >> 8) if $?;
|
|
|
|
# Update the version files for the next patch release
|
|
@v = split(/\./, $v);
|
|
if (scalar @v < 3) {
|
|
push @v, '1';
|
|
} else {
|
|
++$v[-1];
|
|
}
|
|
$v = join('.', @v);
|
|
open VERSION, ">", "VERSION" or die("Cannot open VERSION file: $!");
|
|
print VERSION "$v\n";
|
|
close VERSION;
|
|
|
|
open VERSION, ">", "src/tinycbor-version.h" or die("Cannot open src/tinycbor-version.h: $!");
|
|
print VERSION "#define TINYCBOR_VERSION_MAJOR ", $v[0], "\n";
|
|
print VERSION "#define TINYCBOR_VERSION_MINOR ", $v[1], "\n";
|
|
print VERSION "#define TINYCBOR_VERSION_PATCH ", $v[2], "\n";
|
|
close VERSION;
|
|
|
|
if (open APPVEYORYML, "<", ".appveyor.yml") {
|
|
my @contents = map {
|
|
s/^version:.*/version: $v[0].$v[1].$v[2]-build-{build}/;
|
|
$_;
|
|
} <APPVEYORYML>;
|
|
close APPVEYORYML;
|
|
open APPVEYORYML, ">", ".appveyor.yml";
|
|
print APPVEYORYML join('', @contents);
|
|
close APPVEYORYML;
|
|
}
|
|
|
|
# Print summary
|
|
print "Tag created and next versions updated.\n";
|
|
print "Don't forget to create the docs.\n" if $v[2] == 1;
|