#define SOLVER_TRANSACTION_KEEP_PSEUDO (1 << 8)
+#define SOLVER_TRANSACTION_OBSOLETE_IS_UPGRADE (1 << 9)
+
/* extra classifications */
#define SOLVER_TRANSACTION_ARCHCHANGE 0x100
#define SOLVER_TRANSACTION_VENDORCHANGE 0x101
/* order flags */
#define SOLVER_TRANSACTION_KEEP_ORDERDATA (1 << 0)
+#define SOLVER_TRANSACTION_KEEP_ORDERCYCLES (1 << 1)
+
+/* cycle severities */
+#define SOLVER_ORDERCYCLE_HARMLESS 0
+#define SOLVER_ORDERCYCLE_NORMAL 1
+#define SOLVER_ORDERCYCLE_CRITICAL 2
extern Transaction *transaction_create(struct _Pool *pool);
extern Transaction *transaction_create_decisionq(struct _Pool *pool, Queue *decisionq, Map *multiversionmap);
extern Transaction *transaction_create_clone(Transaction *srctrans);
extern void transaction_free(Transaction *trans);
-extern void transaction_free_orderdata(Transaction *trans);
/* if p is installed, returns with pkg(s) obsolete p */
/* if p is not installed, returns with pkg(s) we obsolete */
int transaction_calc_installsizechange(Transaction *trans);
void transaction_calc_duchanges(Transaction *trans, struct _DUChanges *mps, int nmps);
+
+
/* order a transaction */
extern void transaction_order(Transaction *trans, int flags);
-/* roll your own order funcion:
+/* roll your own order funcion:
* add pkgs free for installation to queue choices after chosen was
* installed. start with chosen = 0
* needs an ordered transaction created with SOLVER_TRANSACTION_KEEP_ORDERDATA */
/* debug function, report problems found in the order */
extern void transaction_check_order(Transaction *trans);
+/* order cycle introspection */
+extern void transaction_order_get_cycleids(Transaction *trans, Queue *q, int minseverity);
+extern int transaction_order_get_cycle(Transaction *trans, Id cid, Queue *q);
+
+extern void transaction_free_orderdata(Transaction *trans);
+extern void transaction_clone_orderdata(Transaction *trans, Transaction *srctrans);
#ifdef __cplusplus
}