fix chunk creation to import rev 25600..25907
authorStefan Metzmacher <metze@samba.org>
Thu, 8 Nov 2007 20:14:55 +0000 (14:14 -0600)
committerStefan Metzmacher <metze@samba.org>
Thu, 8 Nov 2007 20:14:55 +0000 (14:14 -0600)
TODO: fix executable mode

metze

samba4-sync.pl

index c29744e..b77618c 100755 (executable)
@@ -93,43 +93,69 @@ sub fix_date($)
        return $in;
 }
 
+sub is_dir($)
+{
+       my ($in) = @_;
+       return 1 if $in eq ".";
+       return 1 if $in =~ /\/$/;
+       return 0;
+}
+
+sub construct_chunk($)
+{
+       my ($chunk) = @_;
+
+       my $out = join("\n", @{$chunk->{content}->{lines}});
+
+       $out =~ s/^Index: ([^\n]+)\n[=]+/diff -u a\/$1 b\/$1/g;
+       $out =~ s/--- ([^\(]+)\(revision: 0\)/--- \/dev\/null/g;
+       $out =~ s/--- ([^\(]+)\([^\n]+/--- a\/$1/g;
+       $out =~ s/\+\+\+ ([^\(]+)\(revision: 0\)/+++ \/dev\/null/g;
+       $out =~ s/\+\+\+ ([^\(]+)\([^\n]+/+++ b\/$1/g;
+
+       return $out;
+}
+
 sub strip_svn_properties($)
 {
        my ($in) = @_;
        my @in = split("\n", $in);
 
-       my $content = 0;
-       my @content = ();
-       my $property = 0;
-       my @property = ();
-
        my $chunk = undef;
-       my @chunks = ();
+       my $chunks = undef;
        foreach my $l (@in) {
-               if ($l =~ /^Index: (\w+)/) {
-                       $content = 1;
-                       $property = 0;
+               if ($l =~ /^Index: ([\w\.\_\-\/]+)/) {
+                       print "content: $1\n";
 
                        $chunk = undef;
                        $chunk->{type} = "content";
                        $chunk->{file} = $1;
-               } elsif ($l =~ /^Property changes on: (\w+|.)/) {
-                       $content = 0;
-                       $property = 1;
+                       confess "$1 content exists" if defined($chunks->{$1}) and defined($chunks->{$1}->{content});
+                       $chunks->{$1}->{content} = $chunk;
+               } elsif ($l =~ /^Property changes on: ([\w\.\_\-\/]+)/) {
+                       print "properties(".is_dir($1)."): $1\n";
 
                        $chunk = undef;
                        $chunk->{type} = "property";
                        $chunk->{path} = $1;
+                       confess "$1 properties exists" if defined($chunks->{$1}) and defined($chunks->{$1}->{properties});
+                       $chunks->{$1}->{properties} = $chunk unless is_dir($1);
                }
 
-               push(@content, $l) if $content;
-               push(@property, $l) if $property;
+               push(@{$chunk->{lines}}, $l);
        }
 
-       my $c = join("\n", @content);
-       my $p = join("\n", @property);
+       #print Data::Dumper::Dumper($chunks);
 
-       my $out = $c;
+       my @out = ();
+       foreach $chunk (values %{$chunks}) {
+               #print Data::Dumper::Dumper($chunk);
+               my $v = construct_chunk($chunk);
+               push(@out, $v);
+       }
+
+       my $out = join("\n", @out);
+       return undef if $out eq "";
 
        return $out;
 }
@@ -140,13 +166,9 @@ sub fix_diff($)
        my $out = $in;
 
        confess("binary diff") if ($in =~ /Cannot display: file marked as a binary type/);
-       return undef unless ($in =~ /^Index: \w+/);
+       return undef unless ($in =~ /^Index: [\w\.\_\-\/]+/);
 
        $out = strip_svn_properties($in);
-       $out =~ s/^Index: ([^\n]+)\n[=]+/diff -u a\/$1 b\/$1/g;
-       $out =~ s/--- ([^\(]+)\([^\n]+/--- a\/$1/g;
-       $out =~ s/\+\+\+ ([^\(]+)\([^\n]+/+++ b\/$1/g;
 
        return $out;
 }