#!/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 () { 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 $_; } }