Py_RETURN_NONE;
}
-static PyObject* Pakfire_sync(PakfireObject* self) {
- int r = pakfire_sync(self->pakfire, NULL);
+static PyObject* Pakfire_sync(PakfireObject* self, PyObject* args, PyObject* kwargs) {
+ char* kwlist[] = {"keep_orphaned", NULL};
+ int keep_orphaned = 0;
+ int flags = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$p", kwlist, &keep_orphaned))
+ return NULL;
+
+ if (keep_orphaned)
+ flags |= PAKFIRE_REQUEST_KEEP_ORPHANED;
+
+ int r = pakfire_sync(self->pakfire, flags, NULL);
if (r) {
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
{
"sync",
(PyCFunction)Pakfire_sync,
- METH_NOARGS,
+ METH_VARARGS|METH_KEYWORDS,
NULL,
},
{
*snapshot_needs_update = 1;
// Update everything
- r = pakfire_sync(pakfire, &changed);
+ r = pakfire_sync(pakfire, 0, &changed);
if (r) {
ERROR(pakfire, "Could not update packages: %m\n");
goto ERROR;
// Sync
-int pakfire_sync(Pakfire pakfire, int* changed);
+int pakfire_sync(Pakfire pakfire, int flags, int* changed);
#ifdef PAKFIRE_PRIVATE
enum _pakfire_request_op_flags {
PAKFIRE_CHECK_INSTALLED = 1 << 0,
PAKFIRE_CLEAN_DEPS = 1 << 1,
+ PAKFIRE_REQUEST_KEEP_ORPHANED = 1 << 2,
};
enum _pakfire_solver_flags {
int pakfire_request_upgrade_package(struct pakfire_request* request, PakfirePackage package);
int pakfire_request_upgrade_all(struct pakfire_request* request);
-int pakfire_request_sync(struct pakfire_request* request);
+int pakfire_request_sync(struct pakfire_request* request, int flags);
int pakfire_request_lock(struct pakfire_request* request, const char* what);
int pakfire_request_lock_package(struct pakfire_request* request, PakfirePackage package);
-int pakfire_request_verify(struct pakfire_request* request);
+int pakfire_request_verify(struct pakfire_request* request, int flags);
#ifdef PAKFIRE_PRIVATE
}
static int pakfire_perform_transaction_simple(Pakfire pakfire,
- int (*action)(struct pakfire_request* request), int* changed) {
+ int (*action)(struct pakfire_request* request, int flags),
+ int flags, int* changed) {
struct pakfire_request* request = NULL;
struct pakfire_transaction* transaction = NULL;
int r = 1;
goto ERROR;
// Perform action
- r = action(request);
+ r = action(request, flags);
if (r)
goto ERROR;
}
static int pakfire_verify(Pakfire pakfire, int *changed) {
- return pakfire_perform_transaction_simple(pakfire, pakfire_request_verify, changed);
+ return pakfire_perform_transaction_simple(pakfire, pakfire_request_verify, 0, changed);
}
PAKFIRE_EXPORT int pakfire_check(Pakfire pakfire) {
return r;
}
-PAKFIRE_EXPORT int pakfire_sync(Pakfire pakfire, int* changed) {
- return pakfire_perform_transaction_simple(pakfire, pakfire_request_sync, changed);
+PAKFIRE_EXPORT int pakfire_sync(Pakfire pakfire, int flags, int* changed) {
+ return pakfire_perform_transaction_simple(pakfire, pakfire_request_sync, flags, changed);
}
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_sync(struct pakfire_request* request) {
- queue_push2(&request->jobs, SOLVER_SOLVABLE_ALL|SOLVER_DISTUPGRADE|SOLVER_DROP_ORPHANED, 0);
+PAKFIRE_EXPORT int pakfire_request_sync(struct pakfire_request* request, int flags) {
+ int solver_flags = SOLVER_SOLVABLE_ALL|SOLVER_DISTUPGRADE;
+
+ // Drop orphans
+ if (!(flags & PAKFIRE_REQUEST_KEEP_ORPHANED))
+ solver_flags |= SOLVER_DROP_ORPHANED;
+
+ queue_push2(&request->jobs, solver_flags, 0);
return 0;
}
return pakfire_request_add_package(request, SOLVER_LOCK, package, 0);
}
-PAKFIRE_EXPORT int pakfire_request_verify(struct pakfire_request* request) {
+PAKFIRE_EXPORT int pakfire_request_verify(struct pakfire_request* request, int flags) {
queue_push2(&request->jobs, SOLVER_SOLVABLE_ALL|SOLVER_VERIFY, 0);
return 0;
# sync
sync = subparsers.add_parser("sync",
help=_("Sync all installed with the latest one in the distribution"))
+ sync.add_argument("--keep-orphaned", action="store_true",
+ help=_("Keep orphaned packages"))
sync.set_defaults(func=self.handle_sync)
# update
)
def handle_sync(self, ns):
- self.pakfire(ns).sync()
+ self.pakfire(ns).sync(keep_orphaned=ns.keep_orphaned)
def handle_install(self, ns):
p = self.pakfire(ns)