]> git.ipfire.org Git - thirdparty/dracut.git/blob - git2spec.pl
dracut.spec: add support for builds without dist-tag
[thirdparty/dracut.git] / git2spec.pl
1 #!/usr/bin/perl
2
3 sub create_patches {
4 my $tag=shift;
5 my $pdir=shift;
6 my $n=1;
7 my @lines;
8
9 mkdir $pdir, 0755;
10
11 open( GIT, 'git log -p --pretty=email --stat -m --first-parent --reverse '.$tag.'..HEAD |');
12
13 while (<GIT>) {
14 if (/^From [a-z0-9]{40} .*$/) {
15 my $fname = sprintf("%04d", $n++).".patch";
16 push @lines, $fname;
17 open FH, ">".$pdir."/".$fname;
18 }
19 print FH;
20 }
21
22 return @lines;
23 };
24
25 use POSIX qw(strftime);
26 my $datestr = strftime "%Y%m%d", gmtime;
27
28 my $tag=shift;
29 my $pdir=shift;
30 $tag=`git describe --abbrev=0 --tags` if not defined $tag;
31 chomp($tag);
32 my @patches=&create_patches($tag, $pdir);
33 my $num=$#patches + 2;
34 $tag=~s/[^0-9]+?([0-9]+)/$1/;
35 my $release="$num.git$datestr";
36 $release="1" if $num == 1;
37
38 while(<>) {
39 if (/^Version:/) {
40 print "Version: $tag\n";
41 }
42 elsif (/^%define dist_free_release/) {
43 print "%define dist_free_release $release\n";
44 }
45 elsif ((/^Source0:/) || (/^Source:/)) {
46 print $_;
47 $num=1;
48 for(@patches) {
49 s/.*\///g;
50 print "Patch$num: $_\n";
51 $num++;
52 }
53 print "\n";
54 }
55 else {
56 print $_;
57 }
58 }