source: trunk/dasscm/dasscm_chkconf@ 204

Last change on this file since 204 was 204, checked in by joergs, on Dec 5, 2005 at 11:52:38 AM

removed question for copying files to repository, don't stop on deleted files

  • Property svn:executable set to *
  • Property svn:keywords set to id
File size: 3.8 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 if( ! -r $realfile ) {
90 print "d $realfile\n";
91 } else {
92 (-r "$cvsworkfile") || die("Fehler: $cvsworkfile ist nicht lesbar");
93 if (compare($cvsworkfile,$realfile) != 0) {
94 # Dateien unterscheiden sich
95 (-w $cvsworkfile) || die("Fehler: kein Schreibrecht auf $cvsworkfile");
96 # Arbeitskopie durch Kopie ersetzen
97 #copy($realfile,$cvsworkfile) || die("Fehler beim kopieren $realfile --> $cvsworkfile");
98 $changedfiles{"$realfile"} = $cvsworkfile;
99 }
100 }
101}
102
103
104sub I_am_interactive {
105 local *TTY; # local file handle
106 open(TTY, "/dev/tty") or die "can't open /dev/tty: $!";
107 my $tpgrp = tcgetpgrp(fileno(TTY));
108 my $pgrp = getpgrp();
109 close TTY;
110 return ($tpgrp == $pgrp);
111}
112
113sub usage {
114print <<EOF;
115Funktion dieses Scripts:
116Es sollen Konfigurationsdatei (z.B. in /etc und /var)
117im Versionskontrollsystem (Subversion oder CVS) gepflegt werden.
118Überprüfen welche Dateien sich gegenüber der CVS-Arbeitskopie geändert haben und kopiert diese auf Wunsch in das Subversion/CVS-Arbeitsverzeichnis
119
120Parameter: Subversion/CVS-Arbeitsverzeichnis
121 (dort muß die Verzeichnisstruktur bezogen auf / abgebildet sein,
122 z.B. etc, var usw.)
123 Alternativ kann dieses über die Umgebungsvariable
124 \$DASSCM_REPO gesetzt sein.
125
126EOF
127exit 1;
128}
Note: See TracBrowser for help on using the repository browser.