1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * Copyright (C) 2012-2015 Red Hat, Inc.
4  * Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
5  *
6  * Licensed under the GNU Lesser General Public License Version 2.1
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
21  */
22 
23 #ifndef __DNF_SACK_H
24 #define __DNF_SACK_H
25 
26 #include <glib-object.h>
27 
28 #include "hy-types.h"
29 #include "dnf-sack.h"
30 #include "dnf-repo.h"
31 #include "dnf-state.h"
32 #include "hy-packageset.h"
33 
34 G_BEGIN_DECLS
35 
36 #define DNF_TYPE_SACK (dnf_sack_get_type ())
37 G_DECLARE_DERIVABLE_TYPE (DnfSack, dnf_sack, DNF, SACK, GObject)
38 
39 struct _DnfSackClass
40 {
41         GObjectClass            parent_class;
42         /*< private >*/
43         void (*_dnf_reserved1)  (void);
44         void (*_dnf_reserved2)  (void);
45         void (*_dnf_reserved3)  (void);
46         void (*_dnf_reserved4)  (void);
47         void (*_dnf_reserved5)  (void);
48         void (*_dnf_reserved6)  (void);
49         void (*_dnf_reserved7)  (void);
50         void (*_dnf_reserved8)  (void);
51 };
52 
53 /**
54  * DnfSackSetupFlags:
55  * @DNF_SACK_SETUP_FLAG_NONE:                   No flags set
56  * @DNF_SACK_SETUP_FLAG_MAKE_CACHE_DIR:         Create the cache dir if required
57  *
58  * Flags to use when setting up the sack.
59  **/
60 typedef enum {
61     DNF_SACK_SETUP_FLAG_NONE                = 0,
62     DNF_SACK_SETUP_FLAG_MAKE_CACHE_DIR      = 1 << 0,
63     /*< private >*/
64     DNF_SACK_SETUP_FLAG_LAST
65 } DnfSackSetupFlags;
66 
67 /**
68  * DnfSackAddFlags:
69  * @DNF_SACK_LOAD_FLAG_NONE:                    No flags set
70  * @DNF_SACK_LOAD_FLAG_BUILD_CACHE:             Build the solv cache if required
71  * @DNF_SACK_LOAD_FLAG_USE_FILELISTS:           Use the filelists metadata
72  * @DNF_SACK_LOAD_FLAG_USE_PRESTO:              Use presto deltas metadata
73  * @DNF_SACK_LOAD_FLAG_USE_UPDATEINFO:          Use updateinfo metadata
74  * @DNF_SACK_LOAD_FLAG_USE_OTHER:               Use other metadata
75  *
76  * Flags to use when loading from the sack.
77  **/
78 typedef enum {
79     DNF_SACK_LOAD_FLAG_NONE                 = 0,
80     DNF_SACK_LOAD_FLAG_BUILD_CACHE          = 1 << 0,
81     DNF_SACK_LOAD_FLAG_USE_FILELISTS        = 1 << 1,
82     DNF_SACK_LOAD_FLAG_USE_PRESTO           = 1 << 2,
83     DNF_SACK_LOAD_FLAG_USE_UPDATEINFO       = 1 << 3,
84     DNF_SACK_LOAD_FLAG_USE_OTHER            = 1 << 4,
85     /*< private >*/
86     DNF_SACK_LOAD_FLAG_LAST
87 } DnfSackLoadFlags;
88 
89 DnfSack     *dnf_sack_new                   (void);
90 
91 void         dnf_sack_set_cachedir          (DnfSack        *sack,
92                                              const gchar    *value);
93 gboolean     dnf_sack_set_arch              (DnfSack        *sack,
94                                              const gchar    *value,
95                                              GError        **error);
96 void         dnf_sack_set_all_arch          (DnfSack        *sack,
97                                              gboolean        all_arch);
98 gboolean     dnf_sack_get_all_arch          (DnfSack        *sack);
99 void         dnf_sack_set_allow_vendor_change(DnfSack       *sack,
100                                              gboolean       allow_vendor_change);
101 gboolean     dnf_sack_get_allow_vendor_change(DnfSack       *sack);
102 void         dnf_sack_set_rootdir           (DnfSack        *sack,
103                                              const gchar    *value);
104 gboolean     dnf_sack_setup                 (DnfSack        *sack,
105                                              int             flags,
106                                              GError        **error);
107 int          dnf_sack_evr_cmp               (DnfSack        *sack,
108                                              const char     *evr1,
109                                              const char     *evr2);
110 const char  *dnf_sack_get_cache_dir         (DnfSack        *sack);
111 DnfPackage  *dnf_sack_get_running_kernel    (DnfSack        *sack);
112 char        *dnf_sack_give_cache_fn         (DnfSack        *sack,
113                                              const char     *reponame,
114                                              const char     *ext);
115 const char **dnf_sack_list_arches           (DnfSack        *sack);
116 void         dnf_sack_set_installonly       (DnfSack        *sack,
117                                              const char    **installonly);
118 void         dnf_sack_set_installonly_limit (DnfSack        *sack,
119                                              guint           limit);
120 guint        dnf_sack_get_installonly_limit (DnfSack        *sack);
121 DnfPackage  *dnf_sack_add_cmdline_package   (DnfSack        *sack,
122                                              const char     *fn);
123 DnfPackage  *dnf_sack_add_cmdline_package_nochecksum(DnfSack *sack,
124                                              const char     *fn);
125 int          dnf_sack_count                 (DnfSack        *sack);
126 void         dnf_sack_add_excludes          (DnfSack        *sack,
127                                              const DnfPackageSet *pset);
128 void         dnf_sack_add_module_excludes   (DnfSack        *sack,
129                                              const DnfPackageSet *pset);
130 void         dnf_sack_add_includes          (DnfSack        *sack,
131                                              const DnfPackageSet *pset);
132 void         dnf_sack_remove_excludes       (DnfSack        *sack,
133                                              const DnfPackageSet *pset);
134 void         dnf_sack_remove_module_excludes(DnfSack        *sack,
135                                              const DnfPackageSet *pset);
136 void         dnf_sack_remove_includes       (DnfSack        *sack,
137                                              const DnfPackageSet *pset);
138 void         dnf_sack_set_excludes          (DnfSack        *sack,
139                                              const DnfPackageSet *pset);
140 void         dnf_sack_set_module_excludes   (DnfSack        *sack,
141                                              const DnfPackageSet *pset);
142 void         dnf_sack_set_module_includes   (DnfSack        *sack,
143                                              const DnfPackageSet *pset);
144 void         dnf_sack_set_includes          (DnfSack        *sack,
145                                              const DnfPackageSet *pset);
146 void         dnf_sack_reset_excludes        (DnfSack        *sack);
147 void         dnf_sack_reset_module_excludes (DnfSack        *sack);
148 void         dnf_sack_reset_includes        (DnfSack        *sack);
149 DnfPackageSet *dnf_sack_get_includes        (DnfSack        *sack);
150 DnfPackageSet *dnf_sack_get_excludes        (DnfSack        *sack);
151 DnfPackageSet *dnf_sack_get_module_excludes (DnfSack        *sack);
152 DnfPackageSet *dnf_sack_get_module_includes (DnfSack        *sack);
153 gboolean     dnf_sack_set_use_includes      (DnfSack        *sack,
154                                              const char     *reponame,
155                                              gboolean        enabled);
156 gboolean     dnf_sack_get_use_includes      (DnfSack        *sack,
157                                              const char     *reponame,
158                                              gboolean       *enabled);
159 int          dnf_sack_repo_enabled          (DnfSack        *sack,
160                                              const char     *reponame,
161                                              int             enabled);
162 gboolean     dnf_sack_load_system_repo      (DnfSack        *sack,
163                                              HyRepo          a_hrepo,
164                                              int             flags,
165                                              GError        **error);
166 gboolean     dnf_sack_load_repo             (DnfSack        *sack,
167                                              HyRepo          hrepo,
168                                              int             flags,
169                                              GError        **error);
170 Pool        *dnf_sack_get_pool              (DnfSack    *sack);
171 
172 void dnf_sack_filter_modules(DnfSack *sack, GPtrArray *repos, const char *install_root,
173     const char * platformModule);
174 
175 
176 /**********************************************************************/
177 
178 /**
179  * DnfSackAddFlags:
180  * @DNF_SACK_ADD_FLAG_NONE:                     Add the primary
181  * @DNF_SACK_ADD_FLAG_FILELISTS:                Add the filelists
182  * @DNF_SACK_ADD_FLAG_UPDATEINFO:               Add the updateinfo
183  * @DNF_SACK_ADD_FLAG_REMOTE:                   Use remote repos
184  * @DNF_SACK_ADD_FLAG_UNAVAILABLE:              Add repos that are unavailable
185  * @DNF_SACK_ADD_FLAG_OTHER:                    Add the other
186  *
187  * Flags to control repo loading into the sack.
188  **/
189 typedef enum {
190         DNF_SACK_ADD_FLAG_NONE                  = 0,
191         DNF_SACK_ADD_FLAG_FILELISTS             = 1 << 0,
192         DNF_SACK_ADD_FLAG_UPDATEINFO            = 1 << 1,
193         DNF_SACK_ADD_FLAG_REMOTE                = 1 << 2,
194         DNF_SACK_ADD_FLAG_UNAVAILABLE           = 1 << 3,
195         DNF_SACK_ADD_FLAG_OTHER                 = 1 << 4,
196         /*< private >*/
197         DNF_SACK_ADD_FLAG_LAST
198 } DnfSackAddFlags;
199 
200 gboolean         dnf_sack_add_repo            (DnfSack        *sack,
201                                                  DnfRepo      *repo,
202                                                  guint           permissible_cache_age,
203                                                  DnfSackAddFlags flags,
204                                                  DnfState       *state,
205                                                  GError         **error);
206 gboolean         dnf_sack_add_repos           (DnfSack        *sack,
207                                                  GPtrArray      *repos,
208                                                  guint           permissible_cache_age,
209                                                  DnfSackAddFlags flags,
210                                                  DnfState       *state,
211                                                  GError         **error);
212 
213 G_END_DECLS
214 
215 #endif /* __DNF_SACK_H */
216