Browse Source

Add a useful script for editing one or more .spec files in the CVS repository by performing operations on $_ (containing the whole spec file) and automatically increasing the "Release:" number.

Ralf S. Engelschall 24 years ago
parent
commit
b958a8607c
1 changed files with 96 additions and 0 deletions
  1. 96 0
      00DEV/editspec

+ 96 - 0
00DEV/editspec

@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+##
+##  00DEV/editspec -- Edit .spec files in OpenPKG CVS repository
+##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
+##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
+##
+##  Permission to use, copy, modify, and distribute this software for
+##  any purpose with or without fee is hereby granted, provided that
+##  the above copyright notice and this permission notice appear in all
+##  copies.
+##
+##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+##  SUCH DAMAGE.
+##
+
+if ($#ARGV == -1) {
+    print STDERR "Usage: $0 <cmd> [<cmd> ...] [-- <pkg> [<pkg> ...]]\n";
+    exit(1);
+}
+
+my @cmd = ();
+my @pkg = ();
+my $iscmd = 1;
+foreach my $arg (@ARGV) {
+    if ($iscmd and $arg eq '--') {
+        $iscmd = 0;
+        next;
+    }
+    if ($iscmd) {
+        push(@cmd, $arg);
+    }
+    else {
+        push(@pkg, $arg);
+    }
+}
+if ($#pkg == -1) {
+    foreach my $pkg (glob("*")) {
+        next if (not -d $pkg or not -f "$pkg/$pkg.spec");
+        push(@pkg, $pkg);
+    }
+}
+
+my $all = 0;
+foreach my $p (@pkg) {
+    print "Package $p:\n";
+    next if (not -d $p or not -f "$p/$p.spec");
+
+    open(SPEC, "<$p/$p.spec") || die;
+    my $spec = '';
+    $spec .= $_ while (<SPEC>);
+    close(SPEC);
+
+    $_ = $spec;
+    foreach $cmd (@cmd) {
+        eval $cmd;
+    }
+
+    if ($spec ne $_) {
+        $spec = $_;
+        open(SPEC, ">$p/$p.spec.new") || die;
+        print SPEC $spec;
+        close(SPEC);
+        system("diff -u1 $p/$p.spec $p/$p.spec.new");
+        my $ok;
+        if ($all) {
+            $ok = "yes";
+        }
+        else {
+            print "Edit [a(ll)/Y(es)/n(o)]: ";
+            $ok = <STDIN>;
+        }
+        if ($ok =~ m/^(?:A|a)(?:ll)?\n?$/s) {
+            $ok = "yes";
+            $all = 1;
+        }
+        if ($ok =~ m/^(?:Y|y)(?:es)?\n?$/s or $ok eq '') {
+            $spec =~ s|(\nRelease:\s+)(\d+)|$1 . sprintf("%d", $2+1)|se;
+            print "Ok: Edited $p/$p.spec\n";
+            open(SPEC, ">$p/$p.spec") || die;
+            print SPEC $spec;
+            close(SPEC);
+        }
+        unlink("$p/$p.spec.new");
+    }
+}
+