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) = @_;