1 /* 2 * Copyright (c) 2007-2009, Novell Inc. 3 * 4 * This program is licensed under the BSD license, read LICENSE.BSD 5 * for further information 6 */ 7 8 /* 9 * transaction.h 10 * 11 */ 12 13 #ifndef LIBSOLV_TRANSACTION_H 14 #define LIBSOLV_TRANSACTION_H 15 16 #include "pooltypes.h" 17 #include "queue.h" 18 #include "bitmap.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 struct _Pool; 25 struct _DUChanges; 26 struct _TransactionOrderdata; 27 28 typedef struct _Transaction { 29 struct _Pool *pool; /* back pointer to pool */ 30 31 Queue steps; /* the transaction steps */ 32 33 #ifdef LIBSOLV_INTERNAL 34 Queue transaction_info; 35 Id *transaction_installed; 36 Map transactsmap; 37 Map multiversionmap; 38 39 struct _TransactionOrderdata *orderdata; 40 #endif 41 42 } Transaction; 43 44 45 /* step types */ 46 #define SOLVER_TRANSACTION_IGNORE 0x00 47 48 #define SOLVER_TRANSACTION_ERASE 0x10 49 #define SOLVER_TRANSACTION_REINSTALLED 0x11 50 #define SOLVER_TRANSACTION_DOWNGRADED 0x12 51 #define SOLVER_TRANSACTION_CHANGED 0x13 52 #define SOLVER_TRANSACTION_UPGRADED 0x14 53 #define SOLVER_TRANSACTION_OBSOLETED 0x15 54 55 #define SOLVER_TRANSACTION_INSTALL 0x20 56 #define SOLVER_TRANSACTION_REINSTALL 0x21 57 #define SOLVER_TRANSACTION_DOWNGRADE 0x22 58 #define SOLVER_TRANSACTION_CHANGE 0x23 59 #define SOLVER_TRANSACTION_UPGRADE 0x24 60 #define SOLVER_TRANSACTION_OBSOLETES 0x25 61 62 #define SOLVER_TRANSACTION_MULTIINSTALL 0x30 63 #define SOLVER_TRANSACTION_MULTIREINSTALL 0x31 64 65 #define SOLVER_TRANSACTION_MAXTYPE 0x3f 66 67 /* modes */ 68 #define SOLVER_TRANSACTION_SHOW_ACTIVE (1 << 0) 69 #define SOLVER_TRANSACTION_SHOW_ALL (1 << 1) 70 #define SOLVER_TRANSACTION_SHOW_OBSOLETES (1 << 2) 71 #define SOLVER_TRANSACTION_SHOW_MULTIINSTALL (1 << 3) 72 #define SOLVER_TRANSACTION_CHANGE_IS_REINSTALL (1 << 4) 73 #define SOLVER_TRANSACTION_MERGE_VENDORCHANGES (1 << 5) 74 #define SOLVER_TRANSACTION_MERGE_ARCHCHANGES (1 << 6) 75 76 #define SOLVER_TRANSACTION_RPM_ONLY (1 << 7) 77 78 #define SOLVER_TRANSACTION_KEEP_PSEUDO (1 << 8) 79 80 /* extra classifications */ 81 #define SOLVER_TRANSACTION_ARCHCHANGE 0x100 82 #define SOLVER_TRANSACTION_VENDORCHANGE 0x101 83 84 /* order flags */ 85 #define SOLVER_TRANSACTION_KEEP_ORDERDATA (1 << 0) 86 87 extern Transaction *transaction_create(struct _Pool *pool); 88 extern Transaction *transaction_create_decisionq(struct _Pool *pool, Queue *decisionq, Map *multiversionmap); 89 extern Transaction *transaction_create_clone(Transaction *srctrans); 90 extern void transaction_free(Transaction *trans); 91 extern void transaction_free_orderdata(Transaction *trans); 92 93 /* if p is installed, returns with pkg(s) obsolete p */ 94 /* if p is not installed, returns with pkg(s) we obsolete */ 95 extern Id transaction_obs_pkg(Transaction *trans, Id p); 96 extern void transaction_all_obs_pkgs(Transaction *trans, Id p, Queue *pkgs); 97 98 /* return step type of a transaction element */ 99 extern Id transaction_type(Transaction *trans, Id p, int mode); 100 101 /* return sorted collection of all step types */ 102 /* classify_pkgs can be used to return all packages of a type */ 103 extern void transaction_classify(Transaction *trans, int mode, Queue *classes); 104 extern void transaction_classify_pkgs(Transaction *trans, int mode, Id type, Id from, Id to, Queue *pkgs); 105 106 /* return all packages that will be installed after the transaction is run*/ 107 /* The new packages are put at the head of the queue, the number of new 108 packages is returned */ 109 extern int transaction_installedresult(Transaction *trans, Queue *installedq); 110 111 int transaction_calc_installsizechange(Transaction *trans); 112 void transaction_calc_duchanges(Transaction *trans, struct _DUChanges *mps, int nmps); 113 114 /* order a transaction */ 115 extern void transaction_order(Transaction *trans, int flags); 116 117 /* roll your own order funcion: 118 * add pkgs free for installation to queue choices after chosen was 119 * installed. start with chosen = 0 120 * needs an ordered transaction created with SOLVER_TRANSACTION_KEEP_ORDERDATA */ 121 extern int transaction_order_add_choices(Transaction *trans, Id chosen, Queue *choices); 122 /* add obsoleted packages into transaction steps */ 123 extern void transaction_add_obsoleted(Transaction *trans); 124 125 /* debug function, report problems found in the order */ 126 extern void transaction_check_order(Transaction *trans); 127 128 129 #ifdef __cplusplus 130 } 131 #endif 132 133 #endif 134