]> git.ipfire.org Git - pakfire.git/blob - pakfire/repository/__init__.py
Implement --enable-repo=... on console.
[pakfire.git] / pakfire / repository / __init__.py
1 #!/usr/bin/python
2
3 import logging
4
5 import pakfire.packages as packages
6
7 from base import RepositoryDummy
8 from local import RepositoryDir, RepositoryBuild, RepositoryLocal
9 from remote import RepositorySolv
10
11 class Repositories(object):
12 """
13 Class that loads all repositories from the configuration files.
14
15 This is the place where repositories can be activated or deactivated.
16 """
17
18 def __init__(self, pakfire, enable_repos=None, disable_repos=None):
19 self.pakfire = pakfire
20
21 self.config = pakfire.config
22 self.distro = pakfire.distro
23
24 # Place to store the repositories
25 self.__repos = {}
26
27 # Create a dummy repository
28 self.dummy = RepositoryDummy(self.pakfire)
29
30 # Create the local repository
31 self.local = RepositoryLocal(self.pakfire)
32 self.add_repo(self.local)
33
34 # If we running in build mode, we include our local build repository.
35 if self.pakfire.builder:
36 self.local_build = RepositoryBuild(self.pakfire)
37 self.add_repo(self.local_build)
38
39 for repo_name, repo_args in self.config.get_repos():
40 self._parse(repo_name, repo_args)
41
42 # Enable all repositories here as demanded on commandline
43 if enable_repos:
44 for repo in enable_repos:
45 self.enable_repo(repo)
46
47 # Disable all repositories here as demanded on commandline
48 if disable_repos:
49 for repo in disable_repos:
50 self.disable_repo(repo)
51
52 # Update all indexes of the repositories (not force) so that we will
53 # always work with valid data.
54 self.update()
55
56 def __iter__(self):
57 repositories = self.__repos.values()
58 repositories.sort()
59
60 return iter(repositories)
61
62 def __len__(self):
63 """
64 Return the count of enabled repositories.
65 """
66 return len([r for r in self if r.enabled])
67
68 @property
69 def pool(self):
70 return self.pakfire.pool
71
72 def _parse(self, name, args):
73 # XXX need to make variable expansion
74
75 _args = {
76 "name" : name,
77 "enabled" : True,
78 "gpgkey" : None,
79 "mirrorlist" : None,
80 }
81 _args.update(args)
82
83 repo = RepositorySolv(self.pakfire, **_args)
84
85 self.add_repo(repo)
86
87 def add_repo(self, repo):
88 if self.__repos.has_key(repo.name):
89 raise Exception, "Repository with that name does already exist."
90
91 self.__repos[repo.name] = repo
92
93 def get_repo(self, name):
94 """
95 Get the repository with the given name, if not available, return
96 the dummy repository.
97 """
98 try:
99 return self.__repos[name]
100 except KeyError:
101 return self.dummy
102
103 def enable_repo(self, name):
104 try:
105 self.__repos[name].enabled = True
106 except KeyError:
107 pass
108
109 def disable_repo(self, name):
110 try:
111 self.__repos[name].enabled = False
112 except KeyError:
113 pass
114
115 def update(self, force=False):
116 logging.debug("Updating all repository indexes (force=%s)" % force)
117
118 # update all indexes if necessary or forced
119 for repo in self:
120 repo.update(force=force)
121
122 def whatprovides(self, what):
123 for solv in self.pool.providers(what):
124 yield packages.SolvPackage(self.pakfire, solv)