source: trunk/dasscm/dasscm_chkconf@ 199

Last change on this file since 199 was 199, checked in by joergs, on Dec 7, 2004 at 1:06:58 PM

moved all config related tools to dasscm

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