ppcrcd/trunk/conf.dir/usr/lib/ppcrcd: xmltar.pl xmluntar.pl

sparky cvs at pld-linux.org
Thu Mar 16 00:32:47 CET 2006


Author: sparky
Date: Thu Mar 16 00:32:40 2006
New Revision: 7178

Modified:
   ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmltar.pl
   ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmluntar.pl
Log:
- use uuid for file storing, now files containing xmltar tags can ge stored too
- use s### when apropiate


Modified: ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmltar.pl
==============================================================================
--- ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmltar.pl	(original)
+++ ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmltar.pl	Thu Mar 16 00:32:40 2006
@@ -58,11 +58,19 @@
 
 sub lastname {
 	$_ = $_[0];
-	s|.*/||;
+	s#.*/##;
 	s/&/&/g;
 	s/"/"/g;
 	return $_;
-}	
+}
+
+sub get_uuid {
+	my ($F_IN, $uuid);
+	open $F_IN, "/proc/sys/kernel/random/uuid";
+	($uuid = <$F_IN>) =~ y/ \t\r\n//d;
+	close $F_IN;
+	return $uuid;
+}
 
 sub packfile {
 	my ($file, $step, $localdir, $level) = @_;
@@ -86,14 +94,18 @@
 		return;
 	}
 	print $step."<!--F $localdir".lastname($file)." {{{$level -->\n" if $comment;
-	print $step.'<xmltar:file mode="';
-	#TODO: use /proc/sys/kernel/random/uuid
+	local $/ = undef;
+	my $file_content = <F_IN>;
+	my $uuid = get_uuid();
+	while ( $file_content =~ /$uuid/ ) {
+		$uuid = get_uuid();
+	}
+	print $step.'<xmltar:file:'.$uuid.' mode="';
 	printf "%04o",  ((stat $file)[2]) & 07777;
 	print '" name="'.lastname($file)."\">\n";
-	while ( <F_IN> ) {
-		print $_;
-	}
-	print "</xmltar:file>\n";
+	print $file_content;
+	print "</xmltar:file:$uuid>\n";
+	close F_IN;
 }
 
 sub packlink {
@@ -149,7 +161,7 @@
 unless ( $stayinplace ) {
     foreach my $file (@filelist) {
 	if (-d $file) {
-		$file =~ s/\/$//;
+		$file =~ s#/$##;
 		packdir($file, "", "", 1);
 		next;
 	}
@@ -168,17 +180,17 @@
 	my $level=1;
 	my $step="";
 	foreach my $file (sort @filelist) {
-		die "only local files, $file\n" if $file =~ /^\// or $file =~ /\.\./;
-		$file =~ s/\/$//;
+		die "only local files, $file\n" if $file =~ m#^/# or $file =~ /\.\./;
+		$file =~ s#/$##;
 		$file = $file;
 		while ( $file !~ /^$dir/ ) {
-			$dir =~ s/[^\/]*\/$//;
+			$dir =~ s#[^/]*/$##;
 			$step =~ s/$stepadd$//;
 			$level--;
 			print $step . "</xmltar:dir>\n";
 		}
 		( my $filename = $file ) =~ s/^$dir//;
-		while ( $filename =~ s/^(.*?)\/// ) {
+		while ( $filename =~ s#^(.*?)/## ) {
 			$dir .= $1."/";
 			print $step."<!--D $dir {{{$level -->\n" if $comment;
 			print $step . '<xmltar:dir name="'.lastname($1)."\">\n";
@@ -200,7 +212,7 @@
 		if ( $removed ) {
 			unless (-e $file) {
 				print $step."<!--R $dir".lastname($file)." {{{$level -->\n" if $comment;
-				print $step.'<xmltar:removed name="'.lastname($file)."\" />\n";
+				print $step.'<xmltar:removed name="'.lastname($file).'" />\n';
 				next;
 			}
 		}
@@ -208,7 +220,7 @@
 	}
 
 	while ( $dir ) {
-		$dir =~ s/[^\/]*\/$//;
+		$dir =~ s#[^/]*/$##;
 		$step =~ s/$stepadd$//;
 		$level--;
 		print $step . "</xmltar:dir>\n";

Modified: ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmluntar.pl
==============================================================================
--- ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmluntar.pl	(original)
+++ ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/xmluntar.pl	Thu Mar 16 00:32:40 2006
@@ -7,6 +7,7 @@
 
 my $verbose = 0;
 my $comment = 0;
+my $warned_nouuid = 0;
 
 my @filelist;
 while ( $ARGV[0] ) {
@@ -36,7 +37,7 @@
 	chomp $L;
 	$L =~ s/^\s*//;
 	next unless $L;
-	if ( $L =~ s/^<xmltar:hardlink\s+(.*?)>(.*?)<\/xmltar:hardlink>// ) {
+	if ( $L =~ s#^<xmltar:hardlink\s+(.*?)>(.*?)</xmltar:hardlink>## ) {
 		my $to = $2;
 		my %opts = ( map { /([a-z]+)="(.*?)"/g } $1 );
 		unless ( $opts{"name"} ) {
@@ -51,7 +52,7 @@
 		chmod oct($opts{"mode"}), $to if $opts{"mode"};
 		redo;
 	}
-	if ( $L =~ s/^<xmltar:symlink\s+(.*?)>(.*?)<\/xmltar:symlink>// ) {
+	if ( $L =~ s#^<xmltar:symlink\s+(.*?)>(.*?)</xmltar:symlink>## ) {
 		my $to = $2;
 		my %opts = ( map { /([a-z]+)="(.*?)"/g } $1 );
 		unless ( $opts{"name"} ) {
@@ -80,23 +81,28 @@
 		chmod oct($opts{"mode"}), $dir if $opts{"mode"};
 		redo;
 	}
-	if ( $L =~ s/^<\/xmltar:dir>// ) {
-		$dir =~ s|[^/]*/$|| or warn "Error undir!!!$!\n";
+	if ( $L =~ s#^</xmltar:dir>## ) {
+		$dir =~ s#[^/]*/$## or warn "Error undir!!!$!\n";
 		redo;
 	}
-	if ( $L =~ s/^<xmltar:file\s+(.*?)>// ) {
-		my %opts = ( map { /([a-z]+)="(.*?)"/g } $1 );
+	if ( $L =~ s/^<xmltar:file(|:[-a-zA-Z0-9]*)\s+(.*?)>// ) {
+		my $uuid = $1;
+		my %opts = ( map { /([a-z]+)="(.*?)"/g } $2 );
 		unless ( $opts{"name"} ) {
-			warn "file has no name!\n";
+			warn "Error: file has no name!\n";
 			redo;
 		}
+		unless (length $uuid && ! $warned_nouuid ) {
+			warn "Warning: file tag has no uuid\n";
+			$warned_nouuid = 1;
+		}
 		my $file = $dir.convname($opts{"name"});
 		rmtree($file);
 		warn "F $file\n" if $verbose;
 		open F_OUT, "> $file" or die "Can't create file $file: $!\n";
 		if ( $L ) {
 			warn "Warning: file '$file' should start in next line\n";
-			if ( $L =~ s/^(.*?)<\/xmltar:file>// ) {
+			if ( $L =~ s#^(.*?)</xmltar:file$uuid>## ) {
 				# onle line file
 				print F_OUT $1;
 				close F_OUT;
@@ -107,7 +113,7 @@
 			}
 		}
 		while ( my $Fline = <> ) {
-			if ( $Fline =~ s/^(.*?)<\/xmltar:file>// ) {
+			if ( $Fline =~ s#^(.*?)</xmltar:file$uuid>## ) {
 				print F_OUT $1;
 				chomp $Fline;
 				$L = $Fline;
@@ -119,7 +125,7 @@
 		chmod oct($opts{"mode"}), $file if $opts{"mode"};
 		redo;
 	}
-	if ( $L =~ s/^<xmltar:removed\s+(.*?)\/>// ) {
+	if ( $L =~ s#^<xmltar:removed\s+(.*?)/>## ) {
 		my %opts = ( map { /([a-z]+)="(.*?)"/g } $1 );
 		unless ( $opts{"name"} ) {
 			warn "removed has no name!\n";


More information about the pld-cvs-commit mailing list