]>
git.ipfire.org Git - pakfire.git/blob - python/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 ###############################################################################
23 log
= logging
.getLogger("pakfire")
25 import pakfire
.packages
as packages
27 from base
import RepositoryDummy
28 from local
import RepositoryDir
, RepositoryBuild
, RepositoryLocal
29 from remote
import RepositorySolv
31 class Repositories(object):
33 Class that loads all repositories from the configuration files.
35 This is the place where repositories can be activated or deactivated.
38 def __init__(self
, pakfire
, enable_repos
=None, disable_repos
=None):
39 self
.pakfire
= pakfire
41 self
.config
= pakfire
.config
42 self
.distro
= pakfire
.distro
44 # Place to store the repositories
47 # Create a dummy repository
48 self
.dummy
= RepositoryDummy(self
.pakfire
)
50 # Create the local repository
51 self
.local
= RepositoryLocal(self
.pakfire
)
52 self
.add_repo(self
.local
)
54 # If we running in build mode, we include our local build repository.
55 if self
.pakfire
.builder
:
56 self
.local_build
= RepositoryBuild(self
.pakfire
)
57 self
.add_repo(self
.local_build
)
59 for repo_name
, repo_args
in self
.config
.get_repos():
60 self
._parse
(repo_name
, repo_args
)
62 # Enable all repositories here as demanded on commandline
64 for repo
in enable_repos
:
65 self
.enable_repo(repo
)
67 # Disable all repositories here as demanded on commandline
69 for repo
in disable_repos
:
70 self
.disable_repo(repo
)
72 # Update all indexes of the repositories (not force) so that we will
73 # always work with valid data.
74 self
.update(offline
=self
.pakfire
.offline
)
77 repositories
= self
.__repos
.values()
80 return iter(repositories
)
84 Return the count of enabled repositories.
86 return len([r
for r
in self
if r
.enabled
])
90 return self
.pakfire
.pool
92 def _parse(self
, name
, args
):
93 # XXX need to make variable expansion
103 repo
= RepositorySolv(self
.pakfire
, **_args
)
107 def add_repo(self
, repo
):
108 if self
.__repos
.has_key(repo
.name
):
109 raise Exception, "Repository with that name does already exist."
111 self
.__repos
[repo
.name
] = repo
113 def rem_repo(self
, repo
):
115 Remove the given repository from the global repository set.
118 del self
.__repos
[repo
.name
]
120 log
.debug("Repository that was to be removed does not exist: %s" % repo
.name
)
122 def get_repo(self
, name
):
124 Get the repository with the given name, if not available, return
125 the dummy repository.
128 return self
.__repos
[name
]
132 def enable_repo(self
, name
):
134 self
.__repos
[name
].enabled
= True
138 def disable_repo(self
, name
):
140 self
.__repos
[name
].enabled
= False
144 def update(self
, force
=False, offline
=False):
145 log
.debug("Updating all repository indexes (force=%s)" % force
)
147 # update all indexes if necessary or forced
149 repo
.update(force
=force
, offline
=offline
)
151 def whatprovides(self
, what
):
152 what
= self
.pakfire
.create_relation(what
)
154 for solv
in self
.pool
.providers(what
):
155 yield packages
.SolvPackage(self
.pakfire
, solv
)
158 log
.info("Cleaning up all repository caches...")