Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
Date: Tue, 19 Jun 2012 00:12:23
Message-Id: 1340064714.cc5fc55fac985559a64b8cfffbe183b2928a4674.bacher09@gentoo
1 commit: cc5fc55fac985559a64b8cfffbe183b2928a4674
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue Jun 19 00:11:54 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue Jun 19 00:11:54 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cc5fc55f
7
8 Add scaning utility for repo info
9
10 ---
11 .../packages/management/commands/scanpackages.py | 3 +-
12 .../packages/management/commands/scanrepoinfo.py | 29 +++++++++++
13 gpackages/apps/packages/scan.py | 51 +++++++++++++++++---
14 3 files changed, 74 insertions(+), 9 deletions(-)
15
16 diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
17 index 71c308c..3809ff4 100644
18 --- a/gpackages/apps/packages/management/commands/scanpackages.py
19 +++ b/gpackages/apps/packages/management/commands/scanpackages.py
20 @@ -49,5 +49,4 @@ class Command(BaseCommand):
21 args = '<repository names ...>'
22 help = 'Will scan package tree and update info about it in database'
23 def handle(self, *args, **options):
24 - verbosity = int(options['verbosity'])
25 - Scanner(repos = args, **options).scan()
26 + Scanner(repos = args, packages = True, **options).scan()
27
28 diff --git a/gpackages/apps/packages/management/commands/scanrepoinfo.py b/gpackages/apps/packages/management/commands/scanrepoinfo.py
29 new file mode 100644
30 index 0000000..19049c4
31 --- /dev/null
32 +++ b/gpackages/apps/packages/management/commands/scanrepoinfo.py
33 @@ -0,0 +1,29 @@
34 +from django.core.management.base import BaseCommand, CommandError
35 +from packages.scan import Scanner
36 +from optparse import make_option
37 +
38 +
39 +class Command(BaseCommand):
40 + option_list = BaseCommand.option_list + (
41 + make_option('--not-show-time',
42 + action='store_false',
43 + dest='show_time',
44 + default=True,
45 + help='Show time of scanning'),
46 + make_option('-d' ,'--del',
47 + action='store_true',
48 + dest='delete',
49 + default=False,
50 + help='Delete'),
51 + )
52 +
53 + args = '<repository names ...>'
54 + help = 'Will scan repositories info'
55 + def handle(self, *args, **options):
56 + if len(args) > 0:
57 + scan_all = False
58 + else:
59 + scan_all = True
60 +
61 + Scanner(repos = args, scan_all = scan_all,
62 + only_repo_info = True, **options).scan()
63
64 diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
65 index 8d8fed9..3e5cf81 100644
66 --- a/gpackages/apps/packages/scan.py
67 +++ b/gpackages/apps/packages/scan.py
68 @@ -122,6 +122,8 @@ class Scanner(object):
69 self.verbosity = toint(kwargs.get('verbosity',1),1)
70 self.traceback = bool(kwargs.get('traceback',False))
71 self.s_all = bool(kwargs.get('scan_all', False))
72 + self.s_packages = bool(kwargs.get('packages', False))
73 + self.s_only_repo_info = bool(kwargs.get('only_repo_info', False))
74 self.is_show_time = bool(kwargs.get('show_time', True))
75 self.is_scan_herds = bool(kwargs.get('scan_herds', True))
76 self.force_update = bool(kwargs.get('force_update', False))
77 @@ -140,15 +142,19 @@ class Scanner(object):
78 if self.is_scan_herds:
79 self.scan_herds()
80
81 - if self.s_all:
82 + if self.s_all and self.s_packages:
83 self.scan_all_repos(force_update = self.force_update,
84 delete = self.delete,
85 update_repo = self.update_repo)
86 - elif len(self.scan_repos_name) > 0:
87 + elif len(self.scan_repos_name) > 0 and self.s_packages:
88 self.scan_repos_by_name(self.scan_repos_name,
89 force_update = self.force_update,
90 delete = self.delete,
91 update_repo = self.update_repo)
92 + elif self.s_only_repo_info and self.s_all:
93 + self.scan_all_repo_info(delete = self.delete)
94 + elif self.s_only_repo_info and len(self.scan_repos_name) > 0:
95 + self.scan_repo_info_by_names(self.scan_repos_name)
96
97 if self.scan_global_use_descr:
98 self.update_all_globals_uses_descriptions()
99 @@ -301,17 +307,25 @@ class Scanner(object):
100 for repo_name in repo_names:
101 self.scan_repo_by_name(repo_name, **kwargs)
102
103 - def scan_repo_by_name(self, repo_name, **kwargs):
104 + def get_repo_by_name(self, repo_name, quiet = False, trace = False):
105 try:
106 repo = portage.get_tree_by_name(repo_name)
107 except ValueError:
108 - self.output("Bad repository name '%s'\n", repo_name, 1)
109 + if not quiet:
110 + self.output("Bad repository name '%s'\n", repo_name, 1)
111 + if trace:
112 + raise
113 + return None
114 else:
115 - self.scan_repo(repo, **kwargs)
116 + return repo
117
118 - def scan_repo(self, repo, update_repo = False, **kwargs):
119 - self.output("Scaning repository '%s'\n", repo.name, 3)
120 + def scan_repo_by_name(self, repo_name, **kwargs):
121 + repo = self.get_repo_by_name(repo_name)
122 +
123 + if repo is not None:
124 + self.scan_repo(repo, **kwargs)
125
126 + def get_repo_obj(self, repo, update_repo = False):
127 repo_obj, repo_created = models.RepositoryModel \
128 .objects.get_or_create(repo = repo)
129
130 @@ -324,6 +338,29 @@ class Scanner(object):
131 else:
132 repo_obj.add_related(repo)
133
134 + return repo_obj
135 +
136 + def scan_all_repo_info(self, delete = False):
137 + ex_pk = []
138 + for repo in portage.iter_trees():
139 + repo_obj = self.get_repo_obj(repo, update_repo = True)
140 + self.output("Scaned [%s]\n", repo.name)
141 + ex_pk.append(repo_obj.pk)
142 +
143 + if delete:
144 + models.RepositoryModel.objects.exclude(pk__in = ex_pk).delete()
145 +
146 + def scan_repo_info_by_names(self, repo_list):
147 + for repo_name in repo_list:
148 + repo = self.get_repo_by_name(repo_name)
149 + if repo is not None:
150 + self.get_repo_obj(repo, update_repo = True)
151 + self.output("Scaned [%s]\n", repo.name)
152 +
153 + def scan_repo(self, repo, update_repo = False, **kwargs):
154 + self.output("Scaning repository '%s'\n", repo.name, 3)
155 +
156 + repo_obj = self.get_repo_obj(repo, update_repo = update_repo)
157 self.scanpackages(repo, repo_obj, **kwargs)