Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cmd_parser.h « src - github.com/rpm-software-management/createrepo_c.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 3133741126f60a289ecde0d46de5d1acd107b728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/* createrepo_c - Library of routines for manipulation with repodata
 * Copyright (C) 2012  Tomas Mlcoch
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
 * USA.
 */

#ifndef __C_CREATEREPOLIB_CMD_PARSER_H__
#define __C_CREATEREPOLIB_CMD_PARSER_H__

#include <glib.h>
#include "checksum.h"
#include "compression_wrapper.h"

#define DEFAULT_CHANGELOG_LIMIT         10


/**
 * Command line options
 */
struct CmdOptions {

    /* Items filled by cmd option parser */

    char *basedir;              /*!< basedir for path to directories */
    char *location_base;        /*!< base URL location */
    char *outputdir;            /*!< output directory */
    char **excludes;            /*!< list of file globs to exclude */
    char *pkglist;              /*!< file with files to include */
    char **includepkg;          /*!< list of files to include */
    char *groupfile;            /*!< groupfile path or URL */
    gboolean quiet;             /*!< quiet mode */
    gboolean verbose;           /*!< verbosely more than usual (debug) */
    gboolean update;            /*!< update repo if metadata already exists */
    gboolean pretty;            /*!< generate pretty xml (just for compatibility) */
    char **update_md_paths;     /*!< list of paths to repositories which should
                                     be used for update */
    gboolean skip_stat;         /*!< skip stat() call during --update */
    gboolean split;             /*!< generate split media */
    gboolean version;           /*!< print program version */
    gboolean database;          /*!< create sqlite database metadata */
    gboolean no_database;       /*!< do not create database */
    char *checksum;             /*!< type of checksum */
    char *compress_type;        /*!< which compression type to use */
    char *general_compress_type;/*!< which compression type to use (even for
                                     primary, filelists and other xml) */
    gboolean skip_symlinks;     /*!< ignore symlinks of packages */
    gint changelog_limit;       /*!< number of changelog messages in
                                     other.(xml|sqlite) */
    gboolean unique_md_filenames;       /*!< include the file checksums in
                                             the filenames */
    gboolean simple_md_filenames;       /*!< simple filenames (names without
                                             checksums) */
    gint retain_old;            /*!< keep latest N copies of the old repodata */
    char **distro_tags;         /*!< distro tag and optional cpeid */
    char **content_tags;        /*!< tags for the content in the repository */
    char **repo_tags;           /*!< tags to describe the repo_tagsitory itself */
    char *revision;             /*!< user-specified revision */
    gboolean set_timestamp_to_revision; /*!< use --revision instead of current
                                             time for timestamps */
    char *read_pkgs_list;       /*!< output the paths to pkgs actually read */
    gint workers;               /*!< number of threads to spawn */
    gboolean xz_compression;    /*!< use xz for repodata compression */
    gboolean zck_compression;   /*!< generate zchunk files */
    char *zck_dict_dir;         /*!< directory with zchunk dictionaries */
    gboolean keep_all_metadata; /*!< keep groupfile and updateinfo from source
                                     repo during update */
    gboolean discard_additional_metadata; /*!< Inverse option to keep_all_metadata */
    gboolean ignore_lock;       /*!< Ignore existing .repodata/ - remove it,
                                     create the new one (empty) to serve as
                                     a lock and use a .repodata.date.pid for
                                     data generation. */
    gboolean compatibility;     /*!< Enforce maximal compatibility with
                                     createrepo. I.e. mimics some dump
                                     behavior like perseve old comps file(s)
                                     during update etc.*/
    char *retain_old_md_by_age; /*!< Remove all files in repodata/ older
                                     then specified period of time,
                                     during --update.
                                     Value examples: "360" (360 sec),
                                     "5d" (5 days), ..
                                     Available units: (m - minutes, h - hours,
                                     d - days) */
    char *cachedir;             /*!< Cache dir for checksums */

    gboolean deltas;            /*!< Is delta generation enabled? */
    char **oldpackagedirs;      /*!< Paths to look for older pks
                                     to delta agains */
    gint num_deltas;            /*!< Number of older version to make
                                     deltas against */
    gint64 max_delta_rpm_size;  /*!< Max size of an rpm that to run
                                     deltarpm against */
    gboolean local_sqlite;      /*!< Gen sqlite locally into a directory for
                                     temporary files.
                                     For situations when sqlite has a trouble
                                     to gen DBs on NFS mounts. */
    gint cut_dirs;              /*!< Ignore *num* of directory components
                                     during repodata generation in location
                                     href value. */
    gchar *location_prefix;     /*!< Append this prefix into location_href
                                     during repodata generation. */
    gchar *repomd_checksum;     /*!< Checksum type for entries in repomd.xml */
    gboolean error_exit_val;        /*!< exit 2 on processing errors */

    /* Items filled by check_arguments() */

    char *groupfile_fullpath;   /*!< full path to groupfile */
    GSList *exclude_masks;      /*!< list of exclude masks
                                     (list of GPatternSpec pointers) */
    GSList *include_pkgs;       /*!< list of packages to include (build from
                                     includepkg options and pkglist file) */
    GSList *l_update_md_paths;  /*!< list of repo from update_md_paths
                                     (remote repo are downloaded) */
    GSList *distro_cpeids;      /*!< CPEIDs from --distro params */
    GSList *distro_values;      /*!< values from --distro params */
    cr_ChecksumType checksum_type;          /*!< checksum type */
    cr_ChecksumType repomd_checksum_type;   /*!< checksum type */
    cr_CompressionType compression_type;    /*!< compression type */
    cr_CompressionType general_compression_type; /*!< compression type */
    gint64 md_max_age;          /*!< Max age of files in repodata/.
                                     Older files will be removed
                                     during --update.
                                     Filled if --retain-old-md-by-age
                                     is used */
    char *checksum_cachedir;    /*!< Path to cachedir */
    GSList *oldpackagedirs_paths; /*!< paths to look for older pkgs to delta against */
    GSList *modulemd_metadata;  /*!< paths to all modulemd metadata */

    gboolean recycle_pkglist;
    gboolean delayed_dump;      /*!< Load _all_ the packages (parallel workers)
                                     first, and then dump the database.  This
                                     allows additional package filtering. */
};

/**
 * Parses commandline arguments.
 * @param argc          pointer to argc
 * @param argv          pointer to argv
 * @return              CmdOptions filled by command line arguments
 */
struct CmdOptions *
parse_arguments(int *argc, char ***argv, GError **err);

/**
 * Performs some checks of arguments and fill some other items.
 * in the CmdOptions structure.
 */
gboolean
check_arguments(struct CmdOptions *options,
                const char *inputdir,
                GError **err);

/**
 * Frees CmdOptions.
 * @param options       pointer to struct with command line options
 */
void
free_options(struct CmdOptions *options);

#endif /* __C_CREATEREPOLIB_CMD_PARSER_H__ */