]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - git2spec.pl
fedora-test.sh / fedora-test-github.sh: don't build the documentation
[thirdparty/dracut.git] / git2spec.pl
index 27e588947fd1a94cebbb25fa0477943021f3ca7a..8d4f3bcff43b7ea752ce642392e2d768a23590c3 100755 (executable)
@@ -1,28 +1,30 @@
 #!/usr/bin/perl
 
-sub last_tag {
-    open( GIT, 'git log  --pretty=format:%H |');
-  LINE: while( <GIT> ) {
-      open( GIT2, "git tag --contains $_ |");
-      while( <GIT2> ) {
-         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 -N --no-signature -o "'.$pdir.'" '.$tag.' |');
-    @lines=<GIT>;
-    close GIT;         # be done
+    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;
 };
 
@@ -31,10 +33,11 @@ my $datestr = strftime "%Y%m%d", gmtime;
 
 my $tag=shift;
 my $pdir=shift;
-$tag=&last_tag if not defined $tag;
+$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/;
+$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;
 
@@ -42,14 +45,15 @@ while(<>) {
     if (/^Version:/) {
        print "Version: $tag\n";
     }
-    elsif (/^Release:/) {
-       print "Release: $release%{?dist}\n";
+    elsif (/^%define dist_free_release/) {
+       print "%define dist_free_release $release\n";
     }
     elsif ((/^Source0:/) || (/^Source:/)) {
        print $_;
        $num=1;
        for(@patches) {
-           print "Patch$num: $_";
+           s/.*\///g;
+           print "Patch$num: $_\n";
            $num++;
        }
        print "\n";