[netfilter-cvslog] r4013 - in trunk/patch-o-matic-ng-2: . patchlets
laforge at netfilter.org
laforge at netfilter.org
Mon Jun 27 11:00:15 CEST 2005
Author: laforge at netfilter.org
Date: 2005-06-27 11:00:14 +0200 (Mon, 27 Jun 2005)
New Revision: 4013
Added:
trunk/patch-o-matic-ng-2/runme
Removed:
trunk/patch-o-matic-ng-2/patchlets/runme
Log:
move runme back to toplevel
Deleted: trunk/patch-o-matic-ng-2/patchlets/runme
===================================================================
--- trunk/patch-o-matic-ng-2/patchlets/runme 2005-06-27 08:59:34 UTC (rev 4012)
+++ trunk/patch-o-matic-ng-2/patchlets/runme 2005-06-27 09:00:14 UTC (rev 4013)
@@ -1,377 +0,0 @@
-#!/usr/bin/perl
-#
-# runme.pl, part of the patch-o-matig 'next generation' package.
-# (C) 2003-2004 by Harald Welte <laforge at netfilter.org>
-# 2004 by Jozsef Kadlecsik <kadlec at blackhole.kfki.ho>
-#
-# This script is subject to the GNU GPLv2
-#
-# $Id$
-#
-
-use strict;
-use Getopt::Long;
-use Pod::Usage;
-
-require Term::Cap;
-
-my $POMNG_ROOT_DIR = '.';
-my $VERSION = '$Revision$';
-
-push(@INC, $POMNG_ROOT_DIR);
-use Netfilter_POM;
-
-$|=1;
-
-sub print_header {
- my $session = shift;
-
- print("Welcome to Patch-o-matic ($VERSION)!\n\n");
- printf("Kernel: %s, %s\n", $session->{projects}->{linux}->{VERSION},
- $session->{projects}->{linux}->{PATH});
- printf("Iptables: %s, %s\n", $session->{projects}->{iptables}->{VERSION},
- $session->{projects}->{iptables}->{PATH});
- print("Each patch is a new feature: many have minimal impact, some do not.\n");
- print("Almost every one has bugs, so don't apply what you don't need!\n");
- print("-------------------------------------------------------\n");
- $session->perror;
-}
-
-sub last_words {
- my $session = shift;
-
- print("\nExcellent! Source trees are ready for compilation.\n\n");
- $session->last_words;
-}
-
-sub print_prompt {
- my ($reverse) = @_;
- my $operation;
-
- print("-----------------------------------------------------------------\n");
- if ($reverse) {
- $operation = 'REVERT';
- } else {
- $operation = 'apply';
- }
- printf("Do you want to %s this patch [N/y/t/f/a/r/b/w/q/?] ", $operation);
-}
-
-sub print_prompt_help {
- print("Answer one of the following:\n");
- print(" T to test that the patch will apply cleanly\n");
- print(" Y to apply patch\n");
- print(" N to skip this patch\n");
- print(" F to apply patch even if test fails\n");
- print(" A to restart patch-o-matic in apply mode\n");
- print(" R to restart patch-o-matic in REVERSE mode\n");
- print(" B to walk back one patch in the list\n");
- print(" W to walk forward one patch in the list\n");
- print(" Q to quit immediately\n");
- print(" ? for help\n");
-}
-
-# main
-
-my @patchlets;
-my @repositories;
-my $clrscr = "\n\n\n\n\n\n\n\n\n\n";
-
-my $opt_batch;
-my $opt_test;
-my $opt_check;
-my $opt_reverse;
-my $opt_repository;
-my $opt_help;
-my $opt_man;
-my @opt_exclude;
-my $opt_path;
-my $opt_iptpath;
-
-my $result = GetOptions("batch" => \$opt_batch,
- "test" => \$opt_test,
- "check" => \$opt_check,
- "reverse" => \$opt_reverse,
- "exclude=s" => \@opt_exclude,
- "help" => \$opt_help,
- "man" => \$opt_man,
- "kernel-path=s" => \$opt_path,
- "iptables-path=s" => \$opt_iptpath) or pod2usage(2);
-
-pod2usage(-verbose=>2, -exitval=>0) if $opt_man;
-pod2usage(-verbose=>1, -exitval=>0) if $opt_help;
-
-my %paths;
-my @paths = (
- { 'project' => 'linux',
- 'env' => 'KERNEL_DIR',
- 'opt' => $opt_path,
- 'txt' => 'kernel source',
- 'default' => '/usr/src/linux',
- 'check' => 'Makefile',
- },
- { 'project' => 'iptables',
- 'env' => 'IPTABLES_DIR',
- 'opt' => $opt_iptpath,
- 'txt' => 'iptables source code',
- 'default' => '/usr/src/iptables',
- 'check' => 'Makefile',
- }
-);
-
-foreach my $path (@paths) {
- if (!defined($ENV{$path->{env}}) && !$path->{opt}) {
- print("Hey! $path->{env} is not set.\n");
- print("Where is your $path->{txt} directory? [$path->{default}] ");
- my $ptmp = <STDIN>;
- chomp($ptmp);
- if ($ptmp ne '') {
- $paths{$path->{project}} = $ptmp;
- } else {
- $paths{$path->{project}} = $path->{default};
- }
- } elsif ($path->{opt}) {
- $paths{$path->{project}} = $path->{opt};
- } else {
- $paths{$path->{project}} = $ENV{$path->{env}};
- }
- if (!(-d $paths{$path->{project}}
- || (-l $paths{$path->{project}} && -d readlink($paths{$path->{project}})))) {
- print STDERR ("$paths{$path->{project}} doesn't seem to be a directory\n");
- exit(1);
- }
- if (! -f (glob("$paths{$path->{project}}/$path->{check}"))[0]) {
- print STDERR ("$paths{$path->{project}} doesn't look like a $path->{txt} directory to me.\n");
- exit(1);
- }
-}
-
-if ($#ARGV >= 0 && (-f "$ARGV[0]/info" || -f "$ARGV[0].info")) {
- # patch or update file
- # user wants to specify patches manually
- for my $p (@ARGV) {
- if (-f "$p/info") {
- push(@patchlets, $p);
- } elsif (-f "$p.info") {
- push(@patchlets, $p);
- }
- }
- # magic repository
- $opt_repository = 'magic';
-} else {
- # no patch names given on cmdline, have to consider all patches
- #
- opendir(INDIR, $POMNG_ROOT_DIR);
- my @allfiles = readdir(INDIR);
- closedir(INDIR);
- for my $f (@allfiles) {
- if (-f "$f/info") {
- push(@patchlets, $f);
- }
- }
- if ($#ARGV == 0) {
- # single argmument is a repository name
- $opt_repository = $ARGV[0];
- } elsif ($#ARGV == -1) {
- # no repository given, select 'pending'
- $opt_repository = 'pending';
- } else {
- pod2usage(-verbose=>1, -exitval=>2);
- }
-}
-
-# remove all 'excluded' patches
-my @new_patchlets;
-for my $p (@patchlets) {
- push(@new_patchlets, $p)
- unless grep($_ eq $p, @opt_exclude);
-}
- at patchlets = sort(@new_patchlets);
-# 'updates' is mandatory, unless patch is explicitly specified
-unshift(@patchlets, sort(grep { $_ =~ m,.*/(.*)\.info, && ($_ = $1) } glob("$POMNG_ROOT_DIR/updates/*.patch.info")))
- unless $opt_repository eq 'magic';
-
-# FIXME implement this as config file, not hardcoded
-if ($opt_repository eq 'magic') {
- push(@repositories, $opt_repository);
-} else {
- foreach my $rep (qw(updates submitted pending base extra obsolete)) {
- push(@repositories, $rep);
- last if $opt_repository eq $rep;
- }
-}
-
-if (defined($ENV{TERM}) && !$opt_batch) {
- my $terminal = Tgetent Term::Cap { OSPEED => 9600 };
- $clrscr = $terminal->Tputs('cl', 1);
-}
-
-# list of selected patchlets is misleading at this stage
-# print STDERR ("selected repositories: ",join("|", at repositories),"\n");
-# print STDERR ("selected patchlets: ",join("|", at patchlets),"\n");
-
-$paths{POM} = $POMNG_ROOT_DIR;
-my $session = Netfilter_POM->init(\%paths);
-print("Loading patchlet definitions");
-$session->parse_patchlets;
-printf(" done\n\n");
-sleep 1;
-
-for my $rep (@repositories) {
-
- PATCHLET: for my $plname (@patchlets) {
- my $patchlet = $session->{patchlets}->{$plname};
- next PATCHLET unless defined $patchlet
- && ($rep eq $patchlet->{info}->{repository}
- || $rep eq 'magic');
-
- print($clrscr);
- print_header($session);
- print("Already applied: ", join(" ", @{$session->{applied}}),"\n\n");
-
- next PATCHLET unless $session->requirements_fulfilled($patchlet);
- print("Testing ${plname}... ");
- if (grep($_ eq $plname, @{$session->{applied}})) {
- print("applied\n");
- next PATCHLET;
- } elsif ($session->apply_patchlet($patchlet, !$opt_reverse, 1, "/tmp/pom-$$")) {
- print("applied\n");
- push(@{$session->{applied}}, $plname);
- next PATCHLET;
- }
- print("not applied\n");
- printf("The %s patch:\n", $plname);
- printf(" Author: %s\n", $patchlet->{info}->{author});
- printf(" Status: %s\n", $patchlet->{info}->{status});
- printf(" Version: %s\n", $patchlet->{info}->{version})
- if exists $patchlet->{info}->{version};
- print "\n";
- print $patchlet->{info}->{help};
- my $first_try = 1;
- $session->{ERRMSG} = '';
- PROMPT:
- my $key;
- if ($opt_batch && $first_try) {
- $key = 'y';
- $first_try = 0;
- } else {
- print_prompt($opt_reverse);
- $key = <STDIN>;
- }
- chomp($key);
- $key = lc($key);
- if ($key eq 'y') {
- if ($session->dependencies_fulfilled($patchlet) < 0) {
- # conflict
- $session->perror;
- goto PROMPT;
- }
- if ($session->apply($patchlet, $opt_reverse, 1)
- && $session->apply($patchlet, $opt_reverse, 0)) {
- if (!$opt_reverse) {
- push(@{$session->{applied}}, $plname);
- } else {
- $session->{applied} = [ grep($_ ne $plname, @{$session->{applied}}) ];
- }
- } else {
- $session->perror;
- goto PROMPT;
- }
- } elsif ($key eq 't') {
- if ($session->dependencies_fulfilled($patchlet) < 0
- || !$session->apply($patchlet, $opt_reverse, 1)) {
- $session->perror;
- } else {
- print "Patch $plname applies cleanly\n";
- }
- goto PROMPT;
- } elsif ($key eq 'f') {
- my $ret = $session->dependencies_fulfilled($patchlet);
- if ($ret == 0) {
- next PATCHLET unless
- $session->apply_dependencies($patchlet, 1, 0);
- } elsif ($ret == -1) {
- next PATCHLET;
- }
- $session->apply($patchlet, $opt_reverse, 0);
- push(@{$session->{applied}}, $plname);
- } elsif ($key eq 'a') {
- $opt_reverse = !$opt_reverse if $opt_reverse;
- goto PROMPT;
- } elsif ($key eq 'r') {
- $opt_reverse = !$opt_reverse unless $opt_reverse;
- goto PROMPT;
- } elsif ($key eq 'b') {
- print("not implemented yet");
- goto PROMPT;
- } elsif ($key eq 'w') {
- next PATCHLET;
- } elsif ($key eq 'q') {
- last_words($session);
- exit(0);
- } elsif ($key eq '?') {
- print_prompt_help();
- goto PROMPT;
- }
- }
-}
-last_words($session);
-
-__END__
-
-=head1 NAME
-
-runme - The patch-o-matic main program
-
-=head1 SYNOPSIS
-
-./runme [--batch] [--reverse] [--exclude suite/patch-dir ] suite|suite/patch-dir
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<--batch>
-
-batch mode, automatically applying patches.
-
-=item B<--test>
-
-test mode, automatically test patches.
-
-=item B<--check>
-
-check mode, automatically checks if patches are alreay applied.
-produces a logfile: rune.out-check
-
-=item B<--reverse>
-
-back out the selected patches.
-
-=item B<--exclude> suite/patch-dir
-
-excludes the named patch. can be used multiple times.
-
-=item B<--help>
-
-print a help message
-
-=item B<--man>
-
-print the whole manpage
-
-=item B<--kernel-path>
-
-specify the kernel source path
-
-=item B<--iptables-path>
-
-specify the iptables source path
-
-=back
-
-=head1 DESCRIPTION
-
-B<runme> is the main executable of the patch-o-matic system
-
-=cut
Copied: trunk/patch-o-matic-ng-2/runme (from rev 4012, trunk/patch-o-matic-ng-2/patchlets/runme)
More information about the netfilter-cvslog
mailing list