2 * Copyright (c) 2001, 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 /* This is a package version abstrct class, that should be able to
17 * arbitrate acceess to cygwin binary packages, cygwin source package,
18 * and the rpm and deb equivalents of the same.
21 #ifndef _PACKAGE_VERSION_H_
22 #define _PACKAGE_VERSION_H_
24 /* standard binary package metadata:
26 * Vendor Version (ie 2.5.1)
27 * Package Version (ie 16)
32 /* For non installed files, this class can be populated via information about
33 * what is available on the net, or by parsing a specific package file.
34 * for installed packages, this class should represent what is currently installed,
35 * - updated by what net metadata has about it.
36 * i.e. the stability of this version will change simply because the net mirrors
37 * now consider it old.
42 /*Required for parsing */
43 #include "package_source.h"
45 #include "PackageSpecification.h"
46 #include "PackageTrust.h"
73 /* A wrapper class to be copied by value that
74 references the same package.
75 Nothing is virtual, because the wrapper cannot be inherited.
76 However, as all the methods are implemented in the referenced
77 _packageversion, that class allows virtual overriding.
80 class _packageversion
;
82 /* This class has pointer semantics
83 Specifically: a=b does not alter the value of *a.
88 packageversion (); /* creates an empty packageversion */
89 packageversion (_packageversion
*); /* used when creating an instance */
90 packageversion (packageversion
const &);
92 packageversion
&operator= (packageversion
const &);
93 bool operator ! () const; /* true if the package is invalid. (i.e.
95 operator bool () const; /* returns ! !() */
96 bool operator == (packageversion
const &) const; /* equality */
97 bool operator != (packageversion
const &) const;
98 bool operator < (packageversion
const &) const;
99 bool operator <= (packageversion
const &) const;
100 bool operator > (packageversion
const &) const;
101 bool operator >= (packageversion
const &) const;
103 String
const Name () const;
104 String
const Vendor_version () const;
105 String
const Package_version () const;
106 String
const Canonical_version () const;
107 void setCanonicalVersion (String
const &);
108 package_status_t
Status () const;
109 package_type_t
Type () const;
110 String
const getfirstfile ();
111 String
const getnextfile ();
112 String
const SDesc () const;
113 void set_sdesc (String
const &);
114 String
const LDesc () const;
115 void set_ldesc (String
const &);
116 packageversion
sourcePackage ();
117 PackageSpecification
& sourcePackageSpecification ();
118 void setSourcePackageSpecification (PackageSpecification
const &);
120 /* invariant: these never return NULL */
121 std::vector
<std::vector
<PackageSpecification
*> *> *depends(), *predepends(),
122 *recommends(), *suggests(), *replaces(), *conflicts(), *provides(), *binaries();
124 bool picked() const; /* true if this version is to be installed */
125 void pick(bool); /* trigger an install/reinsall */
126 /* a change - install/uninstall/reinstall/source install
127 has been requested */
128 bool changeRequested () const;
131 /* invariant: never null */
132 packagesource
*source(); /* where can we source the file from */
133 /* invariant: never null */
134 std::vector
<packagesource
> *sources(); /* expose the list of files.
135 source() returns the 'default' file
136 sources() allows managing multiple files
140 bool accessible () const;
142 /* ensure that the depends clause is satisfied */
143 int set_requirements (trusts deftrust
= TRUST_CURR
, size_t depth
= 0);
145 void addScript(Script
const &);
146 std::vector
<Script
> &scripts();
149 _packageversion
*data
; /* Invariant: * data is always valid */
152 class _packageversion
156 virtual ~_packageversion();
157 /* for list inserts/mgmt. */
159 /* name is needed here, because if we are querying a file, the data may be embedded in
161 virtual String
const Name () = 0;
162 virtual String
const Vendor_version () = 0;
163 virtual String
const Package_version () = 0;
164 virtual String
const Canonical_version () = 0;
165 virtual void setCanonicalVersion (String
const &) = 0;
166 virtual package_status_t
Status () = 0;
167 // virtual package_stability_t Stability () = 0;
168 virtual package_type_t
Type () = 0;
169 /* TODO: we should probably return a metaclass - file name & path & size & type
170 - ie doc/script/binary
172 virtual String
const getfirstfile () = 0;
173 virtual String
const getnextfile () = 0;
174 virtual String
const SDesc () = 0;
175 virtual void set_sdesc (String
const &) = 0;
176 virtual String
const LDesc () = 0;
177 virtual void set_ldesc (String
const &) = 0;
178 /* only semantically meaningful for binary packages */
179 /* direct link to the source package for this binary */
180 /* if multiple versions exist and the source doesn't discriminate
181 then the most recent is used
183 virtual packageversion
sourcePackage ();
184 virtual PackageSpecification
& sourcePackageSpecification ();
185 virtual void setSourcePackageSpecification (PackageSpecification
const &);
187 std::vector
<std::vector
<PackageSpecification
*> *> depends
, predepends
, recommends
,
188 suggests
, replaces
, conflicts
, provides
, binaries
;
190 virtual void pick(bool const &newValue
) { picked
= newValue
;}
191 bool picked
; /* non zero if this version is to be installed */
192 /* This will also trigger reinstalled if it is set */
193 /* a change - install/uninstall/reinstall/source install
194 has been requested */
195 bool changeRequested ();
198 virtual void uninstall () = 0;
199 std::vector
<packagesource
> sources
; /* where can we source the files from */
201 bool accessible () const;
203 /* TODO: Implement me:
204 static package_meta * scan_package (io_stream *);
207 virtual void addScript(Script
const &);
208 virtual std::vector
<Script
> &scripts();
210 /* only meaningful for binary packages */
211 PackageSpecification _sourcePackage
;
212 packageversion sourceVersion
;
213 std::vector
<Script
> scripts_
;
216 #endif /* _PACKAGE_VERSION_H_ */