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: Tue, 19 Jun 2012 00:12:05 +0000 (UTC)	[thread overview]
Message-ID: <1340064714.cc5fc55fac985559a64b8cfffbe183b2928a4674.bacher09@gentoo> (raw)

commit:     cc5fc55fac985559a64b8cfffbe183b2928a4674
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jun 19 00:11:54 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jun 19 00:11:54 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cc5fc55f

Add scaning utility for repo info

---
 .../packages/management/commands/scanpackages.py   |    3 +-
 .../packages/management/commands/scanrepoinfo.py   |   29 +++++++++++
 gpackages/apps/packages/scan.py                    |   51 +++++++++++++++++---
 3 files changed, 74 insertions(+), 9 deletions(-)

diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 71c308c..3809ff4 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -49,5 +49,4 @@ class Command(BaseCommand):
     args = '<repository names ...>'
     help = 'Will scan package tree and update info about it in database'
     def handle(self, *args, **options):
-        verbosity = int(options['verbosity'])
-        Scanner(repos = args, **options).scan()
+        Scanner(repos = args, packages = True, **options).scan()

diff --git a/gpackages/apps/packages/management/commands/scanrepoinfo.py b/gpackages/apps/packages/management/commands/scanrepoinfo.py
new file mode 100644
index 0000000..19049c4
--- /dev/null
+++ b/gpackages/apps/packages/management/commands/scanrepoinfo.py
@@ -0,0 +1,29 @@
+from django.core.management.base import BaseCommand, CommandError
+from packages.scan import Scanner
+from optparse import make_option
+
+
+class Command(BaseCommand):
+    option_list = BaseCommand.option_list + (
+        make_option('--not-show-time',
+            action='store_false',
+            dest='show_time',
+            default=True,
+            help='Show time of scanning'),
+        make_option('-d' ,'--del',
+            action='store_true',
+            dest='delete',
+            default=False,
+            help='Delete'),
+        )
+
+    args = '<repository names ...>'
+    help = 'Will scan repositories info'
+    def handle(self, *args, **options):
+        if len(args) > 0:
+            scan_all = False
+        else:
+            scan_all = True
+
+        Scanner(repos = args, scan_all = scan_all,
+                only_repo_info = True, **options).scan()

diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 8d8fed9..3e5cf81 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -122,6 +122,8 @@ class Scanner(object):
         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.s_packages = bool(kwargs.get('packages', False))
+        self.s_only_repo_info = bool(kwargs.get('only_repo_info', 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))
@@ -140,15 +142,19 @@ class Scanner(object):
         if self.is_scan_herds:
             self.scan_herds()
 
-        if self.s_all:
+        if self.s_all and self.s_packages:
             self.scan_all_repos(force_update = self.force_update,
                                 delete = self.delete,
                                 update_repo = self.update_repo)
-        elif len(self.scan_repos_name) > 0:
+        elif len(self.scan_repos_name) > 0 and self.s_packages:
             self.scan_repos_by_name(self.scan_repos_name,
                                     force_update = self.force_update,
                                     delete = self.delete,
                                     update_repo = self.update_repo)
+        elif self.s_only_repo_info and self.s_all:
+            self.scan_all_repo_info(delete = self.delete)
+        elif self.s_only_repo_info and len(self.scan_repos_name) > 0:
+            self.scan_repo_info_by_names(self.scan_repos_name)
 
         if self.scan_global_use_descr:
             self.update_all_globals_uses_descriptions()
@@ -301,17 +307,25 @@ class Scanner(object):
         for repo_name in repo_names:
             self.scan_repo_by_name(repo_name, **kwargs)
 
-    def scan_repo_by_name(self, repo_name, **kwargs):
+    def get_repo_by_name(self, repo_name, quiet = False, trace = False):
         try:
             repo = portage.get_tree_by_name(repo_name)
         except ValueError:
-            self.output("Bad repository name '%s'\n", repo_name, 1)
+            if not quiet:
+                self.output("Bad repository name '%s'\n", repo_name, 1)
+            if trace:
+                raise
+            return None
         else:
-            self.scan_repo(repo, **kwargs)
+            return repo
 
-    def scan_repo(self, repo, update_repo = False, **kwargs):
-        self.output("Scaning repository '%s'\n", repo.name, 3)
+    def scan_repo_by_name(self, repo_name, **kwargs):
+        repo = self.get_repo_by_name(repo_name)
+
+        if repo is not None:
+            self.scan_repo(repo, **kwargs)
 
+    def get_repo_obj(self, repo, update_repo = False):
         repo_obj, repo_created = models.RepositoryModel \
             .objects.get_or_create(repo = repo)
 
@@ -324,6 +338,29 @@ class Scanner(object):
         else:
             repo_obj.add_related(repo)
 
+        return repo_obj
+
+    def scan_all_repo_info(self, delete = False):
+        ex_pk = []
+        for repo in portage.iter_trees():
+            repo_obj = self.get_repo_obj(repo, update_repo = True)
+            self.output("Scaned [%s]\n", repo.name)
+            ex_pk.append(repo_obj.pk)
+
+        if delete:
+            models.RepositoryModel.objects.exclude(pk__in = ex_pk).delete()
+
+    def scan_repo_info_by_names(self, repo_list):
+        for repo_name in repo_list:
+            repo = self.get_repo_by_name(repo_name)
+            if repo is not None:
+                self.get_repo_obj(repo, update_repo = True)
+                self.output("Scaned [%s]\n", repo.name)
+
+    def scan_repo(self, repo, update_repo = False, **kwargs):
+        self.output("Scaning repository '%s'\n", repo.name, 3)
+
+        repo_obj = self.get_repo_obj(repo, update_repo = update_repo)
         self.scanpackages(repo, repo_obj, **kwargs)
         
 



             reply	other threads:[~2012-06-19  0:12 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-19  0:12 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-18 23:00 Slava Bacherikov
2012-06-13 22:15 Slava Bacherikov
2012-06-10 22:23 Slava Bacherikov
2012-06-10 17:51 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=1340064714.cc5fc55fac985559a64b8cfffbe183b2928a4674.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