You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.3 KiB
64 lines
1.3 KiB
#!/usr/bin/perl |
|
|
|
sub create_patches { |
|
my $tag=shift; |
|
my $pdir=shift; |
|
my $n=1; |
|
my @lines; |
|
my $fname; |
|
my $f=0; |
|
|
|
mkdir $pdir, 0755; |
|
|
|
open( GIT, 'git log -p --pretty=email --stat -m --first-parent --reverse --binary '.$tag.'..HEAD |'); |
|
|
|
while (<GIT>) { |
|
if (/^From [a-z0-9]{40} .*$/) { |
|
$fname = sprintf("%04d", $n++).".patch"; |
|
open FH, ">".$pdir."/".$fname; |
|
$f=1; |
|
} |
|
if (/^---$/ && $f == 1) { |
|
push @lines, $fname; |
|
$f=0; |
|
} |
|
print FH; |
|
} |
|
|
|
return @lines; |
|
}; |
|
|
|
use POSIX qw(strftime); |
|
my $datestr = strftime "%Y%m%d", gmtime; |
|
|
|
my $tag=shift; |
|
my $pdir=shift; |
|
$tag=`git describe --abbrev=0 --tags` if not defined $tag; |
|
chomp($tag); |
|
my @patches=&create_patches($tag, $pdir); |
|
my $num=$#patches + 2; |
|
$tag=~s/[^0-9]+?([0-9]+)/$1/ if $tag !~ /\b[0-9a-f]{5,40}\b/; |
|
my $release="$num.git$datestr"; |
|
$release="1" if $num == 1; |
|
|
|
while(<>) { |
|
if (/^Version:/) { |
|
print "Version: $tag\n"; |
|
} |
|
elsif (/^%define dist_free_release/) { |
|
print "%define dist_free_release $release\n"; |
|
} |
|
elsif ((/^Source0:/) || (/^Source:/)) { |
|
print $_; |
|
$num=1; |
|
for(@patches) { |
|
s/.*\///g; |
|
print "Patch$num: $_\n"; |
|
$num++; |
|
} |
|
print "\n"; |
|
} |
|
else { |
|
print $_; |
|
} |
|
}
|
|
|