From: "Magnus Granberg" <zorry@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] dev/zorry:master commit in: buildhost/buildhost/
Date: Fri, 1 Apr 2011 16:42:39 +0000 (UTC) [thread overview]
Message-ID: <eb3545e879aa0e58faec627167e5ec507423ba27.zorry@gentoo> (raw)
commit: eb3545e879aa0e58faec627167e5ec507423ba27
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Fri Apr 1 15:23:35 2011 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Fri Apr 1 15:23:35 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=dev/zorry.git;a=commit;h=eb3545e8
added the guest code
---
buildhost/buildhost/core.py | 323 ++++++++++++++-----
buildhost/buildhost/sqlbackend.py | 636 +++++++++++++++++++++++++++++++++----
2 files changed, 813 insertions(+), 146 deletions(-)
diff --git a/buildhost/buildhost/__init__.py b/buildhost/buildhost/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/buildhost/buildhost/core.py b/buildhost/buildhost/core.py
index 6740e86..bbe23b6 100644
--- a/buildhost/buildhost/core.py
+++ b/buildhost/buildhost/core.py
@@ -4,11 +4,18 @@
"""core module"""
import sys
+from StringIO import StringIO
import os
import re
import portage
+from _emerge.actions import load_emerge_config
+from _emerge.main import parse_opts, emerge_main
+from _emerge.depgraph import backtrack_depgraph, depgraph, resume_depgraph
+from _emerge.create_depgraph_params import create_depgraph_params
+import _emerge
import hashlib
import errno
+import time
from xml.etree.ElementTree import ElementTree
class get_conf_settings(object):
@@ -49,9 +56,9 @@ def init_sql_backend():
database = None
# Setup the database backent to use mysql
- if DatabaseConfig.mode == 'mysql':
- from sqlbackend import MySQLPackageDB
- database = MySQLPackageDB(DatabaseConfig.settings['sql_mysql'])
+ if DatabaseConfig.mode == 'pgsql':
+ from sqlbackend import PgSQLPackageDB
+ database = PgSQLPackageDB(DatabaseConfig.settings['sql_pgsql'])
return database
def get_file_text(filename):
@@ -69,17 +76,17 @@ def get_file_text(filename):
textfile.close()
return text
-def check_make_conf(database):
- if database.get_config_active(get_conf_settings.SetBuildConfig) is None:
- return False
+def check_make_conf(database, config_profile):
+ make_conf_checksum_db = database.get_default_config(config_profile)[0]
+ if make_conf_checksum_db is None:
+ return "1"
make_conf_file = "/etc/make.conf"
# Check if we can open the file and close it
# Check if we have some error in the file (portage.util.getconfig)
# Check if we envorment error with the config (settings.validate)
- make_conf_checksum_db = database.get_make_conf_checksum_db(get_conf_settings.SetBuildConfig)
- make_conf_checksum_tree = portage.checksum.sha256hash(make_conf_file)
- if make_conf_checksum_db is None or make_conf_checksum_tree[0] != make_conf_checksum_db[0]:
- return True
+ make_conf_checksum_tree = portage.checksum.sha256hash(make_conf_file)[0]
+ if make_conf_checksum_tree != make_conf_checksum_db:
+ return "2"
# Check if we can open the file and close it
# Check if we have some error in the file (portage.util.getconfig)
# Check if we envorment error with the config (settings.validate)
@@ -91,8 +98,8 @@ def check_make_conf(database):
portage.settings.validate()
# With errors we return false
except Exception as e:
- return False
- return True
+ return "3"
+ return "4"
def get_iuse(portdb, cpv):
"""Gets the current IUSE flags from the tree
@@ -209,86 +216,228 @@ def get_flags(settings, portdb, cpv):
#flags = filter_flags(use_flags, use_expand_hidden, usemasked, useforced)
final_flags = filter_flags(settings, final_use, use_expand_hidden, usemasked, useforced)
return iuse_flags, final_flags
-def build_package(database):
- build_list = get_package_to_build(database, get_conf_settings.SetBuildConfig)
+def check_configure(database, config_profile):
+ pass_make_conf = check_make_conf(database, config_profile)
+ print pass_make_conf
+ if pass_make_conf == "1":
+ # profile not active or updatedb is runing
+ return False
+ elif pass_make_conf == "2":
+ # update make.conf
+ return False
+ elif pass_make_conf == "3":
+ # set the config as no working
+ database.make_conf_error(config_profile)
+ return False
+ elif pass_make_conf == "4":
+ # make.conf check OK
+ return True
+
+def check_file_in_manifest(pkgdir, settings, portdb, cpv, build_dict, build_use_flags_list):
+ myfetchlistdict = portage.FetchlistDict(pkgdir, settings, portdb)
+ my_manifest = portage.Manifest(pkgdir, settings['DISTDIR'], fetchlist_dict=myfetchlistdict, manifest1_compat=False, from_scratch=False)
+ if my_manifest.findFile(build_dict['package'] + "-" + build_dict['ebuild_version'] + ".ebuild") is None:
+ return False
+ cpv_fetchmap = portdb.getFetchMap(cpv, useflags=build_use_flags_list, mytree=None)
+ settings.unlock()
+ try:
+ portage.fetch(cpv_fetchmap, settings, listonly=0, fetchonly=0, locks_in_subdir='.locks', use_locks=1, try_mirrors=1)
+ except:
+ settings.lock()
+ return False
+ settings.lock()
+ if my_manifest.checkCpvHashes(cpv, checkDistfiles=True, onlyDistfiles=False, checkMiscfiles=True) is not None:
+ return False
+ if portdb.fetch_check(cpv, useflags=build_use_flags_list, mysettings=settings, all=False) is not True:
+ return False
+ return True
+
+def get_needed_dep_useflags(cpv, build_use_flags_list):
+ tmpcmdline = []
+ tmpcmdline.append("-p")
+ tmpcmdline.append("--autounmask")
+ tmpcmdline.append("=" + cpv)
+ print tmpcmdline
+ myaction, myopts, myfiles = parse_opts(tmpcmdline, silent=False)
+ print myaction, myopts, myfiles
+ myparams = create_depgraph_params(myopts, myaction)
+ print myparams
+ settings, trees, mtimedb = load_emerge_config()
+ try:
+ success, mydepgraph, favorites = backtrack_depgraph(
+ settings, trees, myopts, myparams, myaction, myfiles, spinner=None)
+ print success, mydepgraph, favorites
+ except portage.exception.PackageSetNotFound as e:
+ root_config = trees[settings["ROOT"]]["root_config"]
+ display_missing_pkg_set(root_config, e.value)
+ return 1
+ use_changes = None
+ mydepgraph._show_merge_list()
+ mydepgraph.display_problems()
+ if mydepgraph._dynamic_config._needed_use_config_changes:
+ use_changes = {}
+ for pkg, needed_use_config_changes in mydepgraph._dynamic_config._needed_use_config_changes.items():
+ new_use, changes = needed_use_config_changes
+ use_changes[pkg.cpv] = changes
+ print use_changes
+ if use_changes is None:
+ return None
+ iteritems_packages = {}
+ for k, v in use_changes.iteritems():
+ k_package = portage.versions.cpv_getkey(k)
+ iteritems_packages[ k_package ] = v
+ print iteritems_packages
+ return iteritems_packages
+
+def comper_useflags(settings, portdb, cpv, build_dict):
+ iuse_flags, use_enable = get_flags(settings, portdb, cpv)
+ iuse = []
+ print "use_enable", use_enable
+ build_use_flags_dict = build_dict['build_useflags']
+ print "build_use_flags_dict", build_use_flags_dict
+ build_use_flags_list = []
+ if use_enable == []:
+ if build_use_flags_dict is None:
+ return None
+ for iuse_line in iuse_flags:
+ iuse.append(reduce_flag(iuse_line))
+ iuse_flags_list = list(set(iuse))
+ use_disable = list(set(iuse_flags_list).difference(set(use_enable)))
+ use_flagsDict = {}
+ for x in use_enable:
+ use_flagsDict[x] = True
+ for x in use_disable:
+ use_flagsDict[x] = False
+ print "use_flagsDict", use_flagsDict
+ for k, v in use_flagsDict.iteritems():
+ print "tree use flags", k, v
+ print "db use flags", k, build_use_flags_dict[k]
+ if build_use_flags_dict[k] != v:
+ if build_use_flags_dict[k] is True:
+ build_use_flags_list.append(k)
+ if build_use_flags_dict[k] is False:
+ build_use_flags_list.append("-" + k)
+ if build_use_flags_list == []:
+ build_use_flags_list = None
+ print build_use_flags_list
+ return build_use_flags_list
+
+def get_cpv_build_list(database, build_dict, config_profile):
+ build_cpv_dict = {}
+ cpv_dict = {}
+ cpv_list = "1"
+ settings = portage.config(clone=portage.settings)
+ portdb = portage.portdbapi(mysettings=settings)
+ porttree = portage.portagetree(settings=settings)
+ trees = {"/" : {"porttree":porttree}}
+ dep_keys = ("DEPEND", "RDEPEND", "PDEPEND")
+ pkgdir = os.path.join(settings['PORTDIR'], build_dict['categories'] + "/" + build_dict['package'])
+ ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir+ "/" + build_dict['package'] + "-" + build_dict['ebuild_version'] + ".ebuild")[0]
+ print ebuild_version_checksum_tree
+ if ebuild_version_checksum_tree != build_dict['ebuild_checksum']:
+ new_queue_id = database.check_revision(build_dict, config_profile, ebuild_version_checksum_tree)
+ if new_queue_id is None:
+ return None
+ if check_fail_times(build_dict['queue_id'], "cpv_checksum") is False:
+ update_fail_times(build_dict['queue_id'], "cpv_checksum")
+ else:
+ add_cpv_fail(build_dict['queue_id'], "cpv_checksum")
+ return None
+ build_dict = database.get_package_to_build(config_profile, new_queue_id)
+ categories = build_dict['categories']
+ package = build_dict['package']
+ ebuild_version = build_dict['ebuild_version']
+ ebuild_version_useflags = build_dict['build_useflags']
+ build_massage = build_dict['post_message']
+ cpv = unicode(categories + "/" + package + "-" + ebuild_version)
+ cp = unicode(categories + "/" + package)
+ pkgdir = os.path.join(settings['PORTDIR'], build_dict['categories'] + "/" + build_dict['package'])
+ settings['O'] = pkgdir
+ print portage.getmaskingstatus(cpv, settings=settings, portdb=portdb)
+ if portage.getmaskingstatus(cpv, settings=settings, portdb=portdb) != []:
+ if check_fail_times(build_dict['queue_id'], "cpv_mask") is False:
+ update_fail_times(build_dict['queue_id'], "cpv_mask")
+ else:
+ add_cpv_fail(build_dict['queue_id'], "cpv_mask")
+ return None
+ build_use_flags_list = comper_useflags(settings, portdb, cpv, build_dict)
+ if check_file_in_manifest(pkgdir, settings, portdb, cpv, build_dict, build_use_flags_list) is False:
+ if check_fail_times(build_dict['queue_id'], "cpv_file_manifest") is False:
+ update_fail_times(build_dict['queue_id'], "cpv_file_manifest")
+ else:
+ add_cpv_fail(build_dict['queue_id'], "cpv_file_manifest")
+ return None
+ build_cpv_dict = get_needed_dep_useflags(cpv, build_use_flags_list)
+ print build_cpv_dict, build_use_flags_list, cpv
+ build_use_flags_dict = {}
+ if build_use_flags_list is None:
+ build_use_flags_dict['None'] = None
+ if build_cpv_dict is None:
+ build_cpv_dict = {}
+ build_cpv_dict[cpv] = build_use_flags_dict
+ else:
+ build_cpv_dict[cpv] = build_use_flags_dict
+ print build_cpv_dict
+ return build_cpv_dict
+
+def main_loop(database, config_profile):
+ repeat = True
+ queue_id_list = 4
+ while repeat:
+ build_cpv_dict = {}
+ build_dict = {}
+ if check_configure(database, config_profile) is not True:
+ # time.sleep(60)
+ continue # retunr to the start of the function
+ else:
+ build_dict = database.get_package_to_build(config_profile, queue_id_list)
+ print build_dict['ebuild_id'], build_dict['post_message']
+ if build_dict['ebuild_id'] is None:
+ if build_dict['post_message'] is None:
+ # time.sleep(60)
+ print "build_dict none"
+ queue_id_list = queue_id_list + 1
+ print queue_id_list
+ continue # return to the start of the function
+ build_cpv_dict = get_cpv_build_list(database, build_dict, config_profile)
+ if build_cpv_dict is None:
+ queue_id_list = queue_id_list + 1
+ continue # return to the start of the function
+ build_cpv_list = []
+ for k, v in build_cpv_dict.iteritems():
+ build_use_flags_list = []
+ for x, y in v.iteritems():
+ if y is True:
+ build_use_flags_list.append(x)
+ if y is False:
+ build_use_flags_list.append("-" + x)
+ print k, build_use_flags_list
+ if build_use_flags_list == []:
+ build_cpv_list.append("=" + k)
+ else:
+ build_use_flags = ""
+ for flags in build_use_flags_list:
+ build_use_flags = build_use_flags + flags + ","
+ build_cpv_list.append("=" + k + "[" + build_use_flags + "]")
+ print build_cpv_list
+ argscmd = []
+ argscmd.append("--buildpkg")
+ argscmd.append("--usepkg")
+ argscmd.append("--oneshot")
+ for build_cpv in build_cpv_list:
+ argscmd.append(build_cpv)
+ print argscmd
+ emerge_main(args=argscmd)
+ sys.exit()
+ queue_id_list = queue_id_list + 1
+
def main():
# Main
get_conf_settings.__init__ # Init settings from the configfile
database = init_sql_backend() # Init the Database
- input_atom = ""
- if check_make_conf(database) is True:
- build_list = database.get_package_to_build(get_conf_settings.SetBuildConfig)
- print build_list
- categories = build_list[0]
- package = build_list[1]
- ebuild_version = build_list[2]
- ebuild_version_useflags = build_list[3]
- ebuild_version_checksum_db = build_list[4]
- use_final_checksum_db = build_list[5]
- cpv = categories + "/" + package + "-" + ebuild_version
- cp = categories + "/" + package
- settings = portage.config(clone=portage.settings)
- portdb = portage.portdbapi(mysettings=settings)
- porttree = portage.portagetree(settings=settings)
- trees = {"/" : {"porttree":porttree}}
- dep_keys = ("DEPEND", "RDEPEND", "PDEPEND")
- pkgdir = os.path.join(settings['PORTDIR'], categories + "/" + package)
- print pkgdir
- print settings['DISTDIR']
- settings['O'] = pkgdir
- if portage.portdb.cpv_exists(cpv) is 1:
- print cpv
- ebuild_fetchmap = portdb.getFetchMap(cpv, useflags=None, mytree=None)
- print ebuild_fetchmap
- myfetchlistdict = portage.FetchlistDict(pkgdir, settings, portdb)
- my_manifest = portage.Manifest(pkgdir, settings['DISTDIR'], fetchlist_dict=myfetchlistdict, manifest1_compat=False, from_scratch=False)
- check_file_in_manifest = my_manifest.findFile(package + "-" + ebuild_version + ".ebuild")
- if not check_file_in_manifest is None:
- print "works"
- ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir+ "/" + package + "-" + ebuild_version + ".ebuild")
- print ebuild_version_checksum_tree[0]
- print ebuild_version_checksum_db
- if ebuild_version_checksum_tree[0] == ebuild_version_checksum_db[0]:
- print "checksum ok"
- try:
- ebuild_auxdb_list = portdb.aux_get(cpv, portage.auxdbkeys)
- except:
- ebuild_auxdb_list = []
- if not ebuild_auxdb_list is []:
- print ebuild_auxdb_list
- iuse_flags, final_use = get_flags(settings, portage.portdb, cpv)
- use_list = ""
- # Fix the use flags so we can hash it
- for i in final_use:
- use_list = use_list + i + " "
- use_final_checksum_tree = hashlib.md5(use_list).hexdigest()
- print use_final_checksum_db
- if use_final_checksum_tree == use_final_checksum_db:
- print ebuild_version_useflags
- ebuild_fetchmap = portdb.getFetchMap(cpv, useflags=use_list, mytree=None)
- print ebuild_fetchmap
- settings.unlock()
- portage.fetch(ebuild_fetchmap, settings, listonly=0, fetchonly=0, locks_in_subdir='.locks', use_locks=1, try_mirrors=1)
- settings.lock()
- print my_manifest.checkCpvHashes(cpv, checkDistfiles=True, onlyDistfiles=False, checkMiscfiles=True)
- print portdb.fetch_check(cpv, useflags=use_list, mysettings=settings, all=False)
- if portage.getmaskingstatus(cpv, settings=settings, portdb=portdb) == []:
- print "works no mask"
- metadata = dict(zip(dep_keys, portdb.aux_get(cpv, dep_keys)))
- dep_str = " ".join(metadata[k] for k in dep_keys)
- success, atoms = portage.dep_check(dep_str, None, settings, use="yes", trees=trees, myroot=settings["ROOT"])
- if not success:
- sys.stderr.write("%s %s\n" % (cpv, atoms))
- else:
- bad_atoms = []
- for atom in atoms:
- if not atom.blocker and atom.cp == input_atom.cp:
- matches = portdb.xmatch("match-all", atom)
- if not portage.dep.match_from_list(input_atom, matches):
- bad_atoms.append(atom)
- if bad_atoms:
- sys.stdout.write("%s\t%s\n" % (cpv, " ".join(bad_atoms)))
+ config_profile = get_conf_settings.SetBuildConfig
+ main_loop(database, config_profile)
if __name__ == "__main__":
main()
diff --git a/buildhost/buildhost/sqlbackend.py b/buildhost/buildhost/sqlbackend.py
index bb4166f..a609be1 100644
--- a/buildhost/buildhost/sqlbackend.py
+++ b/buildhost/buildhost/sqlbackend.py
@@ -21,12 +21,12 @@ class DatabaseConfig(object):
# The user needs:
# DELETE, INSERT, UPDATE, SELECT
# Do NOT change these, set the values in the config file /etc/buildhost/buildhost.conf
- settings['sql_mysql'] = {}
- settings['sql_mysql']['charset'] = 'utf8'
- settings['sql_mysql']['host'] = get_conf_settings.SetSqlHost
- settings['sql_mysql']['db'] = get_conf_settings.SetSqlDB
- settings['sql_mysql']['user'] = get_conf_settings.SetSqlUser
- settings['sql_mysql']['passwd'] = get_conf_settings.SetSqlPasswd
+ settings['sql_pgsql'] = {}
+ # settings['sql_pgsql']['charset'] = 'utf8'
+ settings['sql_pgsql']['host'] = get_conf_settings.SetSqlHost
+ settings['sql_pgsql']['database'] = get_conf_settings.SetSqlDB
+ settings['sql_pgsql']['user'] = get_conf_settings.SetSqlUser
+ settings['sql_pgsql']['password'] = get_conf_settings.SetSqlPasswd
class SQLPackageDatabase(object):
"""we have to store our stuff somewhere
@@ -42,87 +42,605 @@ class SQLPackageDatabase(object):
sql = {}
- sql['SELECT_make_conf_checksum_db'] = """
- SELECT make_conf_checksum
- FROM configs
- WHERE config = %s
- """
- def get_make_conf_checksum_db(self, config_line):
- sql = self.sql['SELECT_make_conf_checksum_db']
- self.cursor.execute(sql, (config_line))
- entries = self.cursor.fetchone()
+ def get_default_config(self, config_profile):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT make_conf_checksum FROM configs WHERE active = 'True' AND id = %s AND updateing = 'False'"
+ cursor.execute(sqlQ, (config_profile,))
+ return cursor.fetchone()
+
+ def get_package_to_build(self, config_profile, queue_id):
+ cursor = self.conn.cursor()
+ print queue_id, config_profile
+ # get what to build
+ sqlQ1 = "SELECT ebuild_id, post_message FROM buildqueue WHERE config = %s AND extract(epoch from (NOW()) - timestamp) > 7200 AND queue_id = %s"
+ # get use flags to use
+ sqlQ2 = "SELECT useflag, enabled FROM ebuildqueuedwithuses WHERE queue_id = %s"
+ # get ebuild version (v) and package id
+ sqlQ3 = 'SELECT ebuild_version, package_id, ebuild_checksum FROM ebuilds WHERE id = %s'
+ # get categoriy and package (c, p)
+ sqlQ4 ='SELECT category, package_name FROM packages WHERE package_id = %s'
+ build_dict = {}
+ build_useflags_dict = {}
+ cursor.execute(sqlQ1, (config_profile, queue_id))
+ entries = cursor.fetchone()
+ print entries
if entries is None:
- return None
+ build_dict['ebuild_id'] = None
+ build_dict['post_message'] = None
+ return build_dict
+ build_dict['queue_id'] = queue_id
+ ebuild_id = entries[0]
+ build_dict['ebuild_id'] = ebuild_id
+ build_dict['post_message'] = entries[1]
+ cursor.execute(sqlQ2, (queue_id,))
+ entries = cursor.fetchall()
+ if entries == []:
+ build_useflags = None
+ else:
+ build_useflags = entries
+ cursor.execute(sqlQ3, (ebuild_id,))
+ entries = cursor.fetchall()[0]
+ build_dict['ebuild_version'] = entries[0]
+ build_dict['package_id'] = entries[1]
+ build_dict['ebuild_checksum'] = entries[2]
+ cursor.execute(sqlQ4, (entries[1],))
+ entries = cursor.fetchall()[0]
+ build_dict['categories'] = entries[0]
+ build_dict['package'] = entries[1]
+ if build_useflags is None:
+ build_dict['build_useflags'] = None
else:
- return entries
+ for x in build_useflags:
+ build_useflags_dict[x[0]] = x[1]
+ build_dict['build_useflags'] = build_useflags_dict
+ print "build_dict", build_dict
+ return build_dict
+
+ def check_revision(self, build_dict, config_profile, ebuild_version_checksum_tree):
+ cursor = self.conn.cursor()
+ sqlQ1 = 'SELECT id FROM ebuilds WHERE ebuild_version = %s AND ebuild_checksum = %s AND package_id = %s'
+ sqlQ2 = 'SELECT queue_id FROM buildqueue WHERE ebuild_id = %s AND config = %s'
+ sqlQ3 = "SELECT useflag FROM ebuildqueuedwithuses WHERE queue_id = %s AND enabled = 'True'"
+ cursor.execute(sqlQ1, (build_dict['ebuild_version'], ebuild_version_checksum_tree, build_dict['package_id']))
+ ebuild_id = cursor.fetchone()[0]
+ print ebuild_id
+ if ebuild_id is None:
+ return None
+ cursor.execute(sqlQ2, (ebuild_id, config_profile))
+ queue_id_list = cursor.fetchall()
+ if queue_id_list is None:
+ return None
+ for queue_id in queue_id_list:
+ cursor.execute(sqlQ3, (queue_id,))
+ entries = cursor.fetchall()
+ if entries == []:
+ build_useflags = None
+ else:
+ build_useflags = entries
+ print build_useflags, build_dict['build_useflags']
+ if build_useflags is build_dict['build_useflags']:
+ print queue_id[0]
+ return queue_id[0]
+ return None
+
+ def get_config_list_all(self):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT id FROM configs'
+ cursor.execute(sqlQ)
+ return cursor.fetchall()
+
+ def update__make_conf(self, configsDict):
+ cursor = self.conn.cursor()
+
+ sqlQ = 'UPDATE configs SET make_conf_checksum = %s, make_conf_text = %s, active = %s, config_error = %s WHERE id = %s'
+ for k, v in configsDict.iteritems():
+ params = [v['make_conf_checksum_tree'], v['make_conf_text'], v['active'], v['config_error'], k]
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def have_package_db(self, categories, package):
+ cursor = self.conn.cursor()
+ sqlQ ='SELECT package_id FROM packages WHERE category = %s AND package_name = %s'
+ params = categories, package
+ cursor.execute(sqlQ, params)
+ return cursor.fetchone()
+
+ def get_categories_db(self):
+ cursor = self.conn.cursor()
+ sqlQ =' SELECT category FROM categories'
+ cursor.execute(sqlQ)
+ return cursor.fetchall()
+
+ def get_categories_checksum_db(self, categories):
+ cursor = self.conn.cursor()
+ sqlQ =' SELECT metadata_xml_checksum FROM categories_meta WHERE category = %s'
+ cursor.execute(sqlQ, (categories,))
+ return cursor.fetchone()
+
+ def add_new_categories_meta_sql(self, categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree):
+ cursor = self.conn.cursor()
+ sqlQ = 'INSERT INTO categories_meta (category, metadata_xml_checksum, metadata_xml_text) VALUES ( %s, %s, %s )'
+ params = categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def update_categories_meta_sql(self, categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree):
+ cursor = self.conn.cursor()
+ sqlQ ='UPDATE categories_meta SET metadata_xml_checksum = %s, metadata_xml_text = %s WHERE category = %s'
+ params = (categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree, categories)
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def add_new_manifest_sql(self, package_id, get_manifest_text, manifest_checksum_tree):
+ cursor = self.conn.cursor()
+ sqlQ = 'INSERT INTO manifest (package_id, manifest, checksum) VALUES ( %s, %s, %s )'
+ params = package_id, get_manifest_text, manifest_checksum_tree
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def add_new_package_metadata(self, package_id, package_metadataDict):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT changelog_checksum FROM packages_meta WHERE package_id = %s'
+ cursor.execute(sqlQ, (package_id,))
+ if cursor.fetchone() is None:
+ sqlQ = 'INSERT INTO packages_meta (package_id, changelog_text, changelog_checksum, metadata_text, metadata_checksum) VALUES ( %s, %s, %s, %s, %s )'
+ for k, v in package_metadataDict.iteritems():
+ params = package_id, v['changelog_text'], v['changelog_checksum'], v[' metadata_xml_text'], v['metadata_xml_checksum']
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def update_new_package_metadata(self, package_id, package_metadataDict):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT changelog_checksum, metadata_checksum FROM packages_meta WHERE package_id = %s'
+ cursor.execute(sqlQ, package_id)
+ entries = cursor.fetchone()
+ changelog_checksum_db = entries[0]
+ metadata_checksum_db = entries[1]
+ for k, v in package_metadataDict.iteritems():
+ if changelog_checksum_db != v['changelog_checksum']:
+ sqlQ = 'UPDATE packages_meta SET changelog_text = %s, changelog_checksum = %s WHERE package_id = %s'
+ params = v['changelog_text'], v['changelog_checksum'], package_id
+ cursor.execute(sqlQ, params)
+ if metadata_checksum_db != v['metadata_xml_checksum']:
+ sqlQ = 'UPDATE packages_meta SET metadata_text = %s, metadata_checksum = %s WHERE package_id = %s'
+ params = v[' metadata_xml_text'], v['metadata_xml_checksum'], package_id
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def get_manifest_db(self, package_id):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT checksum FROM manifest WHERE package_id = %s'
+ cursor.execute(sqlQ, package_id)
+ return cursor.fetchone()
+
+ def update_manifest_sql(self, package_id, get_manifest_text, manifest_checksum_tree):
+ cursor = self.conn.cursor()
+ sqlQ = 'UPDATE manifest SET checksum = %s, manifest = %s WHERE package_id = %s'
+ params = (manifest_checksum_tree, get_manifest_text, package_id)
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
- sql['SELECT_config_active'] = """
- SELECT make_conf_checksum
- FROM configs
- WHERE config = %s AND active = 'y' AND updateing = 'n'
+ def add_new_metadata(self, metadataDict):
+ for k, v in metadataDict.iteritems():
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT updaterestrictions( %s, %s )'
+ params = k, v['restrictions']
+ cursor.execute(sqlQ, params)
+ sqlQ = 'SELECT updatekeywords( %s, %s )'
+ params = k, v['keyword']
+ cursor.execute(sqlQ, params)
+ sqlQ = 'SELECT updateiuse( %s, %s )'
+ params = k, v['iuse']
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ def add_new_package_sql(self, packageDict):
+ #lets have a new cursor for each metod as per best practice
+ cursor = self.conn.cursor()
+ sqlQ="SELECT insert_ebuild( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 'True')"
+ ebuild_id_list = []
+ package_id_list = []
+ for k, v in packageDict.iteritems():
+ params = [v['categories'], v['package'], v['ebuild_version_tree'], v['ebuild_version_revision'], v['ebuild_version_checksum_tree'],
+ v['ebuild_version_text'], v['ebuild_version_metadata_tree'][0], v['ebuild_version_metadata_tree'][1],
+ v['ebuild_version_metadata_tree'][12], v['ebuild_version_metadata_tree'][2], v['ebuild_version_metadata_tree'][3],
+ v['ebuild_version_metadata_tree'][5],v['ebuild_version_metadata_tree'][6], v['ebuild_version_metadata_tree'][7],
+ v['ebuild_version_metadata_tree'][9], v['ebuild_version_metadata_tree'][11],
+ v['ebuild_version_metadata_tree'][13],v['ebuild_version_metadata_tree'][14], v['ebuild_version_metadata_tree'][15],
+ v['ebuild_version_metadata_tree'][16]]
+ cursor.execute(sqlQ, params)
+ mid = cursor.fetchone()
+ mid=mid[0]
+ ebuild_id_list.append(mid[1])
+ package_id_list.append(mid[0])
+ self.conn.commit()
+ # add_new_metadata(metadataDict)
+ return ebuild_id_list, package_id_list
+
+ def add_new_ebuild_sql(packageDict, new_ebuild_list):
+ #lets have a new cursor for each metod as per best practice
+ cursor = self.conn.cursor()
+ sqlQ="SELECT insert_ebuild( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 'True')"
+ ebuild_id_list = []
+ package_id_list = []
+ for k, v in packageDict.iteritems():
+ for x in new_ebuild_list:
+ if x == v['ebuild_version_tree']:
+ params = [v['categories'], v['package'], v['ebuild_version_tree'], v['ebuild_version_revision'], v['ebuild_version_checksum_tree'],
+ v['ebuild_version_text'], v['ebuild_version_metadata_tree'][0], v['ebuild_version_metadata_tree'][1],
+ v['ebuild_version_metadata_tree'][12], v['ebuild_version_metadata_tree'][2], v['ebuild_version_metadata_tree'][3],
+ v['ebuild_version_metadata_tree'][5],v['ebuild_version_metadata_tree'][6], v['ebuild_version_metadata_tree'][7],
+ v['ebuild_version_metadata_tree'][9], v['ebuild_version_metadata_tree'][11],
+ v['ebuild_version_metadata_tree'][13],v['ebuild_version_metadata_tree'][14], v['ebuild_version_metadata_tree'][15],
+ v['ebuild_version_metadata_tree'][16]]
+ cursor.execute(sqlQ, params)
+ mid = cursor.fetchone()
+ mid=mid[0]
+ ebuild_id_list.append(mid[1])
+ package_id_list.append(mid[0])
+ self.conn.commit()
+ # add_new_metadata(metadataDict)
+ return ebuild_id_list, package_id_list
+
+ def update_active_ebuild(self, package_id, ebuild_version_tree):
+ cursor = self.conn.cursor()
+ sqlQ ="UPDATE ebuilds SET active = 'False', timestamp = now() WHERE package_id = %s AND ebuild_version = %s AND active = 'True'"
+ cursor.execute(sqlQ, (package_id, ebuild_version_tree))
+ self.conn.commit()
+
+ sql['SELECT_get_ebuild_id_db'] = """
+ SELECT id
+ FROM packages
+ WHERE category = %s AND ebuild_name = %s AND ebuild_version = %s
"""
- def get_config_active(self, config_line):
- sql = self.sql['SELECT_config_active']
- self.cursor.execute(sql, (config_line))
+ def get_ebuild_id_db(self, categories, package, ebuild_version_tree):
+ sql = self.sql['SELECT_get_ebuild_id_db']
+ self.cursor.execute(sql, (categories, package, ebuild_version_tree))
entries = self.cursor.fetchone()
- if entries is None:
- return None
- else:
- return True
- sql['SELECT_package_build'] = """
- SELECT categories, package, ebuild_version, use_flags, ebuild_version_checksum, use_checksum
- FROM buildqueru
- WHERE config = %s
- ORDER BY index2
- LIMIT 1
- """
- def get_package_to_build(self, config_line):
- sql = self.sql['SELECT_package_build']
- self.cursor.execute(sql, config_line)
+ return entries
+
+ sql['SELECT_get_cpv_from_ebuild_id'] = """
+ SELECT category, ebuild_name, ebuild_version
+ FROM packages
+ WHERE id = %s
+ """
+ def get_cpv_from_ebuild_id(self, ebuild_id):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT package_id FROM ebuild WHERE id = %s'
+ self.cursor.execute(sql, ebuild_id)
entries = self.cursor.fetchone()
- if entries is None:
- return False
- else:
- return entries
+ return entries
+
+ def get_cp_from_package_id(self, package_id):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT ARRAY_TO_STRING(ARRAY[category, package_name] , '/') AS cp FROM packages WHERE package_id = %s"
+ cursor.execute(sqlQ, (package_id,))
+ return cursor.fetchone()
+
+ sql['SELECT_get_keyword_id_db'] = """
+ SELECT id_keyword
+ FROM keywords
+ WHERE ARCH = %s AND stable = %s
+ """
+ def get_keyword_id_db(self, arch, stable):
+ sql = self.sql['SELECT_get_keyword_id_db']
+ self.cursor.execute(sql, (arch, stable))
+ entries = self.cursor.fetchone()
+ return entries
+
+ sql['INSERT_add_new_keywords'] = """
+ INSERT INTO keywordsToEbuild
+ (ebuild_id, id_keyword)
+ VALUES ( %s, %s )
+ """
+ def add_new_keywords(self, ebuild_id, keyword_id):
+ sql = self.sql['INSERT_add_new_keywords']
+ self.cursor.execute(sql, (ebuild_id, keyword_id))
+ self.db.commit()
+ sql['SELECT_have_package_buildqueue'] = """
+ SELECT useflags
+ FROM buildqueue
+ WHERE ebuild_id = %s AND config_id = %s
+ """
+ def have_package_buildqueue(self, ebuild_id, config_id):
+ sql = self.sql['SELECT_have_package_buildqueue']
+ params = (ebuild_id[0], config_id)
+ self.cursor.execute(sql, params)
+ entries = self.cursor.fetchone()
+ return entries
+
+ def add_new_package_buildqueue(self, ebuild_id, config_id, iuse_flags_list, use_enable, message):
+ cursor = self.conn.cursor()
+ sqlQ="SELECT insert_buildqueue( %s, %s, %s, %s, %s )"
+ if not iuse_flags_list:
+ iuse_flags_list=None
+ use_enable=None
+ params = ebuild_id, unicode(config_id), iuse_flags_list, use_enable, message
+ cursor.execute(sqlQ, params)
+ self.conn.commit()
+
+ sql['SELECT_get_package_id'] = """
+ SELECT package_id
+ FROM packages
+ WHERE category = %s AND package_name = %s
+ """
sql['SELECT_get_ebuild_checksum'] = """
SELECT ebuild_checksum
FROM ebuild
- WHERE categories = %s AND package = %s AND ebuild_version = %s
+ WHERE package_id = %s AND ebuild_version = %s
"""
- def get_ebuild_checksum(self, categories, package, ebuild_version_tree):
- sql = self.sql['SELECT_get_ebuild_checksum']
- self.cursor.execute(sql, (categories, package, ebuild_version_tree))
- entries = self.cursor.fetchone()
+ def get_ebuild_checksum(self, package_id, ebuild_version_tree):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT ebuild_checksum FROM ebuilds WHERE package_id = %s AND ebuild_version = %s AND active = TRUE'
+ cursor.execute(sqlQ, (package_id, ebuild_version_tree))
+ entries = cursor.fetchone()
if entries is None:
return None
- else:
- return entries
+ return entries[0]
+
+ sql['UPDATE_update_ebuild_db'] = """
+ UPDATE packages
+ SET ebuild_checksum = %s, ebuild_text = %s,
+ depend = %s, rdepend = %s, pdepend = %s, slot = %s, src_url = %s, homepage = %s, license = %s,
+ description = %s, keywords = %s, inherited = %s, iuse = %s, required_use = %s, provide = %s,
+ eapi = %s, properties = %s, defined_phases = %s
+ WHERE ebuild_id = %s
+ """
+ def update_ebuild_sql(self, ebuild_id, ebuild_version_checksum_tree,
+ ebuild_version_metadata_tree, ebuild_version_text):
+ sql = self.sql['UPDATE_update_ebuild_db']
+ params = (ebuild_version_checksum_tree[0],
+ ebuild_version_text, ebuild_version_metadata_tree[0], ebuild_version_metadata_tree[1],
+ ebuild_version_metadata_tree[12], ebuild_version_metadata_tree[2], ebuild_version_metadata_tree[3],
+ ebuild_version_metadata_tree[5], ebuild_version_metadata_tree[6], ebuild_version_metadata_tree[7],
+ ebuild_version_metadata_tree[9], ebuild_version_metadata_tree[10], ebuild_version_metadata_tree[11],
+ ebuild_version_metadata_tree[13], ebuild_version_metadata_tree[14], ebuild_version_metadata_tree[15],
+ ebuild_version_metadata_tree[16], ebuild_id)
+ self.cursor.execute(sql, params)
+ self.db.commit()
+
+ sql['SELECT_cp_all_db'] = """
+ SELECT CONCAT_WS('/',categories, package)
+ FROM package
+ WHERE active = '1'
+ """
+ def cp_all_db(self):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT package_id FROM packages"
+ cursor.execute(sqlQ)
+ return cursor.fetchall()
+
+ def add_old_package(self, old_package_list):
+ cursor = self.conn.cursor()
+ mark_old_list = []
+ sqlQ = "UPDATE ebuilds SET active = 'FALSE', timestamp = NOW() WHERE package_id = %s AND active = 'TRUE' RETURNING package_id"
+ for old_package in old_package_list:
+ cursor.execute(sqlQ, (old_package[0],))
+ entries = cursor.fetchone()
+ if entries is not None:
+ mark_old_list.append(entries[0])
+ self.conn.commit()
+ return mark_old_list
+
+ sql['UPDATE_add_old_categories'] = """
+ UPDATE categories
+ SET active = '0'
+ WHERE categories = %s
+ """
+ def get_old_categories(self, categories_line):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT package_name FROM packages WHERE category = %s"
+ cursor.execute(sqlQ (categories_line))
+ return cursor.fetchone()
+
+ def del_old_categories(self, real_old_categoriess):
+ cursor = self.conn.cursor()
+ sqlQ = 'DELETE FROM categories categories_meta WHERE category = %s'
+ cursor.execute(sqlQ (real_old_categories))
+ self.conn.commit()
+
+ def add_old_ebuild(self, package_id, old_ebuild_list):
+ cursor = self.conn.cursor()
+ sqlQ1 = "UPDATE ebuilds SET active = 'FALSE' WHERE package_id = %s AND ebuild_version = %s"
+ sqlQ2 = "SELECT id FROM ebuilds WHERE package_id = %s AND ebuild_version = %s AND active = 'TRUE'"
+ sqlQ3 = "SELECT queue_id FROM buildqueue WHERE ebuild_id = %s"
+ sqlQ4 = 'DELETE FROM ebuildqueuedwithuses buildqueue WHERE queue_id = %s'
+ for old_ebuild in old_ebuild_list:
+ cursor.execute(sqlQ2, (package_id, old_ebuild[0]))
+ ebuild_id_list = cursor.fetchall()
+ if ebuild_id_list is not None:
+ for ebuild_id in ebuild_id_list:
+ cursor.execute(sqlQ3, (ebuild_id))
+ queue_id_list = cursor.fetchall()
+ if queue_id_list is not None:
+ for queue_id in queue_id_list:
+ cursor.execute(sqlQ4, (queue_id))
+ cursor.execute(sqlQ1, (package_id, old_ebuild[0]))
+ self.conn.commit()
+
+ sql['SELECT_cp_all_old_db'] = """
+ SELECT CONCAT_WS('/',categories, package)
+ FROM package
+ WHERE active = '0' AND DATEDIFF(NOW(), timestamp) > 60
+ """
+ def cp_all_old_db(self, old_package_id_list):
+ cursor = self.conn.cursor()
+ old_package_list = []
+ for old_package in old_package_id_list:
+ sqlQ = "SELECT package_id FROM ebuilds WHERE package_id = %s AND active = 'FALSE' AND date_part('days', NOW() - timestamp) < 60"
+ cursor.execute(sqlQ, old_package)
+ entries = cursor.fetchone()
+ if entries is None:
+ old_package_list.append(old_package)
+ return old_package_list
+
+ sql['DELETE_del_old_ebuild'] = """
+ DELETE FROM ebuild
+ WHERE categories = %s AND package = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60
+ """
+ def del_old_ebuild(self, ebuild_old_list_db):
+ cursor = self.conn.cursor()
+ sqlQ1 ='SELECT id FROM ebuilds WHERE ebuild_version = %s'
+ sqlQ2 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s'
+ sqlQ3 = 'DELETE FROM qa_problems repoman_problems ebuildbuildwithuses WHERE build_id = %s'
+ sqlQ4 = 'DELETE FROM ebuildhaveskeywords ebuildhavesiuses ebuildhavesrestrictions buildlog WHERE ebuild_id = %s'
+ for ebuild_version in ebuild_old_list_db:
+ cursor.execute(sqlQ1, (ebuild_version))
+ ebuild_id_list = cursor.fetchall()
+ for ebuild_id in ebuild_id_list:
+ cursor.execute(sqlQ2, ebuild_id)
+ build_id_list = cursor.fetchall()
+ for build_id in build_id_list:
+ cursor.execute(sqlQ3, build_id)
+ cursor.execute(sqlQ4, ebuild_id)
+ self.conn.commit()
+
+ sql['DELETE_del_old_package'] = """
+ DELETE FROM package
+ WHERE categories = %s AND package = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60
+ """
+ def del_old_package(self, package_id_list):
+ cursor = self.conn.cursor()
+ sqlQ1 = 'SELECT id FROM ebuilds WHERE package_id = %s'
+ sqlQ2 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s'
+ sqlQ3 = 'DELETE FROM qa_problems, repoman_problems, ebuildbuildwithuses WHERE build_id = %s'
+ sqlQ4 = 'DELETE FROM ebuildhaveskeywords, ebuildhavesiuses, ebuildhavesrestrictions, buildlog WHERE ebuild_id = %s'
+ sqlQ5 = 'DELETE FROM ebuilds, manifest, package_meta, packages WHERE package_id = %s'
+ for package_id in package_id_list:
+ cursor.execute(sqlQ1, package_id)
+ ebuild_id_list = cursor.fetchall()
+ for ebuild_id in ebuild_id_list:
+ cursor.execute(sqlQ2, ebuild_id)
+ build_id_list = cursor.fetchall()
+ for build_id in build_id_list:
+ cursor.execute(sqlQ3, build_id)
+ cursor.execute(sqlQ4, ebuild_id)
+ cursor.execute(sqlQ5, package_id)
+ self.conn.commit()
+
+ sql['DELETE_del_old_categories'] = """
+ DELETE FROM categories
+ WHERE categories = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60
+ """
+ def del_old_package(self, categories):
+ sql = self.sql['DELETE_del_old_categories']
+ self.cursor.execute(sql, (categories))
+ self.db.commit()
+
+ def cp_list_db(self, package_id):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT ebuild_version FROM ebuilds WHERE active = 'TRUE' AND package_id = %s"
+ cursor.execute(sqlQ, (package_id))
+ return cursor.fetchall()
+
+ def cp_list_old_db(self, package_id):
+ cursor = self.conn.cursor()
+ sqlQ ="SELECT id, ebuild_version FROM ebuilds WHERE active = 'FALSE' AND package_id = %s AND date_part('days', NOW() - timestamp) > 60"
+ cursor.execute(sqlQ, package_id)
+ return cursor.fetchall()
+
+ def add_qa_repoman(self, ebuild_id_list, qa_error, packageDict, config_id):
+ ebuild_i = 0
+ cursor = self.conn.cursor()
+ for k, v in packageDict.iteritems():
+ ebuild_id = ebuild_id_list[ebuild_i]
+ sqlQ = 'INSERT INTO buildlog (ebuild_id, config, error_summary, timestamp ) VALUES ( %s, %s, %s, now() ) RETURNING build_id'
+ if v['ebuild_error'] != [] or qa_error != []:
+ if v['ebuild_error'] != [] or qa_error == []:
+ summary = "Repoman"
+ elif v['ebuild_error'] == [] or qa_error != []:
+ summary = "QA"
+ else:
+ summary = "QA:Repoman"
+ params = (ebuild_id, config_id, summary)
+ cursor.execute(sqlQ, params)
+ build_id = cursor.fetchone()
+ if v['ebuild_error'] != []:
+ sqlQ = 'INSERT INTO repoman_problems (problem, build_id ) VALUES ( %s, %s )'
+ for x in v['ebuild_error']:
+ params = (x, build_id)
+ cursor.execute(sqlQ, params)
+ if qa_error != []:
+ sqlQ = 'INSERT INTO qa_problems (problem, build_id ) VALUES ( %s, %s )'
+ for x in qa_error:
+ params = (x, build_id)
+ cursor.execute(sqlQ, params)
+ ebuild_i = ebuild_i +1
+ self.conn.commit()
+
+ sql['SELECT_qa_repoman'] = """
+ SELECT categories, package, ebuild_version, qa, repoman, config, hosts
+ FROM buildlog
+ WHERE ebuild = %sAND build = '' AND config_id = %s
+ """
+ def get_qa_repoman(self, ebuild_id, config_id):
+ sql = self.sql['SELECT_qa_repoman']
+ params = (ebuild_id, config_id)
+ self.cursor.execute(sql, params)
+ entries = self.cursor.fetchall()
+ return entries
- def commit(self):
- """Run the commit function for the database store"""
+ sql['DELETE_del_qa_repoman'] = """
+ DELETE FROM buildlog
+ WHERE ebuild_id AND build = '' AND config_id = %s
+ """
+ def del_qa_repoman(self, ebuild_id, config_id):
+ sql = self.sql['DELETE_del_qa_repoman']
+ self.cursor.execute(sql, (ebuild_id, config_id))
self.db.commit()
-class MySQLPackageDB(SQLPackageDatabase):
+ sql['UPDATE_update_qa_repoman'] = """
+ UPDATE buildlog
+ SET qa = %s, repoman = %s
+ WHERE ebuild_id = %s AND build = '' AND config_id = %s
+ """
+ def update_qa_repoman(self, ebuild_id, qa_error, repoman_error, config_id):
+ sql = self.sql['UPDATE_update_qa_repoman']
+ self.cursor.execute(sql, (qa_error, repoman_error, ebuild_id, config_id))
+ self.db.commit()
+
+ def get_arch_db(self):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT keyword FROM keywords WHERE keyword = %s'
+ cursor.execute(sqlQ, ('ppc',))
+ return cursor.fetchone()
+
+ def add_new_arch_db(self, arch_list):
+ cursor = self.conn.cursor()
+ sqlQ = 'INSERT INTO keywords (keyword) VALUES ( %s )'
+ for arch in arch_list:
+ cursor.execute(sqlQ, (arch,))
+ self.conn.commit()
+
+ sql['INSERT_add_new_restriction_db'] = """
+ INSERT INTO ebuildHavesRestrictions
+ (ebuild_id, restriction)
+ VALUES ( %s, %s )
+ """
+
+ def closeconnection(self):
+ self.conn.close()
+
+class PgSQLPackageDB(SQLPackageDatabase):
"""override for MySQL backend"""
syntax_placeholder = "%s"
- syntax_autoincrement = 'AUTO_INCREMENT'
-
+
def __init__(self, config=None):
# Do not complain about correct usage of ** magic
# pylint: disable-msg=W0142
SQLPackageDatabase.__init__(self)
- if config is None or 'db' not in config:
+ if config is None or 'database' not in config:
print "No configuration available!"
sys.exit(1)
try:
- import MySQLdb
+ import psycopg2
except ImportError:
- print "Please install a recent version of MySQLdb for Python"
+ print "Please install a recent version of dev-python/psycopg for Python"
sys.exit(1)
- self.db = MySQLdb.connect(**config)
- self.cursor = self.db.cursor()
+ self.conn = psycopg2.connect(**config)
+
reply other threads:[~2011-04-01 16:43 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eb3545e879aa0e58faec627167e5ec507423ba27.zorry@gentoo \
--to=zorry@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox