doc: document callbacks
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
bf26b6bbf7
commit
e9ac13776e
1 changed files with 271 additions and 168 deletions
|
@ -616,105 +616,12 @@ void alpm_conflict_free(alpm_conflict_t *conflict);
|
||||||
/* End of alpm_depends */
|
/* End of alpm_depends */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*
|
|
||||||
* Enumerations
|
|
||||||
* These ones are used in multiple contexts, so are forward-declared.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** Package install reasons. */
|
/** \addtogroup alpm_cb Callbacks
|
||||||
typedef enum _alpm_pkgreason_t {
|
* @brief Functions and structures for libalpm's callbacks
|
||||||
/** Explicitly requested by the user. */
|
|
||||||
ALPM_PKG_REASON_EXPLICIT = 0,
|
|
||||||
/** Installed as a dependency for another package. */
|
|
||||||
ALPM_PKG_REASON_DEPEND = 1
|
|
||||||
} alpm_pkgreason_t;
|
|
||||||
|
|
||||||
/** Location a package object was loaded from. */
|
|
||||||
typedef enum _alpm_pkgfrom_t {
|
|
||||||
ALPM_PKG_FROM_FILE = 1,
|
|
||||||
ALPM_PKG_FROM_LOCALDB,
|
|
||||||
ALPM_PKG_FROM_SYNCDB
|
|
||||||
} alpm_pkgfrom_t;
|
|
||||||
|
|
||||||
/** Method used to validate a package. */
|
|
||||||
typedef enum _alpm_pkgvalidation_t {
|
|
||||||
ALPM_PKG_VALIDATION_UNKNOWN = 0,
|
|
||||||
ALPM_PKG_VALIDATION_NONE = (1 << 0),
|
|
||||||
ALPM_PKG_VALIDATION_MD5SUM = (1 << 1),
|
|
||||||
ALPM_PKG_VALIDATION_SHA256SUM = (1 << 2),
|
|
||||||
ALPM_PKG_VALIDATION_SIGNATURE = (1 << 3)
|
|
||||||
} alpm_pkgvalidation_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Structures
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** Package group */
|
|
||||||
typedef struct _alpm_group_t {
|
|
||||||
/** group name */
|
|
||||||
char *name;
|
|
||||||
/** list of alpm_pkg_t packages */
|
|
||||||
alpm_list_t *packages;
|
|
||||||
} alpm_group_t;
|
|
||||||
|
|
||||||
/** File in a package */
|
|
||||||
typedef struct _alpm_file_t {
|
|
||||||
char *name;
|
|
||||||
off_t size;
|
|
||||||
mode_t mode;
|
|
||||||
} alpm_file_t;
|
|
||||||
|
|
||||||
/** Package filelist container */
|
|
||||||
typedef struct _alpm_filelist_t {
|
|
||||||
size_t count;
|
|
||||||
alpm_file_t *files;
|
|
||||||
} alpm_filelist_t;
|
|
||||||
|
|
||||||
/** Local package or package file backup entry */
|
|
||||||
typedef struct _alpm_backup_t {
|
|
||||||
char *name;
|
|
||||||
char *hash;
|
|
||||||
} alpm_backup_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hooks
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef enum _alpm_hook_when_t {
|
|
||||||
ALPM_HOOK_PRE_TRANSACTION = 1,
|
|
||||||
ALPM_HOOK_POST_TRANSACTION
|
|
||||||
} alpm_hook_when_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Logging facilities
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \addtogroup alpm_log Logging Functions
|
|
||||||
* @brief Functions to log using libalpm
|
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Logging Levels */
|
|
||||||
typedef enum _alpm_loglevel_t {
|
|
||||||
ALPM_LOG_ERROR = 1,
|
|
||||||
ALPM_LOG_WARNING = (1 << 1),
|
|
||||||
ALPM_LOG_DEBUG = (1 << 2),
|
|
||||||
ALPM_LOG_FUNCTION = (1 << 3)
|
|
||||||
} alpm_loglevel_t;
|
|
||||||
|
|
||||||
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
|
|
||||||
|
|
||||||
/** A printf-like function for logging.
|
|
||||||
* @param handle the context handle
|
|
||||||
* @param prefix caller-specific prefix for the log
|
|
||||||
* @param fmt output format
|
|
||||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
|
||||||
*/
|
|
||||||
int alpm_logaction(alpm_handle_t *handle, const char *prefix,
|
|
||||||
const char *fmt, ...) __attribute__((format(printf, 3, 4)));
|
|
||||||
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of events.
|
* Type of events.
|
||||||
*/
|
*/
|
||||||
|
@ -789,7 +696,7 @@ typedef enum _alpm_event_type_t {
|
||||||
/** A .pacnew file was created; See alpm_event_pacnew_created_t for arguments. */
|
/** A .pacnew file was created; See alpm_event_pacnew_created_t for arguments. */
|
||||||
ALPM_EVENT_PACNEW_CREATED,
|
ALPM_EVENT_PACNEW_CREATED,
|
||||||
/** A .pacsave file was created; See alpm_event_pacsave_created_t for
|
/** A .pacsave file was created; See alpm_event_pacsave_created_t for
|
||||||
* arguments */
|
* arguments. */
|
||||||
ALPM_EVENT_PACSAVE_CREATED,
|
ALPM_EVENT_PACSAVE_CREATED,
|
||||||
/** Processing hooks will be started. */
|
/** Processing hooks will be started. */
|
||||||
ALPM_EVENT_HOOK_START,
|
ALPM_EVENT_HOOK_START,
|
||||||
|
@ -797,100 +704,123 @@ typedef enum _alpm_event_type_t {
|
||||||
ALPM_EVENT_HOOK_DONE,
|
ALPM_EVENT_HOOK_DONE,
|
||||||
/** A hook is starting */
|
/** A hook is starting */
|
||||||
ALPM_EVENT_HOOK_RUN_START,
|
ALPM_EVENT_HOOK_RUN_START,
|
||||||
/** A hook has finished running */
|
/** A hook has finished running. */
|
||||||
ALPM_EVENT_HOOK_RUN_DONE
|
ALPM_EVENT_HOOK_RUN_DONE
|
||||||
} alpm_event_type_t;
|
} alpm_event_type_t;
|
||||||
|
|
||||||
|
/** An event that may reprisent any event. */
|
||||||
typedef struct _alpm_event_any_t {
|
typedef struct _alpm_event_any_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
} alpm_event_any_t;
|
} alpm_event_any_t;
|
||||||
|
|
||||||
|
/** An enum over the kind of package operations. */
|
||||||
typedef enum _alpm_package_operation_t {
|
typedef enum _alpm_package_operation_t {
|
||||||
/** Package (to be) installed. (No oldpkg) */
|
/** Package (to be) installed. (No oldpkg) */
|
||||||
ALPM_PACKAGE_INSTALL = 1,
|
ALPM_PACKAGE_INSTALL = 1,
|
||||||
/** Package (to be) upgraded */
|
/** Package (to be) upgraded */
|
||||||
ALPM_PACKAGE_UPGRADE,
|
ALPM_PACKAGE_UPGRADE,
|
||||||
/** Package (to be) re-installed. */
|
/** Package (to be) re-installed */
|
||||||
ALPM_PACKAGE_REINSTALL,
|
ALPM_PACKAGE_REINSTALL,
|
||||||
/** Package (to be) downgraded. */
|
/** Package (to be) downgraded */
|
||||||
ALPM_PACKAGE_DOWNGRADE,
|
ALPM_PACKAGE_DOWNGRADE,
|
||||||
/** Package (to be) removed. (No newpkg) */
|
/** Package (to be) removed (No newpkg) */
|
||||||
ALPM_PACKAGE_REMOVE
|
ALPM_PACKAGE_REMOVE
|
||||||
} alpm_package_operation_t;
|
} alpm_package_operation_t;
|
||||||
|
|
||||||
|
/** A package operation event occurred. */
|
||||||
typedef struct _alpm_event_package_operation_t {
|
typedef struct _alpm_event_package_operation_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Type of operation. */
|
/** Type of operation */
|
||||||
alpm_package_operation_t operation;
|
alpm_package_operation_t operation;
|
||||||
/** Old package. */
|
/** Old package */
|
||||||
alpm_pkg_t *oldpkg;
|
alpm_pkg_t *oldpkg;
|
||||||
/** New package. */
|
/** New package */
|
||||||
alpm_pkg_t *newpkg;
|
alpm_pkg_t *newpkg;
|
||||||
} alpm_event_package_operation_t;
|
} alpm_event_package_operation_t;
|
||||||
|
|
||||||
|
/** An optional dependency was removed. */
|
||||||
typedef struct _alpm_event_optdep_removal_t {
|
typedef struct _alpm_event_optdep_removal_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Package with the optdep. */
|
/** Package with the optdep */
|
||||||
alpm_pkg_t *pkg;
|
alpm_pkg_t *pkg;
|
||||||
/** Optdep being removed. */
|
/** Optdep being removed */
|
||||||
alpm_depend_t *optdep;
|
alpm_depend_t *optdep;
|
||||||
} alpm_event_optdep_removal_t;
|
} alpm_event_optdep_removal_t;
|
||||||
|
|
||||||
|
/** A scriptlet was ran. */
|
||||||
typedef struct _alpm_event_scriptlet_info_t {
|
typedef struct _alpm_event_scriptlet_info_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Line of scriptlet output. */
|
/** Line of scriptlet output */
|
||||||
const char *line;
|
const char *line;
|
||||||
} alpm_event_scriptlet_info_t;
|
} alpm_event_scriptlet_info_t;
|
||||||
|
|
||||||
|
|
||||||
|
/** A database is missing.
|
||||||
|
*
|
||||||
|
* The database is registered but has not been downloaded
|
||||||
|
*/
|
||||||
typedef struct _alpm_event_database_missing_t {
|
typedef struct _alpm_event_database_missing_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Name of the database. */
|
/** Name of the database */
|
||||||
const char *dbname;
|
const char *dbname;
|
||||||
} alpm_event_database_missing_t;
|
} alpm_event_database_missing_t;
|
||||||
|
|
||||||
|
/** A package was downloaded. */
|
||||||
typedef struct _alpm_event_pkgdownload_t {
|
typedef struct _alpm_event_pkgdownload_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Name of the file */
|
/** Name of the file */
|
||||||
const char *file;
|
const char *file;
|
||||||
} alpm_event_pkgdownload_t;
|
} alpm_event_pkgdownload_t;
|
||||||
|
|
||||||
|
/** A pacnew file was created. */
|
||||||
typedef struct _alpm_event_pacnew_created_t {
|
typedef struct _alpm_event_pacnew_created_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Whether the creation was result of a NoUpgrade or not */
|
/** Whether the creation was result of a NoUpgrade or not */
|
||||||
int from_noupgrade;
|
int from_noupgrade;
|
||||||
/** Old package. */
|
/** Old package */
|
||||||
alpm_pkg_t *oldpkg;
|
alpm_pkg_t *oldpkg;
|
||||||
/** New Package. */
|
/** New Package */
|
||||||
alpm_pkg_t *newpkg;
|
alpm_pkg_t *newpkg;
|
||||||
/** Filename of the file without the .pacnew suffix */
|
/** Filename of the file without the .pacnew suffix */
|
||||||
const char *file;
|
const char *file;
|
||||||
} alpm_event_pacnew_created_t;
|
} alpm_event_pacnew_created_t;
|
||||||
|
|
||||||
|
/** A pacsave file was created. */
|
||||||
typedef struct _alpm_event_pacsave_created_t {
|
typedef struct _alpm_event_pacsave_created_t {
|
||||||
/** Type of event. */
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Old package. */
|
/** Old package */
|
||||||
alpm_pkg_t *oldpkg;
|
alpm_pkg_t *oldpkg;
|
||||||
/** Filename of the file without the .pacsave suffix. */
|
/** Filename of the file without the .pacsave suffix */
|
||||||
const char *file;
|
const char *file;
|
||||||
} alpm_event_pacsave_created_t;
|
} alpm_event_pacsave_created_t;
|
||||||
|
|
||||||
|
/** Kind of hook. */
|
||||||
|
typedef enum _alpm_hook_when_t {
|
||||||
|
/* Pre transaction hook */
|
||||||
|
ALPM_HOOK_PRE_TRANSACTION = 1,
|
||||||
|
/* Post transaction hook */
|
||||||
|
ALPM_HOOK_POST_TRANSACTION
|
||||||
|
} alpm_hook_when_t;
|
||||||
|
|
||||||
|
/** pre/post transaction hooks are to be ran. */
|
||||||
typedef struct _alpm_event_hook_t {
|
typedef struct _alpm_event_hook_t {
|
||||||
/** Type of event.*/
|
/** Type of event*/
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Type of hooks. */
|
/** Type of hook */
|
||||||
alpm_hook_when_t when;
|
alpm_hook_when_t when;
|
||||||
} alpm_event_hook_t;
|
} alpm_event_hook_t;
|
||||||
|
|
||||||
|
/** A pre/post transaction hook was ran. */
|
||||||
typedef struct _alpm_event_hook_run_t {
|
typedef struct _alpm_event_hook_run_t {
|
||||||
/** Type of event.*/
|
/** Type of event */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
/** Name of hook */
|
/** Name of hook */
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -903,185 +833,260 @@ typedef struct _alpm_event_hook_run_t {
|
||||||
} alpm_event_hook_run_t;
|
} alpm_event_hook_run_t;
|
||||||
|
|
||||||
/** Events.
|
/** Events.
|
||||||
* This is an union passed to the callback, that allows the frontend to know
|
* This is a union passed to the callback that allows the frontend to know
|
||||||
* which type of event was triggered (via type). It is then possible to
|
* which type of event was triggered (via type). It is then possible to
|
||||||
* typecast the pointer to the right structure, or use the union field, in order
|
* typecast the pointer to the right structure, or use the union field, in order
|
||||||
* to access event-specific data. */
|
* to access event-specific data. */
|
||||||
typedef union _alpm_event_t {
|
typedef union _alpm_event_t {
|
||||||
|
/** Type of event it's always safe to access this. */
|
||||||
alpm_event_type_t type;
|
alpm_event_type_t type;
|
||||||
|
/** The any event type. It's always safe to access this. */
|
||||||
alpm_event_any_t any;
|
alpm_event_any_t any;
|
||||||
|
/** Package operation */
|
||||||
alpm_event_package_operation_t package_operation;
|
alpm_event_package_operation_t package_operation;
|
||||||
|
/** An optdept was remove */
|
||||||
alpm_event_optdep_removal_t optdep_removal;
|
alpm_event_optdep_removal_t optdep_removal;
|
||||||
|
/** A scriptlet was ran */
|
||||||
alpm_event_scriptlet_info_t scriptlet_info;
|
alpm_event_scriptlet_info_t scriptlet_info;
|
||||||
|
/** A database is missing */
|
||||||
alpm_event_database_missing_t database_missing;
|
alpm_event_database_missing_t database_missing;
|
||||||
|
/** A package was downloaded */
|
||||||
alpm_event_pkgdownload_t pkgdownload;
|
alpm_event_pkgdownload_t pkgdownload;
|
||||||
|
/** A pacnew file was created */
|
||||||
alpm_event_pacnew_created_t pacnew_created;
|
alpm_event_pacnew_created_t pacnew_created;
|
||||||
|
/** A pacsave file was created */
|
||||||
alpm_event_pacsave_created_t pacsave_created;
|
alpm_event_pacsave_created_t pacsave_created;
|
||||||
|
/** Pre/post transaction hooks are being ran */
|
||||||
alpm_event_hook_t hook;
|
alpm_event_hook_t hook;
|
||||||
|
/** A hook was ran */
|
||||||
alpm_event_hook_run_t hook_run;
|
alpm_event_hook_run_t hook_run;
|
||||||
} alpm_event_t;
|
} alpm_event_t;
|
||||||
|
|
||||||
/** Event callback. */
|
/** Event callback.
|
||||||
|
*
|
||||||
|
* Called when an event occurs
|
||||||
|
* @param event the event that occurred */
|
||||||
typedef void (*alpm_cb_event)(alpm_event_t *);
|
typedef void (*alpm_cb_event)(alpm_event_t *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of questions.
|
* Type of question.
|
||||||
* Unlike the events or progress enumerations, this enum has bitmask values
|
* Unlike the events or progress enumerations, this enum has bitmask values
|
||||||
* so a frontend can use a bitmask map to supply preselected answers to the
|
* so a frontend can use a bitmask map to supply preselected answers to the
|
||||||
* different types of questions.
|
* different types of questions.
|
||||||
*/
|
*/
|
||||||
typedef enum _alpm_question_type_t {
|
typedef enum _alpm_question_type_t {
|
||||||
|
/** Should target in ignorepkg be installed anyway? */
|
||||||
ALPM_QUESTION_INSTALL_IGNOREPKG = (1 << 0),
|
ALPM_QUESTION_INSTALL_IGNOREPKG = (1 << 0),
|
||||||
|
/** Should a package be replaced? */
|
||||||
ALPM_QUESTION_REPLACE_PKG = (1 << 1),
|
ALPM_QUESTION_REPLACE_PKG = (1 << 1),
|
||||||
|
/** Should a conflicting package be removed? */
|
||||||
ALPM_QUESTION_CONFLICT_PKG = (1 << 2),
|
ALPM_QUESTION_CONFLICT_PKG = (1 << 2),
|
||||||
|
/** Should a corrupted package be deleted? */
|
||||||
ALPM_QUESTION_CORRUPTED_PKG = (1 << 3),
|
ALPM_QUESTION_CORRUPTED_PKG = (1 << 3),
|
||||||
|
/** Should unresolvable targets be removed from the transaction? */
|
||||||
ALPM_QUESTION_REMOVE_PKGS = (1 << 4),
|
ALPM_QUESTION_REMOVE_PKGS = (1 << 4),
|
||||||
|
/** Provider selection */
|
||||||
ALPM_QUESTION_SELECT_PROVIDER = (1 << 5),
|
ALPM_QUESTION_SELECT_PROVIDER = (1 << 5),
|
||||||
|
/** Should a key be imported? */
|
||||||
ALPM_QUESTION_IMPORT_KEY = (1 << 6)
|
ALPM_QUESTION_IMPORT_KEY = (1 << 6)
|
||||||
} alpm_question_type_t;
|
} alpm_question_type_t;
|
||||||
|
|
||||||
|
/** A question that can represent any other question. */
|
||||||
typedef struct _alpm_question_any_t {
|
typedef struct _alpm_question_any_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer. */
|
/** Answer */
|
||||||
int answer;
|
int answer;
|
||||||
} alpm_question_any_t;
|
} alpm_question_any_t;
|
||||||
|
|
||||||
|
/** Should target in ignorepkg be installed anyway? */
|
||||||
typedef struct _alpm_question_install_ignorepkg_t {
|
typedef struct _alpm_question_install_ignorepkg_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to install pkg anyway. */
|
/** Answer: whether or not to install pkg anyway */
|
||||||
int install;
|
int install;
|
||||||
/* Package in IgnorePkg/IgnoreGroup. */
|
/** The ignored package that we are deciding whether to install */
|
||||||
alpm_pkg_t *pkg;
|
alpm_pkg_t *pkg;
|
||||||
} alpm_question_install_ignorepkg_t;
|
} alpm_question_install_ignorepkg_t;
|
||||||
|
|
||||||
|
/** Should a package be replaced? */
|
||||||
typedef struct _alpm_question_replace_t {
|
typedef struct _alpm_question_replace_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to replace oldpkg with newpkg. */
|
/** Answer: whether or not to replace oldpkg with newpkg */
|
||||||
int replace;
|
int replace;
|
||||||
/* Package to be replaced. */
|
/** Package to be replaced */
|
||||||
alpm_pkg_t *oldpkg;
|
alpm_pkg_t *oldpkg;
|
||||||
/* Package to replace with. */
|
/** Package to replace with.*/
|
||||||
alpm_pkg_t *newpkg;
|
alpm_pkg_t *newpkg;
|
||||||
/* DB of newpkg */
|
/** DB of newpkg */
|
||||||
alpm_db_t *newdb;
|
alpm_db_t *newdb;
|
||||||
} alpm_question_replace_t;
|
} alpm_question_replace_t;
|
||||||
|
|
||||||
|
/** Should a conflicting package be removed? */
|
||||||
typedef struct _alpm_question_conflict_t {
|
typedef struct _alpm_question_conflict_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to remove conflict->package2. */
|
/** Answer: whether or not to remove conflict->package2 */
|
||||||
int remove;
|
int remove;
|
||||||
/** Conflict info. */
|
/** Conflict info */
|
||||||
alpm_conflict_t *conflict;
|
alpm_conflict_t *conflict;
|
||||||
} alpm_question_conflict_t;
|
} alpm_question_conflict_t;
|
||||||
|
|
||||||
|
/** Should a corrupted package be deleted? */
|
||||||
typedef struct _alpm_question_corrupted_t {
|
typedef struct _alpm_question_corrupted_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to remove filepath. */
|
/** Answer: whether or not to remove filepath */
|
||||||
int remove;
|
int remove;
|
||||||
/** Filename to remove */
|
/** File to remove */
|
||||||
const char *filepath;
|
const char *filepath;
|
||||||
/** Error code indicating the reason for package invalidity */
|
/** Error code indicating the reason for package invalidity */
|
||||||
alpm_errno_t reason;
|
alpm_errno_t reason;
|
||||||
} alpm_question_corrupted_t;
|
} alpm_question_corrupted_t;
|
||||||
|
|
||||||
|
/** Should unresolvable targets be removed from the transaction? */
|
||||||
typedef struct _alpm_question_remove_pkgs_t {
|
typedef struct _alpm_question_remove_pkgs_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to skip packages. */
|
/** Answer: whether or not to skip packages */
|
||||||
int skip;
|
int skip;
|
||||||
/** List of alpm_pkg_t* with unresolved dependencies. */
|
/** List of alpm_pkg_t* with unresolved dependencies */
|
||||||
alpm_list_t *packages;
|
alpm_list_t *packages;
|
||||||
} alpm_question_remove_pkgs_t;
|
} alpm_question_remove_pkgs_t;
|
||||||
|
|
||||||
|
/** Provider selection */
|
||||||
typedef struct _alpm_question_select_provider_t {
|
typedef struct _alpm_question_select_provider_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: which provider to use (index from providers). */
|
/** Answer: which provider to use (index from providers) */
|
||||||
int use_index;
|
int use_index;
|
||||||
/** List of alpm_pkg_t* as possible providers. */
|
/** List of alpm_pkg_t* as possible providers */
|
||||||
alpm_list_t *providers;
|
alpm_list_t *providers;
|
||||||
/** What providers provide for. */
|
/** What providers provide for */
|
||||||
alpm_depend_t *depend;
|
alpm_depend_t *depend;
|
||||||
} alpm_question_select_provider_t;
|
} alpm_question_select_provider_t;
|
||||||
|
|
||||||
|
/** Should a key be imported? */
|
||||||
typedef struct _alpm_question_import_key_t {
|
typedef struct _alpm_question_import_key_t {
|
||||||
/** Type of question. */
|
/** Type of question */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
/** Answer: whether or not to import key. */
|
/** Answer: whether or not to import key */
|
||||||
int import;
|
int import;
|
||||||
/** The key to import. */
|
/** The key to import */
|
||||||
alpm_pgpkey_t *key;
|
alpm_pgpkey_t *key;
|
||||||
} alpm_question_import_key_t;
|
} alpm_question_import_key_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Questions.
|
* Questions.
|
||||||
* This is an union passed to the callback, that allows the frontend to know
|
* This is an union passed to the callback that allows the frontend to know
|
||||||
* which type of question was triggered (via type). It is then possible to
|
* which type of question was triggered (via type). It is then possible to
|
||||||
* typecast the pointer to the right structure, or use the union field, in order
|
* typecast the pointer to the right structure, or use the union field, in order
|
||||||
* to access question-specific data. */
|
* to access question-specific data. */
|
||||||
typedef union _alpm_question_t {
|
typedef union _alpm_question_t {
|
||||||
|
/** The type of question. It's always safe to access this. */
|
||||||
alpm_question_type_t type;
|
alpm_question_type_t type;
|
||||||
|
/** A question that can represent any question.
|
||||||
|
* It's always safe to access this. */
|
||||||
alpm_question_any_t any;
|
alpm_question_any_t any;
|
||||||
|
/** Should target in ignorepkg be installed anyway? */
|
||||||
alpm_question_install_ignorepkg_t install_ignorepkg;
|
alpm_question_install_ignorepkg_t install_ignorepkg;
|
||||||
|
/** Should a package be replaced? */
|
||||||
alpm_question_replace_t replace;
|
alpm_question_replace_t replace;
|
||||||
|
/** Should a conflicting package be removed? */
|
||||||
alpm_question_conflict_t conflict;
|
alpm_question_conflict_t conflict;
|
||||||
|
/** Should a corrupted package be deleted? */
|
||||||
alpm_question_corrupted_t corrupted;
|
alpm_question_corrupted_t corrupted;
|
||||||
|
/** Should unresolvable targets be removed from the transaction? */
|
||||||
alpm_question_remove_pkgs_t remove_pkgs;
|
alpm_question_remove_pkgs_t remove_pkgs;
|
||||||
|
/** Provider selection */
|
||||||
alpm_question_select_provider_t select_provider;
|
alpm_question_select_provider_t select_provider;
|
||||||
|
/** Should a key be imported? */
|
||||||
alpm_question_import_key_t import_key;
|
alpm_question_import_key_t import_key;
|
||||||
} alpm_question_t;
|
} alpm_question_t;
|
||||||
|
|
||||||
/** Question callback */
|
/** Question callback.
|
||||||
|
*
|
||||||
|
* This callback allows user to give input and decide what to do during certain events
|
||||||
|
* @param question the question being asked.
|
||||||
|
*/
|
||||||
typedef void (*alpm_cb_question)(alpm_question_t *);
|
typedef void (*alpm_cb_question)(alpm_question_t *);
|
||||||
|
|
||||||
/** Progress */
|
/** An enum over different kinds of progress alerts. */
|
||||||
typedef enum _alpm_progress_t {
|
typedef enum _alpm_progress_t {
|
||||||
|
/** Package install */
|
||||||
ALPM_PROGRESS_ADD_START,
|
ALPM_PROGRESS_ADD_START,
|
||||||
|
/** Package upgrade */
|
||||||
ALPM_PROGRESS_UPGRADE_START,
|
ALPM_PROGRESS_UPGRADE_START,
|
||||||
|
/** Package downgrade */
|
||||||
ALPM_PROGRESS_DOWNGRADE_START,
|
ALPM_PROGRESS_DOWNGRADE_START,
|
||||||
|
/** Package reinstall */
|
||||||
ALPM_PROGRESS_REINSTALL_START,
|
ALPM_PROGRESS_REINSTALL_START,
|
||||||
|
/** Package removal */
|
||||||
ALPM_PROGRESS_REMOVE_START,
|
ALPM_PROGRESS_REMOVE_START,
|
||||||
|
/** Conflict checking */
|
||||||
ALPM_PROGRESS_CONFLICTS_START,
|
ALPM_PROGRESS_CONFLICTS_START,
|
||||||
|
/** Diskspace checking */
|
||||||
ALPM_PROGRESS_DISKSPACE_START,
|
ALPM_PROGRESS_DISKSPACE_START,
|
||||||
|
/** Package Integrity checking */
|
||||||
ALPM_PROGRESS_INTEGRITY_START,
|
ALPM_PROGRESS_INTEGRITY_START,
|
||||||
|
/** Loading packages from disk */
|
||||||
ALPM_PROGRESS_LOAD_START,
|
ALPM_PROGRESS_LOAD_START,
|
||||||
|
/** Checking signatures of packages */
|
||||||
ALPM_PROGRESS_KEYRING_START
|
ALPM_PROGRESS_KEYRING_START
|
||||||
} alpm_progress_t;
|
} alpm_progress_t;
|
||||||
|
|
||||||
|
/** Progress callback
|
||||||
|
*
|
||||||
|
* Alert the front end about the progress of certain events.
|
||||||
|
* Allows the implementation of loading bars for events that
|
||||||
|
* make take a while to complete.
|
||||||
|
* @param progress the kind of event that is progressing
|
||||||
|
* @param pkg for package operations, the name of the package being operated on
|
||||||
|
* @param percent the percent completion of the action
|
||||||
|
* @param howmany the total amount of items in the action
|
||||||
|
* @param current the current amount of items completed
|
||||||
|
*/
|
||||||
/** Progress callback */
|
/** Progress callback */
|
||||||
typedef void (*alpm_cb_progress)(alpm_progress_t, const char *, int, size_t, size_t);
|
typedef void (*alpm_cb_progress)(alpm_progress_t progress, const char *pkg,
|
||||||
|
int percent, size_t howmany, size_t current);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Downloading
|
* Downloading
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File download events.
|
/** File download events.
|
||||||
* These events are reported by ALPM via download callback.
|
* These events are reported by ALPM via download callback.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum _alpm_download_event_type_t {
|
||||||
ALPM_DOWNLOAD_INIT, /* alpm initializes file download logic */
|
/** A download was started */
|
||||||
ALPM_DOWNLOAD_PROGRESS, /* download progress reported */
|
ALPM_DOWNLOAD_INIT,
|
||||||
ALPM_DOWNLOAD_COMPLETED /* alpm is about to release data related to the file */
|
/** A download made progress */
|
||||||
|
ALPM_DOWNLOAD_PROGRESS,
|
||||||
|
/** A download completed */
|
||||||
|
ALPM_DOWNLOAD_COMPLETED
|
||||||
} alpm_download_event_type_t;
|
} alpm_download_event_type_t;
|
||||||
|
|
||||||
typedef struct {
|
/** Context struct for when a download starts. */
|
||||||
int optional; /* whether this file is optional and thus the errors could be ignored */
|
typedef struct _alpm_download_event_init_t {
|
||||||
|
/** whether this file is optional and thus the errors could be ignored */
|
||||||
|
int optional;
|
||||||
} alpm_download_event_init_t;
|
} alpm_download_event_init_t;
|
||||||
|
|
||||||
typedef struct {
|
/** Context struct for when a download progresses. */
|
||||||
off_t downloaded; /* amount of data downloaded */
|
typedef struct _alpm_download_event_progress_t {
|
||||||
off_t total; /* total amount need to be downloaded */
|
/** Amount of data downloaded */
|
||||||
|
off_t downloaded;
|
||||||
|
/** Total amount need to be downloaded */
|
||||||
|
off_t total;
|
||||||
} alpm_download_event_progress_t;
|
} alpm_download_event_progress_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
/* total bytes in file */
|
/** Context struct for when a download completes. */
|
||||||
|
typedef struct _alpm_download_event_completed_t {
|
||||||
|
/** Total bytes in file */
|
||||||
off_t total;
|
off_t total;
|
||||||
/* download result code:
|
/** download result code:
|
||||||
* 0 - download completed successfully
|
* 0 - download completed successfully
|
||||||
* 1 - the file is up-to-date
|
* 1 - the file is up-to-date
|
||||||
* -1 - error
|
* -1 - error
|
||||||
|
@ -1097,6 +1102,10 @@ typedef struct {
|
||||||
typedef void (*alpm_cb_download)(const char *filename,
|
typedef void (*alpm_cb_download)(const char *filename,
|
||||||
alpm_download_event_type_t event, void *data);
|
alpm_download_event_type_t event, void *data);
|
||||||
|
|
||||||
|
|
||||||
|
/** Total Download callback.
|
||||||
|
* @param total amount that will be downloaded during \link alpm_trans_commit \endlink.
|
||||||
|
*/
|
||||||
typedef void (*alpm_cb_totaldl)(off_t total);
|
typedef void (*alpm_cb_totaldl)(off_t total);
|
||||||
|
|
||||||
/** A callback for downloading files
|
/** A callback for downloading files
|
||||||
|
@ -1109,6 +1118,100 @@ typedef void (*alpm_cb_totaldl)(off_t total);
|
||||||
typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,
|
typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,
|
||||||
int force);
|
int force);
|
||||||
|
|
||||||
|
/* End of alpm_cb */
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enumerations
|
||||||
|
* These ones are used in multiple contexts, so are forward-declared.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Package install reasons. */
|
||||||
|
typedef enum _alpm_pkgreason_t {
|
||||||
|
/** Explicitly requested by the user. */
|
||||||
|
ALPM_PKG_REASON_EXPLICIT = 0,
|
||||||
|
/** Installed as a dependency for another package. */
|
||||||
|
ALPM_PKG_REASON_DEPEND = 1
|
||||||
|
} alpm_pkgreason_t;
|
||||||
|
|
||||||
|
/** Location a package object was loaded from. */
|
||||||
|
typedef enum _alpm_pkgfrom_t {
|
||||||
|
ALPM_PKG_FROM_FILE = 1,
|
||||||
|
ALPM_PKG_FROM_LOCALDB,
|
||||||
|
ALPM_PKG_FROM_SYNCDB
|
||||||
|
} alpm_pkgfrom_t;
|
||||||
|
|
||||||
|
/** Method used to validate a package. */
|
||||||
|
typedef enum _alpm_pkgvalidation_t {
|
||||||
|
ALPM_PKG_VALIDATION_UNKNOWN = 0,
|
||||||
|
ALPM_PKG_VALIDATION_NONE = (1 << 0),
|
||||||
|
ALPM_PKG_VALIDATION_MD5SUM = (1 << 1),
|
||||||
|
ALPM_PKG_VALIDATION_SHA256SUM = (1 << 2),
|
||||||
|
ALPM_PKG_VALIDATION_SIGNATURE = (1 << 3)
|
||||||
|
} alpm_pkgvalidation_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structures
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Package group */
|
||||||
|
typedef struct _alpm_group_t {
|
||||||
|
/** group name */
|
||||||
|
char *name;
|
||||||
|
/** list of alpm_pkg_t packages */
|
||||||
|
alpm_list_t *packages;
|
||||||
|
} alpm_group_t;
|
||||||
|
|
||||||
|
/** File in a package */
|
||||||
|
typedef struct _alpm_file_t {
|
||||||
|
char *name;
|
||||||
|
off_t size;
|
||||||
|
mode_t mode;
|
||||||
|
} alpm_file_t;
|
||||||
|
|
||||||
|
/** Package filelist container */
|
||||||
|
typedef struct _alpm_filelist_t {
|
||||||
|
size_t count;
|
||||||
|
alpm_file_t *files;
|
||||||
|
} alpm_filelist_t;
|
||||||
|
|
||||||
|
/** Local package or package file backup entry */
|
||||||
|
typedef struct _alpm_backup_t {
|
||||||
|
char *name;
|
||||||
|
char *hash;
|
||||||
|
} alpm_backup_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Logging facilities
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \addtogroup alpm_log Logging Functions
|
||||||
|
* @brief Functions to log using libalpm
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Logging Levels */
|
||||||
|
typedef enum _alpm_loglevel_t {
|
||||||
|
ALPM_LOG_ERROR = 1,
|
||||||
|
ALPM_LOG_WARNING = (1 << 1),
|
||||||
|
ALPM_LOG_DEBUG = (1 << 2),
|
||||||
|
ALPM_LOG_FUNCTION = (1 << 3)
|
||||||
|
} alpm_loglevel_t;
|
||||||
|
|
||||||
|
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
|
||||||
|
|
||||||
|
/** A printf-like function for logging.
|
||||||
|
* @param handle the context handle
|
||||||
|
* @param prefix caller-specific prefix for the log
|
||||||
|
* @param fmt output format
|
||||||
|
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||||
|
*/
|
||||||
|
int alpm_logaction(alpm_handle_t *handle, const char *prefix,
|
||||||
|
const char *fmt, ...) __attribute__((format(printf, 3, 4)));
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/** Fetch a list of remote packages.
|
/** Fetch a list of remote packages.
|
||||||
* @param handle the context handle
|
* @param handle the context handle
|
||||||
* @param urls list of package URLs to download
|
* @param urls list of package URLs to download
|
||||||
|
|
Loading…
Add table
Reference in a new issue