Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
}