1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/RepoInfo.h
12 #ifndef ZYPP2_REPOSITORYINFO_H
13 #define ZYPP2_REPOSITORYINFO_H
18 #include "zypp/base/PtrTypes.h"
19 #include "zypp/base/Iterator.h"
20 #include "zypp/base/Deprecated.h"
22 #include "zypp/Pathname.h"
24 #include "zypp/repo/RepoType.h"
25 #include "zypp/repo/RepoVariables.h"
27 ///////////////////////////////////////////////////////////////////
29 { /////////////////////////////////////////////////////////////////
31 ///////////////////////////////////////////////////////////////////
33 // CLASS NAME : RepoInfo
36 * \short What is known about a repository
38 * The class RepoInfo represents everything that
39 * is known about a software repository.
41 * It can be used to store information about known
44 * This class tries to be compatible with the
45 * concept of a .repo file used by YUM and
46 * also available in the openSUSE build service.
47 * See <tt>man yum.conf</tt>.
53 * name=Ruby repository (openSUSE_10.2)
55 * baseurl=http://software.opensuse.org/download/ruby/openSUSE_10.2/
57 * gpgkey=http://software.opensuse.org/openSUSE-Build-Service.asc
61 * \note A RepoInfo is a hint about how
62 * to create a Repository.
66 friend std::ostream & operator<<( std::ostream & str, const RepoInfo & obj );
73 * unique identifier for this source. If not specified
74 * It should be generated from the base url.
76 * Normally, in a .repo file the section name is used
79 std::string alias() const;
82 * Same as alias(), just escaped in a way to be a valid file name.
84 std::string escaped_alias() const;
87 * A Url under which the metadata are located, or a set of mirrors.
89 * This can't be empty in order the repository to be valid
90 * unless the download of the mirror list succeeds and it
91 * contains a valid url.
93 * \deprecated IMO superfluous as we provide begin/end iterator.
95 ZYPP_DEPRECATED std::set<Url> baseUrls() const;
98 * \short Repository path
100 * Pathname relative to the base Url where the product/repository
103 * For medias containing more than one product, or repositories not
104 * located at the root of the media it is important to
105 * know the path of the media root relative to the product directory
106 * so a media verifier can be set for that media.
108 * It is not mandatory, and the default is /
110 * \note As a repository can have multiple Urls, the path is unique and
111 * the same for all Urls, so it is assumed all the Urls have the
115 Pathname path() const;
118 * Url of a file which contains a list of Urls
119 * If empty, the base url will be used.
121 Url mirrorListUrl() const;
123 typedef std::set<Url> url_set;
124 //typedef url_set::const_iterator urls_const_iterator;
125 typedef url_set::size_type urls_size_type;
126 typedef transform_iterator<repo::RepoVariablesUrlReplacer, url_set::const_iterator> urls_const_iterator;
129 * iterator that points at begin of repository urls
131 urls_const_iterator baseUrlsBegin() const;
134 * iterator that points at end of repository urls
136 urls_const_iterator baseUrlsEnd() const;
139 * number of repository urls
141 urls_size_type baseUrlsSize() const;
144 * whether repository urls are available
146 bool baseUrlsEmpty() const;
149 * If enabled is false, then this repository must be ignored as if does
150 * not exists, except when checking for duplicate alias.
152 bool enabled() const;
155 * If true, the repostory must be refreshed before creating resolvables
158 bool autorefresh() const;
161 * Type of repository,
164 repo::RepoType type() const;
167 * \short Repository short label
169 * Short label or description of the repository, to be used on
170 * the user interface.
171 * ie: "SUSE Linux 10.2 updates"
173 std::string name() const;
176 * \short File where this repo was read from
178 * \note could be an empty pathname for repo
179 * infos created in memory.
181 Pathname filepath() const;
184 * \short Path where this repo metadata was read from
186 * \note could be an empty pathname for repo
187 * infos created in memory.
189 Pathname metadataPath() const;
192 * \short Path where this repo packages are cached
194 Pathname packagesPath() const;
197 * \short Whether to check or not this repository with gpg
199 * \note This is a just a hint to the application and can
203 bool gpgCheck() const;
206 * \short Key to use for gpg checking of this repository
208 * \param url Url to the key in ASCII armored format
210 * \note This is a just a hint to the application and can
214 Url gpgKeyUrl() const;
217 * \short Whether to keep the packages downloaded from this repository will be kept in local cache
219 bool keepPackages() const;
222 * Add a base url. \see baseUrls
223 * \param url The base url for the repository.
225 * To recreate the base URLs list, use \ref setBaseUrl(const Url &) followed
228 RepoInfo & addBaseUrl( const Url &url );
231 * Clears current base URL list and adds \a url.
233 RepoInfo & setBaseUrl( const Url &url );
236 * set the product path. \see path()
237 * \param path the path to the product
239 RepoInfo & setPath( const Pathname &path );
242 * Set mirror list url. \see mirrorListUrl
243 * \param url The base url for the list
245 RepoInfo & setMirrorListUrl( const Url &url );
248 * enable or disable the repository \see enabled
251 RepoInfo & setEnabled( bool enabled );
254 * enable or disable autorefresh \see autorefresh
257 RepoInfo & setAutorefresh( bool autorefresh );
260 * set the repository alias \see alias
263 RepoInfo & setAlias( const std::string &alias );
266 * set the repository type \see type
269 RepoInfo & setType( const repo::RepoType &t );
272 * set the repository name \see name
275 RepoInfo & setName( const std::string &name );
278 * \short set the path to the .repo file
280 * The path to the .repo file where this repository
281 * was defined, or empty if nowhere.
283 * \param path File path
285 RepoInfo & setFilepath( const Pathname &filename );
288 * \short set the path where the local metadata is stored
290 * The path to the metadata of this repository
291 * was defined, or empty if nowhere.
293 * \param path directory path
295 RepoInfo & setMetadataPath( const Pathname &path );
298 * \short set the path where the local packages are stored
300 * \param path directory path
302 RepoInfo & setPackagesPath( const Pathname &path );
305 * \short Whether to check or not this repository with gpg
307 * \param check true (check) or false (dont'check)
309 * \note This is a just a hint to the application and can
313 RepoInfo & setGpgCheck( bool check );
316 * \short Key to use for gpg checking of this repository
318 * \param url Url to the key in ASCII armored format
320 * \note This is a just a hint to the application and can
324 RepoInfo & setGpgKeyUrl( const Url &gpgkey );
327 * \short Set if the packaqes downloaded from this repository will be kept in local cache
329 * If the setting is true, all downloaded packages from this repository will be
330 * copied to the local raw cache.
332 * \param keep true (keep the downloaded packages) or false (delete them after installation)
335 RepoInfo & setKeepPackages( bool keep );
338 * Write a human-readable representation of this RepoInfo object
339 * into the \a str stream. Useful for logging.
341 std::ostream & dumpOn( std::ostream & str ) const;
344 * Write this RepoInfo object into \a str in a <tr>.repo</tt> file format.
346 std::ostream & dumpRepoOn( std::ostream & str ) const;
350 /** Pointer to implementation */
351 RWCOW_pointer<Impl> _pimpl;
353 ///////////////////////////////////////////////////////////////////
355 /** \relates RepoInfo Stream output */
356 std::ostream & operator<<( std::ostream & str, const RepoInfo & obj );
358 typedef std::list<RepoInfo> RepoInfoList;
360 /////////////////////////////////////////////////////////////////
362 ///////////////////////////////////////////////////////////////////
363 #endif // ZYPP2_REPOSITORYINFO_H