static PyObject* Pakfire_install(PakfireObject* self, PyObject* args, PyObject* kwargs) {
char* kwlist[] = {
"packages",
+ "dryrun",
"without_recommended",
"allow_uninstall",
"allow_downgrade",
NULL
};
char** packages = NULL;
+ int dryrun = 0;
int without_recommended = 0;
int allow_uninstall = 0;
int allow_downgrade = 0;
int solver_flags = 0;
+ int transaction_flags = 0;
PyObject* status_callback = NULL;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$pppO", kwlist,
- convert_packages, &packages, &without_recommended, &allow_uninstall,
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$ppppO", kwlist,
+ convert_packages, &packages, &dryrun, &without_recommended, &allow_uninstall,
&allow_downgrade, &status_callback))
return NULL;
return NULL;
}
+ // Enable dry-run mode
+ if (dryrun)
+ transaction_flags |= PAKFIRE_TRANSACTION_DRY_RUN;
+
// Do not install recommended packages
if (without_recommended)
solver_flags |= PAKFIRE_REQUEST_WITHOUT_RECOMMENDED;
solver_flags |= PAKFIRE_REQUEST_ALLOW_DOWNGRADE;
// Run pakfire_install
- int r = pakfire_install(self->pakfire, solver_flags, (const char**)packages,
- NULL, 0, NULL, Pakfire_status_callback, status_callback);
+ int r = pakfire_install(self->pakfire, transaction_flags, solver_flags,
+ (const char**)packages, NULL, 0, NULL, Pakfire_status_callback, status_callback);
if (r)
PyErr_SetFromErrno(PyExc_OSError);
static PyObject* Pakfire_erase(PakfireObject* self, PyObject* args, PyObject* kwargs) {
char* kwlist[] = {
"packages",
+ "dryrun",
"keep_dependencies",
"status_callback",
NULL
};
char** packages = NULL;
+ int dryrun = 0;
int keep_dependencies = 0;
+ int transaction_flags = 0;
int flags = 0;
PyObject* status_callback = NULL;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$pO", kwlist,
- convert_packages, &packages, &keep_dependencies, &status_callback))
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$ppO", kwlist,
+ convert_packages, &packages, &dryrun, &keep_dependencies, &status_callback))
return NULL;
// Check if callback is callable
return NULL;
}
+ if (dryrun)
+ transaction_flags |= PAKFIRE_TRANSACTION_DRY_RUN;
+
if (keep_dependencies)
flags |= PAKFIRE_REQUEST_KEEP_DEPS;
// Run pakfire_erase
- int r = pakfire_erase(self->pakfire, 0, (const char**)packages, NULL, flags, NULL,
- Pakfire_status_callback, status_callback);
+ int r = pakfire_erase(self->pakfire, transaction_flags, 0, (const char**)packages,
+ NULL, flags, NULL, Pakfire_status_callback, status_callback);
if (r)
PyErr_SetFromErrno(PyExc_OSError);
static PyObject* Pakfire_update(PakfireObject* self, PyObject* args, PyObject* kwargs) {
char* kwlist[] = {
"packages",
+ "dryrun",
"excludes",
"allow_uninstall",
"allow_downgrade",
};
char** packages = NULL;
char** excludes = NULL;
+ int dryrun = 0;
int allow_uninstall = 0;
int allow_downgrade = 0;
int solver_flags = 0;
+ int transaction_flags = 0;
PyObject* status_callback = NULL;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&ppO", kwlist,
return NULL;
}
+ if (dryrun)
+ transaction_flags = PAKFIRE_TRANSACTION_DRY_RUN;
+
// Can the solver uninstall packages?
if (allow_uninstall)
solver_flags |= PAKFIRE_REQUEST_ALLOW_UNINSTALL;
solver_flags |= PAKFIRE_REQUEST_ALLOW_DOWNGRADE;
// Run pakfire_update
- int r = pakfire_update(self->pakfire, solver_flags, (const char**)packages,
- (const char**)excludes, 0, NULL, Pakfire_status_callback, status_callback);
+ int r = pakfire_update(self->pakfire, transaction_flags, solver_flags,
+ (const char**)packages, (const char**)excludes, 0, NULL,
+ Pakfire_status_callback, status_callback);
if (r)
PyErr_SetFromErrno(PyExc_OSError);
};
// Install the package into the build environment
- r = pakfire_install(pakfire, 0, packages, NULL, PAKFIRE_REQUEST_ESSENTIAL,
+ r = pakfire_install(pakfire, 0, 0, packages, NULL, PAKFIRE_REQUEST_ESSENTIAL,
NULL, NULL, NULL);
if (r) {
ERROR(pakfire, "Could not install %s\n", path);
// Install any additional packages
if (packages) {
- r = pakfire_install(pakfire, 0, packages, NULL, 0, NULL, NULL, NULL);
+ r = pakfire_install(pakfire, 0, 0, packages, NULL, 0, NULL, NULL, NULL);
if (r)
return r;
}
// Install/Erase/Update
-int pakfire_install(struct pakfire* pakfire, int solver_flags, const char** packages,
- const char** locks, int job_flags, int* changed,
+int pakfire_install(struct pakfire* pakfire, int transaction_flags, int solver_flags,
+ const char** packages, const char** locks, int job_flags, int* changed,
pakfire_status_callback status_callback, void* status_callback_data);
-int pakfire_erase(struct pakfire* pakfire, int solver_flags, const char** packages,
- const char** locks, int job_flags, int* changed,
+int pakfire_erase(struct pakfire* pakfire, int transaction_flags, int solver_flags,
+ const char** packages, const char** locks, int job_flags, int* changed,
pakfire_status_callback status_callback, void* status_callback_data);
-int pakfire_update(struct pakfire* pakfire, int solver_flags, const char** packages,
- const char** locks, int jobs_flags, int* changed,
+int pakfire_update(struct pakfire* pakfire, int transaction_flags, int solver_flags,
+ const char** packages, const char** locks, int jobs_flags, int* changed,
pakfire_status_callback status_callback, void* status_callback_data);
// Check
struct pakfire_transaction;
+enum pakfire_transaction_flags {
+ PAKFIRE_TRANSACTION_DRY_RUN = (1 << 0),
+};
+
struct pakfire_transaction* pakfire_transaction_ref(struct pakfire_transaction* transaction);
struct pakfire_transaction* pakfire_transaction_unref(struct pakfire_transaction* transaction);
void pakfire_transaction_set_status_callback(
struct pakfire_transaction* transaction, pakfire_status_callback callback, void* data);
-int pakfire_transaction_run(struct pakfire_transaction* transaction);
+int pakfire_transaction_run(struct pakfire_transaction* transaction, int flags);
int pakfire_transaction_download(struct pakfire_transaction* transaction);
// Convenience functions to install/erase/update packages
-static int pakfire_perform_transaction(struct pakfire* pakfire, int solver_flags,
+static int pakfire_perform_transaction(
+ struct pakfire* pakfire,
+ int transaction_flags,
+ int solver_flags,
int (*action)(struct pakfire_request* request, const char* what, int flags),
- const char** packages, const char** locks, int job_flags, int* changed,
- pakfire_status_callback status_callback, void* status_callback_data) {
+ const char** packages,
+ const char** locks,
+ int job_flags,
+ int* changed,
+ pakfire_status_callback status_callback,
+ void* status_callback_data) {
struct pakfire_request* request = NULL;
struct pakfire_transaction* transaction = NULL;
struct pakfire_problem** problems = NULL;
transaction, status_callback, status_callback_data);
// Run the transaction
- r = pakfire_transaction_run(transaction);
+ r = pakfire_transaction_run(transaction, transaction_flags);
if (r)
goto ERROR;
return r;
}
-PAKFIRE_EXPORT int pakfire_install(struct pakfire* pakfire, int solver_flags,
- const char** packages, const char** locks, int flags, int* changed,
- pakfire_status_callback status_callback, void* status_callback_data) {
- return pakfire_perform_transaction(pakfire, solver_flags, pakfire_request_install,
- packages, locks, flags, changed, status_callback, status_callback_data);
-}
-
-PAKFIRE_EXPORT int pakfire_erase(struct pakfire* pakfire, int solver_flags,
- const char** packages, const char** locks, int flags, int* changed,
- pakfire_status_callback status_callback, void* status_callback_data) {
- return pakfire_perform_transaction(pakfire, solver_flags, pakfire_request_erase,
- packages, locks, flags, changed, status_callback, status_callback_data);
+PAKFIRE_EXPORT int pakfire_install(
+ struct pakfire* pakfire,
+ int transaction_flags,
+ int solver_flags,
+ const char** packages,
+ const char** locks,
+ int flags,
+ int* changed,
+ pakfire_status_callback status_callback,
+ void* status_callback_data) {
+ return pakfire_perform_transaction(
+ pakfire,
+ transaction_flags,
+ solver_flags,
+ pakfire_request_install,
+ packages,
+ locks,
+ flags,
+ changed,
+ status_callback,
+ status_callback_data);
+}
+
+PAKFIRE_EXPORT int pakfire_erase(
+ struct pakfire* pakfire,
+ int transaction_flags,
+ int solver_flags,
+ const char** packages,
+ const char** locks,
+ int flags,
+ int* changed,
+ pakfire_status_callback status_callback,
+ void* status_callback_data) {
+ return pakfire_perform_transaction(
+ pakfire,
+ transaction_flags,
+ solver_flags,
+ pakfire_request_erase,
+ packages,
+ locks,
+ flags,
+ changed,
+ status_callback,
+ status_callback_data);
}
static int pakfire_perform_transaction_simple(struct pakfire* pakfire, int solver_flags,
transaction, status_callback, status_callback_data);
// Run the transaction
- r = pakfire_transaction_run(transaction);
+ r = pakfire_transaction_run(transaction, 0);
if (r)
goto ERROR;
return r;
}
-PAKFIRE_EXPORT int pakfire_update(struct pakfire* pakfire, int solver_flags,
- const char** packages, const char** locks, int flags, int* changed,
- pakfire_status_callback status_callback, void* status_callback_data) {
+PAKFIRE_EXPORT int pakfire_update(
+ struct pakfire* pakfire,
+ int transaction_flags,
+ int solver_flags,
+ const char** packages,
+ const char** locks,
+ int flags,
+ int* changed,
+ pakfire_status_callback status_callback,
+ void* status_callback_data) {
// If no packages are being passed, we will try to update everything
// XXX add locks
if (!packages)
pakfire, solver_flags, pakfire_request_update_all, flags, changed,
status_callback, status_callback_data);
- return pakfire_perform_transaction(pakfire, solver_flags, pakfire_request_update,
- packages, locks, flags, changed, status_callback, status_callback_data);
+ return pakfire_perform_transaction(pakfire, transaction_flags, solver_flags,
+ pakfire_request_update, packages, locks, flags, changed,
+ status_callback, status_callback_data);
}
static int pakfire_verify(struct pakfire* pakfire, int *changed) {
int changed = 0;
// Install everything
- r = pakfire_install(pakfire, 0, (const char**)packages, NULL, 0, &changed, NULL, NULL);
+ r = pakfire_install(pakfire, 0, 0, (const char**)packages, NULL, 0, &changed, NULL, NULL);
if (r) {
ERROR(pakfire, "Could not install build dependencies: %m\n");
goto ERROR;
return r;
}
-PAKFIRE_EXPORT int pakfire_transaction_run(struct pakfire_transaction* transaction) {
+PAKFIRE_EXPORT int pakfire_transaction_run(
+ struct pakfire_transaction* transaction, int flags) {
int r;
// Skip running an empty transaction
if (r)
goto ERROR;
+ // End here for a dry run
+ if (flags & PAKFIRE_TRANSACTION_DRY_RUN)
+ goto ERROR;
+
// Download what we need
r = pakfire_transaction_download(transaction);
if (r)