From: "Magnus Granberg" <zorry@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] dev/zorry:master commit in: gobs/bin/, gobs/pym/
Date: Sun, 24 Apr 2011 22:13:08 +0000 (UTC) [thread overview]
Message-ID: <37d14f0a9ca1a7e0cccb485620322edd0e5e9967.zorry@gentoo> (raw)
commit: 37d14f0a9ca1a7e0cccb485620322edd0e5e9967
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 24 22:12:29 2011 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Apr 24 22:12:29 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=dev/zorry.git;a=commit;h=37d14f0a
fix the delet old packages part
---
gobs/bin/gobs_updatedb | 4 +-
gobs/pym/package.py | 34 +-
gobs/pym/pgsqlbackend.py | 760 ++++++++++++++++++++++++----------------------
3 files changed, 411 insertions(+), 387 deletions(-)
diff --git a/gobs/bin/gobs_updatedb b/gobs/bin/gobs_updatedb
index a6afa17..582efa6 100755
--- a/gobs/bin/gobs_updatedb
+++ b/gobs/bin/gobs_updatedb
@@ -67,12 +67,12 @@ def update_cpv_db(mysettings, database, gobs_settings_dict):
# Check if we don't have the cp in the package table
package_id = database.have_package_db(categories, package)
if package_id is None:
- # Add new package with ebuilds
+ # Add new package with ebuilds
package_id = init_package.add_new_package_db(categories, package)
package_id_list_tree.append(package_id)
# Ceck if we have the cp in the package table
elif package_id is not None:
- # Update the packages with ebuilds
+ # Update the packages with ebuilds
init_package.update_package_db(categories, package, package_id)
package_id_list_tree.append(package_id)
# Update the metadata for categories
diff --git a/gobs/pym/package.py b/gobs/pym/package.py
index 1180bd2..ed8d70b 100644
--- a/gobs/pym/package.py
+++ b/gobs/pym/package.py
@@ -80,7 +80,7 @@ class gobs_package(object):
ebuild_version_text = self.init_text.get_ebuild_text(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild")
init_repoman = gobs_repoman(self.mysettings, self.myportdb, self.database)
repoman_error = init_repoman.check_repoman(categories, package, ebuild_version_tree, config_id)
- ebuild_version_metadata_tree = get_ebuild_metadata(ebuild_line)
+ ebuild_version_metadata_tree = self.get_ebuild_metadata(ebuild_line)
# if there some error to get the metadata we add rubish to the
# ebuild_version_metadata_tree and set ebuild_version_checksum_tree to 0
# so it can be updated next time we update the db
@@ -105,14 +105,14 @@ class gobs_package(object):
for k, v in packageDict.iteritems():
attDict = {}
metadata_restrictions = []
- for i in v['ebuild_version_metadata_tree'][4].split():
- metadata_restrictions.append(i)
+ for i in v['ebuild_version_metadata_tree'][4].split():
+ metadata_restrictions.append(i)
metadata_keyword = []
- for i in v['ebuild_version_metadata_tree'][8].split():
- metadata_keyword.append(i)
+ for i in v['ebuild_version_metadata_tree'][8].split():
+ metadata_keyword.append(i)
metadata_iuse = []
- for i in v['ebuild_version_metadata_tree'][10].split():
- metadata_iuse.append(i)
+ for i in v['ebuild_version_metadata_tree'][10].split():
+ metadata_iuse.append(i)
attDict['restrictions'] = metadata_restrictions
attDict['keyword'] = metadata_keyword
attDict['iuse'] = metadata_iuse
@@ -174,7 +174,7 @@ class gobs_package(object):
pkgdir = self.mysettings['PORTDIR'] + "/" + categories + "/" + package # Get PORTDIR + cp
categories_dir = self.mysettings['PORTDIR'] + "/" + categories + "/"
# Get the ebuild list for cp
- ebuild_list_tree = self.portdb.cp_list((categories + "/" + package), use_cache=1, mytree=None)
+ ebuild_list_tree = self.myportdb.cp_list((categories + "/" + package), use_cache=1, mytree=None)
config_cpv_listDict = self.config_match_ebuild(categories, package)
config_id = self.database.get_default_config()[0]
packageDict ={}
@@ -186,13 +186,9 @@ class gobs_package(object):
ebuild_id_list = return_id[0]
package_id_list = return_id[1]
package_id = package_id_list[0]
- # Add the manifest file to db
- manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0]
- get_manifest_text = self.init_text.get_file_text(pkgdir + "/Manifest")
- database.add_new_manifest_sql(package_id, get_manifest_text, manifest_checksum_tree)
# Add metadataDict to db
metadataDict = self.get_metadataDict(packageDict, ebuild_id_list)
- database.add_new_metadata(metadataDict)
+ self.database.add_new_metadata(metadataDict)
# Add any qa and repoman erro for the ebuild to buildlog
qa_error = []
init_manifest = gobs_manifest(self.mysettings)
@@ -206,7 +202,11 @@ class gobs_package(object):
# Add some checksum on some files
package_metadataDict = self.get_package_metadataDict(pkgdir, package)
self.database.add_new_package_metadata(package_id, package_metadataDict)
- return package_id
+ # Add the manifest file to db
+ manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0]
+ get_manifest_text = self.init_text.get_file_text(pkgdir + "/Manifest")
+ self.database.add_new_manifest_sql(package_id, get_manifest_text, manifest_checksum_tree)
+ return package_id
def update_package_db(self, categories, package, package_id):
# Update the categories and package with new info
@@ -214,7 +214,7 @@ class gobs_package(object):
# Get the checksum from the file in portage tree
manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0]
# Get the checksum from the db in package table
- manifest_checksum_db = self.database.get_manifest_db(package_id)[0]
+ manifest_checksum_db = self.database.get_manifest_db(package_id)
# if we have the same checksum return else update the package
ebuild_list_tree = self.myportdb.cp_list((categories + "/" + package), use_cache=1, mytree=None)
if manifest_checksum_tree != manifest_checksum_db:
@@ -264,5 +264,5 @@ class gobs_package(object):
# Add the ebuild to the buildqueru table if needed
self.add_new_ebuild_buildquery_db(ebuild_id_list, packageDict, config_cpv_listDict)
# Mark or remove any old ebuilds
- init_old_cpv = gobs_old_cpv(self.database, self.myportdb)
- init_old_cpv.mark_old_ebuild_db(categories, package, package_id, sorted(ebuild_list_tree))
+ init_old_cpv = gobs_old_cpv(self.database, self.myportdb, self.mysettings)
+ init_old_cpv.mark_old_ebuild_db(categories, package, package_id)
diff --git a/gobs/pym/pgsqlbackend.py b/gobs/pym/pgsqlbackend.py
index 27fdf57..d89feec 100644
--- a/gobs/pym/pgsqlbackend.py
+++ b/gobs/pym/pgsqlbackend.py
@@ -1,377 +1,401 @@
class SQLPackageDatabase(object):
- """we have to store our stuff somewhere
-
- subclass and redefine init to provide
- at least self.cursor"""
-
- # These are set by subclasses
- db = None
- cursor = None
- syntax_placeholder = None
- syntax_autoincrement = None
-
- sql = {}
-
- def get_default_config(self):
- cursor = self.conn.cursor()
- sqlQ = 'SELECT id FROM configs WHERE default_config = True'
- cursor.execute(sqlQ)
- return cursor.fetchone()
+ """we have to store our stuff somewhere
+ subclass and redefine init to provide
+ at least self.cursor"""
+
+ # These are set by subclasses
+ db = None
+ cursor = None
+ syntax_placeholder = None
+ syntax_autoincrement = None
+ sql = {}
+
+ def get_default_config(self):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT id FROM configs WHERE default_config = True'
+ cursor.execute(sqlQ)
+ return cursor.fetchone()
- def get_config_list(self):
- cursor = self.conn.cursor()
- sqlQ = 'SELECT id FROM configs WHERE default_config = False AND active = True'
- cursor.execute(sqlQ)
- return cursor.fetchall()
-
- 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()
-
- 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()
-
- 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()
- 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()
+ def get_config_list(self):
+ cursor = self.conn.cursor()
+ sqlQ = 'SELECT id FROM configs WHERE default_config = False AND active = True'
+ cursor.execute(sqlQ)
+ return cursor.fetchall()
+
+ 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()
+ if entries is None:
+ changelog_checksum_db = None
+ metadata_checksum_db = None
+ else:
+ 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,))
+ manifest_checksum = cursor.fetchone()
+ if manifest_checksum is None:
+ return None
+ return manifest_checksum[0]
+
+ 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()
+
+ 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()
+
+ 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()
+ 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()
- 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()
-
- 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
- return entries[0]
-
- 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
+ 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()
+
+ 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
+ return entries[0]
+
+ 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
- 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()
-
- 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
- def cp_all_db(self):
- cursor = self.conn.cursor()
- sqlQ = "SELECT package_id FROM packages"
- cursor.execute(sqlQ)
- return cursor.fetchall()
-
- def del_old_ebuild(self, ebuild_old_list_db):
- cursor = self.conn.cursor()
- sqlQ2 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s'
- sqlQ3 = 'DELETE FROM qa_problems repoman_problems WHERE build_id = %s'
- sqlQ4 = 'DELETE FROM ebuildhaveskeywords ebuildhavesiuses WHERE ebuild_id = %s'
- sqlQ5 = 'DELETE FROM ebuildbuildwithuses WHERE build_id = %s'
- sqlQ6 = 'DELETE FROM ebuildhavesrestrictions buildlog WHERE ebuild_id = %s'
- for del_ebuild_old in ebuild_old_list_db:
- cursor.execute(sqlQ2, (del_ebuild_old[0],))
- build_id_list = cursor.fetchall()
- for build_id in build_id_list:
- cursor.execute(sqlQ3, (build_id,))
- cursor.execute(sqlQ5, (build_id,))
- cursor.execute(sqlQ4, (del_ebuild_old[0],))
- cursor.execute(sqlQ6, (del_ebuild_old[0],))
- self.conn.commit()
-
- 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()
-
- 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()
-
- 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 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()
+ sqlQ1 = 'DELETE FROM categories_meta WHERE category = %s'
+ sqlQ2 = 'DELETE FROM categories categories_meta WHERE category = %s'
+ cursor.execute(sqlQ1 (real_old_categories))
+ cursor.execute(sqlQ2 (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 WHERE queue_id = %s'
+ sqlQ5 = 'DELETE FROM 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(sqlQ5, (queue_id))
+ cursor.execute(sqlQ1, (package_id, old_ebuild[0]))
+ self.conn.commit()
+
+ 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
+
+ def cp_all_db(self):
+ cursor = self.conn.cursor()
+ sqlQ = "SELECT package_id FROM packages"
+ cursor.execute(sqlQ)
+ return cursor.fetchall()
+
+ def del_old_ebuild(self, ebuild_old_list_db):
+ cursor = self.conn.cursor()
+ sqlQ1 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s'
+ sqlQ2 = 'DELETE FROM qa_problems WHERE build_id = %s'
+ sqlQ3 = 'DELETE FROM repoman_problems WHERE build_id = %s'
+ sqlQ4 = 'DELETE FROM ebuildbuildwithuses WHERE build_id = %s'
+ sqlQ5 = 'DELETE FROM ebuildhaveskeywords WHERE ebuild_id = %s'
+ sqlQ6 = 'DELETE FROM ebuildhavesiuses WHERE ebuild_id = %s'
+ sqlQ7 = 'DELETE FROM ebuildhavesrestrictions WHERE ebuild_id = %s'
+ sqlQ8 = 'DELETE FROM buildlog WHERE ebuild_id = %s'
+ sqlQ9 = 'SELECT queue_id FROM buildqueue WHERE ebuild_id = %s'
+ sqlQ10 = 'DELETE FROM ebuildqueuedwithuses WHERE queue_id = %s'
+ sqlQ11 = 'DELETE FROM buildqueue WHERE ebuild_id = %s'
+ sqlQ12 = 'DELETE FROM ebuilds WHERE id = %s'
+ for ebuild_id in ebuild_old_list_db:
+ cursor.execute(sqlQ1, (ebuild_id[0],))
+ build_id_list = cursor.fetchall()
+ for build_id in build_id_list:
+ cursor.execute(sqlQ2, (build_id,))
+ cursor.execute(sqlQ3, (build_id,))
+ cursor.execute(sqlQ4, (build_id,))
+ cursor.execute(sqlQ9, (ebuild_id[0],))
+ queue_id_list = cursor.fetchall()
+ for queue_id in queue_id_list:
+ cursor.execute(sqlQ10, (queue_id,))
+ cursor.execute(sqlQ5, (ebuild_id[0],))
+ cursor.execute(sqlQ6, (ebuild_id[0],))
+ cursor.execute(sqlQ7, (ebuild_id[0],))
+ cursor.execute(sqlQ8, (ebuild_id[0],))
+ cursor.execute(sqlQ11, (ebuild_id[0],))
+ cursor.execute(sqlQ12, (ebuild_id[0],))
+ self.conn.commit()
+
+ def del_old_package(self, package_id_list):
+ cursor = self.conn.cursor()
+ sqlQ1 = 'SELECT id FROM ebuilds WHERE package_id = %s'
+ sqlQ2 = 'DELETE FROM ebuilds WHERE package_id = %s'
+ sqlQ3 = 'DELETE FROM manifest WHERE package_id = %s'
+ sqlQ4 = 'DELETE FROM packages_meta WHERE package_id = %s'
+ sqlQ5 = 'DELETE FROM packages WHERE package_id = %s'
+ for package_id in package_id_list:
+ cursor.execute(sqlQ1, package_id)
+ ebuild_id_list = cursor.fetchall()
+ self.del_old_ebuild(ebuild_id_list)
+ cursor.execute(sqlQ2, (package_id,))
+ cursor.execute(sqlQ3, (package_id,))
+ cursor.execute(sqlQ4, (package_id,))
+ cursor.execute(sqlQ5, (package_id,))
+ self.conn.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, hash ) VALUES ( %s, %s, %s, now(), '0' ) 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()
+
+ 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()
-
- def closeconnection(self):
- self.conn.close()
+ 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()
+
+ def closeconnection(self):
+ self.conn.close()
class PgSQLPackageDB(SQLPackageDatabase):
"""override for MySQL backend"""
next reply other threads:[~2011-04-24 22:13 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-24 22:13 Magnus Granberg [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-12-27 23:09 [gentoo-commits] dev/zorry:master commit in: gobs/bin/, gobs/pym/ Magnus Granberg
2012-12-23 17:09 Magnus Granberg
2012-12-22 2:59 Magnus Granberg
2012-12-21 1:44 Magnus Granberg
2012-12-19 2:11 Magnus Granberg
2012-12-07 14:07 Magnus Granberg
2012-12-05 23:56 Magnus Granberg
2012-11-29 22:22 Magnus Granberg
2012-07-17 0:07 Magnus Granberg
2012-06-26 22:10 Magnus Granberg
2012-05-13 17:59 Magnus Granberg
2012-05-09 23:12 Magnus Granberg
2012-05-06 10:41 Magnus Granberg
2012-05-04 22:32 Magnus Granberg
2012-05-01 1:12 Magnus Granberg
2012-04-30 12:08 Magnus Granberg
2012-04-29 14:43 Magnus Granberg
2012-04-29 13:16 Magnus Granberg
2012-04-29 13:13 Magnus Granberg
2012-04-28 16:01 Magnus Granberg
2012-04-27 22:22 Magnus Granberg
2012-04-27 20:59 Magnus Granberg
2011-11-01 21:14 Magnus Granberg
2011-10-29 0:14 Magnus Granberg
2011-09-28 10:53 Magnus Granberg
2011-09-28 0:33 Magnus Granberg
2011-09-26 23:25 Magnus Granberg
2011-08-31 1:46 Magnus Granberg
2011-08-30 23:02 Magnus Granberg
2011-07-31 13:43 Magnus Granberg
2011-04-23 14:23 Magnus Granberg
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=37d14f0a9ca1a7e0cccb485620322edd0e5e9967.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