diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-04-25 02:15:28 +0100 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-04-25 21:38:52 +0100 | 
| commit | 9a09316743ebd37cbe4ed11914333505e2b2d612 (patch) | |
| tree | 61f711bcf932085f211efdf318844bcc7d937aa0 | |
| parent | Update package description with new versions (diff) | |
| download | gentoobrowse-api-9a09316743ebd37cbe4ed11914333505e2b2d612.tar.bz2 gentoobrowse-api-9a09316743ebd37cbe4ed11914333505e2b2d612.tar.xz gentoobrowse-api-9a09316743ebd37cbe4ed11914333505e2b2d612.zip | |
Refactor utils
17 files changed, 185 insertions, 102 deletions
| diff --git a/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp index 781526a..31d2508 100644 --- a/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp @@ -1,8 +1,8 @@  #include "categoryMetaProcessor.h"  #include <modifycommand.h> -#include "fileUtils.h" -#include "xmlUtils.h" -#include "dbUtils.h" +#include "utils/fileUtils.h" +#include "utils/xmlUtils.h" +#include "utils/dbUtils.h"  #include <sql/maintenance/categoryMetaUpdate.sql.h>  namespace U = Gentoo::Utils; diff --git a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp index 1bd8c6c..dbb3ea3 100644 --- a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp @@ -6,9 +6,11 @@  #include <boost/filesystem/operations.hpp>  #include <glibmm/regex.h>  #include <tablepatch.h> -#include "fileUtils.h" -#include "xmlUtils.h" -#include "dbUtils.h" +#include "utils/fileUtils.h" +#include "utils/dbUtils.h" +#include "utils/ebuildCacheParser.h" +#include "utils/entityWhereFilter.h" +#include "utils/splitEbuildProps.h"  #include <sql/maintenance/categoryInsert.sql.h>  #include <sql/maintenance/packageInsert.sql.h>  #include <sql/maintenance/packageDescUpdate.sql.h> @@ -25,65 +27,6 @@ static Glib::RefPtr<Glib::Regex> packageVersion = Glib::Regex::create("^(.+)-([0  namespace Gentoo {  	namespace Service { -		class EbuildCacheParser : public U::MemMap { -			public: -				typedef std::pair<const char *, const char *> Range; -				typedef std::map<std::string, const Range> KVs; - -				EbuildCacheParser(const boost::filesystem::path & p) : -					U::MemMap(p) -				{ -					const char * chardata = (const char *)this->data; -					while (const char * eq = strchr(chardata, '=')) { -						if (const char * nl = strchr(eq + 1, '\n')) { -							kvs.insert({ std::string(chardata, eq), { eq + 1, nl } }); -							chardata = nl + 1; -						} -						else { -							kvs.insert({ std::string(chardata, eq), { eq + 1, (const char *)this->data + st.st_size } }); -							return; -						} -					} -				} - -				boost::optional<Glib::ustring> get(const std::string & key) const -				{ -					auto kvi = kvs.find(key); -					if (kvi == kvs.end()) { -						return boost::optional<Glib::ustring>(); -					} -					return Glib::ustring(kvi->second.first, kvi->second.second); -				} - -			private: -				KVs kvs; -		}; - -		class SplitEbuildProps : public DB::SqlWriter { -			public: -				SplitEbuildProps(const std::string & ce, int e, const std::string & cp, const boost::optional<Glib::ustring> & p) : -					entityId(e), -					colEntityName(ce), -					colPropName(cp), -					props(p) -				{ -				} - -				void writeSql(AdHoc::Buffer & sql) override -				{ -					sql.appendbf("(SELECT DISTINCT ?::int %s, trim(regexp_split_to_table(?, '\\s+'), '+') %s)", colEntityName, colPropName); -				} - -				void bindParams(DB::Command * c, unsigned int & offset) override -				{ -					c->bindParamI(offset++, entityId); -					Utils::Database::bindOptionalsS(c, offset++, { props }); -				} - -				const int entityId; -				const std::string colEntityName, colPropName; -				const boost::optional<Glib::ustring> props; -		};  		const int EbuildMetaProcessor::FILETYPEID = 1; @@ -93,7 +36,7 @@ namespace Gentoo {  			Glib::MatchInfo matches;  			const Glib::ustring pv = (fn / 4).string();  			if (packageVersion->match(pv, matches)) { -				EbuildCacheParser ecp(path); +				U::EbuildCacheParser ecp(path);  				const std::string repoName = (fn / 0).string();  				const std::string categoryName = (fn / 3).string();  				const std::string packageName = matches.fetch(1); @@ -135,7 +78,7 @@ namespace Gentoo {  			const Glib::ustring pv = (fn / 4).string();  			if (packageVersion->match(pv, matches)) {  				auto m = dbc->select(sql::maintenance::ebuildUpdate::sql); -				EbuildCacheParser ecp(path); +				U::EbuildCacheParser ecp(path);  				Utils::Database::bindOptionalsS(m.get(), 0, { ecp.get("SLOT") });  				Utils::Database::bindOptionalsS(m.get(), 1, { ecp.get("LICENSE") });  				m->bindParamT(2, boost::posix_time::from_time_t(ecp.getStat().st_mtim.tv_sec)); @@ -150,35 +93,13 @@ namespace Gentoo {  			}  		} -		class EntityWhereFilter : public DB::SqlWriter { -			public: -				EntityWhereFilter(const std::string & en, int64_t e) : -					entityId(e), -					entityColName(en) -				{ -				} - -				void writeSql(AdHoc::Buffer & sql) override -				{ -					sql.appendbf("b.%s = ?", entityColName); -				} - -				void bindParams(DB::Command * c, unsigned int & offset) override -				{ -					c->bindParamI(offset++, entityId); -				} - -				const int64_t entityId; -				const std::string entityColName; -		}; -  		void -		EbuildMetaProcessor::perEbuildUpdates(DB::Connection * dbc, const EbuildCacheParser & ecp, int64_t ebuildId, bool newest, int64_t packageId) const +		EbuildMetaProcessor::perEbuildUpdates(DB::Connection * dbc, const U::EbuildCacheParser & ecp, int64_t ebuildId, bool newest, int64_t packageId) const  		{ -			EntityWhereFilter ewf("ebuildId", ebuildId); +			U::EntityWhereFilter ewf("ebuildId", ebuildId);  			// IUSE  			DB::TablePatch t; -			SplitEbuildProps sep_use("ebuildId", ebuildId, "use", ecp.get("IUSE")); +			U::SplitEbuildProps sep_use("ebuildId", ebuildId, "use", ecp.get("IUSE"));  			t.dest = "gentoobrowse.ebuild_uses";  			t.srcExpr = &sep_use;  			t.pk = { "ebuildid", "use" }; @@ -186,7 +107,7 @@ namespace Gentoo {  			t.where = &ewf;  			dbc->patchTable(&t);  			// KEYWORDS -			SplitEbuildProps sep_keywords("ebuildId", ebuildId, "arch", ecp.get("KEYWORDS")); +			U::SplitEbuildProps sep_keywords("ebuildId", ebuildId, "arch", ecp.get("KEYWORDS"));  			t.dest = "gentoobrowse.ebuild_archs";  			t.srcExpr = &sep_keywords;  			t.pk = { "ebuildid", "arch" }; @@ -195,8 +116,8 @@ namespace Gentoo {  			dbc->patchTable(&t);  			if (newest) {  				// HOMEPAGE -				EntityWhereFilter pwf("packageId", 1); -				SplitEbuildProps sep_homepage("packageId", packageId, "url", ecp.get("HOMEPAGE")); +				U::EntityWhereFilter pwf("packageId", 1); +				U::SplitEbuildProps sep_homepage("packageId", packageId, "url", ecp.get("HOMEPAGE"));  				t.dest = "gentoobrowse.package_urls";  				t.srcExpr = &sep_homepage;  				t.pk = { "packageId", "url" }; diff --git a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h index 42b538d..3cd6ba9 100644 --- a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h +++ b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h @@ -2,14 +2,13 @@  #define GENTOOBROWSE_API_SERVICE_MAINTENANCE_EBUILDMETAPROC_H  #include "../maintenanceimpl.h" +#include "utils/ebuildCacheParser.h"  #include <connection.h>  #include <modifycommand.h>  #include <boost/filesystem/path.hpp>  namespace Gentoo {  	namespace Service { -		class EbuildCacheParser; -  		class EbuildMetaProcessor : public Maintenance::FileProcessor {  			public:  				static const int FILETYPEID; @@ -19,7 +18,7 @@ namespace Gentoo {  				void deleted(DB::Connection * dbc, const boost::filesystem::path & fn) const;  			private: -				void perEbuildUpdates(DB::Connection * dbc, const EbuildCacheParser & ecp, int64_t ebuildId, bool newest, int64_t packageId) const; +				void perEbuildUpdates(DB::Connection * dbc, const Utils::EbuildCacheParser & ecp, int64_t ebuildId, bool newest, int64_t packageId) const;  		};  	}  } diff --git a/gentoobrowse-api/service/maintenance/packageManifestProcessor.cpp b/gentoobrowse-api/service/maintenance/packageManifestProcessor.cpp index a84f4a4..e22ce3b 100644 --- a/gentoobrowse-api/service/maintenance/packageManifestProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/packageManifestProcessor.cpp @@ -1,6 +1,6 @@  #include "packageManifestProcessor.h"  #include <modifycommand.h> -#include "fileUtils.h" +#include "utils/fileUtils.h"  using namespace Gentoo::Utils::File; diff --git a/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp index 9dcf709..5c67774 100644 --- a/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp @@ -1,8 +1,8 @@  #include "packageMetaProcessor.h"  #include <modifycommand.h> -#include "fileUtils.h" -#include "xmlUtils.h" -#include "dbUtils.h" +#include "utils/fileUtils.h" +#include "utils/xmlUtils.h" +#include "utils/dbUtils.h"  #include <sql/maintenance/packageMetaUpdate.sql.h>  namespace U = Gentoo::Utils; diff --git a/gentoobrowse-api/service/dbUtils.cpp b/gentoobrowse-api/service/utils/dbUtils.cpp index f2b7f4d..f2b7f4d 100644 --- a/gentoobrowse-api/service/dbUtils.cpp +++ b/gentoobrowse-api/service/utils/dbUtils.cpp diff --git a/gentoobrowse-api/service/dbUtils.h b/gentoobrowse-api/service/utils/dbUtils.h index e609c2d..e609c2d 100644 --- a/gentoobrowse-api/service/dbUtils.h +++ b/gentoobrowse-api/service/utils/dbUtils.h diff --git a/gentoobrowse-api/service/utils/ebuildCacheParser.cpp b/gentoobrowse-api/service/utils/ebuildCacheParser.cpp new file mode 100644 index 0000000..ad894db --- /dev/null +++ b/gentoobrowse-api/service/utils/ebuildCacheParser.cpp @@ -0,0 +1,34 @@ +#include "ebuildCacheParser.h" + +namespace U = Gentoo::Utils; + +namespace Gentoo { +	namespace Utils { +		EbuildCacheParser::EbuildCacheParser(const boost::filesystem::path & p) : +			U::MemMap(p) +		{ +			const char * chardata = (const char *)this->data; +			while (const char * eq = strchr(chardata, '=')) { +				if (const char * nl = strchr(eq + 1, '\n')) { +					kvs.insert({ std::string(chardata, eq), { eq + 1, nl } }); +					chardata = nl + 1; +				} +				else { +					kvs.insert({ std::string(chardata, eq), { eq + 1, (const char *)this->data + st.st_size } }); +					return; +				} +			} +		} + +		boost::optional<Glib::ustring> +		EbuildCacheParser::get(const std::string & key) const +		{ +			auto kvi = kvs.find(key); +			if (kvi == kvs.end()) { +				return boost::optional<Glib::ustring>(); +			} +			return Glib::ustring(kvi->second.first, kvi->second.second); +		} +	} +} + diff --git a/gentoobrowse-api/service/utils/ebuildCacheParser.h b/gentoobrowse-api/service/utils/ebuildCacheParser.h new file mode 100644 index 0000000..e9f1dfc --- /dev/null +++ b/gentoobrowse-api/service/utils/ebuildCacheParser.h @@ -0,0 +1,28 @@ +#ifndef GENTOOBROWSE_API_SERVICE_MAINTENANCE_EBUILDCACHEPARSER_H +#define GENTOOBROWSE_API_SERVICE_MAINTENANCE_EBUILDCACHEPARSER_H + +#include "fileUtils.h" +#include <map> +#include <boost/optional.hpp> +#include <boost/filesystem/path.hpp> +#include <glibmm/ustring.h> + +namespace Gentoo { +	namespace Utils { +		class EbuildCacheParser : public Gentoo::Utils::MemMap { +			public: +				typedef std::pair<const char *, const char *> Range; +				typedef std::map<std::string, const Range> KVs; + +				EbuildCacheParser(const boost::filesystem::path & p); + +				boost::optional<Glib::ustring> get(const std::string & key) const; + +			private: +				KVs kvs; +		}; +	} +} + +#endif + diff --git a/gentoobrowse-api/service/utils/entityWhereFilter.cpp b/gentoobrowse-api/service/utils/entityWhereFilter.cpp new file mode 100644 index 0000000..8e29cfe --- /dev/null +++ b/gentoobrowse-api/service/utils/entityWhereFilter.cpp @@ -0,0 +1,25 @@ +#include "entityWhereFilter.h" +#include <command.h> + +namespace Gentoo { +	namespace Utils { +		EntityWhereFilter::EntityWhereFilter(const std::string & en, int64_t e) : +			entityId(e), +			entityColName(en) +		{ +		} + +		void +		EntityWhereFilter::writeSql(AdHoc::Buffer & sql) +		{ +			sql.appendbf("b.%s = ?", entityColName); +		} + +		void +		EntityWhereFilter::bindParams(DB::Command * c, unsigned int & offset) +		{ +			c->bindParamI(offset++, entityId); +		} +	} +} + diff --git a/gentoobrowse-api/service/utils/entityWhereFilter.h b/gentoobrowse-api/service/utils/entityWhereFilter.h new file mode 100644 index 0000000..20420c3 --- /dev/null +++ b/gentoobrowse-api/service/utils/entityWhereFilter.h @@ -0,0 +1,22 @@ +#ifndef GENTOOBROWSE_API_SERVICE_MAINTENANCE_ENTITYWHEREFILTER_H +#define GENTOOBROWSE_API_SERVICE_MAINTENANCE_ENTITYWHEREFILTER_H + +#include <sqlWriter.h> + +namespace Gentoo { +	namespace Utils { +		class EntityWhereFilter : public DB::SqlWriter { +			public: +				EntityWhereFilter(const std::string & en, int64_t e); + +				void writeSql(AdHoc::Buffer & sql) override; +				void bindParams(DB::Command * c, unsigned int & offset) override; + +				const int64_t entityId; +				const std::string entityColName; +		}; +	} +} + +#endif + diff --git a/gentoobrowse-api/service/fileUtils.cpp b/gentoobrowse-api/service/utils/fileUtils.cpp index 1446b9f..1446b9f 100644 --- a/gentoobrowse-api/service/fileUtils.cpp +++ b/gentoobrowse-api/service/utils/fileUtils.cpp diff --git a/gentoobrowse-api/service/fileUtils.h b/gentoobrowse-api/service/utils/fileUtils.h index d73b1ef..d73b1ef 100644 --- a/gentoobrowse-api/service/fileUtils.h +++ b/gentoobrowse-api/service/utils/fileUtils.h diff --git a/gentoobrowse-api/service/utils/splitEbuildProps.cpp b/gentoobrowse-api/service/utils/splitEbuildProps.cpp new file mode 100644 index 0000000..8116742 --- /dev/null +++ b/gentoobrowse-api/service/utils/splitEbuildProps.cpp @@ -0,0 +1,29 @@ +#include "splitEbuildProps.h" +#include <command.h> +#include "dbUtils.h" + +namespace Gentoo { +	namespace Utils { +		SplitEbuildProps::SplitEbuildProps(const std::string & ce, int e, const std::string & cp, const boost::optional<Glib::ustring> & p) : +			entityId(e), +			colEntityName(ce), +			colPropName(cp), +			props(p) +		{ +		} + +		void +		SplitEbuildProps::writeSql(AdHoc::Buffer & sql) +		{ +			sql.appendbf("(SELECT DISTINCT ?::int %s, trim(regexp_split_to_table(?, '\\s+'), '+') %s)", colEntityName, colPropName); +		} + +		void +		SplitEbuildProps::bindParams(DB::Command * c, unsigned int & offset) +		{ +			c->bindParamI(offset++, entityId); +			Gentoo::Utils::Database::bindOptionalsS(c, offset++, { props }); +		} +	} +} + diff --git a/gentoobrowse-api/service/utils/splitEbuildProps.h b/gentoobrowse-api/service/utils/splitEbuildProps.h new file mode 100644 index 0000000..4739b7e --- /dev/null +++ b/gentoobrowse-api/service/utils/splitEbuildProps.h @@ -0,0 +1,25 @@ +#ifndef GENTOOBROWSE_API_SERVICE_MAINTENANCE_SPLITEBUILDPROPS_H +#define GENTOOBROWSE_API_SERVICE_MAINTENANCE_SPLITEBUILDPROPS_H + +#include <sqlWriter.h> +#include <glibmm/ustring.h> +#include <boost/optional.hpp> + +namespace Gentoo { +	namespace Utils { +		class SplitEbuildProps : public DB::SqlWriter { +			public: +				SplitEbuildProps(const std::string & ce, int e, const std::string & cp, const boost::optional<Glib::ustring> & p); + +				void writeSql(AdHoc::Buffer & sql) override; +				void bindParams(DB::Command * c, unsigned int & offset) override; + +				const int entityId; +				const std::string colEntityName, colPropName; +				const boost::optional<Glib::ustring> props; +		}; +	} +} + +#endif + diff --git a/gentoobrowse-api/service/xmlUtils.cpp b/gentoobrowse-api/service/utils/xmlUtils.cpp index 3fc3b44..3fc3b44 100644 --- a/gentoobrowse-api/service/xmlUtils.cpp +++ b/gentoobrowse-api/service/utils/xmlUtils.cpp diff --git a/gentoobrowse-api/service/xmlUtils.h b/gentoobrowse-api/service/utils/xmlUtils.h index 158e134..158e134 100644 --- a/gentoobrowse-api/service/xmlUtils.h +++ b/gentoobrowse-api/service/utils/xmlUtils.h | 
