source: trunk/admin/sc_chkconf.pl@ 189

Last change on this file since 189 was 184, checked in by joergs, on Oct 25, 2004 at 2:44:29 PM

Name angepasst, da jetzt CVS und SVN

  • Property svn:executable set to *
  • Property svn:keywords set to id
File size: 3.5 KB
Line 
1#!/usr/bin/perl -w
2
3# $Id$
4
5# 20040410 stephan.duehr@suse.de
6# Funktion dieses Scripts:
7# Es sollen Konfigurationsdatei (z.B. in /etc und /var) im CVS gepflegt werden.
8# Überprüfen welche Dateien sich gegenüber der CVS-Arbeitskopie geändert haben
9# und kopiert diese auf Wunsch in das CVS-Arbeitsverzeichnis
10
11# Parameter: CVS-Arbeitsverzeichnis
12# (dort muß die Verzeichnisstruktur bezogen auf / abgebildet sein,
13# z.B. etc, var usw.
14
15use POSIX qw/getpgrp tcgetpgrp/;
16
17use File::Find;
18use File::Compare;
19use File::Copy;
20use strict;
21
22my $cvsworkdir = $ARGV[0];
23usage() if (! defined $cvsworkdir);
24# Mit "." als Pfadangabe funktionieren diverse Funktionen nicht
25# => ersetzen durch vollständigen absoluten Pfad
26if ($cvsworkdir eq ".") {
27 $cvsworkdir = $ENV{'PWD'};
28}
29
30# abschließenden "/" entfernen, falls vorhanden
31$cvsworkdir =~ s/\/$//g;
32
33(-d $cvsworkdir) || die "Fehler: $cvsworkdir ist kein Verzeichnis!";
34
35
36my %changedfiles = ();
37
38File::Find::find(\&cvscheck, $cvsworkdir);
39
40# Liste der geänderten Files ausgeben, falls nicht leer
41# Anzahl Elemente im Hash???
42my @changedfiles = keys %changedfiles;
43
44if ($#changedfiles > -1) {
45 print "Geänderte Dateien:\n";
46 foreach my $key (keys %changedfiles) {
47 print "$key\n";
48 }
49 if (I_am_interactive()) {
50 print "Die Dateien nach $cvsworkdir kopieren? (j/n)";
51 my $line = <STDIN>;
52 chomp($line);
53 if ($line eq "j") {
54 print "kopiere...\n";
55 foreach my $key (keys %changedfiles) {
56 print "$key --> $changedfiles{$key} ";
57 copy($key, $changedfiles{$key}) || print "(fehlgeschlagen)";
58 print "\n";
59 }
60 print "bitte noch manuell einen commit ... ausführen.\n";
61 # CVS Environment prüfen
62 #print "Hinweis: CVSROOT nicht gesetzt\n" unless defined $ENV{'CVSROOT'};
63 }
64 }
65}
66else {
67 print "keine geänderten Dateien in $cvsworkdir gefunden.\n";
68}
69print "\n";
70
71sub cvscheck {
72 return unless -f; # keine Directories
73 return if $File::Find::dir =~ /\/CVS$/; # ignoriere CVS-Verzeichnisse
74 return if $File::Find::dir =~ /\/\.svn/; # ignoriere Subversion Verzeichnisse (inkl. Unterverzeichnisse)
75 my $cvsworkfile = "$File::Find::dir/$_";
76 #print "$cvsworkfile\n";
77 # Ursprungspfad ermitteln
78 $cvsworkfile =~ /${cvsworkdir}\/(.+)/;
79 my $realfile = "/" . $1;
80 # relativer Pfad zur CVS-Arbeitsdatei
81 my $relcvsworkfile = $1;
82 (-r $realfile) || die("Fehler: $realfile existiert nicht oder ist nicht lesbar");
83 (-r "$cvsworkfile") || die("Fehler: $cvsworkfile ist nicht lesbar");
84 if (compare($cvsworkfile,$realfile) != 0) {
85 # Dateien unterscheiden sich
86 (-w $cvsworkfile) || die("Fehler: kein Schreibrecht auf $cvsworkfile");
87 # Arbeitskopie durch Kopie ersetzen
88 #copy($realfile,$cvsworkfile) || die("Fehler beim kopieren $realfile --> $cvsworkfile");
89 $changedfiles{"$realfile"} = $cvsworkfile;
90 }
91}
92
93
94sub I_am_interactive {
95 local *TTY; # local file handle
96 open(TTY, "/dev/tty") or die "can't open /dev/tty: $!";
97 my $tpgrp = tcgetpgrp(fileno(TTY));
98 my $pgrp = getpgrp();
99 close TTY;
100 return ($tpgrp == $pgrp);
101}
102
103sub usage {
104print <<EOF;
105Funktion dieses Scripts:
106Es sollen Konfigurationsdatei (z.B. in /etc und /var)
107im Versionskontrollsystem (Subversion oder CVS) gepflegt werden.
108Überprüfen welche Dateien sich gegenüber der CVS-Arbeitskopie geändert haben und kopiert diese auf Wunsch in das CVS-Arbeitsverzeichnis
109
110Parameter: CVS-Arbeitsverzeichnis
111 (dort muß die Verzeichnisstruktur bezogen auf / abgebildet sein,
112 z.B. etc, var usw.
113
114EOF
115exit 1;
116}
Note: See TracBrowser for help on using the repository browser.