#!/usr/bin/perl sub last_tag { open( GIT, 'git log --pretty=format:%H |'); LINE: while( ) { open( GIT2, "git tag --contains $_ |"); while( ) { chomp; last LINE if /..*/; } close GIT2; } $tag=$_; close GIT2; close GIT; # be done return $tag; }; sub create_patches { my $tag=shift; my $pdir=shift; my $num=0; open( GIT, 'git format-patch -M -N --no-signature -o "'.$pdir.'" '.$tag.' |'); @lines=; close GIT; # be done return @lines; }; use POSIX qw(strftime); my $datestr = strftime "%Y%m%d", gmtime; my $tag=shift; my $pdir=shift; $tag=&last_tag if not defined $tag; my @patches=&create_patches($tag, $pdir); my $num=$#patches + 2; $tag=~s/[^0-9]+?([0-9]+)/$1/; my $release="$num.git$datestr"; $release="1" if $num == 1; while(<>) { if (/^Version:/) { print "Version: $tag\n"; } elsif (/^Release:/) { print "Release: $release%{?dist}\n"; } elsif ((/^Source0:/) || (/^Source:/)) { print $_; $num=1; for(@patches) { s/.*\///g; print "Patch$num: $_"; $num++; } print "\n"; } else { print $_; } }