Exemple #1
0
int mpkgSys::requestUninstall(string package_name, mpkgDatabase *db, DependencyTracker *DepTracker, bool purge)
{
	//printf("requestUninstall by name !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
	mDebug("requestUninstall of " + package_name);
	SQLRecord sqlSearch;
	sqlSearch.addField("package_name", package_name);
	if (!purge) sqlSearch.addField("package_installed", 1);
	else sqlSearch.addField("package_configexist",1);
	PACKAGE_LIST candidates;
	//printf("SLOW GET_PACKAGELIST CALL: %s %d\n", __func__, __LINE__);
	int ret = db->get_packagelist(sqlSearch, &candidates, true, false);
	mDebug("candidates to uninstall size = " + IntToStr(candidates.size()));
	int id=-1;
	if (ret == 0)
	{
		if (candidates.size()>1)
		{
			mError(_("Ambiguity in uninstall: multiple packages with some name are installed"));
			return MPKGERROR_AMBIGUITY;
		}
		if (candidates.IsEmpty())
		{
			mError(_("Cannot remove package ") + package_name + _(": not installed"));
			return MPKGERROR_NOPACKAGE;
		}
		id = candidates[0].get_id();
		if (id>=0)
		{
			return requestUninstall(id, db, DepTracker, purge);
		}
		else return MPKGERROR_NOPACKAGE;
	}
	else return ret;
}
Exemple #2
0
int mpkgSys::update_repository_data(mpkgDatabase *db)//, DependencyTracker *DepTracker)
{
	// Функция, с которой начинается обновление данных.
	
	Repository *rep = new Repository;		// Объект репозиториев
	vector< pair<string, string> > package_descriptions;
	rep->package_descriptions = &package_descriptions; // Add pointer to package descriptions
	PACKAGE_LIST *availablePackages = new PACKAGE_LIST;		// Список пакетов, полученных из всех репозиториев...
	PACKAGE_LIST *tmpPackages = new PACKAGE_LIST;		// Список пакетов, полученных из текущего репозитория (временное хранилище)

	// А есть ли у нас вообще репозитории? Может нам и ловить-то нечего?...
	// Впрочем, надо все равно пойти на принцип и пометить все пакеты как недоступные. Ибо это действительно так.
	// Поэтому - проверка устранена.
	if (!dialogMode) {
#ifdef X86_64
		say(_("Updating package data from %ld repository(s)...\n"), REPOSITORY_LIST.size());
#else
		say(_("Updating package data from %d repository(s)...\n"), REPOSITORY_LIST.size());
#endif

	}
	int total_packages=0; // Счетчик полученных пакетов.

	// Поехали! Запрашиваем каждый репозиторий через функцию get_index()
	unsigned int cnt=1;
	pData.clear();
	for (size_t i=0; i<REPOSITORY_LIST.size(); ++i) {
		pData.addItem(REPOSITORY_LIST[i], 1, ITEMSTATE_INPROGRESS);
		pData.setItemCurrentAction(i, _("retrieving index"));
	}
	for (size_t i=0; i<REPOSITORY_LIST.size(); ++i) {
		delete tmpPackages;
		tmpPackages = new PACKAGE_LIST;					//Очищаем временный список.
		pData.setItemChanged(i);
		_cmdOptions["hide_download_errors"] = "true";
		rep->get_index(REPOSITORY_LIST[i], tmpPackages);	// Получаем список пакетов.
		_cmdOptions["hide_download_errors"] = "false";
		pData.increaseItemProgress(i);
		pData.setItemState(i, ITEMSTATE_FINISHED);
		cnt++;
		if (!tmpPackages->IsEmpty())				// Если мы таки получили что-то, добавляем это в список.
		{
			total_packages+=tmpPackages->size();		// Увеличим счетчик
			availablePackages->add_list(*tmpPackages);	// Прибавляем данные к общему списку.
		}
		cnt++;
	}
	delete rep;
	delete tmpPackages;
	// Вот тут-то и начинается самое главное. Вызываем фильтрацию пакетов (действие будет происходить в функции updateRepositoryData.
	int ret=db->updateRepositoryData(availablePackages);

	// Now - update package descriptions
	updatePackageDescriptions(package_descriptions);
	if (!dialogMode) say(_("Update complete.\n"));
	pData.clear();
	return ret;
}