]>
git.ipfire.org Git - pakfire.git/blob - pakfire/repository/__init__.py
5 import pakfire
.packages
as packages
7 from base
import RepositoryDummy
8 from local
import RepositoryDir
, RepositoryBuild
, RepositoryLocal
9 from remote
import RepositorySolv
11 class Repositories(object):
13 Class that loads all repositories from the configuration files.
15 This is the place where repositories can be activated or deactivated.
18 def __init__(self
, pakfire
, enable_repos
=None, disable_repos
=None):
19 self
.pakfire
= pakfire
21 self
.config
= pakfire
.config
22 self
.distro
= pakfire
.distro
24 # Place to store the repositories
27 # Create a dummy repository
28 self
.dummy
= RepositoryDummy(self
.pakfire
)
30 # Create the local repository
31 self
.local
= RepositoryLocal(self
.pakfire
)
32 self
.add_repo(self
.local
)
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
)
39 for repo_name
, repo_args
in self
.config
.get_repos():
40 self
._parse
(repo_name
, repo_args
)
42 # Enable all repositories here as demanded on commandline
44 for repo
in enable_repos
:
45 self
.enable_repo(repo
)
47 # Disable all repositories here as demanded on commandline
49 for repo
in disable_repos
:
50 self
.disable_repo(repo
)
52 # Update all indexes of the repositories (not force) so that we will
53 # always work with valid data.
57 repositories
= self
.__repos
.values()
60 return iter(repositories
)
64 Return the count of enabled repositories.
66 return len([r
for r
in self
if r
.enabled
])
70 return self
.pakfire
.pool
72 def _parse(self
, name
, args
):
73 # XXX need to make variable expansion
83 repo
= RepositorySolv(self
.pakfire
, **_args
)
87 def add_repo(self
, repo
):
88 if self
.__repos
.has_key(repo
.name
):
89 raise Exception, "Repository with that name does already exist."
91 self
.__repos
[repo
.name
] = repo
93 def get_repo(self
, name
):
95 Get the repository with the given name, if not available, return
99 return self
.__repos
[name
]
103 def enable_repo(self
, name
):
105 self
.__repos
[name
].enabled
= True
109 def disable_repo(self
, name
):
111 self
.__repos
[name
].enabled
= False
115 def update(self
, force
=False):
116 logging
.debug("Updating all repository indexes (force=%s)" % force
)
118 # update all indexes if necessary or forced
120 repo
.update(force
=force
)
122 def whatprovides(self
, what
):
123 for solv
in self
.pool
.providers(what
):
124 yield packages
.SolvPackage(self
.pakfire
, solv
)