From 1f878303b4f69fcc10c940747d009807117a3929 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 2 Jun 2009 16:54:34 +0000 Subject: [PATCH] Implemented DatabasePath in DatabaseBase revision classes --- include/osgDB/DatabaseRevisions | 17 ++++++++--- include/osgDB/FileCache | 1 + src/osgDB/DatabaseRevisions.cpp | 23 +++++++++++++-- src/osgDB/FileCache.cpp | 28 ++++++++++++++++++- .../revisions/ReaderWriterRevisions.cpp | 16 ++++++++++- 5 files changed, 76 insertions(+), 9 deletions(-) diff --git a/include/osgDB/DatabaseRevisions b/include/osgDB/DatabaseRevisions index 2e51265c2..2a95bb3bd 100644 --- a/include/osgDB/DatabaseRevisions +++ b/include/osgDB/DatabaseRevisions @@ -54,6 +54,9 @@ class OSGDB_EXPORT DatabaseRevision : public osg::Object META_Object(osgDB, DatabaseRevision) + void setDatabasePath(const std::string& path) { _databasePath = path; } + const std::string& getDatabasePath() const { return _databasePath; } + typedef std::set FileNames; void setFilesAdded(FileList* fileList) { _filesAdded = fileList; } @@ -74,9 +77,11 @@ class OSGDB_EXPORT DatabaseRevision : public osg::Object virtual ~DatabaseRevision(); - osg::ref_ptr _filesAdded; - osg::ref_ptr _filesRemoved; - osg::ref_ptr _filesModified; + std::string _databasePath; + + osg::ref_ptr _filesAdded; + osg::ref_ptr _filesRemoved; + osg::ref_ptr _filesModified; }; class OSGDB_EXPORT DatabaseRevisions : public osg::Object @@ -90,6 +95,9 @@ class OSGDB_EXPORT DatabaseRevisions : public osg::Object typedef std::vector< osg::ref_ptr > DatabaseRevisionList; + void setDatabasePath(const std::string& path) { _databasePath = path; } + const std::string& getDatabasePath() const { return _databasePath; } + void addRevision(DatabaseRevision* revision); void removeRevision(DatabaseRevision* revision); @@ -102,7 +110,8 @@ class OSGDB_EXPORT DatabaseRevisions : public osg::Object virtual ~DatabaseRevisions(); - DatabaseRevisionList _revisionList; + std::string _databasePath; + DatabaseRevisionList _revisionList; }; } diff --git a/include/osgDB/FileCache b/include/osgDB/FileCache index dd56661a2..b0ef93366 100644 --- a/include/osgDB/FileCache +++ b/include/osgDB/FileCache @@ -52,6 +52,7 @@ class OSGDB_EXPORT FileCache : public osg::Referenced virtual ReaderWriter::ReadResult readShader(const std::string& originalFileName, const osgDB::Options* options) const; virtual ReaderWriter::WriteResult writeShader(const osg::Shader& shader, const std::string& originalFileName, const osgDB::Options* options) const; + bool loadDatabaseRevisionsForFile(const std::string& originanlFileName); typedef std::list< osg::ref_ptr > DatabaseRevisionsList; DatabaseRevisionsList& getDatabaseRevisionsList() { return _databaseRevisionsList; } diff --git a/src/osgDB/DatabaseRevisions.cpp b/src/osgDB/DatabaseRevisions.cpp index c0194f589..e6c6e3bc9 100644 --- a/src/osgDB/DatabaseRevisions.cpp +++ b/src/osgDB/DatabaseRevisions.cpp @@ -46,6 +46,7 @@ DatabaseRevision::DatabaseRevision() } DatabaseRevision::DatabaseRevision(const DatabaseRevision& revision, const osg::CopyOp): + _databasePath(revision._databasePath), _filesAdded(revision._filesAdded), _filesRemoved(revision._filesRemoved), _filesModified(revision._filesModified) @@ -58,8 +59,19 @@ DatabaseRevision::~DatabaseRevision() bool DatabaseRevision::isFileBlackListed(const std::string& filename) const { - return (_filesRemoved.valid() && _filesRemoved->contains(filename)) || - (_filesAdded.valid() && _filesAdded->contains(filename)); + osg::notify(osg::NOTICE)<<"DatabaseRevision("<=filename.length()) return false; + if (filename.compare(0,_databasePath.length(), _databasePath)!=0) return false; + + std::string localPath(filename, + _databasePath.empty() ? 0 : _databasePath.length()+1, + std::string::npos); + + osg::notify(osg::NOTICE)<<" localPath = "<contains(localPath)) || + (_filesModified.valid() && _filesModified->contains(localPath)); } @@ -72,6 +84,7 @@ DatabaseRevisions::DatabaseRevisions() } DatabaseRevisions::DatabaseRevisions(const DatabaseRevisions& revisions, const osg::CopyOp): + _databasePath(revisions._databasePath), _revisionList(revisions._revisionList) { } @@ -119,7 +132,11 @@ bool DatabaseRevisions::isFileBlackListed(const std::string& filename) const itr != _revisionList.end(); ++itr) { - if ((*itr)->isFileBlackListed(filename)) return true; + if ((*itr)->isFileBlackListed(filename)) + { + osg::notify(osg::NOTICE)<<"File is black listed "< object = osgDB::readObjectFile(revisionsFileName); + DatabaseRevisions* dr = dynamic_cast(object.get()); + + if (dr) + { + osg::notify(osg::NOTICE)<<" loaded revisions File("<getFileNames().insert(filename); } @@ -74,24 +78,34 @@ class ReaderWriterFreeType : public osgDB::ReaderWriter std::string revisions_path; if (options && !(options->getDatabasePathList().empty())) revisions_path = options->getDatabasePathList().front(); + revisions->setDatabasePath(revisions_path); + + osg::notify(osg::NOTICE)<<"readRevisions="<