2 * Copyright (c) 2001, 2003 Robert Collins.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by Robert Collins <rbtcollins@hotmail.com>
16 #ifndef SETUP_PACKAGE_META_H
17 #define SETUP_PACKAGE_META_H
19 class SolvableVersion
;
20 typedef SolvableVersion packageversion
;
25 #include "PackageTrust.h"
26 #include "package_version.h"
27 #include "package_message.h"
29 #include "ActionList.h"
31 typedef std::pair
<const std::string
, std::vector
<packagemeta
*> > Category
;
33 /* NOTE: A packagemeta without 1 version is invalid! */
37 static void ScanDownloadedFiles (bool);
38 packagemeta (packagemeta
const &);
39 packagemeta (const std::string
& pkgname
)
40 : name (pkgname
), user_picked (false),
41 _action(NoChange_action
), _picked(false), _srcpicked(false)
47 SolvableVersion
add_version (const SolverPool::addPackageData
&);
48 void set_installed_version (const std::string
&);
49 void addToCategoryBase();
50 bool hasNoCategories() const;
51 void setDefaultCategories();
52 void addToCategoryAll();
56 NoChange_action
= 1, // keep if installed, skip if not installed
61 static unsigned int action_caption (_actions value
);
63 void set_action (_actions
, packageversion
const & default_version
,
64 bool useraction
= false);
65 ActionList
*list_actions(trusts
const trust
);
66 void select_action (int id
, trusts
const deftrust
);
67 void toggle_action ();
68 _actions
get_action () { return _action
; }
70 void set_message (const std::string
& message_id
, const std::string
& message_string
)
72 message
.set (message_id
, message_string
);
75 void set_version_blacklist(std::set
<std::string
> &_list
)
77 version_blacklist
= _list
;
80 std::wstring
action_caption () const;
81 packageversion
trustp (bool _default
, trusts
const t
) const
83 /* If the user chose "test" and a "test" version is available, return it. */
84 if (t
== TRUST_TEST
&& exp
)
86 /* Are we looking for the default version and does the installed version
87 have a higher version number than the "curr" package? This means the
88 user has installed a "test" version, or built her own version newer
89 than "curr". Rather than pulling the user back to "curr", we install
90 "test" if a "test" version is available and the version number is higher,
91 or we stick to "installed" if not. This reflects the behaviour of
92 `yum update' on Fedora. */
93 if (_default
&& curr
&& installed
94 && packageversion::compareVersions (curr
, installed
) < 0)
96 if (exp
&& packageversion::compareVersions (installed
, exp
) < 0)
100 /* Otherwise, if a "curr" version exists, return "curr". */
103 /* Otherwise return the installed version. */
107 std::string name
; /* package name, like "cygwin" */
109 /* true if package was selected on command-line. */
110 bool isManuallyWanted(packageversion
&version
) const;
111 /* true if package was deleted on command-line. */
112 bool isManuallyDeleted() const;
114 const std::string
SDesc () const;
115 const std::string
LDesc () const;
117 /* what categories does this package belong in. Note that if multiple versions
118 * of a package disagree.... the first one read in will take precedence.
120 void add_category (const std::string
& );
121 std::set
<std::string
, casecompare_lt_op
> categories
;
122 const std::string
getReadableCategoryList () const;
123 std::set
<packageversion
> versions
;
125 /* Did the user already pick a version at least once? */
127 /* which one is installed. */
128 packageversion installed
;
129 /* which one is listed as "current" (stable) in our available packages db */
131 /* ditto for "test" (experimental) */
133 /* which one is the default according to the solver */
134 packageversion default_version
;
135 /* Now for the user stuff :] */
136 /* What version does the user want ? */
137 packageversion desired
;
139 bool picked() const; /* true if desired version is to be (re-)installed */
140 void pick(bool); /* trigger an install/reinstall */
142 bool srcpicked() const; /* true if source for desired version is to be installed */
145 /* can one or more versions be installed? */
146 bool accessible () const;
147 bool sourceAccessible() const;
149 bool isBinary() const;
151 void logSelectionStatus() const;
152 void logAllVersions() const;
154 void addScript(Script
const &);
155 std::vector
<Script
> &scripts();
157 /* this version is undesirable */
158 bool isBlacklisted(const packageversion
&version
) const;
161 packagemeta
&operator= (packagemeta
const &);
163 std::string
trustLabel(packageversion
const &) const;
164 std::vector
<Script
> scripts_
;
165 static bool scan (const packageversion
&pkg
, bool mirror_mode
);
166 const packageversion
* findVersion(std::string
&version
) const;
170 bool _picked
; /* true if desired version is to be (re)installed */
173 packagemessage message
;
174 std::set
<std::string
> version_blacklist
;
177 #endif /* SETUP_PACKAGE_META_H */