]>
git.ipfire.org Git - pakfire.git/blob - pakfire/repository/__init__.py
2 ###############################################################################
4 # Pakfire - The IPFire package management system #
5 # Copyright (C) 2011 Pakfire development team #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 import pakfire
.packages
as packages
26 from base
import RepositoryDummy
27 from local
import RepositoryDir
, RepositoryBuild
, RepositoryLocal
28 from remote
import RepositorySolv
30 class Repositories(object):
32 Class that loads all repositories from the configuration files.
34 This is the place where repositories can be activated or deactivated.
37 def __init__(self
, pakfire
, enable_repos
=None, disable_repos
=None):
38 self
.pakfire
= pakfire
40 self
.config
= pakfire
.config
41 self
.distro
= pakfire
.distro
43 # Place to store the repositories
46 # Create a dummy repository
47 self
.dummy
= RepositoryDummy(self
.pakfire
)
49 # Create the local repository
50 self
.local
= RepositoryLocal(self
.pakfire
)
51 self
.add_repo(self
.local
)
53 # If we running in build mode, we include our local build repository.
54 if self
.pakfire
.builder
:
55 self
.local_build
= RepositoryBuild(self
.pakfire
)
56 self
.add_repo(self
.local_build
)
58 for repo_name
, repo_args
in self
.config
.get_repos():
59 self
._parse
(repo_name
, repo_args
)
61 # Enable all repositories here as demanded on commandline
63 for repo
in enable_repos
:
64 self
.enable_repo(repo
)
66 # Disable all repositories here as demanded on commandline
68 for repo
in disable_repos
:
69 self
.disable_repo(repo
)
71 # Update all indexes of the repositories (not force) so that we will
72 # always work with valid data.
73 self
.update(offline
=self
.pakfire
.offline
)
76 repositories
= self
.__repos
.values()
79 return iter(repositories
)
83 Return the count of enabled repositories.
85 return len([r
for r
in self
if r
.enabled
])
89 return self
.pakfire
.pool
91 def _parse(self
, name
, args
):
92 # XXX need to make variable expansion
102 repo
= RepositorySolv(self
.pakfire
, **_args
)
106 def add_repo(self
, repo
):
107 if self
.__repos
.has_key(repo
.name
):
108 raise Exception, "Repository with that name does already exist."
110 self
.__repos
[repo
.name
] = repo
112 def rem_repo(self
, repo
):
114 Remove the given repository from the global repository set.
117 del self
.__repos
[repo
.name
]
119 logging
.debug("Repository that was to be removed does not exist: %s" % repo
.name
)
121 def get_repo(self
, name
):
123 Get the repository with the given name, if not available, return
124 the dummy repository.
127 return self
.__repos
[name
]
131 def enable_repo(self
, name
):
133 self
.__repos
[name
].enabled
= True
137 def disable_repo(self
, name
):
139 self
.__repos
[name
].enabled
= False
143 def update(self
, force
=False, offline
=False):
144 logging
.debug("Updating all repository indexes (force=%s)" % force
)
146 # update all indexes if necessary or forced
148 repo
.update(force
=force
, offline
=offline
)
150 def whatprovides(self
, what
):
151 what
= self
.pakfire
.create_relation(what
)
153 for solv
in self
.pool
.providers(what
):
154 yield packages
.SolvPackage(self
.pakfire
, solv
)
157 logging
.info("Cleaning up all repository caches...")