Author: spadkins
Date: Fri Jan  6 09:45:15 2012
New Revision: 15073

Modified:
   p5ee/trunk/App-Repository/bin/dbmetadata
   p5ee/trunk/App-Repository/lib/App/Repository.pm

Log:
support metadata caching on disk. (fixed directory creation in dbmetadata)

Modified: p5ee/trunk/App-Repository/bin/dbmetadata
==============================================================================
--- p5ee/trunk/App-Repository/bin/dbmetadata    (original)
+++ p5ee/trunk/App-Repository/bin/dbmetadata    Fri Jan  6 09:45:15 2012
@@ -87,11 +87,11 @@
         $tables = [ split(/,/, $table) ];
     }
     else {
-        $tables = $rep->get_phys_table_names();
+        $tables = $rep->get_table_names();
     }
     foreach my $tab (@$tables) {
-        print "Getting table_def for $tab...\n";
         $table_def = $rep->get_table_def($tab);
+        print "Got table_def for $tab... : phys=[$table_def->{phys_table}]\n";
 #        my $tabalias = $table_def->{alias} || &sym2abbr($tab);
 #        my $column_defs = $table_def->{column};
 #        print 
"#######################################################################\n";

Modified: p5ee/trunk/App-Repository/lib/App/Repository.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/Repository.pm     (original)
+++ p5ee/trunk/App-Repository/lib/App/Repository.pm     Fri Jan  6 09:45:15 2012
@@ -4251,7 +4251,15 @@
         #print STDERR "_load_rep_metadata($table): checking $rep_file : not 
found OR {force_metadata_load}=[$options->{force_metadata_load}] is true\n";
         $self->_load_rep_metadata_from_source();
         if ($options->{force_metadata_write}) {
-            $self->_write_rep_metadata("$rep_file.new");
+            if (! -d "$prefix/etc/app/Repository/$self->{name}") {
+                $self->_mkdir_p("$prefix/etc/app/Repository/$self->{name}");
+            }
+            if (-f $rep_file) {
+                $self->_write_rep_metadata("$rep_file.new");
+            }
+            else {
+                $self->_write_rep_metadata($rep_file);
+            }
         }
     }
 
@@ -4472,7 +4480,15 @@
         # load up all additional information from the native metadata
         $self->_load_table_metadata_from_source($table);
         if ($options->{force_metadata_write}) {
-            $self->_write_table_metadata("$table_file.new", $table);
+            if (! -d "$prefix/etc/app/Repository/$self->{name}") {
+                $self->_mkdir_p("$prefix/etc/app/Repository/$self->{name}");
+            }
+            if (-f $table_file) {
+                $self->_write_table_metadata("$table_file.new", $table);
+            }
+            else {
+                $self->_write_table_metadata($table_file, $table);
+            }
         }
     }
 
@@ -4659,6 +4675,24 @@
     &App::sub_exit() if ($App::trace);
 }
 
+sub _mkdir_p {
+    my ($self, $dir) = @_;
+    if (-d $dir) {
+        # do nothing. directory already exists
+    }
+    elsif (-f $dir) {
+        die "Can't create a directory where a file already exists [$dir]";
+    }
+    else {
+        my $parent_dir = $dir;
+        $parent_dir =~ s!/[^/]+$!!;
+        if ($parent_dir ne $dir && $parent_dir ne "." && $parent_dir ne "/") {
+            $self->_mkdir_p($parent_dir)
+        }
+        mkdir($dir);
+    }
+}
+
 sub _write_table_metadata {
     &App::sub_entry if ($App::trace);
     my ($self, $table_file, $table) = @_;

Reply via email to