synced source with latest upstream OBS-URL: https://build.opensuse.org/request/show/291257 OBS-URL: https://build.opensuse.org/package/show/Archiving:Backup/dirvish?expand=0&rev=2
260 lines
5.7 KiB
Diff
260 lines
5.7 KiB
Diff
From: Ondřej Surý <ondrej@debian.org>
|
|
Subject: Get patch level of loadconfig.pl in case exit codes are needed.
|
|
|
|
--- dirvish-1.2.1~/dirvish-locate.pl 2004-02-25 03:42:14.000000000 +0100
|
|
+++ dirvish-1.2.1/dirvish-locate.pl 2006-07-07 11:14:12.000000000 +0200
|
|
@@ -1,3 +1,8 @@
|
|
+#!/usr/bin/perl
|
|
+
|
|
+$CONFDIR = "/etc/dirvish";
|
|
+
|
|
+
|
|
# $Id: dirvish-locate.pl,v 12.0 2004/02/25 02:42:14 jw Exp $ $Name: Dirvish-1_2 $
|
|
|
|
$VERSION = ('$Name: Dirvish-1_2_1 $' =~ /Dirvish/i)
|
|
@@ -234,3 +239,244 @@
|
|
|| $$b{created} cmp $$a{created};
|
|
}
|
|
|
|
+# Get patch level of loadconfig.pl in case exit codes
|
|
+# are needed.
|
|
+# $Id: loadconfig.pl,v 12.0 2004/02/25 02:42:15 jw Exp $
|
|
+
|
|
+
|
|
+#########################################################################
|
|
+# #
|
|
+# Copyright 2002 and $Date: 2004/02/25 02:42:15 $
|
|
+# Pegasystems Technologies and J.W. Schultz #
|
|
+# #
|
|
+# Licensed under the Open Software License version 2.0 #
|
|
+# #
|
|
+#########################################################################
|
|
+
|
|
+sub seppuku # Exit with code and message.
|
|
+{
|
|
+ my ($status, $message) = @_;
|
|
+
|
|
+ chomp $message;
|
|
+ if ($message)
|
|
+ {
|
|
+ $seppuku_prefix and print STDERR $seppuku_prefix, ': ';
|
|
+ print STDERR $message, "\n";
|
|
+ }
|
|
+ exit $status;
|
|
+}
|
|
+
|
|
+sub slurplist
|
|
+{
|
|
+ my ($key, $filename, $Options) = @_;
|
|
+ my $f;
|
|
+ my $array;
|
|
+
|
|
+ $filename =~ m(^/) and $f = $filename;
|
|
+ if (!$f && ref($$Options{vault}) ne 'CODE')
|
|
+ {
|
|
+ $f = join('/', $$Options{Bank}, $$Options{vault},
|
|
+ 'dirvish', $filename);
|
|
+ -f $f or $f = undef;
|
|
+ }
|
|
+ $f or $f = "$CONFDIR/$filename";
|
|
+ open(PATFILE, "<$f") or seppuku 229, "cannot open $filename for $key list";
|
|
+ $array = $$Options{$key};
|
|
+ while(<PATFILE>)
|
|
+ {
|
|
+ chomp;
|
|
+ length or next;
|
|
+ push @{$array}, $_;
|
|
+ }
|
|
+ close PATFILE;
|
|
+}
|
|
+
|
|
+# loadconfig -- load configuration file
|
|
+# SYNOPSYS
|
|
+# loadconfig($opts, $filename, \%data)
|
|
+#
|
|
+# DESCRIPTION
|
|
+# load and parse a configuration file into the data
|
|
+# hash. If the filename does not contain / it will be
|
|
+# looked for in the vault if defined. If the filename
|
|
+# does not exist but filename.conf does that will
|
|
+# be read.
|
|
+#
|
|
+# OPTIONS
|
|
+# Options are case sensitive, upper case has the
|
|
+# opposite effect of lower case. If conflicting
|
|
+# options are given only the last will have effect.
|
|
+#
|
|
+# f Ignore fields in config file that are
|
|
+# capitalized.
|
|
+#
|
|
+# o Config file is optional, return undef if missing.
|
|
+#
|
|
+# R Do not allow recoursion.
|
|
+#
|
|
+# g Only load from global directory.
|
|
+#
|
|
+#
|
|
+#
|
|
+# LIMITATIONS
|
|
+# Only way to tell whether an option should be a list
|
|
+# or scalar is by the formatting in the config file.
|
|
+#
|
|
+# Options reqiring special handling have to have that
|
|
+# hardcoded in the function.
|
|
+#
|
|
+
|
|
+sub loadconfig
|
|
+{
|
|
+ my ($mode, $configfile, $Options) = @_;
|
|
+ my $confile = undef;
|
|
+ my ($key, $val);
|
|
+ my $CONFIG;
|
|
+ ref($Options) or $Options = {};
|
|
+ my %modes;
|
|
+ my ($conf, $bank, $k);
|
|
+
|
|
+ $modes{r} = 1;
|
|
+ for $_ (split(//, $mode))
|
|
+ {
|
|
+ if (/[A-Z]/)
|
|
+ {
|
|
+ $_ =~ tr/A-Z/a-z/;
|
|
+ $modes{$_} = 0;
|
|
+ } else {
|
|
+ $modes{$_} = 1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+
|
|
+ $CONFIG = 'CFILE' . scalar(@{$$Options{Configfiles}});
|
|
+
|
|
+ $configfile =~ s/^.*\@//;
|
|
+
|
|
+ if($configfile =~ m[/])
|
|
+ {
|
|
+ $confile = $configfile;
|
|
+ }
|
|
+ elsif($configfile ne '-')
|
|
+ {
|
|
+ if(!$modes{g} && $$Options{vault} && $$Options{vault} ne 'CODE')
|
|
+ {
|
|
+ if(!$$Options{Bank})
|
|
+ {
|
|
+ my $bank;
|
|
+ for $bank (@{$$Options{bank}})
|
|
+ {
|
|
+ if (-d "$bank/$$Options{vault}")
|
|
+ {
|
|
+ $$Options{Bank} = $bank;
|
|
+ last;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ if ($$Options{Bank})
|
|
+ {
|
|
+ $confile = join('/', $$Options{Bank},
|
|
+ $$Options{vault}, 'dirvish',
|
|
+ $configfile);
|
|
+ -f $confile || -f "$confile.conf"
|
|
+ or $confile = undef;
|
|
+ }
|
|
+ }
|
|
+ $confile ||= "$CONFDIR/$configfile";
|
|
+ }
|
|
+
|
|
+ if($configfile eq '-')
|
|
+ {
|
|
+ open($CONFIG, $configfile) or seppuku 221, "cannot open STDIN";
|
|
+ } else {
|
|
+ ! -f $confile && -f "$confile.conf" and $confile .= '.conf';
|
|
+
|
|
+ if (! -f "$confile")
|
|
+ {
|
|
+ $modes{o} and return undef;
|
|
+ seppuku 222, "cannot open config file: $configfile";
|
|
+ }
|
|
+
|
|
+ grep(/^$confile$/, @{$$Options{Configfiles}})
|
|
+ and seppuku 224, "ERROR: config file looping on $confile";
|
|
+
|
|
+ open($CONFIG, $confile)
|
|
+ or seppuku 225, "cannot open config file: $configfile";
|
|
+ }
|
|
+ push(@{$$Options{Configfiles}}, $confile);
|
|
+
|
|
+ while(<$CONFIG>)
|
|
+ {
|
|
+ chomp;
|
|
+ s/\s*#.*$//;
|
|
+ s/\s+$//;
|
|
+ /\S/ or next;
|
|
+
|
|
+ if(/^\s/ && $key)
|
|
+ {
|
|
+ s/^\s*//;
|
|
+ push @{$$Options{$key}}, $_;
|
|
+ }
|
|
+ elsif(/^SET\s+/)
|
|
+ {
|
|
+ s/^SET\s+//;
|
|
+ for $k (split(/\s+/))
|
|
+ {
|
|
+ $$Options{$k} = 1;
|
|
+ }
|
|
+ }
|
|
+ elsif(/^UNSET\s+/)
|
|
+ {
|
|
+ s/^UNSET\s+//;
|
|
+ for $k (split(/\s+/))
|
|
+ {
|
|
+ $$Options{$k} = undef;
|
|
+ }
|
|
+ }
|
|
+ elsif(/^RESET\s+/)
|
|
+ {
|
|
+ ($key = $_) =~ s/^RESET\s+//;
|
|
+ $$Options{$key} = [ ];
|
|
+ }
|
|
+ elsif(/^[A-Z]/ && $modes{f})
|
|
+ {
|
|
+ $key = undef;
|
|
+ }
|
|
+ elsif(/^\S+:/)
|
|
+ {
|
|
+ ($key, $val) = split(/:\s*/, $_, 2);
|
|
+ length($val) or next;
|
|
+ $k = $key; $key = undef;
|
|
+
|
|
+ if ($k eq 'config')
|
|
+ {
|
|
+ $modes{r} and loadconfig($mode . 'O', $val, $Options);
|
|
+ next;
|
|
+ }
|
|
+ if ($k eq 'client')
|
|
+ {
|
|
+ if ($modes{r} && ref ($$Options{$k}) eq 'CODE')
|
|
+ {
|
|
+ loadconfig($mode . 'og', "$CONFDIR/$val", $Options);
|
|
+ }
|
|
+ $$Options{$k} = $val;
|
|
+ next;
|
|
+ }
|
|
+ if ($k eq 'file-exclude')
|
|
+ {
|
|
+ $modes{r} or next;
|
|
+
|
|
+ slurplist('exclude', $val, $Options);
|
|
+ next;
|
|
+ }
|
|
+ if (ref ($$Options{$k}) eq 'ARRAY')
|
|
+ {
|
|
+ push @{$$Options{$k}}, $_;
|
|
+ } else {
|
|
+ $$Options{$k} = $val;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ close $CONFIG;
|
|
+ return $Options;
|
|
+}
|