Packaging/Utilities

From openSUSE

(Difference between revisions)
(Migration of %changelog data from ''.spec'' to a ''.changes'' file)
Line 4: Line 4:
this could be done with a small script.
this could be done with a small script.
 +
I tested with several spec files and got nearly all changes migrated to .changes file.
 +
use it on your own risk.
 +
 +
 +
#!/usr/bin/perl -w
 +
#
 +
# Migrate .spec %changelog to .changes file
 +
#
 +
#BEGIN {
 +
#  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
 +
#}
 +
#
 +
use strict;
 +
#
 +
if(!@ARGV) {
 +
  print "need a filename as argument, otherwise I can't do anything ;)\n";
 +
  print "all data will be printed to STDOUT\n\n";
 +
  print "spec2changes.pl [path_to/file.spec]\nor\n";
 +
  print "spec2changes.pl [path_to/file.spec] > ./new_file.changes\n";
 +
  exit(1);
 +
}
 +
#
 +
my $file=$ARGV[0];
 +
#
 +
my $wday;
 +
my $mon;
 +
my $day;
 +
my $year;
 +
my $who;
 +
my $e_line="\n";
 +
my $s_line="-------------------------------------------------------------------\n";
 +
my @spec=();
 +
my @changes=();
 +
#
 +
# spec has no time, so we generate some random ;)
 +
my $h_range=24;
 +
my $h_rand;
 +
my $m_range=60;
 +
my $m_rand;
 +
my $s_range=$m_range;
 +
my $s_rand;
 +
#
 +
sub rand_time {
 +
  $h_rand = int(rand($h_range));
 +
  if($h_rand < 10){ $h_rand="0$h_rand"; }
 +
  $m_rand = int(rand($m_range));
 +
  if($m_rand < 10){ $m_rand="0$m_rand"; }
 +
  $s_rand = int(rand($s_range));
 +
  if($s_rand < 10){ $s_rand="0$s_rand"; }
 +
}
 +
#
 +
sub push_changes {
 +
  rand_time;
 +
  my $data="$1 $2 $3 $h_rand\:$m_rand\:$s_rand CET $4 - $5";
 +
  # add empty line
 +
  push(@changes, $e_line);
 +
  # add separator
 +
  push(@changes, $s_line);
 +
  # add date line
 +
  push(@changes, "$data");
 +
  # add emty line
 +
  push(@changes, $e_line);
 +
}
 +
#
 +
open(FH, "$file") || die ("$file: $!\n");
 +
while (<FH>) {
 +
  chomp;
 +
  next if ((/^#/) || (/^--/));
 +
  next if ((!/^\*/) && (!/^\s+(\*|o|-)/) && (!/^-/));
 +
  #print "$_\n";
 +
  push(@spec, $_);
 +
}
 +
close(FH);
 +
#
 +
foreach(@spec){
 +
  # match "* Sun Jan 13 2009 - <name-chris1.de@domain-name2.de.com.net> 1.14"
 +
  if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s.?\s?[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s.+$/ ) {
 +
    #print "$wday $mon $day $year $who,\n";
 +
    push_changes($wday,$mon,$day,$year,$who);
 +
    next;
 +
  }
 +
  # match "* Sun Jan 13 2009 - <name-chris1.de@domain-name2.de.com.net>"
 +
  if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s.?\s?[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s?$/ ) {
 +
    #print "$wday $mon $day $year $who,\n";
 +
    push_changes($wday,$mon,$day,$year,$who);
 +
    next;
 +
  }
 +
  # match "* Sun Nov 05 2006 Peter Neon <peter+rpmspam@domain.com.tr> - 1.6.8"
 +
  if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\+.*\@[A-Za-z0-9.-]{1,})[>)}]?\s.*$/ ) {
 +
    #print "$wday $mon $day $year $who,\n";
 +
    push_changes($wday,$mon,$day,$year,$who);
 +
    next;
 +
  }
 +
  # match "* Wed Sep 14 2005 Lionel Dev <lionel-dev@domain.name> - 1.6.7"
 +
  if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s.*$/ ) {
 +
    #print "$wday $mon $day $year $who,\n";
 +
    push_changes($wday,$mon,$day,$year,$who);
 +
    next;
 +
  }
 +
  # match "* Wed Sep 14 2005 Lionel Dev <lionel-dev@domain.name>"
 +
  if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s?$/ ) {
 +
    #print "$wday $mon $day $year $who,\n";
 +
    push_changes($wday,$mon,$day,$year,$who);
 +
    next;
 +
  }
 +
  #print "$_\n";
 +
  # add changes for this date
 +
  push(@changes, "$_\n");
 +
}
 +
#
 +
foreach(@changes){
 +
  print $_;
 +
}
 +
exit(0);

Revision as of 00:11, 1 November 2009

Utilities

Migration of %changelog data from .spec to a .changes file

this could be done with a small script. I tested with several spec files and got nearly all changes migrated to .changes file. use it on your own risk.


#!/usr/bin/perl -w
#
# Migrate .spec %changelog to .changes file
#
#BEGIN {
#  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
#}
#
use strict;
#
if(!@ARGV) {
 print "need a filename as argument, otherwise I can't do anything ;)\n";
 print "all data will be printed to STDOUT\n\n";
 print "spec2changes.pl [path_to/file.spec]\nor\n";
 print "spec2changes.pl [path_to/file.spec] > ./new_file.changes\n";
 exit(1);
}
#
my $file=$ARGV[0];
#
my $wday;
my $mon;
my $day;
my $year;
my $who;
my $e_line="\n";
my $s_line="-------------------------------------------------------------------\n";
my @spec=();
my @changes=();
#
# spec has no time, so we generate some random ;)
my $h_range=24;
my $h_rand;
my $m_range=60;
my $m_rand;
my $s_range=$m_range;
my $s_rand;
#
sub rand_time {
 $h_rand = int(rand($h_range));
 if($h_rand < 10){ $h_rand="0$h_rand"; }
 $m_rand = int(rand($m_range));
 if($m_rand < 10){ $m_rand="0$m_rand"; }
 $s_rand = int(rand($s_range));
 if($s_rand < 10){ $s_rand="0$s_rand"; }
}
#
sub push_changes {
 rand_time;
 my $data="$1 $2 $3 $h_rand\:$m_rand\:$s_rand CET $4 - $5";
 # add empty line
 push(@changes, $e_line);
 # add separator
 push(@changes, $s_line);
 # add date line
 push(@changes, "$data");
 # add emty line
 push(@changes, $e_line);
}
#
open(FH, "$file") || die ("$file: $!\n");
while (<FH>) {
 chomp;
 next if ((/^#/) || (/^--/));
 next if ((!/^\*/) && (!/^\s+(\*|o|-)/) && (!/^-/));
 #print "$_\n";
 push(@spec, $_);
}
close(FH);
#
foreach(@spec){ 
 # match "* Sun Jan 13 2009 - <name-chris1.de@domain-name2.de.com.net> 1.14"
 if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s.?\s?[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s.+$/ ) {
   #print "$wday $mon $day $year $who,\n";
   push_changes($wday,$mon,$day,$year,$who);
   next;
 }
 # match "* Sun Jan 13 2009 - <name-chris1.de@domain-name2.de.com.net>"
 if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s.?\s?[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s?$/ ) {
   #print "$wday $mon $day $year $who,\n";
   push_changes($wday,$mon,$day,$year,$who);
   next;
 }
 # match "* Sun Nov 05 2006 Peter Neon <peter+rpmspam@domain.com.tr> - 1.6.8"
 if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\+.*\@[A-Za-z0-9.-]{1,})[>)}]?\s.*$/ ) {
   #print "$wday $mon $day $year $who,\n";
   push_changes($wday,$mon,$day,$year,$who);
   next;
 }
 # match "* Wed Sep 14 2005 Lionel Dev <lionel-dev@domain.name> - 1.6.7"
 if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s.*$/ ) {
   #print "$wday $mon $day $year $who,\n";
   push_changes($wday,$mon,$day,$year,$who);
   next;
 }
 # match "* Wed Sep 14 2005 Lionel Dev <lionel-dev@domain.name>"
 if ( ($wday,$mon,$day,$year,$who) = m/^\*\s([A-Za-z]{3})\s([A-Za-z]{3})\s([0-9]{1,2})\s([0-9]{4})\s[A-Za-z-]{1,}\s[A-Za-z-]{1,}\s[<({]?([A-Za-z0-9.-]{1,}\@[A-Za-z0-9.-]{1,})[>)}]?\s?$/ ) {
   #print "$wday $mon $day $year $who,\n";
   push_changes($wday,$mon,$day,$year,$who);
   next;
 }
 #print "$_\n";
 # add changes for this date
 push(@changes, "$_\n");
}
#
foreach(@changes){
 print $_;
}
exit(0);