commit: 2427bfa1c92a2c5d8450b7a7c08120fa9aee73be
Author: Pavlos Ratis <dastergon <AT> gentoo <DOT> org>
AuthorDate: Fri May 30 19:25:59 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Fri May 30 19:25:59 2014 +0000
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=2427bfa1
implement fetchseed action and use sslfetch to download seeds
---
gkeys/actions.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
gkeys/config.py | 3 +++
2 files changed, 72 insertions(+), 4 deletions(-)
diff --git a/gkeys/actions.py b/gkeys/actions.py
index 1ecf4d3..5c4d934 100644
--- a/gkeys/actions.py
+++ b/gkeys/actions.py
@@ -13,14 +13,15 @@
from __future__ import print_function
import os
+import re
-
-from gkeys.seedhandler import SeedHandler
+from gkeys.config import SEED_TYPES
from gkeys.lib import GkeysGPG
from gkeys.seed import Seeds
+from gkeys.seedhandler import SeedHandler
+from sslfetch.connections import Connector
-
-Available_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed',
+Available_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed',
'fetchseed',
'listseedfiles', 'listkey', 'addkey', 'removekey', 'movekey',
'installed']
@@ -53,6 +54,62 @@ class Actions(object):
return seeds
+ def fetch_seeds(self, seeds):
+ # setup the ssl-fetch ouptut map
+ connector_output = {
+ 'info': self.logger.info,
+ 'error': self.logger.error,
+ 'kwargs-info': {},
+ 'kwargs-error': {},
+ }
+ urls = []
+ messages = []
+ urls.append(self.config.get_key('developers.seeds'))
+ urls.append(self.config.get_key('release.seeds'))
+ if not re.search('^(http|https)://', urls[0]) and not
re.search('^(http|https)://', urls[1]):
+ urls = []
+ urls.append(self.config['seedurls']['developers.seeds'])
+ urls.append(self.config['seedurls']['release.seeds'])
+ fetcher = Connector(connector_output, None, "Gentoo Keys")
+ for url in zip(urls, SEED_TYPES):
+ timestamp_path = self.config['%s-timestamp' % url[1]]
+ success, seeds, timestamp = fetcher.fetch_content(url[0],
timestamp_path)
+ if not timestamp:
+ messages += ["%s seed file is already up to date." % url[1]]
+ else:
+ with open(timestamp_path, 'w+') as timestampfile:
+ timestampfile.write(str(timestamp))
+ timestampfile.write("\n")
+ if success and timestamp:
+ self.logger.debug("MAIN: _action_fetchseed; got results.")
+ filename = self.config['%s-seedfile' % url[1]] + '.new'
+ with open(filename, 'w') as seedfile:
+ seedfile.write(seeds)
+ filename = self.config['%s-seedfile' % url[1]]
+ old = filename + '.old'
+ try:
+ self.logger.info("Backing up existing file...")
+ if os.path.exists(old):
+ self.logger.debug(
+ "MAIN: _action_fetch_seeds; Removing 'old'
seed file: %s"
+ % old)
+ os.unlink(old)
+ if os.path.exists(filename):
+ self.logger.debug(
+ "MAIN: _action_fetch_seeds; Renaming current
seed file to: "
+ "%s" % old)
+ os.rename(filename, old)
+ self.logger.debug("MAIN: _action_fetch_seeds; Renaming
'.new' seed file to %s"
+ % filename)
+ os.rename(filename + '.new', filename)
+ messages += ["Successfully fetched %s seed files." %
url[1]]
+ except IOError:
+ raise
+ else:
+ messages += ["Failed to fetch %s seed file." % url[1]]
+ return messages
+
+
def listseed(self, args):
'''Action listseed method'''
handler = SeedHandler(self.logger)
@@ -69,6 +126,14 @@ class Actions(object):
return None
+ def fetchseed(self, args):
+ '''Action fetchseed method'''
+ handler = SeedHandler(self.logger)
+ messages = self.fetch_seeds(args.seeds)
+ self.logger.debug("ACTIONS: fetchseed; args: %s" % str(args))
+ return messages
+
+
def addseed(self, args):
'''Action addseed method'''
handler = SeedHandler(self.logger)
diff --git a/gkeys/config.py b/gkeys/config.py
index 6941368..161315e 100644
--- a/gkeys/config.py
+++ b/gkeys/config.py
@@ -38,6 +38,7 @@ EPREFIX = "@GENTOO_PORTAGE_EPREFIX@"
if "GENTOO_PORTAGE_EPREFIX" in EPREFIX:
EPREFIX = ''
+SEED_TYPES = ['dev', 'release']
class GKeysConfig(GPGConfig):
@@ -72,6 +73,8 @@ class GKeysConfig(GPGConfig):
self.defaults['seedsdir'] = '%(keysdir)s/seeds'
self.defaults['release-seedfile'] = '%(seedsdir)s/release.seeds'
self.defaults['dev-seedfile'] = '%(seedsdir)s/developer.seeds'
+ self.defaults['dev-timestamp'] =
'%(keysdir)s/.developer_seeds_timestamp'
+ self.defaults['release-timestamp'] =
'%(keysdir)s/.release_seeds_timestamp'
self.defaults['keyserver'] = 'pool.sks-keyservers.net'
self.defaults['seedurls'] = {
'release.seeds':
'https://dev.gentoo.org/~dolsen/gkey-seeds/release.seeds',