public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
Date: Sun, 10 Jun 2012 17:51:00 +0000 (UTC)	[thread overview]
Message-ID: <1339348226.1885cf27372ec2f34964d3323c2ffdb0322c6123.bacher09@gentoo> (raw)

commit:     1885cf27372ec2f34964d3323c2ffdb0322c6123
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Jun 10 17:10:26 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Jun 10 17:10:26 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=1885cf27

Add support for command modificators

---
 .../packages/management/commands/scanpackages.py   |   41 +++++++++--
 gpackages/apps/packages/scan.py                    |   73 +++++++++++++++++---
 2 files changed, 95 insertions(+), 19 deletions(-)

diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 8f47848..a1d5cd6 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -1,5 +1,4 @@
 from django.core.management.base import BaseCommand, CommandError
-import datetime
 import logging
 from packages.scan import Scanner
 from optparse import make_option
@@ -9,13 +8,39 @@ from optparse import make_option
 
 
 class Command(BaseCommand):
-    args = ''
+    option_list = BaseCommand.option_list + (
+        make_option('--force-update',
+            action='store_true',
+            dest='force_update',
+            default=False,
+            help='Force updating'),
+        make_option('--not-scan-herds',
+            action='store_false',
+            dest='scan_herds',
+            default=True,
+            help='Force updating'),
+        make_option('-a', '--all',
+            action='store_true',
+            dest='scan_all',
+            default=False,
+            help='Force updating'),
+        make_option('--not-show-time',
+            action='store_false',
+            dest='show_time',
+            default=True,
+            help='Show time of scanning'),
+        #make_option('-r', '--repo',
+            #action='store',
+            #type="string",
+            #dest='reponame',
+            #help='Scan only this repository'),
+        )
+
+    args = '<repository names ...>'
     help = 'Will scan package tree and update info about it in database'
     def handle(self, *args, **options):
         verbosity = int(options['verbosity'])
-        st = datetime.datetime.now()
-        #scan.scanpackages()
-        #scan.scan_all_repos()
-        Scanner(verbosity = verbosity).scan_all_repos()
-        self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
-        self.stdout.write("\n")
+        Scanner(repos = args, **options).scan()
+        #Scanner(verbosity = verbosity).scan_all_repos()
+        #self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
+        #self.stdout.write("\n")

diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 37ba159..411500f 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -1,3 +1,4 @@
+from datetime import datetime
 from packages import models
 import sys
 from django.db import IntegrityError
@@ -86,9 +87,15 @@ def _get_items(items_list, Model, field_name, cache_var):
     return items_objects
     
 
+def toint(val, defval):
+    try:
+        return int(val)
+    except ValueError:
+        return defval
+
 
 class Scanner(object):
-    def __init__(self, verbosity = 1):
+    def __init__(self, **kwargs):
         # maintainers_cache: maintainer.email as key, and maintainer object as
         # value
         self.maintainers_cache = {}
@@ -106,7 +113,37 @@ class Scanner(object):
 
         self.arches_cache = {}
 
-        self.verbosity = int(verbosity)
+        self.update_options(**kwargs)
+        self.reset_timer()
+
+    def reset_timer(self):
+        self.start_time = datetime.now()
+
+    def update_options(self, **kwargs):
+        self.verbosity = toint(kwargs.get('verbosity',1),1)
+        self.traceback = bool(kwargs.get('traceback',False))
+        self.s_all = bool(kwargs.get('scan_all', False))
+        self.is_show_time = bool(kwargs.get('show_time', True))
+        self.is_scan_herds = bool(kwargs.get('scan_herds', True))
+        #self.force_update = bool(kwargs.get('force_update', False))
+        self.scan_repos_name = tuple(kwargs.get('repos',[]))
+
+    def show_time(self):
+        end = datetime.now()
+        t_time = end - self.start_time
+        self.output("Scanning time is: %s secconds.\n", t_time.total_seconds())
+
+    def scan(self):
+        if self.is_scan_herds:
+            self.scan_herds()
+
+        if self.s_all:
+            self.scan_all_repos()
+        else:
+            self.scan_repos_by_name(self.scan_repos_name)
+
+        if self.is_show_time:
+            self.show_time()
 
     def write(self, what, verbosity = 1):
         if verbosity <= self.verbosity:
@@ -177,6 +214,7 @@ class Scanner(object):
             
 
     def scan_herds(self):
+        self.write('Scaning herds\n', 3)
         existent_herds = self.get_existent_herds()
         herds_dict = self.herds_object.get_herds_indict()
         herds_objects_dict = {}
@@ -238,20 +276,33 @@ class Scanner(object):
             self.load_maintainers_to_cache()
         return self.maintainers_cache
 
-    def scan_all_repos(self, scan_herds = True):
+    def scan_all_repos(self):
         #cache_dict = anydbm.open('cache.db','c')
-        if scan_herds:
-            self.write('Scaning herds\n', 3)
-            self.scan_herds()
 
         for repo in portage.iter_trees():
-            self.output("Scaning repository '%s'\n", repo.name, 3)
+            self.scan_repo(repo)
+        #cache_dict.close()
 
-            repo_obj, repo_created = models.RepositoryModel.objects \
-                .get_or_create(name = repo.name)
+    def scan_repos_by_name(self, repo_names):
+        for repo_name in repo_names:
+            self.scan_repo_by_name(repo_name)
 
-            self.scanpackages(repo, repo_obj)
-        #cache_dict.close()
+    def scan_repo_by_name(self, repo_name):
+        try:
+            repo = portage.get_tree_by_name(repo_name)
+        except ValueError:
+            self.output("Bad repository name '%s'", repo.name, 1)
+        else:
+            self.scan_repo(repo)
+
+    def scan_repo(self, repo):
+        self.output("Scaning repository '%s'\n", repo.name, 3)
+
+        repo_obj, repo_created = models.RepositoryModel \
+            .objects.get_or_create(name = repo.name)
+
+        self.scanpackages(repo, repo_obj)
+        
 
     def get_licenses_objects(self, ebuild):
         licenses = ebuild.licenses



             reply	other threads:[~2012-06-10 17:51 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-10 17:51 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-26 23:00 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/ Slava Bacherikov
2012-08-22 17:55 Slava Bacherikov
2012-07-18 23:03 Slava Bacherikov
2012-07-17  9:42 Slava Bacherikov
2012-07-06 23:09 Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov
2012-06-19  0:12 Slava Bacherikov
2012-06-18 23:00 Slava Bacherikov
2012-06-13 22:15 Slava Bacherikov
2012-06-10 22:23 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-03 16:19 Slava Bacherikov
2012-06-03 13:19 Slava Bacherikov
2012-06-01 21:28 Slava Bacherikov

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=1339348226.1885cf27372ec2f34964d3323c2ffdb0322c6123.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --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