void RpmTransaction::init() { if (m_initialized) return; rpmReadConfigFiles(NULL, NULL); if (rpmdbOpen("", &m_db, O_RDWR, 0644) != 0)//FIXME:root directory; RPMSTOP("rpmdbOpen()"); m_ts = rpmtransCreateSet(m_db, "");//FIXME:root directory; m_initialized = 1; }
DEEPSOLVER_BEGIN_NAMESPACE void RpmTransaction::init() { if (m_initialized) return; rpmReadConfigFiles(NULL, NULL); if (rpmdbOpen("", &m_db, O_RDWR, 0644) != 0)//FIXME:root directory; throw PkgBackEndException("rpmdbOpen()"); m_ts = rpmtransCreateSet(m_db, "");//FIXME:root directory; m_initialized = 1; }
VALUE rpm_db_transaction(int argc, VALUE* argv, VALUE db) { VALUE trans; rpm_trans_t* ts; const char* root = "/"; #if 0 if (OBJ_FROZEN(db)) { rb_error_frozen("RPM::DB"); } #endif switch (argc) { case 0: break; case 1: if (TYPE(argv[0]) != T_STRING) { rb_raise(rb_eTypeError, "illegal argument type"); } root = RSTRING_PTR(argv[0]); break; default: rb_raise(rb_eArgError, "argument too many(0..1)"); } ts = ALLOC(rpm_trans_t); #if RPM_VERSION_CODE < RPM_VERSION(4,1,0) ts->ts = rpmtransCreateSet(RPM_DB(db), root); #else ts->ts = rpmtsCreate(); rpmtsSetRootDir(ts->ts, root); #endif ts->script_fd = 0; ts->db = DATA_PTR(db); trans = Data_Wrap_Struct(rpm_cTransaction, NULL, transaction_free, ts); db_ref(ts->db); rb_ivar_set(trans, id_db, db); rb_catch("abort", transaction_yield, trans); if (rb_ivar_get(trans, id_aborted) == Qtrue) { return Qfalse; } else if (rb_ivar_get(trans, id_commited) != Qtrue && !OBJ_FROZEN(db)) { rb_catch("abort", transaction_commit, trans); } return rb_ivar_get(trans, id_pl); }