diff options
Diffstat (limited to 'lib/libalpm')
62 files changed, 9933 insertions, 18591 deletions
diff --git a/lib/libalpm/.gitignore b/lib/libalpm/.gitignore index 09980ae6..36d41441 100644 --- a/lib/libalpm/.gitignore +++ b/lib/libalpm/.gitignore @@ -1,6 +1,4 @@  .deps  .libs -Makefile -Makefile.in  *.lo  *.la diff --git a/lib/libalpm/Doxyfile b/lib/libalpm/Doxyfile deleted file mode 100644 index c0b98ad5..00000000 --- a/lib/libalpm/Doxyfile +++ /dev/null @@ -1,148 +0,0 @@ -# Doxyfile 1.4.5 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME           = libalpm -PROJECT_NUMBER         =  -OUTPUT_DIRECTORY       =  -CREATE_SUBDIRS         = NO -OUTPUT_LANGUAGE        = English -USE_WINDOWS_ENCODING   = NO -BRIEF_MEMBER_DESC      = YES -REPEAT_BRIEF           = YES -ABBREVIATE_BRIEF       = "The $name class" \ -                         "The $name widget" \ -                         "The $name file" \ -                         is \ -                         provides \ -                         specifies \ -                         contains \ -                         represents \ -                         a \ -                         an \ -                         the -ALWAYS_DETAILED_SEC    = NO -INLINE_INHERITED_MEMB  = NO -FULL_PATH_NAMES        = YES -STRIP_FROM_PATH        =  -STRIP_FROM_INC_PATH    =  -SHORT_NAMES            = NO -JAVADOC_AUTOBRIEF      = NO -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP         = NO -INHERIT_DOCS           = YES -SEPARATE_MEMBER_PAGES  = NO -TAB_SIZE               = 8 -ALIASES                =  -OPTIMIZE_OUTPUT_FOR_C  = YES -OPTIMIZE_OUTPUT_JAVA   = NO -BUILTIN_STL_SUPPORT    = NO -DISTRIBUTE_GROUP_DOC   = NO -SUBGROUPING            = YES -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL            = NO -EXTRACT_PRIVATE        = NO -EXTRACT_STATIC         = NO -EXTRACT_LOCAL_CLASSES  = YES -EXTRACT_LOCAL_METHODS  = NO -HIDE_UNDOC_MEMBERS     = YES -HIDE_UNDOC_CLASSES     = YES -HIDE_FRIEND_COMPOUNDS  = NO -HIDE_IN_BODY_DOCS      = NO -INTERNAL_DOCS          = NO -CASE_SENSE_NAMES       = YES -HIDE_SCOPE_NAMES       = NO -SHOW_INCLUDE_FILES     = YES -INLINE_INFO            = YES -SORT_MEMBER_DOCS       = YES -SORT_BRIEF_DOCS        = NO -SORT_BY_SCOPE_NAME     = NO -GENERATE_TODOLIST      = YES -GENERATE_TESTLIST      = YES -GENERATE_BUGLIST       = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS       =  -MAX_INITIALIZER_LINES  = 30 -SHOW_USED_FILES        = YES -SHOW_DIRECTORIES       = YES -FILE_VERSION_FILTER    =  -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET                  = NO -WARNINGS               = YES -WARN_IF_UNDOCUMENTED   = YES -WARN_IF_DOC_ERROR      = YES -WARN_NO_PARAMDOC       = NO -WARN_FORMAT            = "$file:$line: $text" -WARN_LOGFILE           =  -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT                  =  -FILE_PATTERNS          = *.c -RECURSIVE              = NO -EXCLUDE                =  -EXCLUDE_SYMLINKS       = NO -EXCLUDE_PATTERNS       =  -EXAMPLE_PATH           =  -EXAMPLE_PATTERNS       = * -EXAMPLE_RECURSIVE      = NO -IMAGE_PATH             =  -INPUT_FILTER           =  -FILTER_PATTERNS        =  -FILTER_SOURCE_FILES    = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER         = NO -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX     = NO -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML          = NO -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX         = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF           = NO -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN           = YES -MAN_OUTPUT             = ../../doc -MAN_EXTENSION          = .3 -MAN_LINKS              = YES -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML           = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD       = NO -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor    -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING   = YES -MACRO_EXPANSION        = NO -EXPAND_ONLY_PREDEF     = NO -SEARCH_INCLUDES        = YES -INCLUDE_PATH           =  -INCLUDE_FILE_PATTERNS  =  -PREDEFINED             =  -EXPAND_AS_DEFINED      =  -SKIP_FUNCTION_MACROS   = YES -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool    -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS         = NO diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am index 0381d9d8..6549066f 100644 --- a/lib/libalpm/Makefile.am +++ b/lib/libalpm/Makefile.am @@ -5,12 +5,16 @@ SUBDIRS = po  lib_LTLIBRARIES = libalpm.la  include_HEADERS = alpm_list.h alpm.h -localedir = $(datadir)/locale -DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ +DEFS = -DLOCALEDIR=\"@localedir@\" @DEFS@ -AM_CFLAGS = -fvisibility=hidden -pedantic -D_GNU_SOURCE +AM_CFLAGS = -pedantic -D_GNU_SOURCE -EXTRA_DIST = Doxyfile +if ENABLE_VISIBILITY_CC +AM_CFLAGS += -fvisibility=internal +endif +if ENABLE_GNU89_INLINE_CC +AM_CFLAGS += -fgnu89-inline +endif  libalpm_la_SOURCES = \  	add.h add.c \ @@ -21,30 +25,20 @@ libalpm_la_SOURCES = \  	cache.h cache.c \  	conflict.h conflict.c \  	db.h db.c \ +	delta.h delta.c \  	deps.h deps.c \  	error.h error.c \  	group.h group.c \  	handle.h handle.c \  	log.h log.c \  	md5.h md5.c \ -	md5driver.c \  	package.h package.c \ -	provide.h provide.c \  	remove.h remove.c \  	server.h server.c \ -	sha1.h sha1.c \  	sync.h sync.c \  	trans.h trans.c \ -	util.h util.c \ -	versioncmp.h versioncmp.c +	util.h util.c  libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO) -libalpm_la_LIBADD = -larchive -ldownload -lm - -if HAS_DOXYGEN -all: doxygen.in -doxygen.in: -	doxygen $(srcdir)/Doxyfile - -endif +# vim:set ts=2 sw=2 noet: diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index afe7a45b..24f2b51f 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -1,12 +1,8 @@  /*   *  add.c - *  - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com> - *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu> - *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org> - *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + * + *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org> + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,26 +15,24 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ -#if defined(__APPLE__) || defined(__OpenBSD__) -#include <sys/syslimits.h> -#endif -#if defined(__APPLE__) || defined(__OpenBSD__) || defined(__sun__) -#include <sys/stat.h> -#endif -  #include "config.h"  #include <stdlib.h>  #include <errno.h>  #include <time.h> -#include <fcntl.h>  #include <string.h>  #include <limits.h> -#include <libintl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +/* libarchive */ +#include <archive.h> +#include <archive_entry.h>  /* libalpm */  #include "add.h" @@ -47,14 +41,10 @@  #include "util.h"  #include "error.h"  #include "cache.h" -#include "versioncmp.h" -#include "md5.h" -#include "sha1.h"  #include "log.h"  #include "backup.h"  #include "package.h"  #include "db.h" -#include "provide.h"  #include "conflict.h"  #include "deps.h"  #include "remove.h" @@ -62,11 +52,9 @@  int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  { -	pmpkg_t *info = NULL; -	pmpkg_t *dummy; -	char pkgname[PKG_NAME_LEN], pkgver[PKG_VERSION_LEN]; +	pmpkg_t *pkg = NULL; +	const char *pkgname, *pkgver;  	alpm_list_t *i; -	struct stat buf;  	ALPM_LOG_FUNC; @@ -74,26 +62,13 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));  	ASSERT(name != NULL && strlen(name) != 0, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	_alpm_log(PM_LOG_DEBUG, _("loading target '%s'"), name); - -	/* TODO FS#5120 we need a better way to check if a package is a valid package, -	 * and read the metadata instead of relying on the filename for package name -	 * and version */ -	if(stat(name, &buf)) { -		pm_errno = PM_ERR_NOT_A_FILE; -		goto error; -	} +	_alpm_log(PM_LOG_DEBUG, "loading target '%s'\n", name); -	if(_alpm_pkg_splitname(name, pkgname, pkgver, 1) == -1) { -		pm_errno = PM_ERR_PKG_INVALID_NAME; -		goto error; -	} - -	/* no additional hyphens in version strings */ -	if(strchr(pkgver, '-') != strrchr(pkgver, '-')) { -		pm_errno = PM_ERR_PKG_INVALID_NAME; +	if(alpm_pkg_load(name, 1, &pkg) != 0) {  		goto error;  	} +	pkgname = alpm_pkg_get_name(pkg); +	pkgver = alpm_pkg_get_version(pkg);  	if(trans->type != PM_TRANS_TYPE_UPGRADE) {  		/* only install this package if it is not already installed */ @@ -101,63 +76,42 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  			pm_errno = PM_ERR_PKG_INSTALLED;  			goto error;  		} -	} else { -		if(trans->flags & PM_TRANS_FLAG_FRESHEN) { -			/* only upgrade/install this package if it is already installed and at a lesser version */ -			dummy = _alpm_db_get_pkgfromcache(db, pkgname); -			if(dummy == NULL || _alpm_versioncmp(dummy->version, pkgver) >= 0) { -				pm_errno = PM_ERR_PKG_CANT_FRESH; -				goto error; -			} -		}  	} -	/* check if an older version of said package is already in transaction packages. -	 * if so, replace it in the list */ +	/* check if an older version of said package is already in transaction +	 * packages.  if so, replace it in the list */  	for(i = trans->packages; i; i = i->next) {  		pmpkg_t *pkg = i->data;  		if(strcmp(pkg->name, pkgname) == 0) {  			if(_alpm_versioncmp(pkg->version, pkgver) < 0) {  				pmpkg_t *newpkg; -				_alpm_log(PM_LOG_WARNING, _("replacing older version %s-%s by %s in target list"), +				_alpm_log(PM_LOG_WARNING, _("replacing older version %s-%s by %s in target list\n"),  				          pkg->name, pkg->version, pkgver); -				if((newpkg = _alpm_pkg_load(name)) == NULL) { +				if((newpkg = _alpm_pkg_load(name, 1)) == NULL) {  					/* pm_errno is already set by pkg_load() */  					goto error;  				} -				FREEPKG(i->data); +				_alpm_pkg_free(i->data);  				i->data = newpkg;  			} else { -				_alpm_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- skipping"), +				_alpm_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- skipping\n"),  				          pkg->name, pkg->version);  			}  			return(0);  		}  	} -	_alpm_log(PM_LOG_DEBUG, _("reading '%s' metadata"), pkgname); -	info = _alpm_pkg_load(name); -	if(info == NULL) { -		/* pm_errno is already set by pkg_load() */ -		goto error; -	} -	/* check to verify we're not getting fooled by a corrupted package */ -	if(strcmp(pkgname, info->name) != 0 || strcmp(pkgver, info->version) != 0) { -		pm_errno = PM_ERR_PKG_INVALID; -		goto error; -	} -  	if(trans->flags & PM_TRANS_FLAG_ALLDEPS) { -		info->reason = PM_PKG_REASON_DEPEND; +		pkg->reason = PM_PKG_REASON_DEPEND;  	}  	/* add the package to the transaction */ -	trans->packages = alpm_list_add(trans->packages, info); +	trans->packages = alpm_list_add(trans->packages, pkg);  	return(0);  error: -	FREEPKG(info); +	_alpm_pkg_free(pkg);  	return(-1);  } @@ -172,10 +126,7 @@ error:  int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  { -	alpm_list_t *lp = NULL, *i = NULL; -	alpm_list_t *rmlist = NULL; -	char rm_fname[PATH_MAX]; -	pmpkg_t *info = NULL; +	alpm_list_t *lp = NULL;  	ALPM_LOG_FUNC; @@ -188,8 +139,8 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  		EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL);  		/* look for unsatisfied dependencies */ -		_alpm_log(PM_LOG_DEBUG, _("looking for unsatisfied dependencies")); -		lp = _alpm_checkdeps(trans, db, trans->type, trans->packages); +		_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n"); +		lp = alpm_checkdeps(db, trans->type == PM_TRANS_TYPE_UPGRADE, NULL, trans->packages);  		if(lp != NULL) {  			if(data) {  				*data = lp; @@ -200,82 +151,46 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  		}  		/* no unsatisfied deps, so look for conflicts */ -		_alpm_log(PM_LOG_DEBUG, _("looking for conflicts")); -		lp = _alpm_checkconflicts(db, trans->packages); -		for(i = lp; i; i = i->next) { -			pmdepmissing_t *miss = i->data; +		_alpm_log(PM_LOG_DEBUG, "looking for conflicts\n"); +		alpm_list_t *inner = _alpm_innerconflicts(trans->packages); +		alpm_list_t *outer = _alpm_outerconflicts(db, trans->packages); +		lp = alpm_list_join(inner, outer); + +		/* TODO : factorize the conflict resolving code from sync.c to use it here (FS#3492) */ -			_alpm_log(PM_LOG_ERROR, _("replacing packages with -A and -U is not supported yet")); -			_alpm_log(PM_LOG_ERROR, _("please remove '%s' first, using -Rd"), miss->depend.name); -			RET_ERR(PM_ERR_CONFLICTING_DEPS, -1); -			 -			/* Attempt to resolve conflicts */ -			/* -			int skip_this = 0; -			QUESTION(trans, PM_TRANS_CONV_CONFLICT_PKG, miss->target, miss->depend.name, NULL, &skip_this); -			if(skip_this) { -				pmdepmissing_t *pkg = NULL; -				lp = alpm_list_remove(lp, (void *)miss, deppkg_cmp, (void*)&pkg); -				*/ -				/* TODO: We remove the conflict from the list but never actually remove -				 * the package. Need to do this to fix FS #3492. The sync code should -				 * provide an example of how to do this, as it handles replaces and -				 * removes. We run into problems because we do a file conflict check -				 * below and it fails there. A force flag will skip that part, but -				 * still not remove the original package designated here for removal. -				 * Better yet, dump all this shitty duplicate code and somehow combine -				 * it with the sync code. */ -				/* -				FREE(pkg); -				if(lp == NULL) { -					break; -				} -			} -			*/ -		} -		/* Removal code should go here, as described above. Instead of simply -		 * removing items, perhaps throw them in another list to be removed, then -		 * proceed as sync.c would? I'm not sure because I'm not familiar enough -		 * with the codebase. */  		if(lp != NULL) {  			if(data) {  				*data = lp;  			} else {  				FREELIST(lp);  			} +			if(inner) { +				_alpm_log(PM_LOG_ERROR, _("conflicting packages were found in the target list\n")); +				_alpm_log(PM_LOG_ERROR, _("you cannot install two conflicting packages at the same time\n")); +			} +			if(outer) { +				_alpm_log(PM_LOG_ERROR, _("replacing packages with -A and -U is not supported yet\n")); +				_alpm_log(PM_LOG_ERROR, _("you can replace packages manually using -Rd and -U\n")); +			}  			RET_ERR(PM_ERR_CONFLICTING_DEPS, -1);  		}  		/* re-order w.r.t. dependencies */ -		_alpm_log(PM_LOG_DEBUG, _("sorting by dependencies")); +		_alpm_log(PM_LOG_DEBUG, "sorting by dependencies\n");  		lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_ADD);  		/* free the old alltargs */ -		FREELISTPTR(trans->packages); +		alpm_list_free(trans->packages);  		trans->packages = lp;  		EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);  	} -	/* Cleaning up -	 */ -	EVENT(trans, PM_TRANS_EVT_CLEANUP_START, NULL, NULL); -	_alpm_log(PM_LOG_DEBUG, _("cleaning up")); -	for (lp=trans->packages; lp!=NULL; lp=lp->next) { -		info=(pmpkg_t *)lp->data; -		for (rmlist = alpm_pkg_get_removes(info); rmlist; rmlist = rmlist->next) { -			snprintf(rm_fname, PATH_MAX, "%s%s", handle->root, (char *)rmlist->data); -			remove(rm_fname); -		} -	} -	EVENT(trans, PM_TRANS_EVT_CLEANUP_DONE, NULL, NULL); - -	/* Check for file conflicts -	 */ +	/* Check for file conflicts */  	if(!(trans->flags & PM_TRANS_FLAG_FORCE)) {  		EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_START, NULL, NULL); -		_alpm_log(PM_LOG_DEBUG, _("looking for file conflicts")); -		lp = _alpm_db_find_conflicts(db, trans, handle->root); +		_alpm_log(PM_LOG_DEBUG, "looking for file conflicts\n"); +		lp = _alpm_db_find_fileconflicts(db, trans, handle->root);  		if(lp != NULL) {  			if(data) {  				*data = lp; @@ -288,562 +203,662 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  		EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_DONE, NULL, NULL);  	} -#ifndef __sun__ -	if(_alpm_check_freespace(trans, data) == -1) { -			/* pm_errno is set by check_freespace */ -			return(-1); -	} -#endif -  	return(0);  } -int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db) -{ -	int i, ret = 0, errors = 0, pkg_count = 0; -	struct archive *archive; -	struct archive_entry *entry; -	char cwd[PATH_MAX] = ""; -	alpm_list_t *targ, *lp; - -	ALPM_LOG_FUNC; - -	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); +static int upgrade_remove(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *trans, pmdb_t *db) { +	/* this is kinda odd.  If the old package exists, at this point we make a +	 * NEW transaction, unrelated to handle->trans, and instantiate a "remove" +	 * with the type PM_TRANS_TYPE_REMOVEUPGRADE. TODO: kill this weird +	 * behavior. */ +	pmtrans_t *tr = _alpm_trans_new(); +	_alpm_log(PM_LOG_DEBUG, "removing old package first (%s-%s)\n", +			oldpkg->name, oldpkg->version); + +	if(!tr) { +		RET_ERR(PM_ERR_TRANS_ABORT, -1); +	} -	if(trans->packages == NULL) { -		return(0); +	if(_alpm_trans_init(tr, PM_TRANS_TYPE_REMOVEUPGRADE, trans->flags, +				NULL, NULL, NULL) == -1) { +		_alpm_trans_free(tr); +		tr = NULL; +		RET_ERR(PM_ERR_TRANS_ABORT, -1);  	} -	pkg_count = alpm_list_count(trans->targets); -	 -	for(targ = trans->packages; targ; targ = targ->next) { -		char scriptlet[PATH_MAX+1]; -		int targ_count = 0, is_upgrade = 0, use_md5 = 0; -		double percent = 0.0; -		pmpkg_t *newpkg = (pmpkg_t *)targ->data; -		pmpkg_t *oldpkg = NULL; -		errors = 0; +	if(_alpm_remove_loadtarget(tr, db, newpkg->name) == -1) { +		_alpm_trans_free(tr); +		tr = NULL; +		RET_ERR(PM_ERR_TRANS_ABORT, -1); +	} -		if(handle->trans->state == STATE_INTERRUPTED) { -			break; +	/* copy the remove skiplist over */ +	tr->skip_remove = alpm_list_strdup(trans->skip_remove); +	const alpm_list_t *b; + +	/* Add files in the OLD and NEW backup array to the NoUpgrade array +	 * so this removal operation doesn't kill them */ +	alpm_list_t *old_noupgrade = alpm_list_strdup(handle->noupgrade); +	/* old package backup list */ +	for(b = alpm_pkg_get_backup(oldpkg); b; b = b->next) { +		const char *backup = b->data; +		_alpm_log(PM_LOG_DEBUG, "adding %s to the NoUpgrade array temporarily\n", +				backup); +		handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(backup)); +	} +	/* new package backup list */ +	for(b = alpm_pkg_get_backup(newpkg); b; b = b->next) { +		const char *backup = b->data; +		/* make sure we don't add duplicate entries */ +		if(!alpm_list_find_ptr(handle->noupgrade, backup)) { +			_alpm_log(PM_LOG_DEBUG, "adding %s to the NoUpgrade array temporarily\n", +					backup); +			handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(backup));  		} +	} -		snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", db->path, -						 alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); +	int ret = _alpm_remove_commit(tr, db); -		/* check if we have a valid sha1sum, if not, use MD5 */ -		if(strlen(newpkg->sha1sum) == 0) { -			use_md5 = 1; -		} +	_alpm_trans_free(tr); +	tr = NULL; -		/* see if this is an upgrade.  if so, remove the old package first */ -		pmpkg_t *local = _alpm_db_get_pkgfromcache(db, newpkg->name); -		if(local) { -			is_upgrade = 1; - -			EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, NULL); -			_alpm_log(PM_LOG_DEBUG, _("upgrading package %s-%s"), newpkg->name, newpkg->version); - -			/* we'll need to save some record for backup checks later */ -			oldpkg = _alpm_pkg_new(local->name, local->version); -			if(oldpkg) { -				oldpkg->backup = alpm_list_strdup(alpm_pkg_get_backup(local)); -				oldpkg->provides = alpm_list_strdup(alpm_pkg_get_provides(local)); -				strncpy(oldpkg->name, local->name, PKG_NAME_LEN); -				strncpy(oldpkg->version, local->version, PKG_VERSION_LEN); -			} else { -				RET_ERR(PM_ERR_MEMORY, -1); -			} +	/* restore our "NoUpgrade" list to previous state */ +	FREELIST(handle->noupgrade); +	handle->noupgrade = old_noupgrade; -			/* copy over the install reason */ -			newpkg->reason = alpm_pkg_get_reason(local); +	if(ret == -1) { +		RET_ERR(PM_ERR_TRANS_ABORT, -1); +	} -			/* pre_upgrade scriptlet */ -			if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { -				_alpm_runscriptlet(handle->root, newpkg->data, "pre_upgrade", newpkg->version, oldpkg->version, trans); -			} -		} else { -			is_upgrade = 0; - -			EVENT(trans, PM_TRANS_EVT_ADD_START, newpkg, NULL); -			_alpm_log(PM_LOG_DEBUG, _("adding package %s-%s"), newpkg->name, newpkg->version); -			 -			/* pre_install scriptlet */ -			if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { -				_alpm_runscriptlet(handle->root, newpkg->data, "pre_install", newpkg->version, NULL, trans); -			} -		} +	return(0); +} -		if(oldpkg) { -			/* this is kinda odd.  If the old package exists, at this point we make a -			 * NEW transaction, unrelated to handle->trans, and instantiate a "remove" -			 * with the type PM_TRANS_TYPE_UPGRADE. TODO: kill this weird behavior. */ -			pmtrans_t *tr = _alpm_trans_new(); -			_alpm_log(PM_LOG_DEBUG, _("removing old package first (%s-%s)"), oldpkg->name, oldpkg->version); +static int extract_single_file(struct archive *archive, +		struct archive_entry *entry, pmpkg_t *newpkg, pmpkg_t *oldpkg, +		pmtrans_t *trans, pmdb_t *db) +{ +	const char *entryname; /* the name of the file in the archive */ +	mode_t entrymode; +	char filename[PATH_MAX]; /* the actual file we're extracting */ +	int needbackup = 0, notouch = 0; +	char *hash_orig = NULL; +	const int archive_flags = ARCHIVE_EXTRACT_OWNER | +	                          ARCHIVE_EXTRACT_PERM | +	                          ARCHIVE_EXTRACT_TIME; +	int errors = 0; + +	entryname = archive_entry_pathname(entry); +	entrymode = archive_entry_mode(entry); + +	memset(filename, 0, PATH_MAX); /* just to be sure */ + +	if(strcmp(entryname, ".INSTALL") == 0) { +		/* the install script goes inside the db */ +		snprintf(filename, PATH_MAX, "%s/%s-%s/install", db->path, +				newpkg->name, newpkg->version); +		archive_entry_set_mode(entry, 0644); +	} else if(strcmp(entryname, ".CHANGELOG") == 0) { +		/* the changelog goes inside the db */ +		snprintf(filename, PATH_MAX, "%s/%s-%s/changelog", db->path, +				newpkg->name, newpkg->version); +		archive_entry_set_mode(entry, 0644); +	} else if(*entryname == '.') { +		/* for now, ignore all files starting with '.' that haven't +		 * already been handled (for future possibilities) */ +		_alpm_log(PM_LOG_DEBUG, "skipping extraction of '%s'\n", entryname); +		archive_read_data_skip(archive); +		return(0); +	} else { +		/* build the new entryname relative to handle->root */ +		snprintf(filename, PATH_MAX, "%s%s", handle->root, entryname); +	} -			if(!tr) { -				RET_ERR(PM_ERR_TRANS_ABORT, -1); -			} +	/* if a file is in NoExtract then we never extract it */ +	if(alpm_list_find_str(handle->noextract, entryname)) { +		_alpm_log(PM_LOG_DEBUG, "%s is in NoExtract, skipping extraction\n", +				entryname); +		alpm_logaction("note: %s is in NoExtract, skipping extraction\n", +				entryname); +		archive_read_data_skip(archive); +		return(0); +	} -			if(_alpm_trans_init(tr, PM_TRANS_TYPE_UPGRADE, trans->flags, NULL, NULL, NULL) == -1) { -				FREETRANS(tr); -				RET_ERR(PM_ERR_TRANS_ABORT, -1); -			} +	/* if a file is in the add skiplist we never extract it */ +	if(alpm_list_find_str(trans->skip_add, filename)) { +		_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_add, skipping extraction\n", entryname); +		archive_read_data_skip(archive); +		return(0); +	} -			if(_alpm_remove_loadtarget(tr, db, newpkg->name) == -1) { -				FREETRANS(tr); -				RET_ERR(PM_ERR_TRANS_ABORT, -1); +	/* Check for file existence. This is one of the more crucial parts +	 * to get 'right'. Here are the possibilities, with the filesystem +	 * on the left and the package on the top: +	 * (F=file, N=node, S=symlink, D=dir) +	 *               |  F/N  |  S  |  D +	 *  non-existent |   1   |  2  |  3 +	 *  F/N          |   4   |  5  |  6 +	 *  S            |   7   |  8  |  9 +	 *  D            |   10  |  11 |  12 +	 * +	 *  1,2,3- extract, no magic necessary. lstat (_alpm_lstat) will fail here. +	 *  4,5,6,7,8- conflict checks should have caught this. either overwrite +	 *      or backup the file. +	 *  9- follow the symlink, hopefully it is a directory, check it. +	 *  10- file replacing directory- don't allow it. +	 *  11- don't extract symlink- a dir exists here. we don't want links to +	 *      links, etc. +	 *  12- skip extraction, dir already exists. +	 */ +	struct stat lsbuf; +	if(_alpm_lstat(filename, &lsbuf) != 0) { +		/* cases 1,2,3: couldn't stat an existing file, skip all backup checks */ +	} else { +		/* do a stat as well, so we can see what symlinks point to */ +		struct stat sbuf; +		stat(filename, &sbuf); + +		if(S_ISDIR(lsbuf.st_mode) && S_ISDIR(entrymode)) { +			/* case 12: existing dir, ignore it */ +			if(lsbuf.st_mode != entrymode) { +				/* if filesystem perms are different than pkg perms, warn user */ +				int mask = 07777; +				_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n" +							"filesystem: %o  package: %o\n"), entryname, lsbuf.st_mode & mask, +						entrymode & mask); +				alpm_logaction("warning: directory permissions differ on %s\n" +							"filesystem: %o  package: %o\n", entryname, lsbuf.st_mode & mask, +						entrymode & mask);  			} - -			/* copy the remove skiplist over */ -			tr->skip_remove = alpm_list_strdup(trans->skip_remove); -			alpm_list_t *b; - -			/* Add files in the NEW package's backup array to the noupgrade array -			 * so this removal operation doesn't kill them */ -			/* TODO if we add here, all backup=() entries for all targets, new and -			 * old, we cover all bases, including backup=() locations changing hands. -			 * But is this viable? */ -			alpm_list_t *old_noupgrade = alpm_list_strdup(handle->noupgrade); -			for(b = alpm_pkg_get_backup(newpkg); b; b = b->next) { -				const char *backup = b->data; -				_alpm_log(PM_LOG_DEBUG, _("adding %s to the NoUpgrade array temporarily"), backup); -				handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(backup)); +			_alpm_log(PM_LOG_DEBUG, "extract: skipping dir extraction of %s\n", +					entryname); +			archive_read_data_skip(archive); +			return(0); +		} else if(S_ISDIR(lsbuf.st_mode) && S_ISLNK(entrymode)) { +			/* case 11: existing dir, symlink in package, ignore it */ +			_alpm_log(PM_LOG_DEBUG, "extract: skipping symlink extraction of %s\n", +					entryname); +			archive_read_data_skip(archive); +			return(0); +		} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(entrymode)) { +			/* case 9: existing symlink, dir in package */ +			if(S_ISDIR(sbuf.st_mode)) { +				/* the symlink on FS is to a directory, so we'll use it */ +				_alpm_log(PM_LOG_DEBUG, "extract: skipping symlink overwrite of %s\n", +						entryname); +				archive_read_data_skip(archive); +				return(0); +			} else { +				/* this is BAD. symlink was not to a directory */ +				_alpm_log(PM_LOG_ERROR, _("extract: symlink %s does not point to dir\n"), +						entryname); +				archive_read_data_skip(archive); +				return(1);  			} +		} else if(S_ISDIR(lsbuf.st_mode) && S_ISREG(entrymode)) { +			/* case 10: trying to overwrite dir tree with file, don't allow it */ +			_alpm_log(PM_LOG_ERROR, _("extract: not overwriting dir with file %s\n"), +					entryname); +			archive_read_data_skip(archive); +			return(1); +		} else if(S_ISREG(lsbuf.st_mode) && S_ISDIR(entrymode)) { +			/* case 6: trying to overwrite file with dir */ +			_alpm_log(PM_LOG_DEBUG, "extract: overwriting file with dir %s\n", +					entryname); +		} else if(S_ISREG(entrymode)) { +			/* case 4,7: */ +			/* if file is in NoUpgrade, don't touch it */ +			if(alpm_list_find_str(handle->noupgrade, entryname)) { +				notouch = 1; +			} else { +				/* go to the backup array and see if our conflict is there */ +				/* check newpkg first, so that adding backup files is retroactive */ +				if(alpm_list_find_str(alpm_pkg_get_backup(newpkg), entryname) != NULL) { +					needbackup = 1; +				} -			int ret = _alpm_remove_commit(tr, db); - -			FREETRANS(tr); -			/* restore our "NoUpgrade" list to previous state */ -			alpm_list_free_inner(handle->noupgrade, free); -			alpm_list_free(handle->noupgrade); -			handle->noupgrade = old_noupgrade; +				/* check oldpkg for a backup entry, store the hash if available */ +				if(oldpkg) { +					hash_orig = _alpm_needbackup(entryname, alpm_pkg_get_backup(oldpkg)); +					if(hash_orig) { +						needbackup = 1; +					} +				} -			if(ret == -1) { -				RET_ERR(PM_ERR_TRANS_ABORT, -1); +				/* if we force hash_orig to be non-NULL retroactive backup works */ +				if(needbackup && !hash_orig) { +					hash_orig = strdup(""); +				}  			}  		} +		/* else if(S_ISLNK(entrymode)) */ +		/* case 5,8: don't need to do anything special */ +	} -		if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) { -			_alpm_log(PM_LOG_DEBUG, _("extracting files")); +	if(needbackup) { +		char *tempfile = NULL; +		char *hash_local = NULL, *hash_pkg = NULL; +		int fd; + +		/* extract the package's version to a temporary file and checksum it */ +		tempfile = strdup("/tmp/alpm_XXXXXX"); +		fd = mkstemp(tempfile); + +		archive_entry_set_pathname(entry, tempfile); + +		int ret = archive_read_extract(archive, entry, archive_flags); +		if(ret == ARCHIVE_WARN) { +			/* operation succeeded but a non-critical error was encountered */ +			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", +					entryname, archive_error_string(archive)); +		} else if(ret != ARCHIVE_OK) { +			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), +					entryname, archive_error_string(archive)); +			alpm_logaction("error: could not extract %s (%s)\n", +					entryname, archive_error_string(archive)); +			unlink(tempfile); +			FREE(hash_orig); +			close(fd); +			return(1); +		} -			if ((archive = archive_read_new()) == NULL) { -				RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1); +		hash_local = alpm_get_md5sum(filename); +		hash_pkg = alpm_get_md5sum(tempfile); + +		/* append the new md5 hash to it's respective entry +		 * in newpkg's backup (it will be the new orginal) */ +		alpm_list_t *backups; +		for(backups = alpm_pkg_get_backup(newpkg); backups; +				backups = alpm_list_next(backups)) { +			char *oldbackup = alpm_list_getdata(backups); +			if(!oldbackup || strcmp(oldbackup, entryname) != 0) { +				continue; +			} +			char *backup = NULL; +			/* length is tab char, null byte and MD5 (32 char) */ +			int backup_len = strlen(oldbackup) + 34; +			backup = malloc(backup_len); +			if(!backup) { +				RET_ERR(PM_ERR_MEMORY, -1);  			} -			archive_read_support_compression_all(archive); -			archive_read_support_format_all(archive); +			sprintf(backup, "%s\t%s", oldbackup, hash_pkg); +			backup[backup_len-1] = '\0'; +			FREE(oldbackup); +			backups->data = backup; +		} -			if(archive_read_open_file(archive, newpkg->data, ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { -				RET_ERR(PM_ERR_PKG_OPEN, -1); -			} +		_alpm_log(PM_LOG_DEBUG, "checking hashes for %s\n", entryname); +		_alpm_log(PM_LOG_DEBUG, "current:  %s\n", hash_local); +		_alpm_log(PM_LOG_DEBUG, "new:      %s\n", hash_pkg); +		_alpm_log(PM_LOG_DEBUG, "original: %s\n", hash_orig); + +		if(!oldpkg) { +			/* looks like we have a local file that has a different hash as the +			 * file in the package, move it to a .pacorig */ +			if(strcmp(hash_local, hash_pkg) != 0) { +				char newpath[PATH_MAX]; +				snprintf(newpath, PATH_MAX, "%s.pacorig", filename); -			/* save the cwd so we can restore it later */ -			if(getcwd(cwd, PATH_MAX) == NULL) { -				_alpm_log(PM_LOG_ERROR, _("could not get current working directory")); -				cwd[0] = 0; +				/* move the existing file to the "pacorig" */ +				if(rename(filename, newpath)) { +					archive_entry_set_pathname(entry, filename); +					_alpm_log(PM_LOG_ERROR, _("could not rename %s (%s)\n"), filename, strerror(errno)); +					alpm_logaction("error: could not rename %s (%s)\n", filename, strerror(errno)); +					errors++; +				} else { +					/* copy the tempfile we extracted to the real path */ +					if(_alpm_copyfile(tempfile, filename)) { +						archive_entry_set_pathname(entry, filename); +						_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno)); +						alpm_logaction("error: could not copy tempfile to %s (%s)\n", filename, strerror(errno)); +						errors++; +					} else { +						archive_entry_set_pathname(entry, filename); +						_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), filename, newpath); +						alpm_logaction("warning: %s saved as %s\n", filename, newpath); +					} +				}  			} +		} else if(hash_orig) { +			/* the fun part */ + +			if(strcmp(hash_orig, hash_local) == 0) { +				/* installed file has NOT been changed by user */ +				if(strcmp(hash_orig, hash_pkg) != 0) { +					_alpm_log(PM_LOG_DEBUG, "action: installing new file: %s\n", +							entryname); -			/* libarchive requires this for extracting hard links */ -			chdir(handle->root); - -			targ_count = alpm_list_count(targ); -			/* call PROGRESS once with 0 percent, as we sort-of skip that here */ -			PROGRESS(trans, (is_upgrade ? PM_TRANS_PROGRESS_UPGRADE_START : PM_TRANS_PROGRESS_ADD_START), -							 newpkg->name, 0, pkg_count, (pkg_count - targ_count +1)); - -			for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) { -				const char *entryname; /* the name of the file in the archive */ -				char filename[PATH_MAX]; /* the actual file we're extracting */ -				int needbackup = 0, notouch = 0; -				char *hash_orig = NULL; -				struct stat buf; - -				entryname = archive_entry_pathname(entry); - -				if(newpkg->size != 0) { -					/* Using compressed size for calculations here, as newpkg->isize is not -					 * exact when it comes to comparing to the ACTUAL uncompressed size -					 * (missing metadata sizes) */ -					unsigned long pos = archive_position_compressed(archive); -					percent = (double)pos / (double)newpkg->size; -					_alpm_log(PM_LOG_DEBUG, "decompression progress: %f%% (%ld / %ld)", percent*100.0, pos, newpkg->size); -					if(percent >= 1.0) { -						percent = 1.0; +					if(_alpm_copyfile(tempfile, filename)) { +						_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno)); +						errors++;  					} +					archive_entry_set_pathname(entry, filename); +				} else { +					/* there's no sense in installing the same file twice, install +					 * ONLY is the original and package hashes differ */ +					_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");  				} -				 -				PROGRESS(trans, (is_upgrade ? PM_TRANS_PROGRESS_UPGRADE_START : PM_TRANS_PROGRESS_ADD_START), -								 newpkg->name, (int)(percent * 100), pkg_count, (pkg_count - targ_count +1)); - -				memset(filename, 0, PATH_MAX); /* just to be sure */ - -				if(strcmp(entryname, ".PKGINFO") == 0 || strcmp(entryname, ".FILELIST") == 0) { -					archive_read_data_skip(archive); -					continue; -				} else if(strcmp(entryname, ".INSTALL") == 0) { -					/* the install script goes inside the db */ -					snprintf(filename, PATH_MAX, "%s/%s-%s/install", db->path, -									 newpkg->name, newpkg->version); -				} else if(strcmp(entryname, ".CHANGELOG") == 0) { -					/* the changelog goes inside the db */ -					snprintf(filename, PATH_MAX, "%s/%s-%s/changelog", db->path, -									 newpkg->name, newpkg->version); +			} else if(strcmp(hash_orig, hash_pkg) == 0) { +				/* originally installed file and new file are the same - this +				 * implies the case above failed - i.e. the file was changed by a +				 * user */ +				_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n"); +			} else if(strcmp(hash_local, hash_pkg) == 0) { +				/* this would be magical.  The above two cases failed, but the +				 * user changes just so happened to make the new file exactly the +				 * same as the one in the package... skip it */ +				_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n"); +			} else { +				char newpath[PATH_MAX]; +				_alpm_log(PM_LOG_DEBUG, "action: keeping current file and installing new one with .pacnew ending\n"); +				snprintf(newpath, PATH_MAX, "%s.pacnew", filename); +				if(_alpm_copyfile(tempfile, newpath)) { +					_alpm_log(PM_LOG_ERROR, _("could not install %s as %s: %s\n"), filename, newpath, strerror(errno)); +					alpm_logaction("error: could not install %s as %s: %s\n", filename, newpath, strerror(errno));  				} else { -					/* build the new entryname relative to handle->root */ -					snprintf(filename, PATH_MAX, "%s%s", handle->root, entryname); +					_alpm_log(PM_LOG_WARNING, _("%s installed as %s\n"), filename, newpath); +					alpm_logaction("warning: %s installed as %s\n", filename, newpath);  				} +			} +		} -				/* if a file is in NoExtract then we never extract it */ -				if(alpm_list_find_str(handle->noextract, entryname)) { -					_alpm_log(PM_LOG_DEBUG, _("%s is in NoExtract, skipping extraction"), entryname); -					alpm_logaction(_("%s is in NoExtract, skipping extraction"), entryname); -					archive_read_data_skip(archive); -					continue; -				} +		FREE(hash_local); +		FREE(hash_pkg); +		FREE(hash_orig); +		unlink(tempfile); +		FREE(tempfile); +		close(fd); +	} else { +		/* we didn't need a backup */ +		if(notouch) { +			/* change the path to a .pacnew extension */ +			_alpm_log(PM_LOG_DEBUG, "%s is in NoUpgrade -- skipping\n", filename); +			_alpm_log(PM_LOG_WARNING, _("extracting %s as %s.pacnew\n"), filename, filename); +			alpm_logaction("warning: extracting %s as %s.pacnew\n", filename, filename); +			strncat(filename, ".pacnew", PATH_MAX - strlen(filename)); +		} else { +			_alpm_log(PM_LOG_DEBUG, "extracting %s\n", filename); +		} -				/* if a file is in the add skiplist we never extract it */ -				if(alpm_list_find_str(trans->skip_add, filename)) { -					_alpm_log(PM_LOG_DEBUG, _("%s is in trans->skip_add, skipping extraction"), entryname); -					archive_read_data_skip(archive); -					continue; -				} +		if(trans->flags & PM_TRANS_FLAG_FORCE) { +			/* if FORCE was used, unlink() each file (whether it's there +			 * or not) before extracting. This prevents the old "Text file busy" +			 * error that crops up if forcing a glibc or pacman upgrade. */ +			unlink(filename); +		} -				/* check is file already exists */ -				if(stat(filename, &buf) == 0 && !S_ISDIR(buf.st_mode)) { -					/* it does, is it a backup=() file? -					 * always check the newpkg first, so when we do add a backup=() file, -					 * we don't have to wait a full upgrade cycle */ -					needbackup = alpm_list_find_str(alpm_pkg_get_backup(newpkg), entryname); - -					if(is_upgrade) { -						hash_orig = _alpm_needbackup(entryname, alpm_pkg_get_backup(oldpkg)); -						if(hash_orig) { -							needbackup = 1; -						} -					} +		archive_entry_set_pathname(entry, filename); + +		int ret = archive_read_extract(archive, entry, archive_flags); +		if(ret == ARCHIVE_WARN) { +			/* operation succeeded but a non-critical error was encountered */ +			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", +					entryname, archive_error_string(archive)); +		} else if(ret != ARCHIVE_OK) { +			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), +					entryname, archive_error_string(archive)); +			alpm_logaction("error: could not extract %s (%s)\n", +					entryname, archive_error_string(archive)); +			return(1); +		} -					/* this is kind of gross.  if we force hash_orig to be non-NULL we can -					 * catch the pro-active backup=() case (when the backup entry is in -					 * the new package, and not the old */ -					if(needbackup && !hash_orig) { -						hash_orig = strdup(""); -					} -					 -					/* NoUpgrade skips all this backup stuff, because it's just never -					 * touched */ -					if(alpm_list_find_str(handle->noupgrade, entryname)) { -						notouch = 1; -						needbackup = 0; -					} -				} +		/* calculate an hash if this is in newpkg's backup */ +		alpm_list_t *b; +		for(b = alpm_pkg_get_backup(newpkg); b; b = b->next) { +			char *backup = NULL, *hash = NULL; +			char *oldbackup = alpm_list_getdata(b); +			/* length is tab char, null byte and MD5 (32 char) */ +			int backup_len = strlen(oldbackup) + 34; -				if(needbackup) { -					char *tempfile = NULL; -					char *hash_local = NULL, *hash_pkg = NULL; -					int fd; +			if(!oldbackup || strcmp(oldbackup, entryname) != 0) { +				continue; +			} +			_alpm_log(PM_LOG_DEBUG, "appending backup entry for %s\n", filename); -					/* extract the package's version to a temporary file and md5 it */ -					tempfile = strdup("/tmp/alpm_XXXXXX"); -					fd = mkstemp(tempfile); -					 -					archive_entry_set_pathname(entry, tempfile); +			hash = alpm_get_md5sum(filename); +			backup = malloc(backup_len); +			if(!backup) { +				RET_ERR(PM_ERR_MEMORY, -1); +			} -					if(archive_read_extract(archive, entry, ARCHIVE_EXTRACT_FLAGS) != ARCHIVE_OK) { -						_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)"), entryname, strerror(errno)); -						alpm_logaction(_("could not extract %s (%s)"), entryname, strerror(errno)); -						errors++; -						unlink(tempfile); -						FREE(hash_orig); -						close(fd); -						continue; -					} +			sprintf(backup, "%s\t%s", oldbackup, hash); +			backup[backup_len-1] = '\0'; +			FREE(hash); +			FREE(oldbackup); +			b->data = backup; +		} +	} +	return(errors); +} -					if(use_md5) { -						hash_local = _alpm_MDFile(filename); -						hash_pkg = _alpm_MDFile(tempfile); -					} else { -						hash_local = _alpm_SHAFile(filename); -						hash_pkg = _alpm_SHAFile(tempfile); -					} +static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count, +		pmtrans_t *trans, pmdb_t *db) +{ +	int i, ret = 0, errors = 0; +	struct archive *archive; +	struct archive_entry *entry; +	char cwd[PATH_MAX] = ""; +	char scriptlet[PATH_MAX+1]; +	int is_upgrade = 0; +	double percent = 0.0; +	pmpkg_t *oldpkg = NULL; + +	snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", db->path, +			alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); + +	/* see if this is an upgrade. if so, remove the old package first */ +	pmpkg_t *local = _alpm_db_get_pkgfromcache(db, newpkg->name); +	if(local) { +		is_upgrade = 1; + +		EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, NULL); +		_alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n", +				newpkg->name, newpkg->version); + +		/* we'll need to save some record for backup checks later */ +		oldpkg = _alpm_pkg_dup(local); +		/* copy over the install reason (unless alldeps is set) */ +	if(trans->flags & PM_TRANS_FLAG_ALLDEPS) { +		newpkg->reason = PM_PKG_REASON_DEPEND; +	} else { +		newpkg->reason = alpm_pkg_get_reason(local); +	} -					/* append the new md5 or sha1 hash to it's respective entry in newpkg's backup -					 * (it will be the new orginal) */ -					for(lp = alpm_pkg_get_backup(newpkg); lp; lp = lp->next) { -						if(!lp->data || strcmp(lp->data, entryname) != 0) { -							continue; -						} -						char *backup = NULL; -						int backup_len = strlen(lp->data) + 2; /* tab char and null byte */ - -						if(use_md5) { -							backup_len += 32; /* MD5s are 32 chars in length */ -						} else { -							backup_len += 40; /* SHA1s are 40 chars in length */ -						} - -						backup = malloc(backup_len); -						if(!backup) { -							RET_ERR(PM_ERR_MEMORY, -1); -						} - -						sprintf(backup, "%s\t%s", (char *)lp->data, hash_pkg); -						backup[backup_len-1] = '\0'; -						FREE(lp->data); -						lp->data = backup; -					} +		/* pre_upgrade scriptlet */ +		if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { +			_alpm_runscriptlet(handle->root, newpkg->origin_data.file, +					"pre_upgrade", newpkg->version, oldpkg->version, trans); +		} +	} else { +		is_upgrade = 0; -					if(use_md5) { -						_alpm_log(PM_LOG_DEBUG, _("checking md5 hashes for %s"), entryname); -					} else { -						_alpm_log(PM_LOG_DEBUG, _("checking sha1 hashes for %s"), entryname); -					} -					_alpm_log(PM_LOG_DEBUG, _("current:  %s"), hash_local); -					_alpm_log(PM_LOG_DEBUG, _("new:      %s"), hash_pkg); -					_alpm_log(PM_LOG_DEBUG, _("original: %s"), hash_orig); - -					if(!is_upgrade) { -						/* looks like we have a local file that has a different hash as the -						 * file in the package, move it to a .pacorig */ -						if(strcmp(hash_local, hash_pkg) != 0) { -							char newpath[PATH_MAX]; -							snprintf(newpath, PATH_MAX, "%s.pacorig", filename); - -							/* move the existing file to the "pacorig" */ -							if(rename(filename, newpath)) { -								archive_entry_set_pathname(entry, filename); -								_alpm_log(PM_LOG_ERROR, _("could not rename %s (%s)"), filename, strerror(errno)); -								alpm_logaction(_("error: could not rename %s (%s)"), filename, strerror(errno)); -								errors++; -							} else { -								/* copy the tempfile we extracted to the real path */ -								if(_alpm_copyfile(tempfile, filename)) { -									archive_entry_set_pathname(entry, filename); -									_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)"), filename, strerror(errno)); -									alpm_logaction(_("error: could not copy tempfile to %s (%s)"), filename, strerror(errno)); -									errors++; -								} else { -									archive_entry_set_pathname(entry, filename); -									_alpm_log(PM_LOG_WARNING, _("%s saved as %s"), filename, newpath); -									alpm_logaction(_("warning: %s saved as %s"), filename, newpath); -								} -							} -						} -					} else if(hash_orig) { -						/* the fun part */ - -						if(strcmp(hash_orig, hash_local) == 0) { -							/* installed file has NOT been changed by user */ -							if(strcmp(hash_orig, hash_pkg) != 0) { -								_alpm_log(PM_LOG_DEBUG, _("action: installing new file: %s"), entryname); - -								if(_alpm_copyfile(tempfile, filename)) { -									_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)"), filename, strerror(errno)); -									errors++; -								} -								archive_entry_set_pathname(entry, filename); -							} else { -								/* there's no sense in installing the same file twice, install -								 * ONLY is the original and package hashes differ */ -								_alpm_log(PM_LOG_DEBUG, _("action: leaving existing file in place")); -							} -						} else if(strcmp(hash_orig, hash_pkg) == 0) { -							/* originally installed file and new file are the same - this -							 * implies the case above failed - i.e. the file was changed by a -							 * user */ -							_alpm_log(PM_LOG_DEBUG, _("action: leaving existing file in place")); -						} else if(strcmp(hash_local, hash_pkg) == 0) { -							/* this would be magical.  The above two cases failed, but the -							 * user changes just so happened to make the new file exactly the -							 * same as the one in the package... skip it */ -							_alpm_log(PM_LOG_DEBUG, _("action: leaving existing file in place")); -						} else { -							char newpath[PATH_MAX]; -							_alpm_log(PM_LOG_DEBUG, _("action: keeping current file and installing new one with .pacnew ending")); -							snprintf(newpath, PATH_MAX, "%s.pacnew", filename); -							if(_alpm_copyfile(tempfile, newpath)) { -								_alpm_log(PM_LOG_ERROR, _("could not install %s as %s: %s"), filename, newpath, strerror(errno)); -								alpm_logaction(_("error: could not install %s as %s: %s"), filename, newpath, strerror(errno)); -							} else { -								_alpm_log(PM_LOG_WARNING, _("%s installed as %s"), filename, newpath); -								alpm_logaction(_("warning: %s installed as %s"), filename, newpath); -							} -						} -					} +		EVENT(trans, PM_TRANS_EVT_ADD_START, newpkg, NULL); +		_alpm_log(PM_LOG_DEBUG, "adding package %s-%s\n", +				newpkg->name, newpkg->version); -					FREE(hash_local); -					FREE(hash_pkg); -					FREE(hash_orig); -					unlink(tempfile); -					FREE(tempfile); -					close(fd); -				} else { /* ! needbackup */ - -					if(notouch) { -						_alpm_log(PM_LOG_DEBUG, _("%s is in NoUpgrade -- skipping"), filename); -						_alpm_log(PM_LOG_WARNING, _("extracting %s as %s.pacnew"), filename, filename); -						alpm_logaction(_("warning: extracting %s as %s.pacnew"), filename, filename); -						strncat(filename, ".pacnew", PATH_MAX); -					} else { -						_alpm_log(PM_LOG_DEBUG, _("extracting %s"), filename); -					} +		/* pre_install scriptlet */ +		if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { +			_alpm_runscriptlet(handle->root, newpkg->origin_data.file, +					"pre_install", newpkg->version, NULL, trans); +		} +	} -					if(trans->flags & PM_TRANS_FLAG_FORCE) { -						/* if FORCE was used, then unlink() each file (whether it's there -						 * or not) before extracting.  this prevents the old "Text file busy" -						 * error that crops up if one tries to --force a glibc or pacman -						 * upgrade. -						 */ -						unlink(filename); -					} +	if(oldpkg) { +		/* set up fake remove transaction */ +		int ret = upgrade_remove(oldpkg, newpkg, trans, db); +		if(ret != 0) { +			return(ret); +		} +	} -					archive_entry_set_pathname(entry, filename); +	if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) { +		_alpm_log(PM_LOG_DEBUG, "extracting files\n"); -					int ret = archive_read_extract(archive, entry,  -								ARCHIVE_EXTRACT_FLAGS | ARCHIVE_EXTRACT_NO_OVERWRITE); -					if(ret != ARCHIVE_OK && ret != ARCHIVE_WARN) { -						_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)"), filename, strerror(errno)); -						alpm_logaction(_("error: could not extract %s (%s)"), filename, strerror(errno)); -						errors++; -					} +		if ((archive = archive_read_new()) == NULL) { +			RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1); +		} -					/* calculate an hash if this is in newpkg's backup */ -					for(lp = alpm_pkg_get_backup(newpkg); lp; lp = lp->next) { -						char *backup = NULL, *hash = NULL; -						int backup_len = strlen(lp->data) + 2; /* tab char and null byte */ - -						if(!lp->data || strcmp(lp->data, entryname) != 0) { -							continue; -						} -						_alpm_log(PM_LOG_DEBUG, _("appending backup entry for %s"), filename); - -						if(use_md5) { -							backup_len += 32; /* MD5s are 32 chars in length */ -							hash = _alpm_MDFile(filename); -						} else { -							backup_len += 40; /* SHA1s are 40 chars in length */ -							hash = _alpm_SHAFile(filename); -						} - -						backup = malloc(backup_len); -						if(!backup) { -							RET_ERR(PM_ERR_MEMORY, -1); -						} - -						sprintf(backup, "%s\t%s", (char *)lp->data, hash); -						backup[backup_len-1] = '\0'; -						FREE(hash); -						FREE(lp->data); -						lp->data = backup; -					} -				} -			} -			archive_read_finish(archive); +		archive_read_support_compression_all(archive); +		archive_read_support_format_all(archive); -			/* restore the old cwd is we have it */ -			if(strlen(cwd)) { -				chdir(cwd); -			} +		if(archive_read_open_filename(archive, newpkg->origin_data.file, +					ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +			RET_ERR(PM_ERR_PKG_OPEN, -1); +		} -			if(errors) { -				ret = 1; -				_alpm_log(PM_LOG_ERROR, _("errors occurred while %s %s"), -					(is_upgrade ? _("upgrading") : _("installing")), newpkg->name); -				alpm_logaction(_("errors occurred while %s %s"), -					(is_upgrade ? _("upgrading") : _("installing")), newpkg->name); -			} +		/* save the cwd so we can restore it later */ +		if(getcwd(cwd, PATH_MAX) == NULL) { +			_alpm_log(PM_LOG_ERROR, _("could not get current working directory\n")); +			cwd[0] = 0;  		} -		/* Update the requiredby field by scanning the whole database  -		 * looking for packages depending on the package to add */ -		_alpm_pkg_update_requiredby(newpkg); - -		/* special case: if our provides list has changed from oldpkg to newpkg AND -		 * we get here, we need to make sure we find the actual provision that -		 * still satisfies this case, and update its 'requiredby' field... ugh */ -		alpm_list_t *provdiff, *prov; -		provdiff = alpm_list_diff(alpm_pkg_get_provides(oldpkg), -														 	alpm_pkg_get_provides(newpkg), -															_alpm_str_cmp); -		for(prov = provdiff; prov; prov = prov->next) { -			const char *provname = prov->data; -			_alpm_log(PM_LOG_DEBUG, _("provision '%s' has been removed from package %s (%s => %s)"), -								provname, alpm_pkg_get_name(oldpkg), -								alpm_pkg_get_version(oldpkg), alpm_pkg_get_version(newpkg)); - -			alpm_list_t *p = _alpm_db_whatprovides(handle->db_local, provname); -			if(p) { -				/* we now have all the provisions in the local DB for this virtual -				 * package... seeing as we can't really determine which is the 'correct' -				 * provision, we'll use the FIRST for now. -				 * TODO figure out a way to find a "correct" provision */ -				pmpkg_t *provpkg = p->data; -				const char *pkgname = alpm_pkg_get_name(provpkg); -				_alpm_log(PM_LOG_DEBUG, _("updating '%s' due to provision change (%s)"), pkgname, provname); -				_alpm_pkg_update_requiredby(provpkg); - -				if(_alpm_db_write(db, provpkg, INFRQ_DEPENDS)) { -					_alpm_log(PM_LOG_ERROR, _("could not update provision '%s' from '%s'"), provname, pkgname); -					alpm_logaction(_("could not update provision '%s' from '%s'"), provname, pkgname); -					RET_ERR(PM_ERR_DB_WRITE, -1); +		/* libarchive requires this for extracting hard links */ +		chdir(handle->root); + +		/* call PROGRESS once with 0 percent, as we sort-of skip that here */ +		if(is_upgrade) { +			PROGRESS(trans, PM_TRANS_PROGRESS_UPGRADE_START, +					alpm_pkg_get_name(newpkg), 0, pkg_count, pkg_current); +		} else { +			PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START, +					alpm_pkg_get_name(newpkg), 0, pkg_count, pkg_current); +		} + +		for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) { +			if(newpkg->size != 0) { +				/* Using compressed size for calculations here, as newpkg->isize is not +				 * exact when it comes to comparing to the ACTUAL uncompressed size +				 * (missing metadata sizes) */ +				unsigned long pos = archive_position_compressed(archive); +				percent = (double)pos / (double)newpkg->size; +				_alpm_log(PM_LOG_DEBUG, "decompression progress: %f%% (%ld / %ld)\n", +						percent*100.0, pos, newpkg->size); +				if(percent >= 1.0) { +					percent = 1.0;  				}  			} -		} -		alpm_list_free(provdiff); - -		/* make an install date (in UTC) */ -		time_t t = time(NULL); -		strncpy(newpkg->installdate, asctime(gmtime(&t)), PKG_DATE_LEN); -		/* remove the extra line feed appended by asctime() */ -		newpkg->installdate[strlen(newpkg->installdate)-1] = 0; - -		_alpm_log(PM_LOG_DEBUG, _("updating database")); -		_alpm_log(PM_LOG_DEBUG, _("adding database entry '%s'"), newpkg->name); - -		if(_alpm_db_write(db, newpkg, INFRQ_ALL)) { -			_alpm_log(PM_LOG_ERROR, _("could not update database entry %s-%s"), -								alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); -			alpm_logaction(_("could not update database entry %s-%s"), -										 alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); -			RET_ERR(PM_ERR_DB_WRITE, -1); -		} -		 -		if(_alpm_db_add_pkgincache(db, newpkg) == -1) { -			_alpm_log(PM_LOG_ERROR, _("could not add entry '%s' in cache"), -										 alpm_pkg_get_name(newpkg)); -		} -		/* update dependency packages' REQUIREDBY fields */ -		_alpm_trans_update_depends(trans, newpkg); +			if(is_upgrade) { +				PROGRESS(trans, PM_TRANS_PROGRESS_UPGRADE_START, +						alpm_pkg_get_name(newpkg), (int)(percent * 100), pkg_count, +						pkg_current); +			} else { +				PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START, +						alpm_pkg_get_name(newpkg), (int)(percent * 100), pkg_count, +						pkg_current); +			} + +			/* extract the next file from the archive */ +			errors += extract_single_file(archive, entry, newpkg, oldpkg, +					trans, db); +		} +		archive_read_finish(archive); -		PROGRESS(trans, (is_upgrade ? PM_TRANS_PROGRESS_UPGRADE_START : PM_TRANS_PROGRESS_ADD_START), -						 alpm_pkg_get_name(newpkg), 100, pkg_count, (pkg_count - targ_count +1)); -		EVENT(trans, PM_TRANS_EVT_EXTRACT_DONE, NULL, NULL); +		/* restore the old cwd is we have it */ +		if(strlen(cwd)) { +			chdir(cwd); +		} -		/* run the post-install script if it exists  */ -		if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { +		if(errors) { +			ret = 1;  			if(is_upgrade) { -				_alpm_runscriptlet(handle->root, scriptlet, "post_upgrade", -													alpm_pkg_get_version(newpkg), oldpkg ? alpm_pkg_get_version(oldpkg) : NULL, -													trans); +				_alpm_log(PM_LOG_ERROR, _("problem occurred while upgrading %s\n"), +						newpkg->name); +				alpm_logaction("error: problem occurred while upgrading %s\n", +						newpkg->name);  			} else { -				_alpm_runscriptlet(handle->root, scriptlet, "post_install", -													 alpm_pkg_get_version(newpkg), NULL, trans); +				_alpm_log(PM_LOG_ERROR, _("problem occurred while installing %s\n"), +						newpkg->name); +				alpm_logaction("error: problem occurred while installing %s\n", +						newpkg->name);  			}  		} +	} -		EVENT(trans, (is_upgrade) ? PM_TRANS_EVT_UPGRADE_DONE : PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg); +	/* make an install date (in UTC) */ +	newpkg->installdate = time(NULL); -		FREEPKG(oldpkg); +	_alpm_log(PM_LOG_DEBUG, "updating database\n"); +	_alpm_log(PM_LOG_DEBUG, "adding database entry '%s'\n", newpkg->name); + +	if(_alpm_db_write(db, newpkg, INFRQ_ALL)) { +		_alpm_log(PM_LOG_ERROR, _("could not update database entry %s-%s\n"), +				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); +		alpm_logaction("error: could not update database entry %s-%s\n", +				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); +		RET_ERR(PM_ERR_DB_WRITE, -1);  	} -	/* run ldconfig if it exists */ -	if(handle->trans->state != STATE_INTERRUPTED) { -		_alpm_log(PM_LOG_DEBUG, _("running \"ldconfig -r %s\""), handle->root); -		_alpm_ldconfig(handle->root); +	if(_alpm_db_add_pkgincache(db, newpkg) == -1) { +		_alpm_log(PM_LOG_ERROR, _("could not add entry '%s' in cache\n"), +				alpm_pkg_get_name(newpkg));  	} +	if(is_upgrade) { +		PROGRESS(trans, PM_TRANS_PROGRESS_UPGRADE_START, +				alpm_pkg_get_name(newpkg), 100, pkg_count, pkg_current); +	} else { +		PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START, +				alpm_pkg_get_name(newpkg), 100, pkg_count, pkg_current); +	} +	EVENT(trans, PM_TRANS_EVT_EXTRACT_DONE, NULL, NULL); + +	/* run the post-install script if it exists  */ +	if(alpm_pkg_has_scriptlet(newpkg) +			&& !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) { +		if(is_upgrade) { +			_alpm_runscriptlet(handle->root, scriptlet, "post_upgrade", +					alpm_pkg_get_version(newpkg), +					oldpkg ? alpm_pkg_get_version(oldpkg) : NULL, trans); +		} else { +			_alpm_runscriptlet(handle->root, scriptlet, "post_install", +					alpm_pkg_get_version(newpkg), NULL, trans); +		} +	} + +	if(is_upgrade) { +		EVENT(trans, PM_TRANS_EVT_UPGRADE_DONE, newpkg, oldpkg); +	} else { +		EVENT(trans, PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg); +	} + +	_alpm_pkg_free(oldpkg); + +	return(0); +} + +int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db) +{ +	int pkg_count, pkg_current; +	alpm_list_t *targ; + +	ALPM_LOG_FUNC; + +	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); + +	if(trans->packages == NULL) { +		return(0); +	} + +	pkg_count = alpm_list_count(trans->targets); +	pkg_current = 1; + +	/* loop through our package list adding/upgrading one at a time */ +	for(targ = trans->packages; targ; targ = targ->next) { +		if(handle->trans->state == STATE_INTERRUPTED) { +			return(0); +		} + +		pmpkg_t *newpkg = (pmpkg_t *)targ->data; +		commit_single_pkg(newpkg, pkg_current, pkg_count, trans, db); +		pkg_current++; +	} + +	/* run ldconfig if it exists */ +	_alpm_log(PM_LOG_DEBUG, "running \"ldconfig -r %s\"\n", handle->root); +	_alpm_ldconfig(handle->root); +  	return(0);  } diff --git a/lib/libalpm/add.h b/lib/libalpm/add.h index 4cd2e445..e576c075 100644 --- a/lib/libalpm/add.h +++ b/lib/libalpm/add.h @@ -1,8 +1,8 @@  /*   *  add.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_ADD_H diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index afb6226b..62bb8316 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -1,11 +1,11 @@  /*   *  alpm.c - *  - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> + * + *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,54 +18,20 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #include "config.h" -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <fcntl.h> -#include <ctype.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <time.h> -#include <syslog.h> -#include <limits.h> /* PATH_MAX */ -#include <stdarg.h> -#include <libintl.h> -  /* libalpm */  #include "alpm.h"  #include "alpm_list.h" -#include "log.h"  #include "error.h" -#include "versioncmp.h" -#include "md5.h" -#include "sha1.h" -#include "package.h" -#include "group.h" -#include "util.h" -#include "db.h" -#include "cache.h" -#include "deps.h" -#include "conflict.h" -#include "backup.h" -#include "add.h" -#include "remove.h" -#include "sync.h"  #include "handle.h" -#include "provide.h" -#include "server.h" - -#define min(X, Y)  ((X) < (Y) ? (X) : (Y)) +#include "util.h"  /* Globals */ -pmhandle_t *handle = NULL;  enum _pmerrno_t pm_errno SYMEXPORT;  /** \addtogroup alpm_interface Interface Functions @@ -77,7 +43,7 @@ enum _pmerrno_t pm_errno SYMEXPORT;   * functions are called.   * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_initialize() +int SYMEXPORT alpm_initialize(void)  {  	ASSERT(handle == NULL, RET_ERR(PM_ERR_HANDLE_NOT_NULL, -1)); @@ -86,1126 +52,35 @@ int SYMEXPORT alpm_initialize()  		RET_ERR(PM_ERR_MEMORY, -1);  	} -	return(0); -} - -/** Release the library.  This should be the last alpm call you make. - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_release() -{ -	int dbs_left = 0; - -	ALPM_LOG_FUNC; - -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - -	/* free the transaction if there is any */ -	if(handle->trans) { -		alpm_trans_release(); -	} - -	/* close local database */ -	if(handle->db_local) { -		alpm_db_unregister(handle->db_local); -		handle->db_local = NULL; -	} -	/* and also sync ones */ -	while((dbs_left = alpm_list_count(handle->dbs_sync)) > 0) { -		pmdb_t *db = (pmdb_t *)handle->dbs_sync->data; -		_alpm_log(PM_LOG_DEBUG, _("removing DB %s, %d remaining..."), db->treename, dbs_left); -		alpm_db_unregister(db); -		db = NULL; -	} - -	FREEHANDLE(handle); +#ifdef ENABLE_NLS +	bindtextdomain("libalpm", LOCALEDIR); +#endif  	return(0);  } -/** @} */ - -/** \addtogroup alpm_databases Database Functions - * @brief Functions to query and manipulate the database of libalpm - * @{ - */ - -/** Register a package database - * @param treename the name of the repository - * @return a pmdb_t* on success (the value), NULL on error - */ -pmdb_t SYMEXPORT *alpm_db_register(char *treename) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL)); -	ASSERT(treename != NULL && strlen(treename) != 0, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); -	/* Do not register a database if a transaction is on-going */ -	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL)); - -	return(_alpm_db_register(treename, NULL)); -} - -/** Unregister a package database - * @param db pointer to the package database to unregister - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int alpm_db_unregister(pmdb_t *db) -{ -	int found = 0; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	ASSERT(db != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* Do not unregister a database if a transaction is on-going */ -	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1)); - -	if(db == handle->db_local) { -		handle->db_local = NULL; -		found = 1; -	} else { -		void *data; -		handle->dbs_sync = alpm_list_remove(handle->dbs_sync, db, _alpm_db_cmp, &data); -		if(data) { -			found = 1; -		} -	} - -	if(!found) { -		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); -	} - -	_alpm_log(PM_LOG_DEBUG, _("unregistering database '%s'"), db->treename); - -	/* Cleanup */ -	_alpm_db_free_pkgcache(db); - -	_alpm_log(PM_LOG_DEBUG, _("closing database '%s'"), db->treename); -	_alpm_db_close(db); - -	_alpm_db_free(db); - -	return(0); -} - -/** Set the serverlist of a database. - * @param db database pointer - * @param url url of the server - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int alpm_db_setserver(pmdb_t *db, const char *url) -{ -	int found = 0; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); - -	if(strcmp(db->treename, "local") == 0) { -		if(handle->db_local != NULL) { -			found = 1; -		} -	} else { -		alpm_list_t *i; -		for(i = handle->dbs_sync; i && !found; i = i->next) { -			pmdb_t *sdb = i->data; -			if(strcmp(db->treename, sdb->treename) == 0) { -				found = 1; -			} -		} -	} -	if(!found) { -		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); -	} - -	if(url && strlen(url)) { -		pmserver_t *server; -		if((server = _alpm_server_new(url)) == NULL) { -			/* pm_errno is set by _alpm_server_new */ -			return(-1); -		} -		db->servers = alpm_list_add(db->servers, server); -		_alpm_log(PM_LOG_DEBUG, _("adding new server to database '%s': protocol '%s', server '%s', path '%s'"), -				db->treename, server->s_url->scheme, server->s_url->host, server->s_url->doc); -	} else { -		FREELIST(db->servers); -		_alpm_log(PM_LOG_DEBUG, _("serverlist flushed for '%s'"), db->treename); -	} - -	return(0); -} - -/** Update a package database - * @param force if true, then forces the update, otherwise update only in case - * the database isn't up to date - * @param db pointer to the package database to update - * @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up - * to date - */ -int SYMEXPORT alpm_db_update(int force, pmdb_t *db) -{ -	alpm_list_t *lp; -	char path[PATH_MAX]; -	alpm_list_t *files = NULL; -	char newmtime[16] = ""; -	char lastupdate[16] = ""; -	int ret; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* Verify we are in a transaction.  This is done _mainly_ because we need a DB -	 * lock - if we update without a db lock, we may kludge some other pacman -	 * process that _has_ a lock. -	 */ -	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); -	ASSERT(handle->trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1)); - -	if(!alpm_list_find(handle->dbs_sync, db)) { -		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); -	} - -	if(!force) { -		/* get the lastupdate time */ -		_alpm_db_getlastupdate(db, lastupdate); -		if(strlen(lastupdate) == 0) { -			_alpm_log(PM_LOG_DEBUG, _("failed to get lastupdate time for %s (no big deal)"), db->treename); -		} -	} - -	/* build a one-element list */ -	snprintf(path, PATH_MAX, "%s" PM_EXT_DB, db->treename); -	files = alpm_list_add(files, strdup(path)); - -	snprintf(path, PATH_MAX, "%s%s", handle->root, handle->dbpath); - -	ret = _alpm_downloadfiles_forreal(db->servers, path, files, lastupdate, newmtime); -	FREELIST(files); -	if(ret == 1) { -		/* mtimes match, do nothing */ -		pm_errno = 0; -		return(1); -	} else if(ret == -1) { -		/* we use downloadLastErrString and downloadLastErrCode here, error returns from -		 * libdownload */ -		_alpm_log(PM_LOG_DEBUG, _("failed to sync db: %s [%d]"), downloadLastErrString, downloadLastErrCode); -		RET_ERR(PM_ERR_DB_SYNC, -1); -	} else { -		if(strlen(newmtime)) { -			_alpm_log(PM_LOG_DEBUG, _("sync: new mtime for %s: %s"), db->treename, newmtime); -			_alpm_db_setlastupdate(db, newmtime); -		} -		snprintf(path, PATH_MAX, "%s%s%s" PM_EXT_DB, handle->root, handle->dbpath, db->treename); - -		/* remove the old dir */ -		_alpm_log(PM_LOG_DEBUG, _("flushing database %s%s"), db->path); -		for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { -			pmpkg_t *pkg = lp->data; -			if(pkg && _alpm_db_remove(db, pkg) == -1) { -				_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s%s"), db->treename, -									alpm_pkg_get_name(pkg)); -				RET_ERR(PM_ERR_DB_REMOVE, -1); -			} -		} - -		/* Cache needs to be rebuild */ -		_alpm_db_free_pkgcache(db); - -		/* uncompress the sync database */ -		if(_alpm_db_install(db, path) == -1) { -			return -1; -		} -	} - -	return(0); -} - -/** Get a package entry from a package database - * @param db pointer to the package database to get the package from - * @param name of the package - * @return the package entry on success, NULL on error - */ -pmpkg_t SYMEXPORT *alpm_db_get_pkg(pmdb_t *db, const char *name) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); -	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); - -	return(_alpm_db_get_pkgfromcache(db, name)); -} - -/** Get the package cache of a package database - * @param db pointer to the package database to get the package from - * @return the list of packages on success, NULL on error - */ -alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); - -	return(_alpm_db_get_pkgcache(db)); -} - -/** Get the list of packages that a package provides - * @param db pointer to the package database to get the package from - * @param name name of the package - * @return the list of packages on success, NULL on error - */ -alpm_list_t SYMEXPORT *alpm_db_whatprovides(pmdb_t *db, const char *name) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); -	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); - -	return(_alpm_db_whatprovides(db, name)); -} - -/** Get a group entry from a package database - * @param db pointer to the package database to get the group from - * @param name of the group - * @return the groups entry on success, NULL on error - */ -pmgrp_t SYMEXPORT *alpm_db_readgrp(pmdb_t *db, const char *name) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); -	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); - -	return(_alpm_db_get_grpfromcache(db, name)); -} - -/** Get the group cache of a package database - * @param db pointer to the package database to get the group from - * @return the list of groups on success, NULL on error - */ -alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); - -	return(_alpm_db_get_grpcache(db)); -} - -/** @} */ - -/** \addtogroup alpm_packages Package Functions - * @brief Functions to manipulate libalpm packages - * @{ - */ - -/** Create a package from a file. - * @param filename location of the package tarball - * @param pkg address of the package pointer - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_pkg_load(char *filename, pmpkg_t **pkg) -{ -	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_load"); - -	/* Sanity checks */ -	ASSERT(filename != NULL && strlen(filename) != 0, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - -	*pkg = _alpm_pkg_load(filename); -	if(*pkg == NULL) { -		/* pm_errno is set by pkg_load */ -		return(-1); -	} - -	return(0); -} - -/** Free a package. - * @param pkg package pointer to free - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg) -{ -	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_free"); - -	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - -	/* Only free packages loaded in user space */ -	if(pkg->origin != PKG_FROM_CACHE) { -		_alpm_pkg_free(pkg); -	} - -	return(0); -} - -/** Check the integrity (with sha1) of a package from the sync cache. - * @param pkg package pointer - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int alpm_pkg_checksha1sum(pmpkg_t *pkg) -{ -	char path[PATH_MAX]; -	char *sha1sum = NULL; -	int retval = 0; - -	ALPM_LOG_FUNC; - -	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* We only inspect packages from sync repositories */ -	ASSERT(pkg->origin == PKG_FROM_CACHE, RET_ERR(PM_ERR_PKG_INVALID, -1)); -	ASSERT(pkg->data != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1)); - -	snprintf(path, PATH_MAX, "%s%s/%s-%s" PM_EXT_PKG, -	                handle->root, handle->cachedir, -	                alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); - -	sha1sum = _alpm_SHAFile(path); -	if(sha1sum == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not get sha1sum for package %s-%s"), -							alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -		pm_errno = PM_ERR_NOT_A_FILE; -		retval = -1; -	} else { -		if(strcmp(sha1sum, alpm_pkg_get_sha1sum(pkg)) == 0) { -			_alpm_log(PM_LOG_DEBUG, _("sha1sums for package %s-%s match"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -		} else { -			_alpm_log(PM_LOG_ERROR, _("sha1sums do not match for package %s-%s"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -			pm_errno = PM_ERR_PKG_INVALID; -			retval = -1; -		} -	} - -	FREE(sha1sum); - -	return(retval); -} - -/** Check the integrity (with md5) of a package from the sync cache. - * @param pkg package pointer - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int alpm_pkg_checkmd5sum(pmpkg_t *pkg) -{ -	char path[PATH_MAX]; -	char *md5sum = NULL; -	int retval = 0; - -	ALPM_LOG_FUNC; - -	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* We only inspect packages from sync repositories */ -	ASSERT(pkg->origin == PKG_FROM_CACHE, RET_ERR(PM_ERR_PKG_INVALID, -1)); -	ASSERT(pkg->data != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1)); - -	snprintf(path, PATH_MAX, "%s%s/%s-%s" PM_EXT_PKG, -	                handle->root, handle->cachedir, -									alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); - -	md5sum = _alpm_MDFile(path); -	if(md5sum == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not get md5sum for package %s-%s"), -							alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -		pm_errno = PM_ERR_NOT_A_FILE; -		retval = -1; -	} else { -		if(strcmp(md5sum, alpm_pkg_get_md5sum(pkg)) == 0) { -			_alpm_log(PM_LOG_DEBUG, _("md5sums for package %s-%s match"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -		} else { -			_alpm_log(PM_LOG_ERROR, _("md5sums do not match for package %s-%s"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -			pm_errno = PM_ERR_PKG_INVALID; -			retval = -1; -		} -	} - -	FREE(md5sum); - -	return(retval); -} - -/** Compare versions. - * @param ver1 first version - * @param ver2 secont version - * @return postive, 0 or negative if ver1 is less, equal or more - * than ver2, respectively. - */ -int SYMEXPORT alpm_pkg_vercmp(const char *ver1, const char *ver2) -{ - 	ALPM_LOG_FUNC; - -	return(_alpm_versioncmp(ver1, ver2)); -} - -/* internal */ -static char *_supported_archs[] = { -	"i586", -	"i686", -	"ppc", -	"x86_64", -}; - -char SYMEXPORT *alpm_pkg_name_hasarch(char *pkgname) -{ -	/* TODO remove this when we transfer everything over to -ARCH -	 * -	 * this parsing sucks... it's done to support -	 * two package formats for the time being: -	 *    package-name-foo-1.0.0-1-i686 -	 * and -	 *    package-name-bar-1.2.3-1 -	 */ -	size_t i = 0; -	char *arch, *cmp, *p; - -	ALPM_LOG_FUNC; - -	if((p = strrchr(pkgname, '-'))) { -		for(i=0; i < sizeof(_supported_archs)/sizeof(char*); ++i) { -			cmp = p+1; -			arch = _supported_archs[i]; - -			/* whee, case insensitive compare */ -			while(*arch && *cmp && tolower(*arch++) == tolower(*cmp++)) ; -			if(*arch || *cmp) { -				continue; -			} - -			return(p); -		} -	} -	return(NULL); -} - -/** @} */ - -/** \addtogroup alpm_sync Sync Functions - * @brief Functions to get informations about libalpm syncs - * @{ - */ - -/** Searches a database - * @param db pointer to the package database to search in - * @param needles the list of strings to search for - * @return the list of packages on success, NULL on error - */ -alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db, alpm_list_t* needles) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); - -	return(_alpm_db_search(db, needles)); -} - -/** @} */ - -/** \addtogroup alpm_trans Transaction Functions - * @brief Functions to manipulate libalpm transactions - * @{ - */ - -/** Initialize the transaction. - * @param type type of the transaction - * @param flags flags of the transaction (like nodeps, etc) - * @param event event callback function pointer - * @param conv question callback function pointer - * @param progress progress callback function pointer - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_trans_init(pmtranstype_t type, pmtransflag_t flags, -                    alpm_trans_cb_event event, alpm_trans_cb_conv conv, -                    alpm_trans_cb_progress progress) -{ -	char path[PATH_MAX]; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - -	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1)); - -	/* lock db */ -	snprintf(path, PATH_MAX, "%s%s", handle->root, PM_LOCK); -	handle->lckfd = _alpm_lckmk(path); -	if(handle->lckfd == -1) { -		RET_ERR(PM_ERR_HANDLE_LOCK, -1); -	} - -	handle->trans = _alpm_trans_new(); -	if(handle->trans == NULL) { -		RET_ERR(PM_ERR_MEMORY, -1); -	} - -	return(_alpm_trans_init(handle->trans, type, flags, event, conv, progress)); -} - -/** Search for packages to upgrade and add them to the transaction. - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_trans_sysupgrade() -{ -	pmtrans_t *trans; - -	ALPM_LOG_FUNC; - -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - -	trans = handle->trans; -	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); -	ASSERT(trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1)); - -	return(_alpm_trans_sysupgrade(trans)); -} - -/** Add a target to the transaction. - * @param target the name of the target to add - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_trans_addtarget(char *target) -{ -	pmtrans_t *trans; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	ASSERT(target != NULL && strlen(target) != 0, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - -	trans = handle->trans; -	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); - -	return(_alpm_trans_addtarget(trans, target)); -} - -/** Prepare a transaction. - * @param data the address of a PM_LIST where detailed description - * of an error can be dumped (ie. list of conflicting files) - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_trans_prepare(alpm_list_t **data) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	ASSERT(data != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - -	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); - -	return(_alpm_trans_prepare(handle->trans, data)); -} - -/** Commit a transaction. - * @param data the address of a PM_LIST where detailed description - * of an error can be dumped (ie. list of conflicting files) - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_trans_commit(alpm_list_t **data) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - -	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(handle->trans->state == STATE_PREPARED, RET_ERR(PM_ERR_TRANS_NOT_PREPARED, -1)); - -	/* Check for database R/W permission */ -	if(!(handle->trans->flags & PM_TRANS_FLAG_PRINTURIS)) { -		/* The print-uris operation is a bit odd. So we explicitly check for it */ -		ASSERT(handle->access == PM_ACCESS_RW, RET_ERR(PM_ERR_BADPERMS, -1)); -	} - -	return(_alpm_trans_commit(handle->trans, data)); -} - -/** Release a transaction. +/** Release the library.  This should be the last alpm call you make.   * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_trans_release() +int SYMEXPORT alpm_release(void)  { -	pmtrans_t *trans; -	char path[PATH_MAX]; -  	ALPM_LOG_FUNC; -	/* Sanity checks */  	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	trans = handle->trans; -	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(trans->state != STATE_IDLE, RET_ERR(PM_ERR_TRANS_NULL, -1)); - -	/* during a commit do not interrupt inmediatelly, just after a target */ -	if(trans->state == STATE_COMMITING || trans->state == STATE_INTERRUPTED) { -		if(trans->state == STATE_COMMITING) { -			trans->state = STATE_INTERRUPTED; -		} -		pm_errno = PM_ERR_TRANS_COMMITING; +	if(alpm_db_unregister_all() == -1) {  		return(-1);  	} -	FREETRANS(handle->trans); - -	/* unlock db */ -	if(handle->lckfd != -1) { -		close(handle->lckfd); -		handle->lckfd = -1; -	} -	snprintf(path, PATH_MAX, "%s%s", handle->root, PM_LOCK); -	if(_alpm_lckrm(path)) { -		_alpm_log(PM_LOG_WARNING, _("could not remove lock file %s"), path); -		alpm_logaction(_("warning: could not remove lock file %s"), path); -	} +	_alpm_handle_free(handle);  	return(0);  }  /** @} */ -/** \addtogroup alpm_log Logging Functions - * @brief Functions to log using libalpm - * @{ - */ - -/** A printf-like function for logging. - * @param fmt output format - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int SYMEXPORT alpm_logaction(char *fmt, ...) -{ -	char str[LOG_STR_LEN]; -	va_list args; - -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - -	va_start(args, fmt); -	vsnprintf(str, LOG_STR_LEN, fmt, args); -	va_end(args); - -	/* TODO	We should add a prefix to log strings depending on who called us. -	 * If logaction was called by the frontend: -	 *   USER: <the frontend log> -	 * and if called internally: -	 *   ALPM: <the library log> -	 * Moreover, the frontend should be able to choose its prefix -	 * (USER by default?): -	 *   pacman: "PACMAN" -	 *   kpacman: "KPACMAN" -	 * This would allow us to share the log file between several frontends -	 * and know who does what */  -	return(_alpm_logaction(handle->usesyslog, handle->logfd, str)); -} -/** @} */ - -/** \addtogroup alpm_misc Miscellaneous Functions +/** @defgroup alpm_misc Miscellaneous Functions   * @brief Various libalpm functions - * @{ - */ - -/** Get the md5 sum of file. - * @param name name of the file - * @return the checksum on success, NULL on error - */ -char SYMEXPORT *alpm_get_md5sum(char *name) -{ -	ALPM_LOG_FUNC; - -	ASSERT(name != NULL, return(NULL)); - -	return(_alpm_MDFile(name)); -} - -/** Get the sha1 sum of file. - * @param name name of the file - * @return the checksum on success, NULL on error - */ -char SYMEXPORT *alpm_get_sha1sum(char *name) -{ -	ALPM_LOG_FUNC; - -	ASSERT(name != NULL, return(NULL)); - -	return(_alpm_SHAFile(name)); -} - -/** Fetch a remote pkg. - * @param url - * @return the downloaded filename on success, NULL on error - */ -char SYMEXPORT *alpm_fetch_pkgurl(char *url) -{ -	ALPM_LOG_FUNC; - -	ASSERT(strstr(url, "://"), return(NULL)); - -	return(_alpm_fetch_pkgurl(url)); -} - -/** Parses a configuration file. - * @param file path to the config file. - * @param callback a function to be called upon new database creation - * @param this_section the config current section being parsed - * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_parse_config(char *file, alpm_cb_db_register callback, const char *this_section) -{ -	FILE *fp = NULL; -	char line[PATH_MAX+1]; -	char *ptr = NULL; -	char *key = NULL; -	int linenum = 0; -	char origkey[256]; -	char section[256] = ""; -	pmdb_t *db = NULL; - -	ALPM_LOG_FUNC; - -	fp = fopen(file, "r"); -	if(fp == NULL) { -		return(0); -	} - -	if(this_section != NULL && strlen(this_section) > 0) { -		strncpy(section, this_section, min(255, strlen(this_section))); -		if(!strcmp(section, "local")) { -			RET_ERR(PM_ERR_CONF_LOCAL, -1); -		} -		if(strcmp(section, "options")) { -			db = _alpm_db_register(section, callback); -		} -	} - -	while(fgets(line, PATH_MAX, fp)) { -		linenum++; -		_alpm_strtrim(line); -		if(strlen(line) == 0 || line[0] == '#') { -			continue; -		} -		if(line[0] == '[' && line[strlen(line)-1] == ']') { -			/* new config section */ -			ptr = line; -			ptr++; -			strncpy(section, ptr, min(255, strlen(ptr)-1)); -			section[min(255, strlen(ptr)-1)] = '\0'; -			_alpm_log(PM_LOG_DEBUG, _("config: new section '%s'"), section); -			if(!strlen(section)) { -				RET_ERR(PM_ERR_CONF_BAD_SECTION, -1); -			} -			if(!strcmp(section, "local")) { -				RET_ERR(PM_ERR_CONF_LOCAL, -1); -			} -			if(strcmp(section, "options")) { -				db = _alpm_db_register(section, callback); -				if(db == NULL) { -					/* pm_errno is set by alpm_db_register */ -					return(-1); -				} -			} -		} else { -			/* directive */ -			ptr = line; -			key = strsep(&ptr, "="); -			if(key == NULL) { -				RET_ERR(PM_ERR_CONF_BAD_SYNTAX, -1); -			} -			_alpm_strtrim(key); -			strncpy(origkey, key, min(255, strlen(key))); -			origkey[min(255, strlen(key))] = '\0'; -			key = _alpm_strtoupper(key); -			if(!strlen(section) && strcmp(key, "INCLUDE")) { -				RET_ERR(PM_ERR_CONF_DIRECTIVE_OUTSIDE_SECTION, -1); -			} -			if(ptr == NULL) { -				if(strcmp(origkey, "NoPassiveFTP") == 0 || strcmp(key, "NOPASSIVEFTP") == 0) { -					alpm_option_set_nopassiveftp(1); -					_alpm_log(PM_LOG_DEBUG, _("config: nopassiveftp")); -				} else if(strcmp(origkey, "UseSyslog") == 0 || strcmp(key, "USESYSLOG") == 0) { -					alpm_option_set_usesyslog(1); -					_alpm_log(PM_LOG_DEBUG, _("config: usesyslog")); -				} else if(strcmp(origkey, "ILoveCandy") == 0 || strcmp(key, "ILOVECANDY") == 0) { -					alpm_option_set_chomp(1); -					_alpm_log(PM_LOG_DEBUG, _("config: chomp")); -				} else if(strcmp(origkey, "UseColor") == 0 || strcmp(key, "USECOLOR") == 0) { -					alpm_option_set_usecolor(1); -					_alpm_log(PM_LOG_DEBUG, _("config: usecolor")); -				} else { -					RET_ERR(PM_ERR_CONF_BAD_SYNTAX, -1); -				} -			} else { -				_alpm_strtrim(ptr); -				if(strcmp(origkey, "Include") == 0 || strcmp(key, "INCLUDE") == 0) { -					char conf[PATH_MAX]; -					strncpy(conf, ptr, PATH_MAX); -					_alpm_log(PM_LOG_DEBUG, _("config: including %s"), conf); -					alpm_parse_config(conf, callback, section); -				} else if(strcmp(section, "options") == 0) { -					if(strcmp(origkey, "NoUpgrade") == 0 || strcmp(key, "NOUPGRADE") == 0) { -						char *p = ptr; -						char *q; - -						while((q = strchr(p, ' '))) { -							*q = '\0'; -							alpm_option_add_noupgrade(p); -							_alpm_log(PM_LOG_DEBUG, _("config: noupgrade: %s"), p); -							p = q; -							p++; -						} -						alpm_option_add_noupgrade(p); -						_alpm_log(PM_LOG_DEBUG, _("config: noupgrade: %s"), p); -					} else if(strcmp(origkey, "NoExtract") == 0 || strcmp(key, "NOEXTRACT") == 0) { -						char *p = ptr; -						char *q; - -						while((q = strchr(p, ' '))) { -							*q = '\0'; -							alpm_option_add_noextract(p); -							_alpm_log(PM_LOG_DEBUG, _("config: noextract: %s"), p); -							p = q; -							p++; -						} -						alpm_option_add_noextract(p); -						_alpm_log(PM_LOG_DEBUG, _("config: noextract: %s"), p); -					} else if(strcmp(origkey, "IgnorePkg") == 0 || strcmp(key, "IGNOREPKG") == 0) { -						char *p = ptr; -						char *q; - -						while((q = strchr(p, ' '))) { -							*q = '\0'; -							alpm_option_add_ignorepkg(p); -							_alpm_log(PM_LOG_DEBUG, _("config: ignorepkg: %s"), p); -							p = q; -							p++; -						} -						alpm_option_add_ignorepkg(p); -						_alpm_log(PM_LOG_DEBUG, _("config: ignorepkg: %s"), p); -					} else if(strcmp(origkey, "HoldPkg") == 0 || strcmp(key, "HOLDPKG") == 0) { -						char *p = ptr; -						char *q; - -						while((q = strchr(p, ' '))) { -							*q = '\0'; -							alpm_option_add_holdpkg(p); -							_alpm_log(PM_LOG_DEBUG, _("config: holdpkg: %s"), p); -							p = q; -							p++; -						} -						alpm_option_add_holdpkg(p); -						_alpm_log(PM_LOG_DEBUG, _("config: holdpkg: %s"), p); -					} else if(strcmp(origkey, "DBPath") == 0 || strcmp(key, "DBPATH") == 0) { -						/* shave off the leading slash, if there is one */ -						if(*ptr == '/') { -							ptr++; -						} -						alpm_option_set_dbpath(ptr); -						_alpm_log(PM_LOG_DEBUG, _("config: dbpath: %s"), ptr); -					} else if(strcmp(origkey, "CacheDir") == 0 || strcmp(key, "CACHEDIR") == 0) { -						/* shave off the leading slash, if there is one */ -						if(*ptr == '/') { -							ptr++; -						} -						alpm_option_set_cachedir(ptr); -						_alpm_log(PM_LOG_DEBUG, _("config: cachedir: %s"), ptr); -					} else if(strcmp(origkey, "RootDir") == 0 || strcmp(key, "ROOTDIR") == 0) { -						/* shave off the leading slash, if there is one */ -						if(*ptr == '/') { -							ptr++; -						} -						alpm_option_set_root(ptr); -						_alpm_log(PM_LOG_DEBUG, _("config: rootdir: %s"), ptr); -					} else if (strcmp(origkey, "LogFile") == 0 || strcmp(key, "LOGFILE") == 0) { -						alpm_option_set_logfile(ptr); -						_alpm_log(PM_LOG_DEBUG, _("config: logfile: %s"), ptr); -					} else if (strcmp(origkey, "XferCommand") == 0 || strcmp(key, "XFERCOMMAND") == 0) { -						alpm_option_set_xfercommand(ptr); -						_alpm_log(PM_LOG_DEBUG, _("config: xfercommand: %s"), ptr); -					} else if (strcmp(origkey, "UpgradeDelay") == 0 || strcmp(key, "UPGRADEDELAY") == 0) { -						/* The config value is in days, we use seconds */ -						time_t ud = atol(ptr) * 60 * 60 *24; -						alpm_option_set_upgradedelay(ud); -						_alpm_log(PM_LOG_DEBUG, _("config: upgradedelay: %d"), ud); -					} else { -						RET_ERR(PM_ERR_CONF_BAD_SYNTAX, -1); -					} -				} else { -					if(strcmp(origkey, "Server") == 0 || strcmp(key, "SERVER") == 0) { -						/* add to the list */ -						if(alpm_db_setserver(db, ptr) != 0) { -							/* pm_errno is set by alpm_db_setserver */ -							return(-1); -						} -					} else { -						RET_ERR(PM_ERR_CONF_BAD_SYNTAX, -1); -					} -				} -				line[0] = '\0'; -			} -		} -	} -	fclose(fp); - -	return(0); -} - -/** @} */ - -/* This function is mostly the same as sync.c find_replacements and sysupgrade - * functions, and we should be able to combine them - this is an interim - * solution made for -Qu operation */ -alpm_list_t SYMEXPORT *alpm_get_upgrades() -{ -	alpm_list_t *syncpkgs = NULL; -	alpm_list_t *i, *j, *k, *m; - -	ALPM_LOG_FUNC; - -	/* TODO holy nested loops, Batman! */ -	/* check for "recommended" package replacements */ -	_alpm_log(PM_LOG_DEBUG, _("checking for package replacements")); -	for(i = handle->dbs_sync; i; i = i->next) { -		for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) { -			pmpkg_t *spkg = j->data; - -			for(k = alpm_pkg_get_replaces(spkg); k; k = k->next) { - -				for(m = _alpm_db_get_pkgcache(handle->db_local); m; m = m->next) { -					pmpkg_t *lpkg = m->data; -					 -					if(strcmp(k->data, alpm_pkg_get_name(lpkg)) == 0) { -						_alpm_log(PM_LOG_DEBUG, _("checking replacement '%s' for package '%s'"), k->data, -											alpm_pkg_get_name(spkg)); -						if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(lpkg))) { -							_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (to be replaced by %s-%s)"), -												alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg), -												alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg)); -						} else { -							/* assume all replaces=() packages are accepted */ -							pmsyncpkg_t *sync = NULL; -							pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL); -							if(dummy == NULL) { -								pm_errno = PM_ERR_MEMORY; -								goto error; -							} -							dummy->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(lpkg)); - -							pmsyncpkg_t *syncpkg; -							syncpkg = _alpm_sync_find(syncpkgs, alpm_pkg_get_name(spkg)); - -							if(syncpkg) { -								/* found it -- just append to the replaces list */ -								sync->data = alpm_list_add(sync->data, dummy); -							} else { -								/* none found -- enter pkg into the final sync list */ -								sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL); -								if(sync == NULL) { -									FREEPKG(dummy); -									pm_errno = PM_ERR_MEMORY; -									goto error; -								} -								sync->data = alpm_list_add(NULL, dummy); -								syncpkgs = alpm_list_add(syncpkgs, sync); -							} -							_alpm_log(PM_LOG_DEBUG, _("%s-%s elected for upgrade (to be replaced by %s-%s)"), -												alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg), -												alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg)); -						} -						break; -					} -				} -			} -		} -	} - -	/* now do normal upgrades */ -	for(i = _alpm_db_get_pkgcache(handle->db_local); i; i = i->next) { -		int replace=0; -		pmpkg_t *local = i->data; -		pmpkg_t *spkg = NULL; -		pmsyncpkg_t *sync; - -		for(j = handle->dbs_sync; !spkg && j; j = j->next) { -			spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local)); -		} -		if(spkg == NULL) { -			_alpm_log(PM_LOG_DEBUG, _("'%s' not found in sync db -- skipping"), alpm_pkg_get_name(local)); -			continue; -		} - -		/* we don't care about a to-be-replaced package's newer version */ -		for(j = syncpkgs; j && !replace; j=j->next) { -			sync = j->data; -			if(sync->type == PM_SYNC_TYPE_REPLACE) { -				if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) { -					replace=1; -				} -			} -		} -		if(replace) { -			_alpm_log(PM_LOG_DEBUG, _("'%s' is already elected for removal -- skipping"), -								alpm_pkg_get_name(local)); -			continue; -		} - -		if(alpm_pkg_compare_versions(local, spkg)) { -			_alpm_log(PM_LOG_DEBUG, _("%s elected for upgrade (%s => %s)"), -								alpm_pkg_get_name(local), alpm_pkg_get_version(local), -								alpm_pkg_get_version(spkg)); - -			pmsyncpkg_t *syncpkg; -			syncpkg	= _alpm_sync_find(syncpkgs, alpm_pkg_get_name(local)); - -			if(!syncpkg) { -				pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(local), -																			 alpm_pkg_get_version(local)); -				if(dummy == NULL) { -					goto error; -				} -				sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, dummy); -				if(sync == NULL) { -					FREEPKG(dummy); -					goto error; -				} -				syncpkgs = alpm_list_add(syncpkgs, sync); -			} -		} -	} - -	return(syncpkgs); -error: -	if(syncpkgs) { -		alpm_list_free_inner(syncpkgs, _alpm_sync_free); -		alpm_list_free(syncpkgs); -	} -	return(NULL); -}  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index fc4aed59..1e18ad95 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -1,11 +1,11 @@  /*   * alpm.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_H @@ -29,28 +29,23 @@ extern "C" {  #endif  #include <time.h> /* for time_t */ +#include <stdarg.h> /* for va_list */ + +#include <alpm_list.h> + +#define DEPRECATED __attribute__((deprecated))  /*   * Arch Linux Package Management library   */ -#define PM_ROOT     "/" -#define PM_DBPATH   "var/lib/pacman/" -#define PM_CACHEDIR "var/cache/pacman/pkg/" -#define PM_LOCK     "tmp/pacman.lck" - - -#define PM_EXT_PKG ".pkg.tar.gz" -#define PM_EXT_DB  ".db.tar.gz" - -/*  +/*   * Structures   */ -typedef struct __alpm_list_t alpm_list_t; -  typedef struct __pmdb_t pmdb_t;  typedef struct __pmpkg_t pmpkg_t; +typedef struct __pmdelta_t pmdelta_t;  typedef struct __pmgrp_t pmgrp_t;  typedef struct __pmserver_t pmserver_t;  typedef struct __pmtrans_t pmtrans_t; @@ -58,12 +53,14 @@ typedef struct __pmsyncpkg_t pmsyncpkg_t;  typedef struct __pmdepend_t pmdepend_t;  typedef struct __pmdepmissing_t pmdepmissing_t;  typedef struct __pmconflict_t pmconflict_t; +typedef struct __pmfileconflict_t pmfileconflict_t; +typedef struct __pmgraph_t pmgraph_t;  /*   * Library   */ -int alpm_initialize(); +int alpm_initialize(void);  int alpm_release(void);  /* @@ -75,18 +72,18 @@ typedef enum _pmloglevel_t {  	PM_LOG_ERROR    = 0x01,  	PM_LOG_WARNING  = 0x02,  	PM_LOG_DEBUG    = 0x04, -	PM_LOG_DOWNLOAD = 0x08, -	PM_LOG_FUNCTION = 0x10 +	PM_LOG_FUNCTION = 0x08  } pmloglevel_t; -typedef void (*alpm_cb_log)(unsigned short, char *); +typedef void (*alpm_cb_log)(pmloglevel_t, char *, va_list);  int alpm_logaction(char *fmt, ...);  /*   * Downloading   */ -typedef void (*alpm_cb_download)(const char *filename, int xfered, int total); +typedef void (*alpm_cb_download)(const char *filename, int file_xfered, +		int file_total, int list_xfered, int list_total);  /*   * Options @@ -100,40 +97,45 @@ void alpm_option_set_logcb(alpm_cb_log cb);  alpm_cb_download alpm_option_get_dlcb();  void alpm_option_set_dlcb(alpm_cb_download cb); -unsigned short alpm_option_get_logmask(); -void alpm_option_set_logmask(unsigned short mask); -  const char *alpm_option_get_root(); -void alpm_option_set_root(const char *root); +int alpm_option_set_root(const char *root);  const char *alpm_option_get_dbpath(); -void alpm_option_set_dbpath(const char *dbpath); +int alpm_option_set_dbpath(const char *dbpath); -const char *alpm_option_get_cachedir(); -void alpm_option_set_cachedir(const char *cachedir); +alpm_list_t *alpm_option_get_cachedirs(); +int alpm_option_add_cachedir(const char *cachedir); +void alpm_option_set_cachedirs(alpm_list_t *cachedirs);  const char *alpm_option_get_logfile(); -void alpm_option_set_logfile(const char *logfile); +int alpm_option_set_logfile(const char *logfile); + +const char *alpm_option_get_lockfile(); +/* no set_lockfile, path is determined from dbpath */  unsigned short alpm_option_get_usesyslog();  void alpm_option_set_usesyslog(unsigned short usesyslog);  alpm_list_t *alpm_option_get_noupgrades(); -void alpm_option_add_noupgrade(char *pkg); +void alpm_option_add_noupgrade(const char *pkg);  void alpm_option_set_noupgrades(alpm_list_t *noupgrade);  alpm_list_t *alpm_option_get_noextracts(); -void alpm_option_add_noextract(char *pkg); +void alpm_option_add_noextract(const char *pkg);  void alpm_option_set_noextracts(alpm_list_t *noextract);  alpm_list_t *alpm_option_get_ignorepkgs(); -void alpm_option_add_ignorepkg(char *pkg); +void alpm_option_add_ignorepkg(const char *pkg);  void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs);  alpm_list_t *alpm_option_get_holdpkgs(); -void alpm_option_add_holdpkg(char *pkg); +void alpm_option_add_holdpkg(const char *pkg);  void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs); +alpm_list_t *alpm_option_get_ignoregrps(); +void alpm_option_add_ignoregrp(const char *grp); +void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps); +  time_t alpm_option_get_upgradedelay();  void alpm_option_set_upgradedelay(time_t delay); @@ -142,16 +144,7 @@ void alpm_option_set_xfercommand(const char *cmd);  unsigned short alpm_option_get_nopassiveftp();  void alpm_option_set_nopassiveftp(unsigned short nopasv); - -unsigned short alpm_option_get_chomp(); -void alpm_option_set_chomp(unsigned short chomp); - -alpm_list_t *alpm_option_get_needles(); -void alpm_option_add_needle(char *needle); -void alpm_option_set_needles(alpm_list_t *needles); - -unsigned short alpm_option_get_usecolor(); -void alpm_option_set_usecolor(unsigned short usecolor); +void alpm_option_set_usedelta(unsigned short usedelta);  pmdb_t *alpm_option_get_localdb();  alpm_list_t *alpm_option_get_syncdbs(); @@ -160,14 +153,14 @@ alpm_list_t *alpm_option_get_syncdbs();   * Databases   */ -/* Database registration callback */ -typedef void (*alpm_cb_db_register)(const char *, pmdb_t *); - -pmdb_t *alpm_db_register(char *treename); +/* Preferred interfaces db_register_local and db_register_sync */ +pmdb_t *alpm_db_register_local(void); +pmdb_t *alpm_db_register_sync(const char *treename);  int alpm_db_unregister(pmdb_t *db); +int alpm_db_unregister_all(void); -const char *alpm_db_get_name(pmdb_t *db); -const char *alpm_db_get_url(pmdb_t *db); +const char *alpm_db_get_name(const pmdb_t *db); +const char *alpm_db_get_url(const pmdb_t *db);  int alpm_db_setserver(pmdb_t *db, const char *url); @@ -179,7 +172,7 @@ alpm_list_t *alpm_db_whatprovides(pmdb_t *db, const char *name);  pmgrp_t *alpm_db_readgrp(pmdb_t *db, const char *name);  alpm_list_t *alpm_db_getgrpcache(pmdb_t *db); -alpm_list_t *alpm_db_search(pmdb_t *db, alpm_list_t* needles); +alpm_list_t *alpm_db_search(pmdb_t *db, const alpm_list_t* needles);  /*   * Packages @@ -193,35 +186,22 @@ typedef enum _pmpkgreason_t {  	PM_PKG_REASON_DEPEND = 1  /* installed as a dependency for another package */  } pmpkgreason_t; -/* package name formats */ -/* -typedef enum _pmpkghasarch_t { -  PM_PKG_WITHOUT_ARCH = 0,  / pkgname-pkgver-pkgrel, used under PM_DBPATH / -  PM_PKG_WITH_ARCH = 1  / pkgname-pkgver-pkgrel-arch, used under PM_CACHEDIR / -} pmpkghasarch_t; -*/ - -int alpm_pkg_load(char *filename, pmpkg_t **pkg); +int alpm_pkg_load(const char *filename, unsigned short full, pmpkg_t **pkg);  int alpm_pkg_free(pmpkg_t *pkg);  int alpm_pkg_checkmd5sum(pmpkg_t *pkg); -int alpm_pkg_checksha1sum(pmpkg_t *pkg); -char *alpm_fetch_pkgurl(char *url); -int alpm_parse_config(char *file, alpm_cb_db_register callback, -                      const char *this_section); +char *alpm_fetch_pkgurl(const char *url);  int alpm_pkg_vercmp(const char *ver1, const char *ver2); -char *alpm_pkg_name_hasarch(char *pkgname); +alpm_list_t *alpm_pkg_compute_requiredby(pmpkg_t *pkg);  const char *alpm_pkg_get_filename(pmpkg_t *pkg);  const char *alpm_pkg_get_name(pmpkg_t *pkg);  const char *alpm_pkg_get_version(pmpkg_t *pkg);  const char *alpm_pkg_get_desc(pmpkg_t *pkg);  const char *alpm_pkg_get_url(pmpkg_t *pkg); -const char *alpm_pkg_get_builddate(pmpkg_t *pkg); -const char *alpm_pkg_get_buildtype(pmpkg_t *pkg); -const char *alpm_pkg_get_installdate(pmpkg_t *pkg); +time_t alpm_pkg_get_builddate(pmpkg_t *pkg); +time_t alpm_pkg_get_installdate(pmpkg_t *pkg);  const char *alpm_pkg_get_packager(pmpkg_t *pkg);  const char *alpm_pkg_get_md5sum(pmpkg_t *pkg); -const char *alpm_pkg_get_sha1sum(pmpkg_t *pkg);  const char *alpm_pkg_get_arch(pmpkg_t *pkg);  unsigned long alpm_pkg_get_size(pmpkg_t *pkg);  unsigned long alpm_pkg_get_isize(pmpkg_t *pkg); @@ -229,20 +209,32 @@ pmpkgreason_t alpm_pkg_get_reason(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_licenses(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_groups(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_depends(pmpkg_t *pkg); -alpm_list_t *alpm_pkg_get_removes(pmpkg_t *pkg); -alpm_list_t *alpm_pkg_get_requiredby(pmpkg_t *pkg); +alpm_list_t *alpm_pkg_get_optdepends(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_conflicts(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_provides(pmpkg_t *pkg); +alpm_list_t *alpm_pkg_get_deltas(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg);  alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg);  unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg); +unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local); + +/* + * Deltas + */ + +const char *alpm_delta_get_from(pmdelta_t *delta); +const char *alpm_delta_get_to(pmdelta_t *delta); +unsigned long alpm_delta_get_size(pmdelta_t *delta); +const char *alpm_delta_get_filename(pmdelta_t *delta); +const char *alpm_delta_get_md5sum(pmdelta_t *delta); +  /*   * Groups   */ -const char *alpm_grp_get_name(pmgrp_t *grp); -alpm_list_t *alpm_grp_get_pkgs(pmgrp_t *grp); +const char *alpm_grp_get_name(const pmgrp_t *grp); +const alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);  /*   * Sync @@ -255,9 +247,11 @@ typedef enum _pmsynctype_t {  	PM_SYNC_TYPE_DEPEND  } pmsynctype_t; -pmsynctype_t alpm_sync_get_type(pmsyncpkg_t *sync); -pmpkg_t *alpm_sync_get_pkg(pmsyncpkg_t *sync); -void *alpm_sync_get_data(pmsyncpkg_t *sync); +pmsynctype_t alpm_sync_get_type(const pmsyncpkg_t *sync); +pmpkg_t *alpm_sync_get_pkg(const pmsyncpkg_t *sync); +void *alpm_sync_get_data(const pmsyncpkg_t *sync); +int alpm_sync_sysupgrade(pmdb_t *db_local, +		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);  /*   * Transactions @@ -267,6 +261,7 @@ void *alpm_sync_get_data(pmsyncpkg_t *sync);  typedef enum _pmtranstype_t {  	PM_TRANS_TYPE_ADD = 1,  	PM_TRANS_TYPE_REMOVE, +	PM_TRANS_TYPE_REMOVEUPGRADE,  	PM_TRANS_TYPE_UPGRADE,  	PM_TRANS_TYPE_SYNC  } pmtranstype_t; @@ -276,7 +271,7 @@ typedef enum _pmtransflag_t {  	PM_TRANS_FLAG_NODEPS = 0x01,  	PM_TRANS_FLAG_FORCE = 0x02,  	PM_TRANS_FLAG_NOSAVE = 0x04, -	PM_TRANS_FLAG_FRESHEN = 0x08, +	/* 0x08 flag can go here */  	PM_TRANS_FLAG_CASCADE = 0x10,  	PM_TRANS_FLAG_RECURSE = 0x20,  	PM_TRANS_FLAG_DBONLY = 0x40, @@ -285,7 +280,8 @@ typedef enum _pmtransflag_t {  	PM_TRANS_FLAG_DOWNLOADONLY = 0x200,  	PM_TRANS_FLAG_NOSCRIPTLET = 0x400,  	PM_TRANS_FLAG_NOCONFLICTS = 0x800, -	PM_TRANS_FLAG_PRINTURIS = 0x1000 +	PM_TRANS_FLAG_PRINTURIS = 0x1000, +	PM_TRANS_FLAG_NEEDED = 0x2000  } pmtransflag_t;  /* Transaction Events */ @@ -294,8 +290,6 @@ typedef enum _pmtransevt_t {  	PM_TRANS_EVT_CHECKDEPS_DONE,  	PM_TRANS_EVT_FILECONFLICTS_START,  	PM_TRANS_EVT_FILECONFLICTS_DONE, -	PM_TRANS_EVT_CLEANUP_START, -	PM_TRANS_EVT_CLEANUP_DONE,  	PM_TRANS_EVT_RESOLVEDEPS_START,  	PM_TRANS_EVT_RESOLVEDEPS_DONE,  	PM_TRANS_EVT_INTERCONFLICTS_START, @@ -309,9 +303,14 @@ typedef enum _pmtransevt_t {  	PM_TRANS_EVT_EXTRACT_DONE,  	PM_TRANS_EVT_INTEGRITY_START,  	PM_TRANS_EVT_INTEGRITY_DONE, +	PM_TRANS_EVT_DELTA_INTEGRITY_START, +	PM_TRANS_EVT_DELTA_INTEGRITY_DONE, +	PM_TRANS_EVT_DELTA_PATCHES_START, +	PM_TRANS_EVT_DELTA_PATCHES_DONE, +	PM_TRANS_EVT_DELTA_PATCH_START, +	PM_TRANS_EVT_DELTA_PATCH_DONE, +	PM_TRANS_EVT_DELTA_PATCH_FAILED,  	PM_TRANS_EVT_SCRIPTLET_INFO, -	PM_TRANS_EVT_SCRIPTLET_START, -	PM_TRANS_EVT_SCRIPTLET_DONE,  	PM_TRANS_EVT_PRINTURI,  	PM_TRANS_EVT_RETRIEVE_START,  } pmtransevt_t; @@ -323,7 +322,7 @@ typedef enum _pmtransconv_t {  	PM_TRANS_CONV_CONFLICT_PKG = 0x04,  	PM_TRANS_CONV_CORRUPTED_PKG = 0x08,  	PM_TRANS_CONV_LOCAL_NEWER = 0x10, -	PM_TRANS_CONV_LOCAL_UPTODATE = 0x20, +	/* 0x20 flag can go here */  	PM_TRANS_CONV_REMOVE_HOLDPKG = 0x40  } pmtransconv_t; @@ -356,6 +355,7 @@ int alpm_trans_sysupgrade(void);  int alpm_trans_addtarget(char *target);  int alpm_trans_prepare(alpm_list_t **data);  int alpm_trans_commit(alpm_list_t **data); +int alpm_trans_interrupt(void);  int alpm_trans_release(void);  /* @@ -369,41 +369,42 @@ typedef enum _pmdepmod_t {  	PM_DEP_MOD_LE  } pmdepmod_t; -typedef enum _pmdeptype_t { -	PM_DEP_TYPE_DEPEND = 1, -	PM_DEP_TYPE_CONFLICT -} pmdeptype_t; -  pmdepend_t *alpm_splitdep(const char *depstring);  int alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep); +alpm_list_t *alpm_checkdeps(pmdb_t *db, int reversedeps, +		alpm_list_t *remove, alpm_list_t *upgrade); -const char *alpm_dep_get_target(pmdepmissing_t *miss); -pmdeptype_t alpm_dep_get_type(pmdepmissing_t *miss); -pmdepmod_t alpm_dep_get_mod(pmdepmissing_t *miss); -const char *alpm_dep_get_name(pmdepmissing_t *miss); -const char *alpm_dep_get_version(pmdepmissing_t *miss); +const char *alpm_miss_get_target(const pmdepmissing_t *miss); +pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss); + +const char *alpm_conflict_get_package1(pmconflict_t *conflict); +const char *alpm_conflict_get_package2(pmconflict_t *conflict); + +pmdepmod_t alpm_dep_get_mod(const pmdepend_t *dep); +const char *alpm_dep_get_name(const pmdepend_t *dep); +const char *alpm_dep_get_version(const pmdepend_t *dep); +char *alpm_dep_get_string(const pmdepend_t *dep);  /*   * File conflicts   */ -typedef enum _pmconflicttype_t { -	PM_CONFLICT_TYPE_TARGET = 1, -	PM_CONFLICT_TYPE_FILE -} pmconflicttype_t; +typedef enum _pmfileconflicttype_t { +	PM_FILECONFLICT_TARGET = 1, +	PM_FILECONFLICT_FILESYSTEM +} pmfileconflicttype_t; -const char *alpm_conflict_get_target(pmconflict_t *conflict); -pmconflicttype_t alpm_conflict_get_type(pmconflict_t *conflict); -const char *alpm_conflict_get_file(pmconflict_t *conflict); -const char *alpm_conflict_get_ctarget(pmconflict_t *conflict); +const char *alpm_fileconflict_get_target(pmfileconflict_t *conflict); +pmfileconflicttype_t alpm_fileconflict_get_type(pmfileconflict_t *conflict); +const char *alpm_fileconflict_get_file(pmfileconflict_t *conflict); +const char *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict);  /*   * Helpers   */ -/* md5sums */ -char *alpm_get_md5sum(char *name); -char *alpm_get_sha1sum(char *name); +/* checksums */ +char *alpm_get_md5sum(const char *name);  /*   * Errors @@ -413,6 +414,7 @@ enum _pmerrno_t {  	PM_ERR_SYSTEM,  	PM_ERR_BADPERMS,  	PM_ERR_NOT_A_FILE, +	PM_ERR_NOT_A_DIR,  	PM_ERR_WRONG_ARGS,  	/* Interface */  	PM_ERR_HANDLE_NULL, @@ -455,6 +457,9 @@ enum _pmerrno_t {  	PM_ERR_PKG_INVALID_NAME,  	PM_ERR_PKG_CORRUPTED,  	PM_ERR_PKG_REPO_NOT_FOUND, +	/* Deltas */ +	PM_ERR_DLT_CORRUPTED, +	PM_ERR_DLT_PATCHFAILED,  	/* Groups */  	PM_ERR_GRP_NOT_FOUND,  	/* Dependencies */ @@ -465,15 +470,9 @@ enum _pmerrno_t {  	PM_ERR_USER_ABORT,  	PM_ERR_INTERNAL_ERROR,  	PM_ERR_LIBARCHIVE_ERROR, -	PM_ERR_DISK_FULL,  	PM_ERR_DB_SYNC,  	PM_ERR_RETRIEVE,  	PM_ERR_PKG_HOLD, -	/* Configuration file */ -	PM_ERR_CONF_BAD_SECTION, -	PM_ERR_CONF_LOCAL, -	PM_ERR_CONF_BAD_SYNTAX, -	PM_ERR_CONF_DIRECTIVE_OUTSIDE_SECTION,  	PM_ERR_INVALID_REGEX,    /* Downloading */  	PM_ERR_CONNECT_FAILED, @@ -482,9 +481,8 @@ enum _pmerrno_t {  extern enum _pmerrno_t pm_errno; -char *alpm_strerror(int err); - -alpm_list_t *alpm_get_upgrades(); +const char *alpm_strerror(int err); +const char *alpm_strerrorlast(void);  #ifdef __cplusplus  } diff --git a/lib/libalpm/alpm_list.c b/lib/libalpm/alpm_list.c index 54027455..a1e8861b 100644 --- a/lib/libalpm/alpm_list.c +++ b/lib/libalpm/alpm_list.c @@ -1,8 +1,8 @@  /*   *  alpm_list.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -29,29 +29,41 @@  #include "alpm_list.h"  #include "util.h" -/** \defgroup alpm_list functions */ -/*\@{*/ +/** + * @addtogroup alpm_list List Functions + * @brief Functions to manipulate alpm_list_t lists. + * + * These functions are designed to create, destroy, and modify lists of + * type alpm_list_t. This is an internal list type used by libalpm that is + * publicly exposed for use by frontends if desired. + * + * @{ */  /* Allocation */ -/** Allocate a new alpm_list_t - *  @return a new alpm_list_t item, or NULL on failure +/** + * @brief Allocate a new alpm_list_t. + * + * @return a new alpm_list_t item, or NULL on failure   */ -alpm_list_t *alpm_list_new() +alpm_list_t SYMEXPORT *alpm_list_new()  {  	alpm_list_t *list = NULL; -	list = (alpm_list_t *)malloc(sizeof(alpm_list_t)); +	list = malloc(sizeof(alpm_list_t));  	if(list) {  		list->data = NULL; -		list->prev = NULL; +		list->prev = list; /* maintain a back reference to the tail pointer */  		list->next = NULL;  	} +  	return(list);  } -/** Free a list, but not the contained data - *  @param list the list to free +/** + * @brief Free a list, but not the contained data. + * + * @param list the list to free   */  void SYMEXPORT alpm_list_free(alpm_list_t *list)  { @@ -64,9 +76,11 @@ void SYMEXPORT alpm_list_free(alpm_list_t *list)  	}  } -/** Free the internal data of a list structure - *  @param list the list to free - *  @param fn a free function for the internal data +/** + * @brief Free the internal data of a list structure. + * + * @param list the list to free + * @param fn   a free function for the internal data   */  void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)  { @@ -83,10 +97,13 @@ void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)  /* Mutators */ -/** Add a new item to the list - *  @param list the list to add to - *  @param data the new item to be added to the list - *  @return the resultant list, or NULL on failure +/** + * @brief Add a new item to the end of the list. + * + * @param list the list to add to + * @param data the new item to be added to the list + * + * @return the resultant list   */  alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)  { @@ -110,6 +127,7 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)  		}  		lp->next->prev = lp;  		lp = lp->next; +		list->prev = lp;  	}  	lp->data = data; @@ -117,13 +135,16 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)  	return(ptr);  } -/** Add items to a list in sorted order. - *  @param list the list to add to - *  @param data the new item to be added to the list - *  @param fn the comparison function to use to determine order - *  @return the resultant list, or NULL on failure +/** + * @brief Add items to a list in sorted order. + * + * @param list the list to add to + * @param data the new item to be added to the list + * @param fn   the comparison function to use to determine order + * + * @return the resultant list   */ -alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn) +alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)  {  	if(!fn) {  		return alpm_list_add(list, data); @@ -153,21 +174,63 @@ alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cm  		} else {  			list = add; /* At beginning, or new list */  		} -		 + +		if(next == NULL) { +			/* At end, adjust tail pointer on head node */ +			list->prev = add; +		} +  		return(list);  	}  } -/** Merge the two sorted sublists into one sorted list - * @param left the first list +/** + * @brief Join two lists. + * The two lists must be independent. Do not free the original lists after + * calling this function, as this is not a copy operation. The list pointers + * passed in should be considered invalid after calling this function. + * + * @param first  the first list + * @param second the second list + * + * @return the resultant joined list + */ +alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second) +{ +	alpm_list_t *tmp; + +	if (first == NULL) { +		return second; +	} +	if (second == NULL) { +		return first; +	} +	/* tmp is the last element of the first list */ +	tmp = first->prev; +	/* link the first list to the second */ +	tmp->next = second; +	/* link the second list to the first */ +	first->prev = second->prev; +	/* set the back reference to the tail */ +	second->prev = tmp; + +	return(first); +} + +/** + * @brief Merge the two sorted sublists into one sorted list. + * + * @param left  the first list   * @param right the second list - * @param fn comparison function for determining merge order + * @param fn    comparison function for determining merge order + * + * @return the resultant list   */ -alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn) +alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn)  {  	alpm_list_t *newlist, *lp; -	if (left == NULL)  +	if (left == NULL)  		return right;  	if (right == NULL)  		return left; @@ -189,7 +252,7 @@ alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_f  			lp->next = left;  			left->prev = lp;  			left = left->next; -		}  +		}  		else {  			lp->next = right;  			right->prev = lp; @@ -206,22 +269,35 @@ alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_f  		lp->next = right;  		right->prev = lp;  	} + +	/* Find our tail pointer +	 * TODO maintain this in the algorithm itself */ +	lp = newlist; +	while(lp && lp->next) { +		lp = lp->next; +	} +	newlist->prev = lp; +  	return(newlist);  } -/** Sort a list of size `n` using mergesort algorithm - *  @param list the list to sort - *  @param n the size of the list - *  @param fn the comparison function for determining order +/** + * @brief Sort a list of size `n` using mergesort algorithm. + * + * @param list the list to sort + * @param n    the size of the list + * @param fn   the comparison function for determining order + * + * @return the resultant list   */ -alpm_list_t* alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn) +alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn)  {  	if (n > 1) {  		alpm_list_t *left = list;  		alpm_list_t *lastleft = alpm_list_nth(list, n/2 - 1);  		alpm_list_t *right = lastleft->next;  		/* terminate first list */ -		lastleft->next = NULL;	 +		lastleft->next = NULL;  		left = alpm_list_msort(left, n/2, fn);  		right = alpm_list_msort(right, n - (n/2), fn); @@ -230,15 +306,18 @@ alpm_list_t* alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn)  	return(list);  } -/** Remove an item from the list - *  @param haystack the list to remove the item from - *  @param needle the data member of the item we're removing - *  @param fn the comparison function for searching - *  @param data output parameter containing the data member of the item removed - *  @return the resultant list, or NULL on failure +/** + * @brief Remove an item from the list. + * + * @param haystack the list to remove the item from + * @param needle   the data member of the item we're removing + * @param fn       the comparison function for searching + * @param data     output parameter containing data of the removed item + * + * @return the resultant list   */ -alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data) -{ /* TODO I modified this to remove ALL matching items.  Do we need a remove_first? */ +alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data) +{  	alpm_list_t *i = haystack, *tmp = NULL;  	if(data) { @@ -252,16 +331,31 @@ alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_li  		tmp = i->next;  		if(fn(needle, i->data) == 0) {  			/* we found a matching item */ -			if(i->next) { -				i->next->prev = i->prev; -			} -			if(i->prev) { -				i->prev->next = i->next; -			} -  			if(i == haystack) { -				/* The item found is the first in the chain */ -				haystack = haystack->next; +				/* Special case: removing the head node which has a back reference to +				 * the tail node */ +				haystack = i->next; +				if(haystack) { +					haystack->prev = i->prev; +				} +				i->prev = NULL; +			} else if(i == haystack->prev) { +				/* Special case: removing the tail node, so we need to fix the back +				 * reference on the head node. We also know tail != head. */ +				if(i->prev) { +					/* i->next should always be null */ +					i->prev->next = i->next; +					haystack->prev = i->prev; +					i->prev = NULL; +				} +			} else { +				/* Normal case, non-head and non-tail node */ +				if(i->next) { +					i->next->prev = i->prev; +				} +				if(i->prev) { +					i->prev->next = i->next; +				}  			}  			if(data) { @@ -269,79 +363,117 @@ alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_li  			}  			i->data = NULL;  			free(i); +			i = NULL; +		} else { +			i = tmp;  		} -		i = tmp;  	}  	return(haystack);  } -/** Remove the passed in node from the list that it is a part of - *  @note this DOES NOT free the node - *  @param node the list node we're removing - *  @return the node which took the place of this one +/** + * @brief Create a new list without any duplicates. + * + * This does NOT copy data members. + * + * @param list the list to copy + * + * @return a new list containing non-duplicate items   */ -alpm_list_t *alpm_list_remove_node(alpm_list_t *node) +alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)  { -	if(!node) return(NULL); - -	alpm_list_t *ret = NULL; - -	if(node->prev) { -		node->prev->next = node->next; -		ret = node->prev; -		node->prev = NULL; -	} -	if(node->next) { -		node->next->prev = node->prev; -		ret = node->next; -		node->next = NULL; +	const alpm_list_t *lp = list; +	alpm_list_t *newlist = NULL; +	while(lp) { +		if(!alpm_list_find_ptr(newlist, lp->data)) { +			newlist = alpm_list_add(newlist, lp->data); +		} +		lp = lp->next;  	} - -	return(ret); +	return(newlist);  } -/** Create a new list without any duplicates - *  @note DOES NOT copy data members - *  @param list the list to copy - *  @return a NEW list containing non-duplicated items +/** + * @brief Copy a string list, including data. + * + * @param list the list to copy + * + * @return a copy of the original list   */ -alpm_list_t SYMEXPORT *alpm_list_remove_dupes(alpm_list_t *list) -{ /* TODO does removing the strdup here cause invalid free's anywhere? */ -	alpm_list_t *lp = list, *newlist = NULL; +alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list) +{ +	const alpm_list_t *lp = list; +	alpm_list_t *newlist = NULL;  	while(lp) { -		if(!alpm_list_find(newlist, lp->data)) { -			newlist = alpm_list_add(newlist, lp->data); -		} +		newlist = alpm_list_add(newlist, strdup(lp->data));  		lp = lp->next;  	}  	return(newlist);  } -/** Copy a string list, including data - *  @note this is gross, assumes string data members - *  @param list the list to copy - *  @return a copy of the original list +/** + * @brief Copy a list, without copying data. + * + * @param list the list to copy + * + * @return a copy of the original list   */ -alpm_list_t *alpm_list_strdup(alpm_list_t *list) +alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)  { -	alpm_list_t *lp = list, *newlist = NULL; +	const alpm_list_t *lp = list; +	alpm_list_t *newlist = NULL;  	while(lp) { -		newlist = alpm_list_add(newlist, strdup(lp->data)); +		newlist = alpm_list_add(newlist, lp->data);  		lp = lp->next;  	}  	return(newlist);  } -/** Create a new list in reverse order - *  @param list the list to copy - *  @return a NEW list in reverse order of the first +/** + * @brief Copy a list and copy the data. + * Note that the data elements to be copied should not contain pointers + * and should also be of constant size. + * + * @param list the list to copy + * @param size the size of each data element + * + * @return a copy of the original list, data copied as well   */ -alpm_list_t *alpm_list_reverse(alpm_list_t *list) -{ /* TODO any invalid free's from NOT duplicating data here? */ -	alpm_list_t *lp, *newlist = NULL; +alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list, +		size_t size) +{ +	const alpm_list_t *lp = list; +	alpm_list_t *newlist = NULL; +	while(lp) { +		void *newdata = calloc(1, size); +		if(newdata) { +			memcpy(newdata, lp->data, size); +			newlist = alpm_list_add(newlist, newdata); +			lp = lp->next; +		} +	} +	return(newlist); +} + +/** + * @brief Create a new list in reverse order. + * + * @param list the list to copy + * + * @return a new list in reverse order + */ +alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list) +{ +	const alpm_list_t *lp; +	alpm_list_t *newlist = NULL;  	lp = alpm_list_last(list); +	if(list) { +		/* break our reverse circular list */ +		list->prev = NULL; +	} +  	while(lp) {  		newlist = alpm_list_add(newlist, lp->data);  		lp = lp->prev; @@ -351,65 +483,84 @@ alpm_list_t *alpm_list_reverse(alpm_list_t *list)  /* Accessors */ -/** Get the first element of a list. +/** + * @brief Get the first element of a list. + *   * @param list the list + *   * @return the first element in the list   */ -alpm_list_t SYMEXPORT *alpm_list_first(alpm_list_t *list) +inline alpm_list_t SYMEXPORT *alpm_list_first(const alpm_list_t *list)  { -	return(list); +	return((alpm_list_t*)list);  } -/** Return nth element from list (starting with 0) - *  @param list the list to access - *  @param n the index of the item to find - *  @return an alpm_list_t node for index `n` +/** + * @brief Return nth element from list (starting from 0). + * + * @param list the list + * @param n    the index of the item to find + * + * @return an alpm_list_t node for index `n`   */ -alpm_list_t *alpm_list_nth(alpm_list_t *list, int n) +alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, int n)  { -	alpm_list_t *i = list; +	const alpm_list_t *i = list;  	while(n--) {  		i = i->next;  	} -	return(i); +	return((alpm_list_t*)i);  } -/** Get the next element of a list. - * @param entry the list entry +/** + * @brief Get the next element of a list. + * + * @param node the list node + *   * @return the next element, or NULL when no more elements exist   */ -alpm_list_t SYMEXPORT *alpm_list_next(alpm_list_t *entry) +inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)  { -	return(entry->next); +	return(node->next);  } -/** Get the last item in the list. - *  @param list the list to operate on - *  @return the last element in the list + +/** + * @brief Get the last item in the list. + * + * @param list the list + * + * @return the last element in the list   */ -alpm_list_t *alpm_list_last(alpm_list_t *list) +alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)  { -	alpm_list_t *i = list; -	while(i && i->next) { -		i = i->next; +	if(list) { +		return(list->prev); +	} else { +		return(NULL);  	} -	return(i);  } -/** Get the data member of a list entry. - * @param entry the list entry +/** + * @brief Get the data member of a list node. + * + * @param node the list node + *   * @return the contained data, or NULL if none   */ -void SYMEXPORT *alpm_list_getdata(const alpm_list_t *entry) +void SYMEXPORT *alpm_list_getdata(const alpm_list_t *node)  { -	if(entry == NULL) return(NULL); -	return(entry->data); +	if(node == NULL) return(NULL); +	return(node->data);  }  /* Misc */ -/** Count the list items - *  @param list the list to operate on - *  @return the number of list items +/** + * @brief Get the number of items in a list. + * + * @param list the list + * + * @return the number of list items   */  int SYMEXPORT alpm_list_count(const alpm_list_t *list)  { @@ -422,53 +573,80 @@ int SYMEXPORT alpm_list_count(const alpm_list_t *list)  	return(i);  } -/** Is an item in the list - *  @param needle the data to compare to (== comparison) - *  @param haystack the list to search - *  @return 1 if `needle` is found, 0 otherwise +/** + * @brief Find an item in a list. + * + * @param needle   the item to search + * @param haystack the list + * @param fn       the comparison function for searching (!= NULL) + * + * @return `needle` if found, NULL otherwise   */ -int SYMEXPORT alpm_list_find(alpm_list_t *haystack, const void *needle) +void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle, +		alpm_list_fn_cmp fn)  { -	alpm_list_t *lp = haystack; +	const alpm_list_t *lp = haystack;  	while(lp) { -		if(lp->data == needle) { -			return(1); +		if(lp->data && fn(lp->data, needle) == 0) { +			return(lp->data);  		}  		lp = lp->next;  	} -	return(0); +	return(NULL); +} + +/* trivial helper function for alpm_list_find_ptr */ +static int ptrcmp(const void *p, const void *q) +{ +	return(p != q); +} + +/** + * @brief Find an item in a list. + * + * Search for the item whos data matches that of the `needle`. + * + * @param needle   the data to search for (== comparison) + * @param haystack the list + * + * @return `needle` if found, NULL otherwise + */ +void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle) +{ +	return(alpm_list_find(haystack, needle, ptrcmp));  } -/* Test for existence of a string in a alpm_list_t -*/ -/** Is a _string_ in the list (optimization of alpm_list_find for strings) - *  @param needle the string to compare - *  @param haystack the list to search - *  @return 1 if `needle` is found, 0 otherwise +/** + * @brief Find a string in a list. + * + * @param needle   the string to search for + * @param haystack the list + * + * @return `needle` if found, NULL otherwise   */ -int SYMEXPORT alpm_list_find_str(alpm_list_t *haystack, const char *needle) +char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack, const char *needle)  { -	alpm_list_t *lp = haystack; -	while(lp) { -		if(lp->data && strcmp((const char *)lp->data, needle) == 0) { -			return(1); -		} -		lp = lp->next; -	} -	return(0); +	return((char *)alpm_list_find(haystack, (const void*)needle, (alpm_list_fn_cmp)strcmp));  } -/**  - * Calculate the items in list `lhs` that are not present in list `rhs` - * @note Entries are not duplicated +/** + * @brief Find the items in list `lhs` that are not present in list `rhs`. + * + * Entries are not duplicated. Operation is O(m*n). The first list is stepped + * through one node at a time, and for each node in the first list, each node + * in the second list is compared to it. + *   * @param lhs the first list   * @param rhs the second list - * @param fn the comparison function - * @return a list containing all items in lhs not present in rhs + * @param fn  the comparison function + * + * @return a list containing all items in `lhs` not present in `rhs`   */ -alpm_list_t *alpm_list_diff(alpm_list_t *lhs, alpm_list_t *rhs, alpm_list_fn_cmp fn) +alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs, +		const alpm_list_t *rhs, alpm_list_fn_cmp fn)  { -	alpm_list_t *i, *j, *ret = NULL; +	const alpm_list_t *i, *j; +	alpm_list_t *ret = NULL;  	for(i = lhs; i; i = i->next) {  		int found = 0;  		for(j = rhs; j; j = j->next) { diff --git a/lib/libalpm/alpm_list.h b/lib/libalpm/alpm_list.h index 214deea4..39cbdd30 100644 --- a/lib/libalpm/alpm_list.h +++ b/lib/libalpm/alpm_list.h @@ -1,8 +1,8 @@  /* - *  alpm_alpm_list.h - *  + *  alpm_list.h + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,25 +15,33 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_LIST_H  #define _ALPM_LIST_H -#include "alpm.h" +#ifdef __cplusplus +extern "C" { +#endif -/* Chained list struct */ -struct __alpm_list_t { +/** + * @brief Linked list type used by libalpm. + * + * It is exposed so front ends can use it to prevent the need to reimplement + * lists of their own; however, it is not required that the front end uses + * it. + */ +typedef struct __alpm_list_t { +	/** data held by the list node */  	void *data; +	/** pointer to the previous node */  	struct __alpm_list_t *prev; +	/** pointer to the next node */  	struct __alpm_list_t *next; -}; +} alpm_list_t; -/* TODO we should do away with these... they're messy*/ -#define _FREELIST(p, f) do { alpm_list_free_inner(p, f); alpm_list_free(p); p = NULL; } while(0) -#define FREELIST(p)     _FREELIST(p, free) -#define FREELISTPTR(p)  do { alpm_list_free(p); p = NULL; } while(0) +#define FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0)  typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */  typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */ @@ -46,27 +54,33 @@ void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);  /* item mutators */  alpm_list_t *alpm_list_add(alpm_list_t *list, void *data);  alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn); +alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);  alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);  alpm_list_t *alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn);  alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data); -alpm_list_t *alpm_list_remove_node(alpm_list_t *node); -alpm_list_t *alpm_list_remove_dupes(alpm_list_t *list); -alpm_list_t *alpm_list_strdup(alpm_list_t *list); +alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list); +alpm_list_t *alpm_list_strdup(const alpm_list_t *list); +alpm_list_t *alpm_list_copy(const alpm_list_t *list); +alpm_list_t *alpm_list_copy_data(const alpm_list_t *list, size_t size);  alpm_list_t *alpm_list_reverse(alpm_list_t *list);  /* item accessors */ -alpm_list_t *alpm_list_first(alpm_list_t *list); -alpm_list_t *alpm_list_nth(alpm_list_t *list, int n); -alpm_list_t *alpm_list_next(alpm_list_t *list); -alpm_list_t *alpm_list_last(alpm_list_t *list); +alpm_list_t *alpm_list_first(const alpm_list_t *list); +alpm_list_t *alpm_list_nth(const alpm_list_t *list, int n); +alpm_list_t *alpm_list_next(const alpm_list_t *list); +alpm_list_t *alpm_list_last(const alpm_list_t *list);  void *alpm_list_getdata(const alpm_list_t *entry);  /* misc */  int alpm_list_count(const alpm_list_t *list); -int alpm_list_find(alpm_list_t *haystack, const void *needle); -int alpm_list_find_str(alpm_list_t *haystack,const char *needle); -alpm_list_t *alpm_list_diff(alpm_list_t *lhs, alpm_list_t *rhs, alpm_list_fn_cmp fn); +void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn); +void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle); +char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle); +alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn); +#ifdef __cplusplus +} +#endif  #endif /* _ALPM_LIST_H */  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/backup.c b/lib/libalpm/backup.c index aeb0dea7..731a59e6 100644 --- a/lib/libalpm/backup.c +++ b/lib/libalpm/backup.c @@ -1,11 +1,11 @@  /*   *  backup.c - *  + *   *  Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -34,11 +34,11 @@  #include "util.h"  /* Look for a filename in a pmpkg_t.backup list.  If we find it, - * then we return the md5 or sha1 hash (parsed from the same line) + * then we return the md5 hash (parsed from the same line)   */ -char *_alpm_needbackup(const char *file, alpm_list_t *backup) +char *_alpm_needbackup(const char *file, const alpm_list_t *backup)  { -	alpm_list_t *lp; +	const alpm_list_t *lp;  	ALPM_LOG_FUNC; @@ -46,11 +46,11 @@ char *_alpm_needbackup(const char *file, alpm_list_t *backup)  		return(NULL);  	} -	/* run through the backup list and parse out the md5 or sha1 hash for our file */ +	/* run through the backup list and parse out the md5 hash for our file */  	for(lp = backup; lp; lp = lp->next) {  		char *str = strdup(lp->data);  		char *ptr; -		 +  		/* tab delimiter */  		ptr = strchr(str, '\t');  		if(ptr == NULL) { @@ -59,7 +59,7 @@ char *_alpm_needbackup(const char *file, alpm_list_t *backup)  		}  		*ptr = '\0';  		ptr++; -		/* now str points to the filename and ptr points to the md5 or sha1 hash */ +		/* now str points to the filename and ptr points to the md5 hash */  		if(strcmp(file, str) == 0) {  			char *hash = strdup(ptr);  			FREE(str); diff --git a/lib/libalpm/backup.h b/lib/libalpm/backup.h index dde907f0..8723abaf 100644 --- a/lib/libalpm/backup.h +++ b/lib/libalpm/backup.h @@ -1,8 +1,8 @@  /*   *  backup.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_BACKUP_H @@ -23,7 +23,7 @@  #include "alpm_list.h" -char *_alpm_needbackup(const char *file, alpm_list_t *backup); +char *_alpm_needbackup(const char *file, const alpm_list_t *backup);  #endif /* _ALPM_BACKUP_H */ diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c index f3619277..078136ed 100644 --- a/lib/libalpm/be_files.c +++ b/lib/libalpm/be_files.c @@ -1,9 +1,9 @@  /*   *  be_files.c - *  + *   *  Copyright (c) 2006 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -16,7 +16,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -27,16 +27,13 @@  #include <stdlib.h>  #include <errno.h>  #include <string.h> -#ifdef __sun__ -#include <strings.h> -#endif +#include <stdint.h> /* uintmax_t */  #include <sys/stat.h>  #include <dirent.h> -#include <libintl.h> -#include <locale.h> -#ifdef CYGWIN +#include <ctype.h> +#include <time.h>  #include <limits.h> /* PATH_MAX */ -#endif +#include <locale.h> /* setlocale */  /* libalpm */  #include "db.h" @@ -47,6 +44,8 @@  #include "error.h"  #include "handle.h"  #include "package.h" +#include "delta.h" +#include "deps.h"  /* This function is used to convert the downloaded db file to the proper backend @@ -56,9 +55,9 @@ int _alpm_db_install(pmdb_t *db, const char *dbfile)  {  	ALPM_LOG_FUNC; -	/* TODO we should not simply unpack the archive, but better parse it and  +	/* TODO we should not simply unpack the archive, but better parse it and  	 * db_write each entry (see sync_load_dbarchive to get archive content) */ -	_alpm_log(PM_LOG_DEBUG, _("unpacking database '%s'"), dbfile); +	_alpm_log(PM_LOG_DEBUG, "unpacking database '%s'\n", dbfile);  	if(_alpm_unpack(dbfile, db->path, NULL)) {  		RET_ERR(PM_ERR_SYSTEM, -1); @@ -75,7 +74,7 @@ int _alpm_db_open(pmdb_t *db)  		RET_ERR(PM_ERR_DB_NULL, -1);  	} -	_alpm_log(PM_LOG_DEBUG, _("opening database from path '%s'"), db->path); +	_alpm_log(PM_LOG_DEBUG, "opening database from path '%s'\n", db->path);  	db->handle = opendir(db->path);  	if(db->handle == NULL) {  		RET_ERR(PM_ERR_DB_OPEN, -1); @@ -109,6 +108,43 @@ void _alpm_db_rewind(pmdb_t *db)  	rewinddir(db->handle);  } +static int _alpm_db_splitname(const char *target, char *name, char *version) +{ +	/* the format of a db entry is as follows: +	 *    package-version-rel/ +	 * package name can contain hyphens, so parse from the back- go back +	 * two hyphens and we have split the version from the name. +	 */ +	char *tmp, *p, *q; + +	if(target == NULL) { +		return(-1); +	} +	tmp = strdup(target); +	p = tmp + strlen(tmp); + +	/* do the magic parsing- find the beginning of the version string +	 * by doing two iterations of same loop to lop off two hyphens */ +	for(q = --p; *q && *q != '-'; q--); +	for(p = --q; *p && *p != '-'; p--); +	if(*p != '-' || p == tmp) { +		return(-1); +	} + +	/* copy into fields and return */ +	if(version) { +		strncpy(version, p+1, PKG_VERSION_LEN); +	} +	/* insert a terminator at the end of the name (on hyphen)- then copy it */ +	*p = '\0'; +	if(name) { +		strncpy(name, tmp, PKG_NAME_LEN); +	} + +	free(tmp); +	return(0); +} +  pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)  {  	struct dirent *ent = NULL; @@ -142,7 +178,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)  				if(stat(path, &sbuf) || !S_ISDIR(sbuf.st_mode)) {  					continue;  				} -				STRNCPY(name, ent->d_name, PKG_FULLNAME_LEN); +				strncpy(name, ent->d_name, PKG_FULLNAME_LEN);  				/* truncate the string at the second-to-last hyphen, */  				/* which will give us the package name */  				if((ptr = rindex(name, '-'))) { @@ -179,21 +215,25 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)  		pkg = _alpm_pkg_new(NULL, NULL);  		if(pkg == NULL) { -			_alpm_log(PM_LOG_DEBUG, _("db scan could not find package: %s"), target); +			_alpm_log(PM_LOG_DEBUG, "db scan could not find package: %s\n", target);  			return(NULL);  		} -		if(_alpm_pkg_splitname(ent->d_name, pkg->name, pkg->version, 0) == -1) { -			_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'"), ent->d_name); -			return(NULL); +		/* split the db entry name */ +		if(_alpm_db_splitname(ent->d_name, pkg->name, pkg->version) != 0) { +			_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'\n"), +					ent->d_name); +			alpm_pkg_free(pkg); +			pkg = NULL; +			continue;  		}  		/* explicitly read with only 'BASE' data, accessors will handle the rest */  		if(_alpm_db_read(db, pkg, INFRQ_BASE) == -1) {  			/* TODO removed corrupt entry from the FS here */ -			FREEPKG(pkg); +			_alpm_pkg_free(pkg);  		} else { -			pkg->data = db;  			pkg->origin = PKG_FROM_CACHE; +			pkg->origin_data.db = db;  		}  	} @@ -206,10 +246,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	struct stat buf;  	char path[PATH_MAX+1];  	char line[513]; -	/* -	alpm_list_t *tmplist; -	char *locale; -	*/  	ALPM_LOG_FUNC; @@ -218,12 +254,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	}  	if(info == NULL || info->name[0] == 0 || info->version[0] == 0) { -		_alpm_log(PM_LOG_DEBUG, _("invalid package entry provided to _alpm_db_read, skipping")); +		_alpm_log(PM_LOG_DEBUG, "invalid package entry provided to _alpm_db_read, skipping\n");  		return(-1);  	}  	if(info->origin == PKG_FROM_FILE) { -		_alpm_log(PM_LOG_DEBUG, _("request to read database info for a file-based package '%s', skipping..."), info->name); +		_alpm_log(PM_LOG_DEBUG, "request to read database info for a file-based package '%s', skipping...\n", info->name);  		return(-1);  	} @@ -236,7 +272,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  		/* already loaded this info, do nothing */  		return(0);  	} -	_alpm_log(PM_LOG_FUNCTION, _("loading package data for %s : level=%d"), info->name, inforeq); +	_alpm_log(PM_LOG_FUNCTION, _("loading package data for %s : level=%d\n"), info->name, inforeq);  	/* clear out 'line', to be certain - and to make valgrind happy */  	memset(line, 0, 513); @@ -244,7 +280,8 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	snprintf(path, PATH_MAX, "%s/%s-%s", db->path, info->name, info->version);  	if(stat(path, &buf)) {  		/* directory doesn't exist or can't be opened */ -		_alpm_log(PM_LOG_DEBUG, _("cannot find '%s-%s' in db '%s'"), info->name, info->version, db->treename); +		_alpm_log(PM_LOG_DEBUG, "cannot find '%s-%s' in db '%s'\n", +				info->name, info->version, db->treename);  		return(-1);  	} @@ -252,7 +289,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	if(inforeq & INFRQ_DESC) {  		snprintf(path, PATH_MAX, "%s/%s-%s/desc", db->path, info->name, info->version);  		if((fp = fopen(path, "r")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			goto error;  		}  		while(!feof(fp)) { @@ -273,32 +310,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				if(fgets(info->desc, sizeof(info->desc), fp) == NULL) {  					goto error;  				} -				/* -				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { -					info->desc_localized = alpm_list_add(info->desc_localized, strdup(line)); -					PKG_ -				} - -				if((locale = setlocale(LC_ALL, "")) == NULL) { //To fix segfault when locale invalid -					setenv("LC_ALL", "C", 1); -					locale = setlocale(LC_ALL, ""); -				} - -				if(info->desc_localized && !info->desc_localized->next) { -				    snprintf(info->desc, 512, "%s", (char*)info->desc_localized->data); -				} else { -					for (tmplist = info->desc_localized; tmplist; tmplist = tmplist->next) { -						if (tmplist->data && strncmp(tmplist->data, locale, strlen(locale))) { -							strncpy(info->desc, (char *)info->desc_localized->data, sizeof(info->desc)); -						} else { -							char *p = (char *)tmplist->data; -							p += strlen(locale) + 1; -							strncpy(info->desc, p, sizeof(info->desc)); -							break; -						} -					} -				} -				*/  				_alpm_strtrim(info->desc);  			} else if(!strcmp(line, "%GROUPS%")) {  				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { @@ -319,20 +330,39 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				}  				_alpm_strtrim(info->arch);  			} else if(!strcmp(line, "%BUILDDATE%")) { -				if(fgets(info->builddate, sizeof(info->builddate), fp) == NULL) { +				char tmp[32]; +				if(fgets(tmp, sizeof(tmp), fp) == NULL) {  					goto error;  				} -				_alpm_strtrim(info->builddate); -			} else if(!strcmp(line, "%BUILDTYPE%")) { -				if(fgets(info->buildtype, sizeof(info->buildtype), fp) == NULL) { -					goto error; +				_alpm_strtrim(tmp); + +				char first = tolower(tmp[0]); +				if(first > 'a' && first < 'z') { +					struct tm tmp_tm = {0}; //initialize to null incase of failure +					setlocale(LC_TIME, "C"); +					strptime(tmp, "%a %b %e %H:%M:%S %Y", &tmp_tm); +					info->builddate = mktime(&tmp_tm); +					setlocale(LC_TIME, ""); +				} else { +					info->builddate = atol(tmp);  				} -				_alpm_strtrim(info->buildtype);  			} else if(!strcmp(line, "%INSTALLDATE%")) { -				if(fgets(info->installdate, sizeof(info->installdate), fp) == NULL) { +				char tmp[32]; +				if(fgets(tmp, sizeof(tmp), fp) == NULL) {  					goto error;  				} -				_alpm_strtrim(info->installdate); +				_alpm_strtrim(tmp); + +				char first = tolower(tmp[0]); +				if(first > 'a' && first < 'z') { +					struct tm tmp_tm = {0}; //initialize to null incase of failure +					setlocale(LC_TIME, "C"); +					strptime(tmp, "%a %b %e %H:%M:%S %Y", &tmp_tm); +					info->installdate = mktime(&tmp_tm); +					setlocale(LC_TIME, ""); +				} else { +					info->installdate = atol(tmp); +				}  			} else if(!strcmp(line, "%PACKAGER%")) {  				if(fgets(info->packager, sizeof(info->packager), fp) == NULL) {  					goto error; @@ -357,6 +387,10 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				}  				_alpm_strtrim(tmp);  				info->size = atol(tmp); +				/* also store this value to isize if isize is unset */ +				if(info->isize == 0) { +					info->isize = atol(tmp); +				}  			} else if(!strcmp(line, "%ISIZE%")) {  				/* ISIZE (installed size) tag only appears in sync repositories,  				 * not the local one. */ @@ -366,12 +400,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				}  				_alpm_strtrim(tmp);  				info->isize = atol(tmp); -			} else if(!strcmp(line, "%SHA1SUM%")) { -				/* SHA1SUM tag only appears in sync repositories, -				 * not the local one. */ -				if(fgets(info->sha1sum, sizeof(info->sha1sum), fp) == NULL) { -					goto error; -				}  			} else if(!strcmp(line, "%MD5SUM%")) {  				/* MD5SUM tag only appears in sync repositories,  				 * not the local one. */ @@ -398,7 +426,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	if(inforeq & INFRQ_FILES) {  		snprintf(path, PATH_MAX, "%s/%s-%s/files", db->path, info->name, info->version);  		if((fp = fopen(path, "r")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			goto error;  		}  		while(fgets(line, 256, fp)) { @@ -421,7 +449,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	if(inforeq & INFRQ_DEPENDS) {  		snprintf(path, PATH_MAX, "%s/%s-%s/depends", db->path, info->name, info->version);  		if((fp = fopen(path, "r")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			goto error;  		}  		while(!feof(fp)) { @@ -429,11 +457,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			_alpm_strtrim(line);  			if(!strcmp(line, "%DEPENDS%")) {  				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { -					info->depends = alpm_list_add(info->depends, strdup(line)); +					pmdepend_t *dep = alpm_splitdep(line); +					info->depends = alpm_list_add(info->depends, dep);  				} -			} else if(!strcmp(line, "%REQUIREDBY%")) { +			} else if(!strcmp(line, "%OPTDEPENDS%")) {  				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { -					info->requiredby = alpm_list_add(info->requiredby, strdup(line)); +					info->optdepends = alpm_list_add(info->optdepends, strdup(line));  				}  			} else if(!strcmp(line, "%CONFLICTS%")) {  				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { @@ -451,7 +480,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				 * not the local one. *  				while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {  					info->replaces = alpm_list_add(info->replaces, strdup(line)); -				}  +				}  			} else if(!strcmp(line, "%FORCE%")) {  				 * FORCE tag only appears in sync repositories,  				 * not the local one. * @@ -462,6 +491,24 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  		fp = NULL;  	} +	/* DELTAS */ +	if(inforeq & INFRQ_DELTAS) { +		snprintf(path, PATH_MAX, "%s/%s-%s/deltas", db->path, info->name, info->version); +		if((fp = fopen(path, "r"))) { +			while(!feof(fp)) { +				fgets(line, 255, fp); +				_alpm_strtrim(line); +				if(!strcmp(line, "%DELTAS%")) { +					while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { +						info->deltas = alpm_list_add(info->deltas, _alpm_delta_parse(line)); +					} +				} +			} +			fclose(fp); +			fp = NULL; +		} +	} +  	/* INSTALL */  	if(inforeq & INFRQ_SCRIPTLET) {  		snprintf(path, PATH_MAX, "%s/%s-%s/install", db->path, info->name, info->version); @@ -509,22 +556,17 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	/* DESC */  	if(inforeq & INFRQ_DESC) { -		_alpm_log(PM_LOG_DEBUG, _("writing %s-%s DESC information back to db"), info->name, info->version); +		_alpm_log(PM_LOG_DEBUG, "writing %s-%s DESC information back to db\n", +				info->name, info->version);  		snprintf(path, PATH_MAX, "%s/%s-%s/desc", db->path, info->name, info->version);  		if((fp = fopen(path, "w")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			retval = -1;  			goto cleanup;  		}  		fprintf(fp, "%%NAME%%\n%s\n\n"  						"%%VERSION%%\n%s\n\n", info->name, info->version);  		if(info->desc[0]) { -			/*fputs("%DESC%\n", fp); -				for(lp = info->desc_localized; lp; lp = lp->next) { -				fprintf(fp, "%s\n", (char *)lp->data); -				} -				fprintf(fp, "\n"); -				*/  			fprintf(fp, "%%DESC%%\n"  							"%s\n\n", info->desc);  		} @@ -551,17 +593,13 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				fprintf(fp, "%%ARCH%%\n"  								"%s\n\n", info->arch);  			} -			if(info->builddate[0]) { +			if(info->builddate) {  				fprintf(fp, "%%BUILDDATE%%\n" -								"%s\n\n", info->builddate); -			} -			if(info->buildtype[0]) { -				fprintf(fp, "%%BUILDTYPE%%\n" -								"%s\n\n", info->buildtype); +								"%ju\n\n", (uintmax_t)info->builddate);  			} -			if(info->installdate[0]) { +			if(info->installdate) {  				fprintf(fp, "%%INSTALLDATE%%\n" -								"%s\n\n", info->installdate); +								"%ju\n\n", (uintmax_t)info->installdate);  			}  			if(info->packager[0]) {  				fprintf(fp, "%%PACKAGER%%\n" @@ -585,10 +623,7 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  				fprintf(fp, "%%ISIZE%%\n"  								"%lu\n\n", info->isize);  			} -			if(info->sha1sum) { -				fprintf(fp, "%%SHA1SUM%%\n" -								"%s\n\n", info->sha1sum); -			} else if(info->md5sum) { +			if(info->md5sum) {  				fprintf(fp, "%%MD5SUM%%\n"  								"%s\n\n", info->md5sum);  			} @@ -599,10 +634,11 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	/* FILES */  	if(local && (inforeq & INFRQ_FILES)) { -		_alpm_log(PM_LOG_DEBUG, _("writing %s-%s FILES information back to db"), info->name, info->version); +		_alpm_log(PM_LOG_DEBUG, "writing %s-%s FILES information back to db\n", +				info->name, info->version);  		snprintf(path, PATH_MAX, "%s/%s-%s/files", db->path, info->name, info->version);  		if((fp = fopen(path, "w")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			retval = -1;  			goto cleanup;  		} @@ -626,23 +662,26 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	/* DEPENDS */  	if(inforeq & INFRQ_DEPENDS) { -		_alpm_log(PM_LOG_DEBUG, _("writing %s-%s DEPENDS information back to db"), info->name, info->version); +		_alpm_log(PM_LOG_DEBUG, "writing %s-%s DEPENDS information back to db\n", +			info->name, info->version);  		snprintf(path, PATH_MAX, "%s/%s-%s/depends", db->path, info->name, info->version);  		if((fp = fopen(path, "w")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			retval = -1;  			goto cleanup;  		}  		if(info->depends) {  			fputs("%DEPENDS%\n", fp);  			for(lp = info->depends; lp; lp = lp->next) { -				fprintf(fp, "%s\n", (char *)lp->data); +				char *depstring = alpm_dep_get_string(lp->data); +				fprintf(fp, "%s\n", depstring); +				free(depstring);  			}  			fprintf(fp, "\n");  		} -		if(local && info->requiredby) { -			fputs("%REQUIREDBY%\n", fp); -			for(lp = info->requiredby; lp; lp = lp->next) { +		if(info->optdepends) { +			fputs("%OPTDEPENDS%\n", fp); +			for(lp = info->optdepends; lp; lp = lp->next) {  				fprintf(fp, "%s\n", (char *)lp->data);  			}  			fprintf(fp, "\n"); @@ -709,67 +748,63 @@ int _alpm_db_remove(pmdb_t *db, pmpkg_t *info)  	return(0);  } -/* reads dbpath/.lastupdate and populates *ts with the contents. - * *ts should be malloc'ed and should be at least 15 bytes. - * - * Returns 0 on success, 1 on error - * +/* + * Return the last update time as number of seconds from the epoch. + * Returns 0 if the value is unknown or can't be read.   */ -int _alpm_db_getlastupdate(pmdb_t *db, char *ts) +time_t _alpm_db_getlastupdate(const pmdb_t *db)  {  	FILE *fp;  	char file[PATH_MAX]; +	time_t ret = 0;  	ALPM_LOG_FUNC; -	if(db == NULL || ts == NULL) { -		return(-1); +	if(db == NULL) { +		return(ret);  	} -	snprintf(file, PATH_MAX, "%s%s.lastupdate", handle->root, db->path); +	snprintf(file, PATH_MAX, "%s.lastupdate", db->path);  	/* get the last update time, if it's there */  	if((fp = fopen(file, "r")) == NULL) { -		return(-1); +		return(ret);  	} else { -		char line[256]; +		char line[64];  		if(fgets(line, sizeof(line), fp)) { -			STRNCPY(ts, line, 15); /* YYYYMMDDHHMMSS */ -			ts[14] = '\0'; -		} else { -			fclose(fp); -			return(-1); +			ret = atol(line);  		}  	}  	fclose(fp); -	return(0); +	return(ret);  } -/* writes the dbpath/.lastupdate with the contents of *ts +/* + * writes the dbpath/.lastupdate file with the value in time   */ -int _alpm_db_setlastupdate(pmdb_t *db, char *ts) +int _alpm_db_setlastupdate(const pmdb_t *db, time_t time)  {  	FILE *fp;  	char file[PATH_MAX]; +	int ret = 0;  	ALPM_LOG_FUNC; -	if(db == NULL || ts == NULL || strlen(ts) == 0) { +	if(db == NULL || time == 0) {  		return(-1);  	} -	snprintf(file, PATH_MAX, "%s%s.lastupdate", handle->root, db->path); +	snprintf(file, PATH_MAX, "%s.lastupdate", db->path);  	if((fp = fopen(file, "w")) == NULL) {  		return(-1);  	} -	if(fputs(ts, fp) <= 0) { -		fclose(fp); -		return(-1); +	if(fprintf(fp, "%ju", (uintmax_t)time) <= 0) { +		ret = -1;  	}  	fclose(fp); -	return(0); +	return(ret);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/cache.c b/lib/libalpm/cache.c index ed893470..1da65a49 100644 --- a/lib/libalpm/cache.c +++ b/lib/libalpm/cache.c @@ -1,8 +1,8 @@  /*   *  cache.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -26,8 +26,6 @@  #include <stdlib.h>  #include <errno.h>  #include <string.h> -#include <sys/stat.h> -#include <libintl.h>  /* libalpm */  #include "cache.h" @@ -56,15 +54,15 @@ int _alpm_db_load_pkgcache(pmdb_t *db)  	_alpm_db_free_pkgcache(db); -	_alpm_log(PM_LOG_DEBUG, _("loading package cache for repository '%s'"), +	_alpm_log(PM_LOG_DEBUG, "loading package cache for repository '%s'\n",  	          db->treename);  	_alpm_db_rewind(db);  	while((info = _alpm_db_scan(db, NULL)) != NULL) { -		_alpm_log(PM_LOG_FUNCTION, _("adding '%s' to package cache for db '%s'"), +		_alpm_log(PM_LOG_FUNCTION, _("adding '%s' to package cache for db '%s'\n"),  							alpm_pkg_get_name(info), db->treename);  		info->origin = PKG_FROM_CACHE; -		info->data = db; +		info->origin_data.db = db;  		/* add to the collection */  		db->pkgcache = alpm_list_add(db->pkgcache, info);  		count++; @@ -82,10 +80,15 @@ void _alpm_db_free_pkgcache(pmdb_t *db)  		return;  	} -	_alpm_log(PM_LOG_DEBUG, _("freeing package cache for repository '%s'"), +	_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n",  	                        db->treename); -	FREELISTPKGS(db->pkgcache); +	alpm_list_t *tmp; +	for(tmp = db->pkgcache; tmp; tmp = alpm_list_next(tmp)) { +		_alpm_pkg_free(tmp->data); +	} +	alpm_list_free(db->pkgcache); +	db->pkgcache = NULL;  	if(db->grpcache) {  		_alpm_db_free_grpcache(db); @@ -106,7 +109,7 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)  	/* hmmm, still NULL ?*/  	if(!db->pkgcache) { -		_alpm_log(PM_LOG_DEBUG, _("error: pkgcache is NULL for db '%s'"), db->treename); +		_alpm_log(PM_LOG_DEBUG, "error: pkgcache is NULL for db '%s'\n", db->treename);  	}  	return(db->pkgcache); @@ -126,7 +129,7 @@ int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)  	if(newpkg == NULL) {  		return(-1);  	} -	_alpm_log(PM_LOG_DEBUG, _("adding entry '%s' in '%s' cache"), +	_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n",  						alpm_pkg_get_name(newpkg), db->treename);  	db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp); @@ -146,19 +149,19 @@ int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)  		return(-1);  	} -	_alpm_log(PM_LOG_DEBUG, _("removing entry '%s' from '%s' cache"), +	_alpm_log(PM_LOG_DEBUG, "removing entry '%s' from '%s' cache\n",  						alpm_pkg_get_name(pkg), db->treename);  	db->pkgcache = alpm_list_remove(db->pkgcache, pkg, _alpm_pkg_cmp, &vdata);  	data = vdata;  	if(data == NULL) {  		/* package not found */ -		_alpm_log(PM_LOG_DEBUG, _("cannot remove entry '%s' from '%s' cache: not found"), +		_alpm_log(PM_LOG_DEBUG, "cannot remove entry '%s' from '%s' cache: not found\n",  							alpm_pkg_get_name(pkg), db->treename);  		return(-1);  	} -	FREEPKG(data); +	_alpm_pkg_free(data);  	_alpm_db_free_grpcache(db); @@ -175,7 +178,8 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)  	alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db);  	if(!pkgcache) { -		_alpm_log(PM_LOG_DEBUG, _("error: failed to get '%s' from NULL pkgcache"), target); +		_alpm_log(PM_LOG_DEBUG, "error: failed to get '%s' from NULL pkgcache\n", +				target);  		return(NULL);  	} @@ -198,10 +202,11 @@ int _alpm_db_load_grpcache(pmdb_t *db)  		_alpm_db_load_pkgcache(db);  	} -	_alpm_log(PM_LOG_DEBUG, _("loading group cache for repository '%s'"), db->treename); +	_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n", +			db->treename);  	for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { -		alpm_list_t *i; +		const alpm_list_t *i;  		pmpkg_t *pkg = lp->data;  		for(i = alpm_pkg_get_groups(pkg); i; i = i->next) { @@ -251,8 +256,10 @@ void _alpm_db_free_grpcache(pmdb_t *db)  	for(lg = db->grpcache; lg; lg = lg->next) {  		pmgrp_t *grp = lg->data; -		FREELISTPTR(grp->packages); -		FREEGRP(lg->data); +		alpm_list_free(grp->packages); +		grp->packages = NULL; +		_alpm_grp_free(lg->data); +		lg->data = NULL;  	}  	FREELIST(db->grpcache);  } diff --git a/lib/libalpm/cache.h b/lib/libalpm/cache.h index fa1fef32..2526afac 100644 --- a/lib/libalpm/cache.h +++ b/lib/libalpm/cache.h @@ -1,8 +1,8 @@  /*   *  cache.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_CACHE_H diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index 3ab4ee71..7b21c38a 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -1,12 +1,12 @@  /*   *  conflict.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>   *  Copyright (c) 2006 by Christian Hamar <krics@linuxforum.hu> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,7 +19,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -30,11 +30,7 @@  #include <unistd.h>  #include <string.h>  #include <limits.h> -#if defined(__APPLE__) || defined(__OpenBSD__) -#include <sys/syslimits.h> -#endif  #include <sys/stat.h> -#include <libintl.h>  /* libalpm */  #include "conflict.h" @@ -47,191 +43,145 @@  #include "cache.h"  #include "deps.h" - -/** See if potential conflict 'name' matches package 'pkg'. - * @param target the name of the parent package we're checking - * @param depname the name of the dependency we're checking - * @param pkg the package to check - * @param conflict the name of the possible conflict - * @return A depmissing struct indicating the conflict - * @note The first two paramters are here to simplify the addition - *			 of new 'depmiss' objects. - * - * TODO WTF is a 'depmissing' doing indicating a conflict?? - */ -static pmdepmissing_t *does_conflict(const char *target, const char *depname, -																		 pmpkg_t *pkg, const char *conflict) -{ -	alpm_list_t *i; - -	/* check the actual package name, easy */ -	if(strcmp(alpm_pkg_get_name(pkg), conflict) == 0) { -		_alpm_log(PM_LOG_DEBUG, _("   found conflict '%s' : package '%s'"), conflict, target); -		return(_alpm_depmiss_new(target, PM_DEP_TYPE_CONFLICT, -														 PM_DEP_MOD_ANY, depname, NULL)); -	} else { -		/* check what this package provides, harder */ -		for(i = alpm_pkg_get_provides(pkg); i; i = i->next) { -			const char *provision = i->data; - -			if(strcmp(provision, conflict) == 0) { -				_alpm_log(PM_LOG_DEBUG, _("   found conflict '%s' : package '%s' provides '%s'"), -									conflict, target, provision); -				return(_alpm_depmiss_new(target, PM_DEP_TYPE_CONFLICT, -																 PM_DEP_MOD_ANY, depname, NULL)); -			} -		} -	} -	return(NULL); /* not a conflict */ -} - -static alpm_list_t *chk_pkg_vs_db(alpm_list_t *baddeps, pmpkg_t *pkg, pmdb_t *db) +pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2)  { -	pmdepmissing_t *miss = NULL; -	const char *pkgname; -	alpm_list_t *i, *j; +	pmconflict_t *conflict; -  pkgname = alpm_pkg_get_name(pkg); +	ALPM_LOG_FUNC; -	for(i = alpm_pkg_get_conflicts(pkg); i; i = i->next) { -		const char *conflict = i->data; +	MALLOC(conflict, sizeof(pmconflict_t), RET_ERR(PM_ERR_MEMORY, NULL)); -		if(strcmp(pkgname, conflict) == 0) { -			/* a package cannot conflict with itself -- that's just not nice */ -			_alpm_log(PM_LOG_DEBUG, _("package '%s' conflicts with itself - packaging error"), -								pkgname); -			continue; -		} +	strncpy(conflict->package1, package1, PKG_NAME_LEN); +	strncpy(conflict->package2, package2, PKG_NAME_LEN); -		/* CHECK 1: check targets against database */ -		_alpm_log(PM_LOG_DEBUG, _("checkconflicts: target '%s' vs db"), pkgname); +	return(conflict); +} -		for(j = _alpm_db_get_pkgcache(db); j; j = j->next) { -			pmpkg_t *dbpkg = j->data; +int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack) +{ +	alpm_list_t *i; -			if(strcmp(alpm_pkg_get_name(dbpkg), pkgname) == 0) { -				/* skip the package we're currently processing */ -				continue; -			} +	ALPM_LOG_FUNC; -			miss = does_conflict(pkgname, alpm_pkg_get_name(dbpkg), dbpkg, conflict); -			if(miss && !_alpm_depmiss_isin(miss, baddeps)) { -				baddeps = alpm_list_add(baddeps, miss); -			} else { -				FREE(miss); -			} +	for(i = haystack; i; i = i->next) { +		pmconflict_t *conflict = i->data; +		char *cpkg1 = conflict->package1; +		char *cpkg2 = conflict->package2; +		char *npkg1 = needle->package1; +		char *npkg2 = needle->package2; +		if((!strcmp(cpkg1, npkg1)  && !strcmp(cpkg2, npkg2)) +				|| (!strcmp(cpkg1, npkg2) && !strcmp(cpkg2, npkg1))) { +			return(1);  		}  	} -	return(baddeps); + +	return(0);  } -static alpm_list_t *chk_pkg_vs_targets(alpm_list_t *baddeps, -															 pmpkg_t *pkg, pmdb_t *db, -															 alpm_list_t *targets) +/** Check if pkg1 conflicts with pkg2 + * @param pkg1 package we are looking at + * @param conflict name of the possible conflict + * @param pkg2 package to check + * @return 0 for no conflict, non-zero otherwise + */ +static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)  { -	pmdepmissing_t *miss = NULL; -	const char *pkgname; -	alpm_list_t *i, *j; +	const char *pkg1name = alpm_pkg_get_name(pkg1); +	const char *pkg2name = alpm_pkg_get_name(pkg2); +	pmdepend_t *conf = alpm_splitdep(conflict); +	int match = 0; + +	match = alpm_depcmp(pkg2, conf); +	if(match) { +		_alpm_log(PM_LOG_DEBUG, "package %s conflicts with %s (by %s)\n", +				pkg1name, pkg2name, conflict); +	} +	FREE(conf); +	return(match); +} -  pkgname = alpm_pkg_get_name(pkg); +/** Adds the pkg1/pkg2 conflict to the baddeps list + * @param *baddeps list to add conflict to + * @param pkg1 first package + * @param pkg2 package causing conflict + */ +static void add_conflict(alpm_list_t **baddeps, const char *pkg1, +		const char *pkg2) +{ +	pmconflict_t *conflict = _alpm_conflict_new(pkg1, pkg2); +	if(conflict && !_alpm_conflict_isin(conflict, *baddeps)) { +		*baddeps = alpm_list_add(*baddeps, conflict); +	} else { +		FREE(conflict); +	} +} -	for(i = alpm_pkg_get_conflicts(pkg); i; i = i->next) { -		const char *conflict = i->data; +/** Check if packages from list1 conflict with packages from list2. + * This looks at the conflicts fields of all packages from list1, and sees + * if they match packages from list2. + * If a conflict (pkg1, pkg2) is found, it is added to the baddeps list + * in this order if order >= 0, or reverse order (pkg2,pkg1) otherwise. + * + * @param list1 first list of packages + * @param list2 second list of packages + * @param *baddeps list to store conflicts + * @param order if >= 0 the conflict order is preserved, if < 0 it's reversed + */ +static void check_conflict(alpm_list_t *list1, alpm_list_t *list2, +		alpm_list_t **baddeps, int order) { +	alpm_list_t *i, *j, *k; -		if(strcmp(pkgname, conflict) == 0) { -			/* a package cannot conflict with itself -- that's just not nice */ -			_alpm_log(PM_LOG_DEBUG, _("package '%s' conflicts with itself - packaging error"), -								pkgname); -			continue; -		} +	if(!baddeps) { +		return; +	} +	for(i = list1; i; i = i->next) { +		pmpkg_t *pkg1 = i->data; +		const char *pkg1name = alpm_pkg_get_name(pkg1); -		/* CHECK 2: check targets against targets */ -		_alpm_log(PM_LOG_DEBUG, _("checkconflicts: target '%s' vs all targets"), pkgname); +		for(j = alpm_pkg_get_conflicts(pkg1); j; j = j->next) { +			const char *conflict = j->data; -		for(j = targets; j; j = j->next) { -			const char *targetname; -			pmpkg_t *target = j->data; -			targetname = alpm_pkg_get_name(target); +			for(k = list2; k; k = k->next) { +				pmpkg_t *pkg2 = k->data; +				const char *pkg2name = alpm_pkg_get_name(pkg2); -			if(strcmp(targetname, pkgname) == 0) { -				/* skip the package we're currently processing */ -				continue; -			} +				if(strcmp(pkg1name, pkg2name) == 0) { +					/* skip the package we're currently processing */ +					continue; +				} -			miss = does_conflict(pkgname, targetname, target, conflict); -			if(miss && !_alpm_depmiss_isin(miss, baddeps)) { -				baddeps = alpm_list_add(baddeps, miss); -			} else { -				FREE(miss); +				if(does_conflict(pkg1, conflict, pkg2)) { +					if(order >= 0) { +						add_conflict(baddeps, pkg1name, pkg2name); +					} else { +						add_conflict(baddeps, pkg2name, pkg1name); +					} +				}  			}  		}  	} -	return(baddeps);  } -static alpm_list_t *chk_db_vs_targets(alpm_list_t *baddeps, pmpkg_t *pkg, -																			pmdb_t *db, alpm_list_t *targets) +/* Check for inter-conflicts */ +alpm_list_t *_alpm_innerconflicts(alpm_list_t *packages)  { -	pmdepmissing_t *miss = NULL; -	const char *pkgname; -	alpm_list_t *i, *j; +	alpm_list_t *baddeps = NULL; -	pkgname = alpm_pkg_get_name(pkg); - -	_alpm_log(PM_LOG_DEBUG, _("checkconflicts: db vs target '%s'"), pkgname); -	 -	for(i = _alpm_db_get_pkgcache(db); i; i = i->next) { -		alpm_list_t *conflicts = NULL; -		const char *dbpkgname; - -		pmpkg_t *dbpkg = i->data; -		dbpkgname = alpm_pkg_get_name(dbpkg); - -		if(strcmp(dbpkgname, pkgname) == 0) { -			/* skip the package we're currently processing */ -			continue; -		} - -		/* is this db package in the targets? if so use the -		 * new package's conflict list to pick up new changes */ -		int use_newconflicts = 0; -		for(j = targets; j; j = j->next) { -			pmpkg_t *targ = j->data; -			if(strcmp(alpm_pkg_get_name(targ), dbpkgname) == 0) { -				_alpm_log(PM_LOG_DEBUG, _("target '%s' is also in target list, using NEW conflicts"), -									dbpkgname); -				conflicts = alpm_pkg_get_conflicts(targ); -				use_newconflicts = 1; -				break; -			} -		} -		/* if we didn't find newer conflicts, use the original list */ -		if(!use_newconflicts) { -			conflicts = alpm_pkg_get_conflicts(dbpkg); -		} - -		for(j = conflicts; j; j = j->next) { -			const char *conflict = j->data; +	ALPM_LOG_FUNC; +	_alpm_log(PM_LOG_DEBUG, "check targets vs targets\n"); +	check_conflict(packages, packages, &baddeps, 0); -			miss = does_conflict(pkgname, dbpkgname, pkg, conflict); -			if(miss && !_alpm_depmiss_isin(miss, baddeps)) { -				baddeps = alpm_list_add(baddeps, miss); -			} else { -				FREE(miss); -			} -		} -	}  	return(baddeps);  } -/* Returns a alpm_list_t* of pmdepmissing_t pointers. - * - * conflicts are always name only +/* Check for target vs (db - target) conflicts + * In case of conflict the package1 field of pmdepconflict_t contains + * the target package, package2 field contains the local package   */ -alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages) +alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages)  { -	alpm_list_t *i, *baddeps = NULL; +	alpm_list_t *baddeps = NULL;  	ALPM_LOG_FUNC; @@ -239,27 +189,23 @@ alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages)  		return(NULL);  	} -	for(i = packages; i; i = i->next) { -		pmpkg_t *pkg = i->data; -		if(pkg == NULL) { -			continue; -		} - -		/* run three different conflict checks on each package */ -		baddeps = chk_pkg_vs_db(baddeps, pkg, db); -		baddeps = chk_pkg_vs_targets(baddeps, pkg, db, packages); -		baddeps = chk_db_vs_targets(baddeps, pkg, db, packages); -	} +	alpm_list_t *dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), packages, +			_alpm_pkg_cmp); -	/* debug loop */ -	for(i = baddeps; i; i = i->next) { -		pmdepmissing_t *miss = i->data; -		_alpm_log(PM_LOG_DEBUG, _("\tCONFLICTS:: %s conflicts with %s"), miss->target, miss->depend.name); -	} +	/* two checks to be done here for conflicts */ +	_alpm_log(PM_LOG_DEBUG, "check targets vs db\n"); +	check_conflict(packages, dblist, &baddeps, 1); +	_alpm_log(PM_LOG_DEBUG, "check db vs targets\n"); +	check_conflict(dblist, packages, &baddeps, -1); +	alpm_list_free(dblist);  	return(baddeps);  } +/* Check for transaction conflicts */ +alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages) { +	return(alpm_list_join(_alpm_innerconflicts(packages), _alpm_outerconflicts(db, packages))); +}  /* Returns a alpm_list_t* of file conflicts.   *  Hooray for set-intersects! @@ -335,32 +281,29 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)  	return(ret);  } -/* Adds pmconflict_t to a conflicts list. Pass the conflicts list, type (either - * PM_CONFLICT_TYPE_TARGET or PM_CONFLICT_TYPE_FILE), a file string, and either +/* Adds pmfileconflict_t to a conflicts list. Pass the conflicts list, type (either + * PM_FILECONFLICT_TARGET or PM_FILECONFLICT_FILESYSTEM), a file string, and either   * two package names or one package name and NULL. This is a wrapper for former   * functionality that was done inline.   */  static alpm_list_t *add_fileconflict(alpm_list_t *conflicts, -                    pmconflicttype_t type, const char *filestr, +                    pmfileconflicttype_t type, const char *filestr,  										const char* name1, const char* name2)  { -	pmconflict_t *conflict = malloc(sizeof(pmconflict_t)); -	if(conflict == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), -				sizeof(pmconflict_t)); -		return(conflicts); -	} +	pmfileconflict_t *conflict; +	MALLOC(conflict, sizeof(pmfileconflict_t), return(conflicts)); +  	conflict->type = type; -	STRNCPY(conflict->target, name1, PKG_NAME_LEN); -	STRNCPY(conflict->file, filestr, CONFLICT_FILE_LEN); +	strncpy(conflict->target, name1, PKG_NAME_LEN); +	strncpy(conflict->file, filestr, CONFLICT_FILE_LEN);  	if(name2) { -		STRNCPY(conflict->ctarget, name2, PKG_NAME_LEN); +		strncpy(conflict->ctarget, name2, PKG_NAME_LEN);  	} else {  		conflict->ctarget[0] = '\0';  	}  	conflicts = alpm_list_add(conflicts, conflict); -	_alpm_log(PM_LOG_DEBUG, "found file conflict %s, packages %s and %s", +	_alpm_log(PM_LOG_DEBUG, "found file conflict %s, packages %s and %s\n",  	          filestr, name1, name2 ? name2 : "(filesystem)");  	return(conflicts); @@ -369,11 +312,12 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,  /* Find file conflicts that may occur during the transaction with two checks:   * 1: check every target against every target   * 2: check every target against the filesystem */ -alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root) +alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root)  {  	alpm_list_t *i, *conflicts = NULL;  	alpm_list_t *targets = trans->packages;  	int numtargs = alpm_list_count(targets); +	int current;  	ALPM_LOG_FUNC; @@ -381,7 +325,11 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)  		return(NULL);  	} -	for(i = targets; i; i = i->next) { +	/* TODO this whole function needs a huge change, which hopefully will +	 * be possible with real transactions. Right now we only do half as much +	 * here as we do when we actually extract files in add.c with our 12 +	 * different cases. */ +	for(current = 1, i = targets; i; i = i->next, current++) {  		alpm_list_t *j, *k, *tmpfiles = NULL;  		pmpkg_t *p1, *p2, *dbpkg;  		char path[PATH_MAX+1]; @@ -391,37 +339,35 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)  			continue;  		} -		double percent = (double)(alpm_list_count(targets) - alpm_list_count(i) + 1) -			                 / alpm_list_count(targets); +		double percent = (double)current / numtargs;  		PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", (percent * 100), -		         numtargs, (numtargs - alpm_list_count(i) +1)); +		         numtargs, current);  		/* CHECK 1: check every target against every target */  		for(j = i->next; j; j = j->next) {  			p2 = j->data;  			if(!p2) {  				continue;  			} -			_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s and %s", +			_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s and %s\n",  								alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));  			tmpfiles = chk_fileconflicts(alpm_pkg_get_files(p1), alpm_pkg_get_files(p2));  			if(tmpfiles) {  				for(k = tmpfiles; k; k = k->next) {  					snprintf(path, PATH_MAX, "%s%s", root, (char *)k->data); -					conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_TARGET, path, +					conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_TARGET, path,  																			 alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));  				} -				alpm_list_free_inner(tmpfiles, &free); -				alpm_list_free(tmpfiles); +				FREELIST(tmpfiles);  			}  		}  		/* declarations for second check */ -		struct stat buf; +		struct stat lsbuf, sbuf;  		char *filestr = NULL;  		/* CHECK 2: check every target against the filesystem */ -		_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s", p1->name); +		_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s\n", p1->name);  		dbpkg = _alpm_db_get_pkgfromcache(db, p1->name);  		/* Do two different checks here. f the package is currently installed, @@ -441,22 +387,31 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)  			snprintf(path, PATH_MAX, "%s%s", root, filestr); -			/* stat the file - if it exists and is not a dir, do some checks */ -			if(lstat(path, &buf) == 0 && !S_ISDIR(buf.st_mode)) { -				_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s", path); +			/* stat the file - if it exists, do some checks */ +			if(_alpm_lstat(path, &lsbuf) != 0) { +				continue; +			} +			stat(path, &sbuf); + +			if(S_ISDIR(lsbuf.st_mode)) { +				_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path); +			} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) { +				_alpm_log(PM_LOG_DEBUG, "%s is a symlink to a dir, hopefully not a conflict\n", path); +			} else { +				_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);  				/* Make sure the possible conflict is not a symlink that points to a  				 * path in the old package. This is kind of dirty with inode usage */ +				/* TODO this seems ripe for a cleanup */  				if(dbpkg) { -					struct stat buf2; +					struct stat pkgbuf;  					char str[PATH_MAX+1];  					unsigned ok = 0;  					for(k = dbpkg->files; k; k = k->next) {  						snprintf(str, PATH_MAX, "%s%s", root, (char*)k->data); -						lstat(str, &buf2); -						if(buf.st_ino == buf2.st_ino) { +						if(!_alpm_lstat(str, &pkgbuf) && lsbuf.st_ino == pkgbuf.st_ino) {  							ok = 1; -							_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s", path); +							_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s\n", path);  							break;  						}  					} @@ -487,7 +442,7 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)  							/* keep file intact if it is in backup array */  							trans->skip_add = alpm_list_add(trans->skip_add, strdup(path));  							trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path)); -							_alpm_log(PM_LOG_DEBUG, "file in backup array, adding to add and remove skiplist: %s", filestr); +							_alpm_log(PM_LOG_DEBUG, "file in backup array, adding to add and remove skiplist: %s\n", filestr);  							resolved_conflict = 1;  							break;  						} else { @@ -495,29 +450,48 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)  							 * package from removing the file when it was already installed  							 * by its new owner */  							trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path)); -							_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s", filestr); +							_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);  							resolved_conflict = 1;  							break;  						}  					}  				}  				if(!resolved_conflict) { -					_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s", path); -					conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_FILE, +					_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path); +					conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,  																			 path, p1->name, NULL);  				} -			} else { -				_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict", path);  			}  		} -		alpm_list_free_inner(tmpfiles, &free); -		alpm_list_free(tmpfiles); +		FREELIST(tmpfiles);  	}  	return(conflicts);  } -const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict) +const char SYMEXPORT *alpm_conflict_get_package1(pmconflict_t *conflict) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(conflict != NULL, return(NULL)); + +	return conflict->package1; +} + +const char SYMEXPORT *alpm_conflict_get_package2(pmconflict_t *conflict) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(conflict != NULL, return(NULL)); + +	return conflict->package2; +} + +const char SYMEXPORT *alpm_fileconflict_get_target(pmfileconflict_t *conflict)  {  	ALPM_LOG_FUNC; @@ -528,7 +502,7 @@ const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict)  	return conflict->target;  } -pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict) +pmfileconflicttype_t SYMEXPORT alpm_fileconflict_get_type(pmfileconflict_t *conflict)  {  	ALPM_LOG_FUNC; @@ -539,7 +513,7 @@ pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict)  	return conflict->type;  } -const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict) +const char SYMEXPORT *alpm_fileconflict_get_file(pmfileconflict_t *conflict)  {  	ALPM_LOG_FUNC; @@ -550,7 +524,7 @@ const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict)  	return conflict->file;  } -const char SYMEXPORT *alpm_conflict_get_ctarget(pmconflict_t *conflict) +const char SYMEXPORT *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict)  {  	ALPM_LOG_FUNC; diff --git a/lib/libalpm/conflict.h b/lib/libalpm/conflict.h index 8928de86..00a593e9 100644 --- a/lib/libalpm/conflict.h +++ b/lib/libalpm/conflict.h @@ -1,8 +1,8 @@  /*   *  conflict.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_CONFLICT_H @@ -28,14 +28,23 @@  #define CONFLICT_FILE_LEN 512  struct __pmconflict_t { +	char package1[PKG_NAME_LEN]; +	char package2[PKG_NAME_LEN]; +}; + +struct __pmfileconflict_t {  	char target[PKG_NAME_LEN]; -	pmconflicttype_t type; +	pmfileconflicttype_t type;  	char file[CONFLICT_FILE_LEN];  	char ctarget[PKG_NAME_LEN];  }; +pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2); +int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack); +alpm_list_t *_alpm_innerconflicts(alpm_list_t *packages); +alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages);  alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages); -alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root); +alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root);  #endif /* _ALPM_CONFLICT_H */ diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index 148c32dc..b772adde 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -1,12 +1,12 @@  /*   *  db.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,7 +19,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -30,17 +30,11 @@  #include <stdlib.h>  #include <errno.h>  #include <string.h> +#include <stdint.h> /* uintmax_t */  #include <sys/stat.h> -#if defined(__APPLE__) || defined(__OpenBSD__) -#include <sys/syslimits.h> -#include <sys/stat.h> -#endif  #include <dirent.h> -#include <libintl.h>  #include <regex.h> -#ifdef CYGWIN -#include <limits.h> /* PATH_MAX */ -#endif +#include <time.h>  /* libalpm */  #include "db.h" @@ -53,38 +47,425 @@  #include "cache.h"  #include "alpm.h" -pmdb_t *_alpm_db_new(const char *root, const char *dbpath, const char *treename) +/** \addtogroup alpm_databases Database Functions + * @brief Functions to query and manipulate the database of libalpm + * @{ + */ + +/** Register a sync database of packages. + * @param treename the name of the sync repository + * @return a pmdb_t* on success (the value), NULL on error + */ +pmdb_t SYMEXPORT *alpm_db_register_sync(const char *treename)  { -	pmdb_t *db; +	ALPM_LOG_FUNC; +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL)); +	ASSERT(treename != NULL && strlen(treename) != 0, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); +	/* Do not register a database if a transaction is on-going */ +	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL)); + +	return(_alpm_db_register_sync(treename)); +} + +/** Register the local package database. + * @return a pmdb_t* representing the local database, or NULL on error + */ +pmdb_t SYMEXPORT *alpm_db_register_local(void) +{  	ALPM_LOG_FUNC; -	db = calloc(1, sizeof(pmdb_t)); +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL)); +	/* Do not register a database if a transaction is on-going */ +	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL)); + +	return(_alpm_db_register_local()); +} + +/* Helper function for alpm_db_unregister{_all} */ +static void _alpm_db_unregister(pmdb_t *db) +{  	if(db == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failed: could not allocate %d bytes"), -				  sizeof(pmdb_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); +		return; +	} + +	_alpm_log(PM_LOG_DEBUG, "closing database '%s'\n", db->treename); +	_alpm_db_close(db); + +	_alpm_log(PM_LOG_DEBUG, "unregistering database '%s'\n", db->treename); +	_alpm_db_free(db); +} + +/** Unregister all package databases + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_db_unregister_all(void) +{ +	alpm_list_t *i; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	/* Do not unregister a database if a transaction is on-going */ +	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1)); + +	/* close local database */ +	_alpm_db_unregister(handle->db_local); +	handle->db_local = NULL; + +	/* and also sync ones */ +	for(i = handle->dbs_sync; i; i = i->next) { +		pmdb_t *db = i->data; +		_alpm_db_unregister(db); +		i->data = NULL; +	} +	FREELIST(handle->dbs_sync); +	return(0); +} + +/** Unregister a package database + * @param db pointer to the package database to unregister + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_db_unregister(pmdb_t *db) +{ +	int found = 0; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	ASSERT(db != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); +	/* Do not unregister a database if a transaction is on-going */ +	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1)); + +	if(db == handle->db_local) { +		handle->db_local = NULL; +		found = 1; +	} else { +		/* Warning : this function shouldn't be used to unregister all sync +		 * databases by walking through the list returned by +		 * alpm_option_get_syncdbs, because the db is removed from that list here. +		 */ +		void *data; +		handle->dbs_sync = alpm_list_remove(handle->dbs_sync, +				db, _alpm_db_cmp, &data); +		if(data) { +			found = 1; +		} +	} + +	if(!found) { +		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); +	} + +	_alpm_db_unregister(db); +	return(0); +} + +/** Set the serverlist of a database. + * @param db database pointer + * @param url url of the server + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url) +{ +	alpm_list_t *i; +	int found = 0; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); + +	for(i = handle->dbs_sync; i && !found; i = i->next) { +		pmdb_t *sdb = i->data; +		if(strcmp(db->treename, sdb->treename) == 0) { +			found = 1; +		} +	} +	if(!found) { +		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); +	} + +	if(url && strlen(url)) { +		pmserver_t *server; +		if((server = _alpm_server_new(url)) == NULL) { +			/* pm_errno is set by _alpm_server_new */ +			return(-1); +		} +		db->servers = alpm_list_add(db->servers, server); +		_alpm_log(PM_LOG_DEBUG, "adding new server to database '%s': protocol '%s', server '%s', path '%s'\n", +							db->treename, server->s_url->scheme, server->s_url->host, server->s_url->doc); +	} else { +		FREELIST(db->servers); +		_alpm_log(PM_LOG_DEBUG, "serverlist flushed for '%s'\n", db->treename); +	} + +	return(0); +} + +/** Update a package database + * @param force if true, then forces the update, otherwise update only in case + * the database isn't up to date + * @param db pointer to the package database to update + * @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up + * to date + */ +int SYMEXPORT alpm_db_update(int force, pmdb_t *db) +{ +	alpm_list_t *lp; +	char path[PATH_MAX]; +	alpm_list_t *files = NULL; +	time_t newmtime = 0, lastupdate = 0; +	const char *dbpath; +	int ret; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); +	/* Verify we are in a transaction.  This is done _mainly_ because we need a DB +	 * lock - if we update without a db lock, we may kludge some other pacman +	 * process that _has_ a lock. +	 */ +	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); +	ASSERT(handle->trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1)); + +	if(!alpm_list_find_ptr(handle->dbs_sync, db)) { +		RET_ERR(PM_ERR_DB_NOT_FOUND, -1);  	} -	db->path = calloc(1, strlen(root)+strlen(dbpath)+strlen(treename)+2); -	if(db->path == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failed: could not allocate %d bytes"), -				  strlen(root)+strlen(dbpath)+strlen(treename)+2); -		FREE(db); -		RET_ERR(PM_ERR_MEMORY, NULL); +	if(!force) { +		/* get the lastupdate time */ +		lastupdate = _alpm_db_getlastupdate(db); +		if(lastupdate == 0) { +			_alpm_log(PM_LOG_DEBUG, "failed to get lastupdate time for %s\n", +					db->treename); +		}  	} -	sprintf(db->path, "%s%s%s/", root, dbpath, treename); -	STRNCPY(db->treename, treename, PATH_MAX); +	/* build a one-element list */ +	snprintf(path, PATH_MAX, "%s" DBEXT, db->treename); +	files = alpm_list_add(files, strdup(path)); + +	dbpath = alpm_option_get_dbpath(); + +	ret = _alpm_downloadfiles_forreal(db->servers, dbpath, files, lastupdate, +			&newmtime, NULL, 0); +	FREELIST(files); +	if(ret == 1) { +		/* mtimes match, do nothing */ +		pm_errno = 0; +		return(1); +	} else if(ret == -1) { +		/* we use downloadLastErrString and downloadLastErrCode here, error returns from +		 * libdownload */ +		_alpm_log(PM_LOG_DEBUG, "failed to sync db: %s [%d]\n", +				downloadLastErrString, downloadLastErrCode); +		RET_ERR(PM_ERR_DB_SYNC, -1); +	} else { +		if(newmtime != 0) { +			_alpm_log(PM_LOG_DEBUG, "sync: new mtime for %s: %ju\n", +					db->treename, (uintmax_t)newmtime); +			_alpm_db_setlastupdate(db, newmtime); +		} +		snprintf(path, PATH_MAX, "%s%s" DBEXT, dbpath, db->treename); + +		/* remove the old dir */ +		_alpm_log(PM_LOG_DEBUG, "flushing database %s\n", db->path); +		for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { +			pmpkg_t *pkg = lp->data; +			if(pkg && _alpm_db_remove(db, pkg) == -1) { +				_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s%s\n"), db->treename, +									alpm_pkg_get_name(pkg)); +				RET_ERR(PM_ERR_DB_REMOVE, -1); +			} +		} + +		/* Cache needs to be rebuild */ +		_alpm_db_free_pkgcache(db); + +		/* uncompress the sync database */ +		if(_alpm_db_install(db, path) == -1) { +			return -1; +		} +	} + +	return(0); +} + +/** Get the name of a package database + * @param db pointer to the package database + * @return the name of the package database, NULL on error + */ +const char SYMEXPORT *alpm_db_get_name(const pmdb_t *db) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); + +	return db->treename; +} + +/** Get a download URL for the package database + * @param db pointer to the package database + * @return a fully-specified download URL, NULL on error + */ +const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db) +{ +	char path[PATH_MAX]; +	pmserver_t *s; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); + +	s = (pmserver_t*)db->servers->data; + +	snprintf(path, PATH_MAX, "%s://%s%s", s->s_url->scheme, s->s_url->host, s->s_url->doc); +	return strdup(path); +} + + +/** Get a package entry from a package database + * @param db pointer to the package database to get the package from + * @param name of the package + * @return the package entry on success, NULL on error + */ +pmpkg_t SYMEXPORT *alpm_db_get_pkg(pmdb_t *db, const char *name) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); +	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); + +	return(_alpm_db_get_pkgfromcache(db, name)); +} + +/** Get the package cache of a package database + * @param db pointer to the package database to get the package from + * @return the list of packages on success, NULL on error + */ +alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); + +	return(_alpm_db_get_pkgcache(db)); +} + +/** Get the list of packages that a package provides + * @param db pointer to the package database to get the package from + * @param name name of the package + * @return the list of packages on success, NULL on error + */ +alpm_list_t SYMEXPORT *alpm_db_whatprovides(pmdb_t *db, const char *name) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); +	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); + +	return(_alpm_db_whatprovides(db, name)); +} + +/** Get a group entry from a package database + * @param db pointer to the package database to get the group from + * @param name of the group + * @return the groups entry on success, NULL on error + */ +pmgrp_t SYMEXPORT *alpm_db_readgrp(pmdb_t *db, const char *name) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); +	ASSERT(name != NULL && strlen(name) != 0, return(NULL)); + +	return(_alpm_db_get_grpfromcache(db, name)); +} + +/** Get the group cache of a package database + * @param db pointer to the package database to get the group from + * @return the list of groups on success, NULL on error + */ +alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); + +	return(_alpm_db_get_grpcache(db)); +} + +/** Searches a database + * @param db pointer to the package database to search in + * @param needles the list of strings to search for + * @return the list of packages on success, NULL on error + */ +alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db, const alpm_list_t* needles) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(db != NULL, return(NULL)); + +	return(_alpm_db_search(db, needles)); +} + +/** @} */ + +pmdb_t *_alpm_db_new(const char *dbpath, const char *treename) +{ +	pmdb_t *db; +	const size_t pathsize = strlen(dbpath) + strlen(treename) + 2; + +	ALPM_LOG_FUNC; + +	CALLOC(db, 1, sizeof(pmdb_t), RET_ERR(PM_ERR_MEMORY, NULL)); +	CALLOC(db->path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL)); + +	sprintf(db->path, "%s%s/", dbpath, treename); + +	strncpy(db->treename, treename, PATH_MAX);  	return(db);  }  void _alpm_db_free(pmdb_t *db)  { +	alpm_list_t *tmp; +  	ALPM_LOG_FUNC; -	_FREELIST(db->servers, _alpm_server_free); +	/* cleanup pkgcache */ +	_alpm_db_free_pkgcache(db); +	/* cleanup server list */ +	for(tmp = db->servers; tmp; tmp = alpm_list_next(tmp)) { +		_alpm_server_free(tmp->data); +	} +	alpm_list_free(db->servers);  	FREE(db->path);  	FREE(db); @@ -97,9 +478,10 @@ int _alpm_db_cmp(const void *db1, const void *db2)  	return(strcmp(((pmdb_t *)db1)->treename, ((pmdb_t *)db2)->treename));  } -alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles) +alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)  { -	alpm_list_t *i, *j, *k, *ret = NULL; +	const alpm_list_t *i, *j, *k; +	alpm_list_t *ret = NULL;  	ALPM_LOG_FUNC; @@ -111,8 +493,8 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)  			continue;  		}  		targ = i->data; -		_alpm_log(PM_LOG_DEBUG, "searching for target '%s'", targ); -		 +		_alpm_log(PM_LOG_DEBUG, "searching for target '%s'\n", targ); +  		if(regcomp(®, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {  			RET_ERR(PM_ERR_INVALID_REGEX, NULL);  		} @@ -125,6 +507,10 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)  			if (regexec(®, alpm_pkg_get_name(pkg), 0, 0, 0) == 0) {  				matched = alpm_pkg_get_name(pkg);  			} +			/* check plain text name */ +			else if (strstr(alpm_pkg_get_name(pkg), targ)) { +				matched = alpm_pkg_get_name(pkg); +			}  			/* check desc */  			else if (regexec(®, alpm_pkg_get_desc(pkg), 0, 0, 0) == 0) {  				matched = alpm_pkg_get_desc(pkg); @@ -142,7 +528,7 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)  			}  			if(matched != NULL) { -				_alpm_log(PM_LOG_DEBUG, "    search target '%s' matched '%s'", +				_alpm_log(PM_LOG_DEBUG, "    search target '%s' matched '%s'\n",  				          targ, matched);  				ret = alpm_list_add(ret, pkg);  			} @@ -154,90 +540,150 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)  	return(ret);  } -pmdb_t *_alpm_db_register(const char *treename, alpm_cb_db_register callback) +pmdb_t *_alpm_db_register_local(void)  {  	struct stat buf;  	pmdb_t *db; +	const char *dbpath;  	char path[PATH_MAX];  	ALPM_LOG_FUNC; -	if(strcmp(treename, "local") == 0) { -		if(handle->db_local != NULL) { -			_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB")); -			RET_ERR(PM_ERR_DB_NOT_NULL, NULL); -		} -	} else { -		alpm_list_t *i; -		for(i = handle->dbs_sync; i; i = i->next) { -			pmdb_t *sdb = i->data; -			if(strcmp(treename, sdb->treename) == 0) { -				_alpm_log(PM_LOG_DEBUG, _("attempt to re-register the '%s' database, using existing"), sdb->treename); -				return sdb; -			} -		} +	if(handle->db_local != NULL) { +		_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB\n")); +		RET_ERR(PM_ERR_DB_NOT_NULL, NULL);  	} -	 -	_alpm_log(PM_LOG_DEBUG, _("registering database '%s'"), treename); + +	_alpm_log(PM_LOG_DEBUG, "registering local database\n");  	/* make sure the database directory exists */ -	snprintf(path, PATH_MAX, "%s%s/%s", handle->root, handle->dbpath, treename); +	dbpath = alpm_option_get_dbpath(); +	if(!dbpath) { +		_alpm_log(PM_LOG_ERROR, _("database path is undefined\n")); +			RET_ERR(PM_ERR_DB_OPEN, NULL); +	} +	snprintf(path, PATH_MAX, "%slocal", dbpath); +	/* TODO this is rediculous, we try to do this even if we can't */  	if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) { -		_alpm_log(PM_LOG_DEBUG, _("database directory '%s' does not exist, creating it"), path); +		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n", +				path);  		if(_alpm_makepath(path) != 0) {  			RET_ERR(PM_ERR_SYSTEM, NULL);  		}  	} -	db = _alpm_db_new(handle->root, handle->dbpath, treename); +	db = _alpm_db_new(dbpath, "local");  	if(db == NULL) {  		RET_ERR(PM_ERR_DB_CREATE, NULL);  	} -	_alpm_log(PM_LOG_DEBUG, _("opening database '%s'"), db->treename); +	_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);  	if(_alpm_db_open(db) == -1) {  		_alpm_db_free(db);  		RET_ERR(PM_ERR_DB_OPEN, NULL);  	} -	/* Only call callback on NEW registration. */ -	if(callback) callback(treename, db); +	handle->db_local = db; +	return(db); +} -	if(strcmp(treename, "local") == 0) { -		handle->db_local = db; -	} else { -		handle->dbs_sync = alpm_list_add(handle->dbs_sync, db); +pmdb_t *_alpm_db_register_sync(const char *treename) +{ +	struct stat buf; +	pmdb_t *db; +	const char *dbpath; +	char path[PATH_MAX]; +	alpm_list_t *i; + +	ALPM_LOG_FUNC; + +	for(i = handle->dbs_sync; i; i = i->next) { +		pmdb_t *sdb = i->data; +		if(strcmp(treename, sdb->treename) == 0) { +			_alpm_log(PM_LOG_DEBUG, "attempt to re-register the '%s' database, using existing\n", sdb->treename); +			return sdb; +		} +	} + +	_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename); + +	/* make sure the database directory exists */ +	dbpath = alpm_option_get_dbpath(); +	if(!dbpath) { +		_alpm_log(PM_LOG_ERROR, _("database path is undefined\n")); +			RET_ERR(PM_ERR_DB_OPEN, NULL); +	} +	/* all sync DBs now reside in the sync/ subdir of the dbpath */ +	snprintf(path, PATH_MAX, "%ssync/%s", dbpath, treename); +	/* TODO this is rediculous, we try to do this even if we can't */ +	if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) { +		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n", +				path); +		if(_alpm_makepath(path) != 0) { +			RET_ERR(PM_ERR_SYSTEM, NULL); +		} +	} + +	/* Ensure the db gets the real path. */ +	path[0] = '\0'; +	snprintf(path, PATH_MAX, "%ssync/", dbpath); + +	db = _alpm_db_new(path, treename); +	if(db == NULL) { +		RET_ERR(PM_ERR_DB_CREATE, NULL); +	} + +	_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename); +	if(_alpm_db_open(db) == -1) { +		_alpm_db_free(db); +		RET_ERR(PM_ERR_DB_OPEN, NULL);  	} +	handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);  	return(db);  } -const char SYMEXPORT *alpm_db_get_name(pmdb_t *db) +/* helper function for alpm_list_find and _alpm_db_whatprovides + * + * @return "provision.name" == needle (as string) + */ +int _alpm_prov_cmp(const void *provision, const void *needle)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); +	char *tmpptr; +	char *provname = strdup(provision); +	int retval = 0; +	tmpptr = strchr(provname, ' '); -	return db->treename; +	if(tmpptr != NULL) { /* provision-version */ +		*tmpptr='\0'; +	} +	retval = strcmp(provname, needle); +	free(provname); +	return(retval);  } -const char *alpm_db_get_url(pmdb_t *db) +/* return a alpm_list_t of packages in "db" that provide "package" + */ +alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package)  { -	char path[PATH_MAX]; -	pmserver_t *s; +	alpm_list_t *pkgs = NULL; +	alpm_list_t *lp;  	ALPM_LOG_FUNC; -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(db != NULL, return(NULL)); +	if(db == NULL || package == NULL || strlen(package) == 0) { +		return(NULL); +	} -	s = (pmserver_t*)db->servers->data; +	for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { +		pmpkg_t *info = lp->data; -	snprintf(path, PATH_MAX, "%s://%s%s", s->s_url->scheme, s->s_url->host, s->s_url->doc); -	return strdup(path); +		if(alpm_list_find(alpm_pkg_get_provides(info), (const void *)package, _alpm_prov_cmp)) { +			pkgs = alpm_list_add(pkgs, info); +		} +	} + +	return(pkgs);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 26f1fdf4..3916e848 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -1,10 +1,10 @@  /*   *  db.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_DB_H @@ -25,6 +25,7 @@  #include "alpm.h"  #include <limits.h> +#include <time.h>  /* Database entries */  typedef enum _pmdbinfrq_t { @@ -33,8 +34,9 @@ typedef enum _pmdbinfrq_t {  	INFRQ_DEPENDS = 0x04,  	INFRQ_FILES = 0x08,  	INFRQ_SCRIPTLET = 0x10, +	INFRQ_DELTAS = 0x20,  	/* ALL should be sum of all above */ -	INFRQ_ALL = 0x1F +	INFRQ_ALL = 0x3F  } pmdbinfrq_t;  /* Database */ @@ -48,11 +50,16 @@ struct __pmdb_t {  };  /* db.c, database general calls */ -pmdb_t *_alpm_db_new(const char *root, const char *dbpath, const char *treename); +pmdb_t *_alpm_db_new(const char *dbpath, const char *treename);  void _alpm_db_free(pmdb_t *db);  int _alpm_db_cmp(const void *db1, const void *db2); -alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles); -pmdb_t *_alpm_db_register(const char *treename, alpm_cb_db_register callback); +alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles); +pmdb_t *_alpm_db_register_local(void); +pmdb_t *_alpm_db_register_sync(const char *treename); + +/* Provision */ +int _alpm_prov_cmp(const void *provision, const void *needle); +alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package);  /* be.c, backend specific calls */  int _alpm_db_install(pmdb_t *db, const char *dbfile); @@ -63,8 +70,8 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target);  int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);  int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);  int _alpm_db_remove(pmdb_t *db, pmpkg_t *info); -int _alpm_db_getlastupdate(pmdb_t *db, char *ts); -int _alpm_db_setlastupdate(pmdb_t *db, char *ts); +time_t _alpm_db_getlastupdate(const pmdb_t *db); +int _alpm_db_setlastupdate(const pmdb_t *db, time_t time);  #endif /* _ALPM_DB_H */ diff --git a/lib/libalpm/delta.c b/lib/libalpm/delta.c new file mode 100644 index 00000000..8daac0c5 --- /dev/null +++ b/lib/libalpm/delta.c @@ -0,0 +1,266 @@ +/* + *  delta.c + * + *  Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org> + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + *  USA. + */ + +#include "config.h" + +#include <stdlib.h> +#include <string.h> + +/* libalpm */ +#include "delta.h" +#include "error.h" +#include "util.h" +#include "log.h" +#include "alpm_list.h" +#include "alpm.h" + +/** \addtogroup alpm_deltas Delta Functions + * @brief Functions to manipulate libalpm deltas + * @{ + */ + +const char SYMEXPORT *alpm_delta_get_from(pmdelta_t *delta) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(delta != NULL, return(NULL)); + +	return(delta->from); +} + +const char SYMEXPORT *alpm_delta_get_to(pmdelta_t *delta) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(delta != NULL, return(NULL)); + +	return(delta->to); +} + +unsigned long SYMEXPORT alpm_delta_get_size(pmdelta_t *delta) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(delta != NULL, return(-1)); + +	return(delta->size); +} + +const char SYMEXPORT *alpm_delta_get_filename(pmdelta_t *delta) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(delta != NULL, return(NULL)); + +	return(delta->filename); +} + +const char SYMEXPORT *alpm_delta_get_md5sum(pmdelta_t *delta) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(delta != NULL, return(NULL)); + +	return(delta->md5sum); +} + +/** @} */ + +/** Calculates the combined size of a list of delta files. + * + * @param deltas the list of pmdelta_t * objects + * + * @return the combined size + */ +unsigned long _alpm_delta_path_size(alpm_list_t *deltas) +{ +	unsigned long sum = 0; +	alpm_list_t *dlts = deltas; + +	while(dlts) { +		pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts); +		sum += d->size; + +		dlts = alpm_list_next(dlts); +	} + +	return(sum); +} + +/** Calculates the combined size of a list of delta files that are not + * in the cache. + * + * @param deltas the list of pmdelta_t * objects + * + * @return the combined size + */ +unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas) +{ +	unsigned long sum = 0; +	alpm_list_t *dlts = deltas; + +	while(dlts) { +		pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts); +		char *fname = _alpm_filecache_find(d->filename); + +		if(!fname) { +			sum += d->size; +		} + +		FREE(fname); + +		dlts = alpm_list_next(dlts); +	} + +	return(sum); +} + +/** Calculates the shortest path from one version to another. + * + * The shortest path is defined as the path with the smallest combined + * size, not the length of the path. + * + * The algorithm is based on Dijkstra's shortest path algorithm. + * + * @param deltas the list of pmdelta_t * objects that a package has + * @param from the version to start from + * @param to the version to end at + * @param path the current path + * + * @return the list of pmdelta_t * objects that has the smallest size. + * NULL (the empty list) is returned if there is no path between the + * versions. + */ +static alpm_list_t *shortest_delta_path(alpm_list_t *deltas, +		const char *from, const char *to, alpm_list_t *path) +{ +	alpm_list_t *d; +	alpm_list_t *shortest = NULL; + +	/* Found the 'to' version, this is a good path so return it. */ +	if(strcmp(from, to) == 0) { +		return(path); +	} + +	for(d = deltas; d; d = alpm_list_next(d)) { +		pmdelta_t *v = alpm_list_getdata(d); + +		/* If this vertex has already been visited in the path, go to the +		 * next vertex. */ +		if(alpm_list_find_ptr(path, v)) +			continue; + +		/* Once we find a vertex that starts at the 'from' version, +		 * recursively find the shortest path using the 'to' version of this +		 * current vertex as the 'from' version in the function call. */ +		if(strcmp(v->from, from) == 0) { +			alpm_list_t *newpath = alpm_list_copy(path); +			alpm_list_free(path); +			newpath = alpm_list_add(newpath, v); +			newpath = shortest_delta_path(deltas, v->to, to, newpath); + +			if(newpath != NULL) { +				/* The path returned works, now use it unless there is already a +				 * shorter path found. */ +				if(shortest == NULL) { +					shortest = newpath; +				} else if(_alpm_delta_path_size(shortest) > _alpm_delta_path_size(newpath)) { +					alpm_list_free(shortest); +					shortest = newpath; +				} else { +					alpm_list_free(newpath); +				} +			} +		} +	} + +	return(shortest); +} + +/** Calculates the shortest path from one version to another. + * + * The shortest path is defined as the path with the smallest combined + * size, not the length of the path. + * + * @param deltas the list of pmdelta_t * objects that a package has + * @param from the version to start from + * @param to the version to end at + * + * @return the list of pmdelta_t * objects that has the smallest size. + * NULL (the empty list) is returned if there is no path between the + * versions. + */ +alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from, +		const char *to) +{ +	alpm_list_t *path = NULL; + +	path = shortest_delta_path(deltas, from, to, path); + +	return(path); +} + +/** Parses the string representation of a pmdelta_t object. + * + * This function assumes that the string is in the correct format. + * + * @param line the string to parse + * + * @return A pointer to the new pmdelta_t object + */ +pmdelta_t *_alpm_delta_parse(char *line) +{ +	pmdelta_t *delta; +	char *tmp = line, *tmp2; + +	CALLOC(delta, 1, sizeof(pmdelta_t), RET_ERR(PM_ERR_MEMORY, NULL)); + +	tmp2 = tmp; +	tmp = strchr(tmp, ' '); +	*(tmp++) = '\0'; +	strncpy(delta->from, tmp2, DLT_VERSION_LEN); + +	tmp2 = tmp; +	tmp = strchr(tmp, ' '); +	*(tmp++) = '\0'; +	strncpy(delta->to, tmp2, DLT_VERSION_LEN); + +	tmp2 = tmp; +	tmp = strchr(tmp, ' '); +	*(tmp++) = '\0'; +	delta->size = atol(tmp2); + +	tmp2 = tmp; +	tmp = strchr(tmp, ' '); +	*(tmp++) = '\0'; +	strncpy(delta->filename, tmp2, DLT_FILENAME_LEN); + +	strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN); + +	return(delta); +} + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/versioncmp.h b/lib/libalpm/delta.h index 13a2d5a7..d2dd361f 100644 --- a/lib/libalpm/versioncmp.h +++ b/lib/libalpm/delta.h @@ -1,10 +1,8 @@  /* - *  versioncmp.h - *  - *  Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org> - *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com> - *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *  delta.h + * + *  Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org> + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,17 +15,31 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ -#ifndef _ALPM_VERSIONCMP_H -#define _ALPM_VERSIONCMP_H +#ifndef _ALPM_DELTA_H +#define _ALPM_DELTA_H + +#include "alpm.h" + +#define DLT_FILENAME_LEN 512 +#define DLT_VERSION_LEN  64 +#define DLT_MD5SUM_LEN   33 -#include "deps.h" -#include "package.h" +struct __pmdelta_t { +	char from[DLT_VERSION_LEN]; +	char to[DLT_VERSION_LEN]; +	unsigned long size; +	char filename[DLT_FILENAME_LEN]; +	char md5sum[DLT_MD5SUM_LEN]; +}; -int _alpm_versioncmp(const char *a, const char *b); +unsigned long _alpm_delta_path_size(alpm_list_t *deltas); +unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas); +pmdelta_t *_alpm_delta_parse(char *line); +alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from, const char *to); -#endif /* _ALPM_VERSIONCMP_H */ +#endif /* _ALPM_DELTA_H */  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index 9295fabe..7529ec98 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -1,10 +1,10 @@  /*   *  deps.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -26,11 +26,6 @@  #include <stdlib.h>  #include <stdio.h>  #include <string.h> -#ifdef __sun__ -#include <strings.h> -#endif -#include <libintl.h> -#include <math.h>  /* libalpm */  #include "deps.h" @@ -41,32 +36,45 @@  #include "package.h"  #include "db.h"  #include "cache.h" -#include "provide.h" -#include "versioncmp.h"  #include "handle.h" -extern pmhandle_t *handle; +static pmgraph_t *_alpm_graph_new(void) +{ +	pmgraph_t *graph = NULL; + +	MALLOC(graph, sizeof(pmgraph_t), RET_ERR(PM_ERR_MEMORY, NULL)); + +	if(graph) { +		graph->state = 0; +		graph->data = NULL; +		graph->parent = NULL; +		graph->children = NULL; +		graph->childptr = NULL; +	} +	return(graph); +} + +static void _alpm_graph_free(void *data) +{ +	pmgraph_t *graph = data; +	alpm_list_free(graph->children); +	free(graph); +} -pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdeptype_t type, -                                  pmdepmod_t depmod, const char *depname, -                                  const char *depversion) +pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod, +		const char *depname, const char *depversion)  {  	pmdepmissing_t *miss;  	ALPM_LOG_FUNC; -	miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t)); -	if(miss == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} +	MALLOC(miss, sizeof(pmdepmissing_t), RET_ERR(PM_ERR_MEMORY, NULL)); -	STRNCPY(miss->target, target, PKG_NAME_LEN); -	miss->type = type; +	strncpy(miss->target, target, PKG_NAME_LEN);  	miss->depend.mod = depmod; -	STRNCPY(miss->depend.name, depname, PKG_NAME_LEN); +	strncpy(miss->depend.name, depname, PKG_NAME_LEN);  	if(depversion) { -		STRNCPY(miss->depend.version, depversion, PKG_VERSION_LEN); +		strncpy(miss->depend.version, depversion, PKG_VERSION_LEN);  	} else {  		miss->depend.version[0] = 0;  	} @@ -74,21 +82,43 @@ pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdeptype_t type,  	return(miss);  } -int _alpm_depmiss_isin(pmdepmissing_t *needle, alpm_list_t *haystack) +/* Convert a list of pmpkg_t * to a graph structure, + * with a edge for each dependency. + * Returns a list of vertices (one vertex = one package) + * (used by alpm_sortbydeps) + */ +static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)  { -	alpm_list_t *i; - -	ALPM_LOG_FUNC; +	alpm_list_t *i, *j, *k; +	alpm_list_t *vertices = NULL; +	/* We create the vertices */ +	for(i = targets; i; i = i->next) { +		pmgraph_t *vertex = _alpm_graph_new(); +		vertex->data = (void *)i->data; +		vertices = alpm_list_add(vertices, vertex); +	} -	for(i = haystack; i; i = i->next) { -		pmdepmissing_t *miss = i->data; -		if(!memcmp(needle, miss, sizeof(pmdepmissing_t)) -		   && !memcmp(&needle->depend, &miss->depend, sizeof(pmdepend_t))) { -			return(1); +	/* We compute the edges */ +	for(i = vertices; i; i = i->next) { +		pmgraph_t *vertex_i = i->data; +		pmpkg_t *p_i = vertex_i->data; +		/* TODO this should be somehow combined with alpm_checkdeps */ +		for(j = vertices; j; j = j->next) { +			pmgraph_t *vertex_j = j->data; +			pmpkg_t *p_j = vertex_j->data; +			int child = 0; +			for(k = alpm_pkg_get_depends(p_i); k && !child; k = k->next) { +				pmdepend_t *depend = k->data; +				child = alpm_depcmp(p_j, depend); +			} +			if(child) { +				vertex_i->children = +					alpm_list_add(vertex_i->children, vertex_j); +			}  		} +		vertex_i->childptr = vertex_i->children;  	} - -	return(0); +	return(vertices);  }  /* Re-order a list of target packages with respect to their dependencies. @@ -99,21 +129,19 @@ int _alpm_depmiss_isin(pmdepmissing_t *needle, alpm_list_t *haystack)   *   Target order is A,B,C,D   *   *   Should be re-ordered to C,A,B,D - *  + *   * mode should be either PM_TRANS_TYPE_ADD or PM_TRANS_TYPE_REMOVE.  This   * affects the dependency order sortbydeps() will use.   *   * This function returns the new alpm_list_t* target list.   * - */  + */  alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)  {  	alpm_list_t *newtargs = NULL; -	alpm_list_t *i, *j, *k, *l; -	int change = 1; -	int numscans = 0; -	int numtargs = 0; -	int maxscans; +	alpm_list_t *vertices = NULL; +	alpm_list_t *vptr; +	pmgraph_t *vertex;  	ALPM_LOG_FUNC; @@ -121,90 +149,86 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)  		return(NULL);  	} -	for(i = targets; i; i = i->next) { -		newtargs = alpm_list_add(newtargs, i->data); -		numtargs++; -	} +	_alpm_log(PM_LOG_DEBUG, "started sorting dependencies\n"); -	maxscans = (int)sqrt(numtargs); +	vertices = _alpm_graph_init(targets); -	_alpm_log(PM_LOG_DEBUG, _("started sorting dependencies")); -	while(change) { -		alpm_list_t *tmptargs = NULL; -		change = 0; -		if(numscans > maxscans) { -			_alpm_log(PM_LOG_DEBUG, _("possible dependency cycle detected")); -			continue; -		} -		numscans++; -		/* run thru targets, moving up packages as necessary */ -		for(i = newtargs; i; i = i->next) { -			pmpkg_t *p = i->data; -			_alpm_log(PM_LOG_DEBUG, "   sorting %s", alpm_pkg_get_name(p)); -			for(j = alpm_pkg_get_depends(p); j; j = j->next) { -				pmdepend_t *depend = alpm_splitdep(j->data); -				pmpkg_t *q = NULL; -				if(depend == NULL) { -					continue; -				} -				/* look for depend->name -- if it's farther down in the list, then -				 * move it up above p -				 */ -				for(k = i->next; k; k = k->next) { -					q = k->data; -					const char *qname = alpm_pkg_get_name(q); -					if(!strcmp(depend->name, qname)) { -						if(!_alpm_pkg_find(qname, tmptargs)) { -							change = 1; -							tmptargs = alpm_list_add(tmptargs, q); -						} -						break; -					} -					for(l = alpm_pkg_get_provides(q); l; l = l->next) { -						const char *provname = l->data; -						if(!strcmp(depend->name, provname)) { -							if(!_alpm_pkg_find(qname, tmptargs)) { -								change = 1; -								tmptargs = alpm_list_add(tmptargs, q); -							} -							break; -						} -					} +	vptr = vertices; +	vertex = vertices->data; +	while(vptr) { +		/* mark that we touched the vertex */ +		vertex->state = -1; +		int found = 0; +		while(vertex->childptr && !found) { +			pmgraph_t *nextchild = (vertex->childptr)->data; +			vertex->childptr = (vertex->childptr)->next; +			if (nextchild->state == 0) { +				found = 1; +				nextchild->parent = vertex; +				vertex = nextchild; +			} +			else if(nextchild->state == -1) { +				pmpkg_t *vertexpkg = vertex->data; +				pmpkg_t *childpkg = nextchild->data; +				_alpm_log(PM_LOG_WARNING, _("dependency cycle detected:\n")); +				if(mode == PM_TRANS_TYPE_REMOVE) { +					_alpm_log(PM_LOG_WARNING, _("%s will be removed after its %s dependency\n"), vertexpkg->name, childpkg->name); +				} else { +					_alpm_log(PM_LOG_WARNING, _("%s will be installed before its %s dependency\n"), vertexpkg->name, childpkg->name);  				} -				free(depend);  			} -			if(!_alpm_pkg_find(alpm_pkg_get_name(p), tmptargs)) { -				tmptargs = alpm_list_add(tmptargs, p); +		} +		if(!found) { +			newtargs = alpm_list_add(newtargs, vertex->data); +			/* mark that we've left this vertex */ +			vertex->state = 1; +			vertex = vertex->parent; +			if(!vertex) { +				vptr = vptr->next; +				while(vptr) { +					vertex = vptr->data; +					if (vertex->state == 0) break; +					vptr = vptr->next; +				}  			}  		} -		FREELISTPTR(newtargs); -		newtargs = tmptargs;  	} -	_alpm_log(PM_LOG_DEBUG, _("sorting dependencies finished")); + +	_alpm_log(PM_LOG_DEBUG, "sorting dependencies finished\n");  	if(mode == PM_TRANS_TYPE_REMOVE) {  		/* we're removing packages, so reverse the order */  		alpm_list_t *tmptargs = alpm_list_reverse(newtargs);  		/* free the old one */ -		FREELISTPTR(newtargs); +		alpm_list_free(newtargs);  		newtargs = tmptargs;  	} +	alpm_list_free_inner(vertices, _alpm_graph_free); +	alpm_list_free(vertices); +  	return(newtargs);  } -/** Checks dependencies and returns missing ones in a list. Dependencies can include versions with depmod operators. - * @param trans pointer to the transaction object +/* Little helper function for alpm_list_find */ +static int satisfycmp(const void *pkg, const void *depend) +{ +	return(!alpm_depcmp((pmpkg_t*) pkg, (pmdepend_t*) depend)); +} + +/** Checks dependencies and returns missing ones in a list. + * Dependencies can include versions with depmod operators.   * @param db pointer to the local package database - * @param op transaction type - * @param packages an alpm_list_t* of packages to be checked - * @return an alpm_list_t* of missing_t pointers. + * @param reversedeps handles the backward dependencies + * @param remove an alpm_list_t* of packages to be removed + * @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade) + * @return an alpm_list_t* of pmpkg_t* of missing_t pointers.   */ -alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op, -                             alpm_list_t *packages) +alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps, +		alpm_list_t *remove, alpm_list_t *upgrade)  { -	alpm_list_t *i, *j, *k, *l; -	int found = 0; +	alpm_list_t *i, *j; +	alpm_list_t *joined, *dblist;  	alpm_list_t *baddeps = NULL;  	pmdepmissing_t *miss = NULL; @@ -214,376 +238,271 @@ alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op,  		return(NULL);  	} -	if(op == PM_TRANS_TYPE_UPGRADE) { -		/* PM_TRANS_TYPE_UPGRADE handles the backwards dependencies, ie, the packages -		 * listed in the requiredby field. -		 */ -		for(i = packages; i; i = i->next) { -			pmpkg_t *newpkg = i->data; -			pmpkg_t *oldpkg; -			if(newpkg == NULL) { -				_alpm_log(PM_LOG_DEBUG, _("null package found in package list")); -				continue; +	joined = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade)); +	dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), joined, _alpm_pkg_cmp); +	alpm_list_free(joined); + +	/* look for unsatisfied dependencies of the upgrade list */ +	for(i = upgrade; i; i = i->next) { +		pmpkg_t *tp = i->data; +		_alpm_log(PM_LOG_DEBUG, "checkdeps: package %s-%s\n", +				alpm_pkg_get_name(tp), alpm_pkg_get_version(tp)); + +		for(j = alpm_pkg_get_depends(tp); j; j = j->next) { +			pmdepend_t *depend = j->data; +			/* 1. we check the upgrade list */ +			/* 2. we check database for untouched satisfying packages */ +			if(!alpm_list_find(upgrade, depend, satisfycmp) && +			   !alpm_list_find(dblist, depend, satisfycmp)) { +				/* Unsatisfied dependency in the upgrade list */ +				char *missdepstring = alpm_dep_get_string(depend); +				_alpm_log(PM_LOG_DEBUG, "checkdeps: missing dependency '%s' for package '%s'\n", +						missdepstring, alpm_pkg_get_name(tp)); +				free(missdepstring); +				miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), depend->mod, +						depend->name, depend->version); +				baddeps = alpm_list_add(baddeps, miss);  			} +		} +	} -			if((oldpkg = _alpm_db_get_pkgfromcache(db, alpm_pkg_get_name(newpkg))) == NULL) { -				_alpm_log(PM_LOG_DEBUG, _("cannot find package installed '%s'"), -									alpm_pkg_get_name(newpkg)); -				continue; -			} -			for(j = alpm_pkg_get_requiredby(oldpkg); j; j = j->next) { -				pmpkg_t *p; -				found = 0; -				if((p = _alpm_db_get_pkgfromcache(db, j->data)) == NULL) { -					/* hmmm... package isn't installed.. */ -					continue; -				} -				if(_alpm_pkg_find(alpm_pkg_get_name(p), packages)) { -					/* this package also in the upgrade list, so don't worry about it */ -					continue; -				} -				for(k = alpm_pkg_get_depends(p); k; k = k->next) { -					/* don't break any existing dependencies (possible provides) */ -					pmdepend_t *depend = alpm_splitdep(k->data); -					if(depend == NULL) { -						continue; -					} - -					/* if oldpkg satisfied this dep, and newpkg doesn't */ -					if(alpm_depcmp(oldpkg, depend) && !alpm_depcmp(newpkg, depend)) { -						/* we've found a dep that was removed... see if any other package -						 * still contains/provides the dep */ -						int satisfied = 0; -						for(l = packages; l; l = l->next) { -							pmpkg_t *pkg = l->data; - -							if(alpm_depcmp(pkg, depend)) { -								_alpm_log(PM_LOG_DEBUG, _("checkdeps: dependency '%s' has moved from '%s' to '%s'"), -													depend->name, alpm_pkg_get_name(oldpkg), alpm_pkg_get_name(pkg)); -								satisfied = 1; -								break; -							} -						} - -						if(!satisfied) { -							/* worst case... check installed packages to see if anything else -							 * satisfies this... */ -							for(l = _alpm_db_get_pkgcache(db); l; l = l->next) { -								pmpkg_t *pkg = l->data; - -								if(strcmp(alpm_pkg_get_name(pkg), alpm_pkg_get_name(oldpkg)) == 0) { -									/* well, we know this one succeeds, but we're removing it... skip it */ -									continue; -								} - -								if(alpm_depcmp(pkg, depend)) { -									_alpm_log(PM_LOG_DEBUG, _("checkdeps: dependency '%s' satisfied by installed package '%s'"), -														depend->name, alpm_pkg_get_name(pkg)); -									satisfied = 1; -									break; -								} -							} -						} - -						if(!satisfied) { -							_alpm_log(PM_LOG_DEBUG, _("checkdeps: updated '%s' won't satisfy a dependency of '%s'"), -												alpm_pkg_get_name(oldpkg), alpm_pkg_get_name(p)); -							miss = _alpm_depmiss_new(p->name, PM_DEP_TYPE_DEPEND, depend->mod, -																			 depend->name, depend->version); -							if(!_alpm_depmiss_isin(miss, baddeps)) { -								baddeps = alpm_list_add(baddeps, miss); -							} else { -								FREE(miss); -							} -						} -					} -					free(depend); +	if(reversedeps) { +		/* reversedeps handles the backwards dependencies, ie, +		 * the packages listed in the requiredby field. */ + +		alpm_list_t *modified = alpm_list_diff(_alpm_db_get_pkgcache(db), dblist, _alpm_pkg_cmp); + +		for(i = dblist; i; i = i->next) { +			pmpkg_t *lp = i->data; +			for(j = alpm_pkg_get_depends(lp); j; j = j->next) { +				pmdepend_t *depend = j->data; +				/* we won't break this depend, if it is already broken, we ignore it */ +				/* 1. check upgrade list for satisfiers */ +				/* 2. check dblist for satisfiers */ +				if(alpm_list_find(modified, depend, satisfycmp) && +				   !alpm_list_find(upgrade, depend, satisfycmp) && +				   !alpm_list_find(dblist, depend, satisfycmp)) { +					char *missdepstring = alpm_dep_get_string(depend); +					_alpm_log(PM_LOG_DEBUG, "checkdeps: transaction would break '%s' dependency of '%s'\n", +							missdepstring, alpm_pkg_get_name(lp)); +					free(missdepstring); +					miss = _alpm_depmiss_new(lp->name, depend->mod, +							depend->name, depend->version); +					baddeps = alpm_list_add(baddeps, miss);  				}  			}  		} +		alpm_list_free(modified);  	} -	if(op == PM_TRANS_TYPE_ADD || op == PM_TRANS_TYPE_UPGRADE) { -		/* DEPENDENCIES -- look for unsatisfied dependencies */ -		for(i = packages; i; i = i->next) { -			pmpkg_t *tp = i->data; -			if(tp == NULL) { -				_alpm_log(PM_LOG_DEBUG, _("null package found in package list")); -				continue; -			} +	alpm_list_free(dblist); -			for(j = alpm_pkg_get_depends(tp); j; j = j->next) { -				/* split into name/version pairs */ -				pmdepend_t *depend = alpm_splitdep((char*)j->data); -				if(depend == NULL) { -					continue; -				} -				 -				found = 0; -				/* check database for literal packages */ -				for(k = _alpm_db_get_pkgcache(db); k && !found; k = k->next) { -					pmpkg_t *p = (pmpkg_t *)k->data; -					found = alpm_depcmp(p, depend); -				} - 				/* check database for provides matches */ - 				if(!found) { - 					alpm_list_t *m; - 					for(m = _alpm_db_whatprovides(db, depend->name); m && !found; m = m->next) { - 						/* look for a match that isn't one of the packages we're trying - 						 * to install.  this way, if we match against a to-be-installed - 						 * package, we'll defer to the NEW one, not the one already - 						 * installed. */ - 						pmpkg_t *p = m->data; - 						alpm_list_t *n; - 						int skip = 0; - 						for(n = packages; n && !skip; n = n->next) { - 							pmpkg_t *ptp = n->data; - 							if(strcmp(alpm_pkg_get_name(ptp), alpm_pkg_get_name(p)) == 0) { - 								skip = 1; - 							} - 						} - 						if(skip) { - 							continue; - 						} - -						found = alpm_depcmp(p, depend); -					} -					FREELISTPTR(k); -				} - 				/* check other targets */ - 				for(k = packages; k && !found; k = k->next) { - 					pmpkg_t *p = k->data; -					found = alpm_depcmp(p, depend); -				} -				/* else if still not found... */ -				if(!found) { -					_alpm_log(PM_LOG_DEBUG, _("missing dependency '%s' for package '%s'"), -					                          depend->name, alpm_pkg_get_name(tp)); -					miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), PM_DEP_TYPE_DEPEND, depend->mod, -					                         depend->name, depend->version); -					if(!_alpm_depmiss_isin(miss, baddeps)) { -						baddeps = alpm_list_add(baddeps, miss); -					} else { -						FREE(miss); -					} -				} -				free(depend); -			} +	return(baddeps); +} + +static int dep_vercmp(const char *version1, pmdepmod_t mod, +		const char *version2) +{ +	int equal = 0; + +	if(mod == PM_DEP_MOD_ANY) { +		equal = 1; +	} else { +		int cmp = _alpm_versioncmp(version1, version2); +		switch(mod) { +			case PM_DEP_MOD_EQ: equal = (cmp == 0); break; +			case PM_DEP_MOD_GE: equal = (cmp >= 0); break; +			case PM_DEP_MOD_LE: equal = (cmp <= 0); break; +			default: equal = 1; break;  		} -	} else if(op == PM_TRANS_TYPE_REMOVE) { -		/* check requiredby fields */ -		for(i = packages; i; i = i->next) { -			pmpkg_t *tp = i->data; -			if(tp == NULL) { -				continue; -			} +	} +	return(equal); +} -			found=0; -			for(j = alpm_pkg_get_requiredby(tp); j; j = j->next) { -				/* Search for 'reqname' in packages for removal */ -				char *reqname = j->data; -				alpm_list_t *x = NULL; -				for(x = packages; x; x = x->next) { -					pmpkg_t *xp = x->data; -					if(strcmp(reqname, alpm_pkg_get_name(xp)) == 0) { -						found = 1; -						break; -					} -				} -				if(!found) { -					/* check if a package in trans->packages provides this package */ -					for(k = trans->packages; !found && k; k=k->next) { -						pmpkg_t *spkg = NULL; -						if(trans->type == PM_TRANS_TYPE_SYNC) { -							pmsyncpkg_t *sync = k->data; -							spkg = sync->pkg; -						} else { -							spkg = k->data; -						} -						if(spkg) { -							if(alpm_list_find_str(alpm_pkg_get_provides(spkg), tp->name)) { -								found = 1; -							} -						} -					} -					if(!found) { -						_alpm_log(PM_LOG_DEBUG, _("checkdeps: found %s as required by %s"), -								reqname, alpm_pkg_get_name(tp)); -						miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), PM_DEP_TYPE_DEPEND, -																		 PM_DEP_MOD_ANY, j->data, NULL); -						if(!_alpm_depmiss_isin(miss, baddeps)) { -							baddeps = alpm_list_add(baddeps, miss); -						} else { -							FREE(miss); -						} -					} -				} -			} +int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep) +{ +	alpm_list_t *i; + +	ALPM_LOG_FUNC; + +	const char *pkgname = alpm_pkg_get_name(pkg); +	const char *pkgversion = alpm_pkg_get_version(pkg); +	int satisfy = 0; + +	/* check (pkg->name, pkg->version) */ +	satisfy = (strcmp(pkgname, dep->name) == 0 +			&& dep_vercmp(pkgversion, dep->mod, dep->version)); + +	/* check provisions, format : "name version" */ +	for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) { +		char *provname = strdup(i->data); +		char *provver = strchr(provname, ' '); + +		if(provver == NULL) { /* no provision version */ +			satisfy = (dep->mod == PM_DEP_MOD_ANY +					&& strcmp(provname, dep->name) == 0); +		} else { +			/* replace the space with a NULL byte, and advance ptr the version */ +			*provver = '\0'; +			provver += 1; +			satisfy = (strcmp(provname, dep->name) == 0 +					&& dep_vercmp(provver, dep->mod, dep->version));  		} +		free(provname);  	} -	return(baddeps); +	return(satisfy);  }  pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)  {  	pmdepend_t *depend;  	char *ptr = NULL; +	char *newstr = NULL;  	if(depstring == NULL) {  		return(NULL);  	} -	 -	depend = (pmdepend_t *)malloc(sizeof(pmdepend_t)); -	if(depend == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepend_t)); -		return(NULL); -	} +	newstr = strdup(depstring); + +	MALLOC(depend, sizeof(pmdepend_t), return(NULL));  	/* Find a version comparator if one exists. If it does, set the type and  	 * increment the ptr accordingly so we can copy the right strings. */ -	if((ptr = strstr(depstring, ">="))) { +	if((ptr = strstr(newstr, ">="))) {  		depend->mod = PM_DEP_MOD_GE;  		*ptr = '\0';  		ptr += 2; -	} else if((ptr = strstr(depstring, "<="))) { +	} else if((ptr = strstr(newstr, "<="))) {  		depend->mod = PM_DEP_MOD_LE;  		*ptr = '\0';  		ptr += 2; -	} else if((ptr = strstr(depstring, "="))) { +	} else if((ptr = strstr(newstr, "="))) {  		depend->mod = PM_DEP_MOD_EQ;  		*ptr = '\0';  		ptr += 1;  	} else {  		/* no version specified - copy in the name and return it */  		depend->mod = PM_DEP_MOD_ANY; -		strncpy(depend->name, depstring, PKG_NAME_LEN); +		strncpy(depend->name, newstr, PKG_NAME_LEN);  		depend->version[0] = '\0'; +		free(newstr);  		return(depend);  	}  	/* if we get here, we have a version comparator, copy the right parts  	 * to the right places */ -	strncpy(depend->name, depstring, PKG_NAME_LEN); +	strncpy(depend->name, newstr, PKG_NAME_LEN);  	strncpy(depend->version, ptr, PKG_VERSION_LEN); +	free(newstr);  	return(depend);  } -/* These parameters are messy.  We check if this package, given a list of - * targets (and a db), is safe to remove.  We do NOT remove it if it is in the - * target list */ -static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets) +/* These parameters are messy. We check if this package, given a list of + * targets and a db is safe to remove. We do NOT remove it if it is in the + * target list, or if if the package was explictly installed and + * include_explicit == 0 */ +static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets, +		int include_explicit)  { -	alpm_list_t *i; +	alpm_list_t *i, *requiredby;  	if(_alpm_pkg_find(alpm_pkg_get_name(pkg), targets)) {  		return(0);  	} -	/* see if it was explicitly installed */ -	if(alpm_pkg_get_reason(pkg) == PM_PKG_REASON_EXPLICIT) { -		_alpm_log(PM_LOG_DEBUG, _("excluding %s -- explicitly installed"), alpm_pkg_get_name(pkg)); -		return(0); +	if(!include_explicit) { +		/* see if it was explicitly installed */ +		if(alpm_pkg_get_reason(pkg) == PM_PKG_REASON_EXPLICIT) { +			_alpm_log(PM_LOG_DEBUG, "excluding %s -- explicitly installed\n", +					alpm_pkg_get_name(pkg)); +			return(0); +		}  	} +	/* TODO: checkdeps could be used here, it handles multiple providers +	 * better, but that also makes it slower. +	 * Also this would require to first add the package to the targets list, +	 * then call checkdeps with it, then remove the package from the targets list +	 * if checkdeps detected it would break something */ +  	/* see if other packages need it */ -	for(i = alpm_pkg_get_requiredby(pkg); i; i = i->next) { +	requiredby = alpm_pkg_compute_requiredby(pkg); +	for(i = requiredby; i; i = i->next) {  		pmpkg_t *reqpkg = _alpm_db_get_pkgfromcache(db, i->data);  		if(reqpkg && !_alpm_pkg_find(alpm_pkg_get_name(reqpkg), targets)) { +			FREELIST(requiredby);  			return(0);  		}  	} +	FREELIST(requiredby);  	/* it's ok to remove */  	return(1);  } -/* return a new alpm_list_t target list containing all packages in the original - * target list, as well as all their un-needed dependencies.  By un-needed, - * I mean dependencies that are *only* required for packages in the target - * list, so they can be safely removed.  This function is recursive. +/** + * @brief Adds unneeded dependencies to an existing list of packages. + * By unneeded, we mean dependencies that are only required by packages in the + * target list, so they can be safely removed. + * If the input list was topo sorted, the output list will be topo sorted too. + * + * @param db package database to do dependency tracing in + * @param *targs pointer to a list of packages + * @param include_explicit if 0, explicitly installed packages are not included   */ -alpm_list_t *_alpm_removedeps(pmdb_t *db, alpm_list_t *targs) +void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)  {  	alpm_list_t *i, *j, *k; -	alpm_list_t *newtargs = targs;  	ALPM_LOG_FUNC; -	if(db == NULL) { -		return(newtargs); +	if(db == NULL || targs == NULL) { +		return;  	}  	for(i = targs; i; i = i->next) {  		pmpkg_t *pkg = i->data;  		for(j = alpm_pkg_get_depends(pkg); j; j = j->next) { -			pmdepend_t *depend = alpm_splitdep(j->data); -			pmpkg_t *deppkg; -			if(depend == NULL) { -				continue; -			} - -			deppkg = _alpm_db_get_pkgfromcache(db, depend->name); -			if(deppkg == NULL) { -				/* package not found... look for a provision instead */ -				alpm_list_t *provides = _alpm_db_whatprovides(db, depend->name); -				if(!provides) { -					/* Not found, that's fine, carry on */ -					_alpm_log(PM_LOG_DEBUG, _("cannot find package \"%s\" or anything that provides it!"), depend->name); -					continue; -				} -				for(k = provides; k; k = k->next) { -					pmpkg_t *provpkg = k->data; -					if(can_remove_package(db, provpkg, newtargs)) { -						pmpkg_t *pkg = _alpm_pkg_dup(provpkg); - -						_alpm_log(PM_LOG_DEBUG, _("adding '%s' to the targets"), alpm_pkg_get_name(pkg)); - +			pmdepend_t *depend = j->data; + +			for(k = _alpm_db_get_pkgcache(db); k; k = k->next) { +				pmpkg_t *deppkg = k->data; +				if(alpm_depcmp(deppkg,depend) +						&& can_remove_package(db, deppkg, targs, include_explicit)) { +					_alpm_log(PM_LOG_DEBUG, "adding '%s' to the targets\n", +							alpm_pkg_get_name(deppkg));  						/* add it to the target list */ -						newtargs = alpm_list_add(newtargs, pkg); -						newtargs = _alpm_removedeps(db, newtargs); -					} +					targs = alpm_list_add(targs, _alpm_pkg_dup(deppkg));  				} -				FREELISTPTR(provides); -			} else if(can_remove_package(db, deppkg, newtargs)) { -				pmpkg_t *pkg = _alpm_pkg_dup(deppkg); - -				_alpm_log(PM_LOG_DEBUG, _("adding '%s' to the targets"), alpm_pkg_get_name(pkg)); - -				/* add it to the target list */ -				newtargs = alpm_list_add(newtargs, pkg); -				newtargs = _alpm_removedeps(db, newtargs);  			} -			free(depend);  		}  	} - -	return(newtargs);  }  /* populates *list with packages that need to be installed to satisfy all   * dependencies (recursive) for syncpkg   * - * make sure *list and *trail are already initialized + * @param remove contains packages elected for removal + * make sure **list is already initialized   */  int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg, -                      alpm_list_t *list, alpm_list_t *trail, pmtrans_t *trans, -                      alpm_list_t **data) +                      alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data)  { -	alpm_list_t *i, *j; +	alpm_list_t *i, *j, *k;  	alpm_list_t *targ;  	alpm_list_t *deps = NULL;  	ALPM_LOG_FUNC; -	if(local == NULL || dbs_sync == NULL || syncpkg == NULL) { +	if(local == NULL || dbs_sync == NULL || syncpkg == NULL || list == NULL) {  		return(-1);  	} -	_alpm_log(PM_LOG_DEBUG, _("started resolving dependencies")); +	_alpm_log(PM_LOG_DEBUG, "started resolving dependencies\n");  	targ = alpm_list_add(NULL, syncpkg); -	deps = _alpm_checkdeps(trans, local, PM_TRANS_TYPE_ADD, targ); -	FREELISTPTR(targ); +	deps = alpm_checkdeps(local, 0, remove, targ); +	alpm_list_free(targ);  	if(deps == NULL) {  		return(0); @@ -592,14 +511,17 @@ int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,  	for(i = deps; i; i = i->next) {  		int found = 0;  		pmdepmissing_t *miss = i->data; +		pmdepend_t *missdep = &(miss->depend);  		pmpkg_t *sync = NULL; -		/* check if one of the packages in *list already provides this dependency */ -		for(j = list; j && !found; j = j->next) { +		/* check if one of the packages in *list already satisfies this dependency */ +		for(j = *list; j && !found; j = j->next) {  			pmpkg_t *sp = j->data; -			if(alpm_list_find_str(alpm_pkg_get_provides(sp), miss->depend.name)) { -				_alpm_log(PM_LOG_DEBUG, _("%s provides dependency %s -- skipping"), -				          alpm_pkg_get_name(sp), miss->depend.name); +			if(alpm_depcmp(sp, missdep)) { +				char *missdepstring = alpm_dep_get_string(missdep); +				_alpm_log(PM_LOG_DEBUG, "%s satisfies dependency %s -- skipping\n", +				          alpm_pkg_get_name(sp), missdepstring); +				free(missdepstring);  				found = 1;  			}  		} @@ -609,31 +531,53 @@ int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,  		/* find the package in one of the repositories */  		/* check literals */ -		for(j = dbs_sync; !sync && j; j = j->next) { -			sync = _alpm_db_get_pkgfromcache(j->data, miss->depend.name); +		for(j = dbs_sync; j && !found; j = j->next) { +			sync = _alpm_db_get_pkgfromcache(j->data, missdep->name); +			if(!sync) { +				continue; +			} +			found = alpm_depcmp(sync, missdep) && !_alpm_pkg_find(alpm_pkg_get_name(sync), remove); +			if(!found) { +				continue; +			} +			/* If package is in the ignorepkg list, ask before we pull it */ +			if(_alpm_pkg_should_ignore(sync)) { +				pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL); +				QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found); +				_alpm_pkg_free(dummypkg); +			}  		} -		/*TODO this autoresolves the first 'provides' package... we should fix this +		/*TODO this autoresolves the first 'satisfier' package... we should fix this  		 * somehow */  		/* check provides */ -		if(!sync) { -			for(j = dbs_sync; !sync && j; j = j->next) { -				alpm_list_t *provides; -				provides = _alpm_db_whatprovides(j->data, miss->depend.name); -				if(provides) { -					sync = provides->data; +		for(j = dbs_sync; j && !found; j = j->next) { +			for(k = _alpm_db_get_pkgcache(j->data); k && !found; k = k->next) { +				sync = k->data; +				if(!sync) { +					continue; +				} +				found = alpm_depcmp(sync, missdep) && !_alpm_pkg_find(alpm_pkg_get_name(sync), remove); +				if(!found) { +					continue; +				} +				if(_alpm_pkg_should_ignore(sync)) { +					pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL); +					QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found); +					_alpm_pkg_free(dummypkg);  				} -				FREELISTPTR(provides);  			}  		} -		if(!sync) { -			_alpm_log(PM_LOG_ERROR, _("cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)"), -			          miss->target, miss->depend.name); +		if(!found) { +			char *missdepstring = alpm_dep_get_string(missdep); +			_alpm_log(PM_LOG_ERROR, _("cannot resolve \"%s\", a dependency of \"%s\"\n"), +			          missdepstring, miss->target); +			free(missdepstring);  			if(data) { -				if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) { -					_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -					FREELIST(*data); +				MALLOC(miss, sizeof(pmdepmissing_t),/*nothing*/); +				if(!miss) {  					pm_errno = PM_ERR_MEMORY; +					FREELIST(*data);  					goto error;  				}  				*miss = *(pmdepmissing_t *)i->data; @@ -641,54 +585,17 @@ int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,  			}  			pm_errno = PM_ERR_UNSATISFIED_DEPS;  			goto error; -		} -		if(_alpm_pkg_find(alpm_pkg_get_name(sync), list)) { -			/* this dep is already in the target list */ -			_alpm_log(PM_LOG_DEBUG, _("dependency %s is already in the target list -- skipping"), -								alpm_pkg_get_name(sync)); -			continue; -		} - -		if(!_alpm_pkg_find(alpm_pkg_get_name(sync), trail)) { -			/* check pmo_ignorepkg and pmo_s_ignore to make sure we haven't pulled in -			 * something we're not supposed to. -			 */ -			int usedep = 1; -			if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(sync))) { -				pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL); -				QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &usedep); -				FREEPKG(dummypkg); -			} -			if(usedep) { -				trail = alpm_list_add(trail, sync); -				if(_alpm_resolvedeps(local, dbs_sync, sync, list, trail, trans, data)) { -					goto error; -				} -				_alpm_log(PM_LOG_DEBUG, _("pulling dependency %s (needed by %s)"), -									alpm_pkg_get_name(sync), alpm_pkg_get_name(syncpkg)); -				list = alpm_list_add(list, sync); -			} else { -				_alpm_log(PM_LOG_ERROR, _("cannot resolve dependencies for \"%s\""), miss->target); -				if(data) { -					if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) { -						_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -						FREELIST(*data); -						pm_errno = PM_ERR_MEMORY; -						goto error; -					} -					*miss = *(pmdepmissing_t *)i->data; -					*data = alpm_list_add(*data, miss); -				} -				pm_errno = PM_ERR_UNSATISFIED_DEPS; +		} else { +			_alpm_log(PM_LOG_DEBUG, "pulling dependency %s (needed by %s)\n", +					alpm_pkg_get_name(sync), alpm_pkg_get_name(syncpkg)); +			*list = alpm_list_add(*list, sync); +			if(_alpm_resolvedeps(local, dbs_sync, sync, list, remove, trans, data)) {  				goto error;  			} -		} else { -			/* cycle detected -- skip it */ -			_alpm_log(PM_LOG_DEBUG, _("dependency cycle detected: %s"), sync->name);  		}  	} -	 -	_alpm_log(PM_LOG_DEBUG, _("finished resolving dependencies")); + +	_alpm_log(PM_LOG_DEBUG, "finished resolving dependencies\n");  	FREELIST(deps); @@ -699,58 +606,95 @@ error:  	return(-1);  } -const char SYMEXPORT *alpm_dep_get_target(pmdepmissing_t *miss) +const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL));  	ASSERT(miss != NULL, return(NULL));  	return miss->target;  } -pmdeptype_t SYMEXPORT alpm_dep_get_type(pmdepmissing_t *miss) +pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(miss != NULL, return(-1)); +	ASSERT(miss != NULL, return(NULL)); -	return miss->type; +	return &(miss->depend);  } -pmdepmod_t SYMEXPORT alpm_dep_get_mod(pmdepmissing_t *miss) +pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(miss != NULL, return(-1)); +	ASSERT(dep != NULL, return(-1)); -	return miss->depend.mod; +	return dep->mod;  } -const char SYMEXPORT *alpm_dep_get_name(pmdepmissing_t *miss) +const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(miss != NULL, return(NULL)); +	ASSERT(dep != NULL, return(NULL)); -	return miss->depend.name; +	return dep->name;  } -const char SYMEXPORT *alpm_dep_get_version(pmdepmissing_t *miss) +const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(miss != NULL, return(NULL)); +	ASSERT(dep != NULL, return(NULL)); + +	return dep->version; +} + +/** Reverse of splitdep; make a dep string from a pmdepend_t struct. + * The string must be freed! + * @param dep the depend to turn into a string + * @return a string-formatted dependency with operator if necessary + */ +char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep) +{ +	char *opr, *str = NULL; +	size_t len; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(dep != NULL, return(NULL)); + +	switch(dep->mod) { +		case PM_DEP_MOD_ANY: +			opr = ""; +			break; +		case PM_DEP_MOD_GE: +			opr = ">="; +			break; +		case PM_DEP_MOD_LE: +			opr = "<="; +			break; +		case PM_DEP_MOD_EQ: +			opr = "="; +			break; +		default: +			opr = ""; +			break; +	} + +	/* we can always compute len and print the string like this because opr +	 * and ver will be empty when PM_DEP_MOD_ANY is the depend type */ +	len = strlen(dep->name) + strlen(opr) + strlen(dep->version) + 1; +	MALLOC(str, len, RET_ERR(PM_ERR_MEMORY, NULL)); +	snprintf(str, len, "%s%s%s", dep->name, opr, dep->version); -	return miss->depend.version; +	return(str);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h index 8f3a9b91..2da39b8b 100644 --- a/lib/libalpm/deps.h +++ b/lib/libalpm/deps.h @@ -1,10 +1,10 @@  /*   *  deps.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_DEPS_H @@ -38,21 +38,24 @@ struct __pmdepend_t {  /* Missing dependency */  struct __pmdepmissing_t {  	char target[PKG_NAME_LEN]; -	pmdeptype_t type;  	pmdepend_t depend;  }; -pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdeptype_t type, -                                  pmdepmod_t depmod, const char *depname, -																	const char *depversion); -int _alpm_depmiss_isin(pmdepmissing_t *needle, alpm_list_t *haystack); +/* Graphs */ +struct __pmgraph_t { +	int state; /* 0: untouched, -1: entered, other: leaving time */ +	void *data; +	struct __pmgraph_t *parent; /* where did we come from? */ +	alpm_list_t *children; +	alpm_list_t *childptr; /* points to a child in children list */ +}; + +pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod, +		const char *depname, const char *depversion);  alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode); -alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op, -                             alpm_list_t *packages); -alpm_list_t *_alpm_removedeps(pmdb_t *db, alpm_list_t *targs); +void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit);  int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg, -                      alpm_list_t *list, alpm_list_t *trail, pmtrans_t *trans, -											alpm_list_t **data); +                      alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data);  #endif /* _ALPM_DEPS_H */ diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index ece8a521..9ced6775 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -1,11 +1,11 @@  /*   *  error.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,21 +18,24 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #include "config.h" -#include <libintl.h> -  /* libalpm */  #include "error.h"  #include "util.h"  #include "alpm.h"  /* TODO does this really need a file all on its own? */ -char SYMEXPORT *alpm_strerror(int err) +const char SYMEXPORT *alpm_strerrorlast(void) +{ +	return alpm_strerror(pm_errno); +} + +const char SYMEXPORT *alpm_strerror(int err)  {  	switch(err) {  		/* System */ @@ -44,6 +47,8 @@ char SYMEXPORT *alpm_strerror(int err)  			return _("insufficient privileges");  		case PM_ERR_NOT_A_FILE:  			return _("could not find or read file"); +		case PM_ERR_NOT_A_DIR: +			return _("could not find or read directory");  		case PM_ERR_WRONG_ARGS:  			return _("wrong or NULL argument passed");  		/* Interface */ @@ -118,6 +123,11 @@ char SYMEXPORT *alpm_strerror(int err)  			return _("corrupted package");  		case PM_ERR_PKG_REPO_NOT_FOUND:  			return _("no such repository"); +		/* Deltas */ +		case PM_ERR_DLT_CORRUPTED: +			return _("corrupted delta"); +		case PM_ERR_DLT_PATCHFAILED: +			return _("delta patch failed");  		/* Groups */  		case PM_ERR_GRP_NOT_FOUND:  			return _("group not found"); @@ -135,20 +145,9 @@ char SYMEXPORT *alpm_strerror(int err)  			return _("internal error");  		case PM_ERR_LIBARCHIVE_ERROR:  			return _("libarchive error"); -		case PM_ERR_DISK_FULL: -			return _("not enough space on disk");  		case PM_ERR_PKG_HOLD:  			/* TODO wow this is not descriptive at all... what does this mean? */  			return _("not confirmed"); -		/* Configuration file */ -		case PM_ERR_CONF_BAD_SECTION: -			return _("bad configuration section name"); -		case PM_ERR_CONF_LOCAL: -			return _("'local' is reserved and cannot be used as a repository name"); -		case PM_ERR_CONF_BAD_SYNTAX: -			return _("syntax error in config file"); -		case PM_ERR_CONF_DIRECTIVE_OUTSIDE_SECTION: -			return _("all directives must belong to a section");  		case PM_ERR_INVALID_REGEX:  			return _("invalid regular expression");  		/* Downloading */ diff --git a/lib/libalpm/error.h b/lib/libalpm/error.h index 6294f05b..7692a944 100644 --- a/lib/libalpm/error.h +++ b/lib/libalpm/error.h @@ -1,8 +1,8 @@  /*   *  error.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,14 +15,14 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_ERROR_H  #define _ALPM_ERROR_H  #define RET_ERR(err, ret) do { pm_errno = (err); \ -	_alpm_log(PM_LOG_DEBUG, _("returning error %d from %s : %s\n"), err, __func__, alpm_strerror(err)); \ +	_alpm_log(PM_LOG_DEBUG, "returning error %d from %s : %s\n", err, __func__, alpm_strerrorlast()); \  	return(ret); } while(0)  #endif /* _ALPM_ERROR_H */ diff --git a/lib/libalpm/group.c b/lib/libalpm/group.c index cce05213..4ad39d6d 100644 --- a/lib/libalpm/group.c +++ b/lib/libalpm/group.c @@ -24,7 +24,6 @@  #include <stdlib.h>  #include <stdio.h>  #include <string.h> -#include <libintl.h>  /* libalpm */  #include "group.h" @@ -40,20 +39,13 @@ pmgrp_t *_alpm_grp_new()  	ALPM_LOG_FUNC; -	grp = calloc(1, sizeof(pmgrp_t)); -	if(grp == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), -		                        sizeof(pmgrp_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} +	CALLOC(grp, 1, sizeof(pmgrp_t), RET_ERR(PM_ERR_MEMORY, NULL));  	return(grp);  } -void _alpm_grp_free(void *data) +void _alpm_grp_free(pmgrp_t *grp)  { -	pmgrp_t *grp = data; -  	ALPM_LOG_FUNC;  	if(grp == NULL) { @@ -62,8 +54,6 @@ void _alpm_grp_free(void *data)  	FREELIST(grp->packages);  	FREE(grp); - -	return;  }  /* Helper function for sorting groups @@ -76,7 +66,7 @@ int _alpm_grp_cmp(const void *g1, const void *g2)  	return(strcmp(grp1->name, grp2->name));  } -const char SYMEXPORT *alpm_grp_get_name(pmgrp_t *grp) +const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)  {  	ALPM_LOG_FUNC; @@ -86,7 +76,7 @@ const char SYMEXPORT *alpm_grp_get_name(pmgrp_t *grp)  	return grp->name;  } -alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(pmgrp_t *grp) +const alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)  {  	ALPM_LOG_FUNC; diff --git a/lib/libalpm/group.h b/lib/libalpm/group.h index c5366e64..477e701c 100644 --- a/lib/libalpm/group.h +++ b/lib/libalpm/group.h @@ -1,8 +1,8 @@  /*   *  group.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_GROUP_H @@ -31,11 +31,8 @@ struct __pmgrp_t {  	alpm_list_t *packages; /* List of strings */  }; -#define FREEGRP(p) do { if(p) { _alpm_grp_free(p); p = NULL; } } while(0) -#define FREELISTGRPS(p) _FREELIST(p, _alpm_grp_free) -  pmgrp_t *_alpm_grp_new(void); -void _alpm_grp_free(void *data); +void _alpm_grp_free(pmgrp_t *grp);  int _alpm_grp_cmp(const void *g1, const void *g2);  #endif /* _ALPM_GROUP_H */ diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index a6bb5bc8..755eefb3 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -1,10 +1,10 @@  /*   *  handle.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -29,8 +29,9 @@  #include <limits.h>  #include <sys/types.h>  #include <syslog.h> -#include <libintl.h>  #include <time.h> +#include <sys/stat.h> +#include <errno.h>  /* libalpm */  #include "handle.h" @@ -42,62 +43,44 @@  #include "alpm.h"  #include "server.h" +/* global var for handle (private to libalpm) */ +pmhandle_t *handle = NULL; +  pmhandle_t *_alpm_handle_new()  {  	pmhandle_t *handle; -	handle = (pmhandle_t *)malloc(sizeof(pmhandle_t)); -	if(handle == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmhandle_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} +	ALPM_LOG_FUNC; + +	CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL)); -	memset(handle, 0, sizeof(pmhandle_t));  	handle->lckfd = -1; +	handle->logstream = NULL; -#ifndef CYGWIN  	/* see if we're root or not */  	handle->uid = geteuid(); -//#ifndef FAKEROOT -//	if(!handle->uid && getenv("FAKEROOTKEY")) { -//		/* fakeroot doesn't count, we're non-root */ -//		handle->uid = 99; -//	} -//#endif -// -//	/* see if we're root or not (fakeroot does not count) */ -//#ifndef FAKEROOT -//	if(handle->uid == 0 && !getenv("FAKEROOTKEY")) { -//		/* } make vim indent work - stupid ifdef's */ -//#else -//		if(handle->uid == 0) { -//#endif -//			handle->access = PM_ACCESS_RW; -//		} else { -//			handle->access = PM_ACCESS_RO; -//		} -//#else -	handle->access = PM_ACCESS_RW; -#endif - -	handle->root = strdup(PM_ROOT); -	handle->dbpath = strdup(PM_DBPATH); -	handle->cachedir = strdup(PM_CACHEDIR); -	handle->logmask = PM_LOG_ERROR | PM_LOG_WARNING; +	handle->root = NULL; +	handle->dbpath = NULL; +	handle->cachedirs = NULL; +	handle->lockfile = NULL; +	handle->logfile = NULL; +	handle->usedelta = 0;  	return(handle);  } -int _alpm_handle_free(pmhandle_t *handle) +void _alpm_handle_free(pmhandle_t *handle)  {  	ALPM_LOG_FUNC; -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	if(handle == NULL) { +		return; +	} -	/* close logfiles */ -	if(handle->logfd) { -		fclose(handle->logfd); -		handle->logfd = NULL; +	/* close logfile */ +	if(handle->logstream) { +		fclose(handle->logstream); +		handle->logstream= NULL;  	}  	if(handle->usesyslog) {  		handle->usesyslog = 0; @@ -105,197 +88,419 @@ int _alpm_handle_free(pmhandle_t *handle)  	}  	/* free memory */ -	FREETRANS(handle->trans); +	_alpm_trans_free(handle->trans);  	FREE(handle->root);  	FREE(handle->dbpath); -	FREE(handle->cachedir); +	FREELIST(handle->cachedirs);  	FREE(handle->logfile); +	FREE(handle->lockfile);  	FREE(handle->xfercommand);  	FREELIST(handle->dbs_sync);  	FREELIST(handle->noupgrade);  	FREELIST(handle->noextract);  	FREELIST(handle->ignorepkg);  	FREELIST(handle->holdpkg); +	FREELIST(handle->ignoregrp);  	FREE(handle); +} -	return(0); +alpm_cb_log SYMEXPORT alpm_option_get_logcb() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->logcb; +} + +alpm_cb_download SYMEXPORT alpm_option_get_dlcb() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->dlcb; +} + +const char SYMEXPORT *alpm_option_get_root() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->root; +} + +const char SYMEXPORT *alpm_option_get_dbpath() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->dbpath; +} + +alpm_list_t SYMEXPORT *alpm_option_get_cachedirs() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->cachedirs; +} + +const char SYMEXPORT *alpm_option_get_logfile() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->logfile; +} + +const char SYMEXPORT *alpm_option_get_lockfile() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->lockfile; +} + +unsigned short SYMEXPORT alpm_option_get_usesyslog() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return -1; +	} +	return handle->usesyslog; +} + +alpm_list_t SYMEXPORT *alpm_option_get_noupgrades() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->noupgrade; +} + +alpm_list_t SYMEXPORT *alpm_option_get_noextracts() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->noextract; +} + +alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->ignorepkg; +} + +alpm_list_t SYMEXPORT *alpm_option_get_holdpkgs() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->holdpkg; +} + +alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->ignoregrp; +} + +time_t SYMEXPORT alpm_option_get_upgradedelay() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return -1; +	} +	return handle->upgradedelay; +} + +const char SYMEXPORT *alpm_option_get_xfercommand() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->xfercommand; +} + +unsigned short SYMEXPORT alpm_option_get_nopassiveftp() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return -1; +	} +	return handle->nopassiveftp; +} + +pmdb_t SYMEXPORT *alpm_option_get_localdb() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	} +	return handle->db_local;  } -alpm_cb_log alpm_option_get_logcb() { return (handle ? handle->logcb : NULL); } -alpm_cb_download alpm_option_get_dlcb() { return (handle ? handle->dlcb : NULL); } -unsigned short SYMEXPORT alpm_option_get_logmask() { return handle->logmask; } -const char SYMEXPORT *alpm_option_get_root() { return handle->root; } -const char SYMEXPORT *alpm_option_get_dbpath() { return handle->dbpath; } -const char SYMEXPORT *alpm_option_get_cachedir() { return handle->cachedir; } -const char *alpm_option_get_logfile() { return handle->logfile; } -unsigned short alpm_option_get_usesyslog() { return handle->usesyslog; } -alpm_list_t *alpm_option_get_noupgrades() { return handle->noupgrade; } -alpm_list_t *alpm_option_get_noextracts() { return handle->noextract; } -alpm_list_t *alpm_option_get_ignorepkgs() { return handle->ignorepkg; } -alpm_list_t *alpm_option_get_holdpkgs() { return handle->holdpkg; } -time_t alpm_option_get_upgradedelay() { return handle->upgradedelay; } -const char *alpm_option_get_xfercommand() { return handle->xfercommand; } -unsigned short alpm_option_get_nopassiveftp() { return handle->nopassiveftp; } -unsigned short SYMEXPORT alpm_option_get_chomp() { return handle->chomp; } -unsigned short alpm_option_get_usecolor() { return handle->use_color; } - -pmdb_t SYMEXPORT *alpm_option_get_localdb() { return handle->db_local; }  alpm_list_t SYMEXPORT *alpm_option_get_syncdbs()  { +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return NULL; +	}  	return handle->dbs_sync;  } -void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) { handle->logcb = cb; } - -void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) { handle->dlcb = cb; } +void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return; +	} +	handle->logcb = cb; +} -void SYMEXPORT alpm_option_set_logmask(unsigned short mask) { handle->logmask = mask; } +void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return; +	} +	handle->dlcb = cb; +} -void SYMEXPORT alpm_option_set_root(const char *root) +int SYMEXPORT alpm_option_set_root(const char *root)  { -	if(handle->root) FREE(handle->root); -	/* According to the man page, realpath is safe to use IFF the second arg is -	 * NULL. */ -	char *realroot = realpath(root, NULL); -	if(realroot) { -		root = realroot; -	} else { -		_alpm_log(PM_LOG_ERROR, _("cannot canonicalize specified root path '%s'"), root); +	struct stat st; +	char *realroot; +	size_t rootlen; + +	ALPM_LOG_FUNC; + +	if(!root) { +		pm_errno = PM_ERR_WRONG_ARGS; +		return(-1); +	} +	if(stat(root, &st) == -1 || !S_ISDIR(st.st_mode)) { +		pm_errno = PM_ERR_NOT_A_DIR; +		return(-1);  	} -	if(root) { -		/* verify root ends in a '/' */ -		int rootlen = strlen(realroot); -		if(realroot[rootlen-1] != '/') { -			rootlen += 1; -		} -		handle->root = calloc(rootlen+1, sizeof(char)); -		strncpy(handle->root, realroot, rootlen); -		handle->root[rootlen-1] = '/'; -		_alpm_log(PM_LOG_DEBUG, _("option 'root' = %s"), handle->root); +	realroot = calloc(PATH_MAX+1, sizeof(char)); +	if(!realpath(root, realroot)) { +		pm_errno = PM_ERR_NOT_A_DIR; +		return(-1); +	} +	/* verify root ends in a '/' */ +	rootlen = strlen(realroot); +	if(realroot[rootlen-1] != '/') { +		rootlen += 1;  	} -	if(realroot) { -		free(realroot); +	if(handle->root) { +		FREE(handle->root);  	} +	handle->root = calloc(rootlen + 1, sizeof(char)); +	strncpy(handle->root, realroot, rootlen); +	handle->root[rootlen-1] = '/'; +	FREE(realroot); +	_alpm_log(PM_LOG_DEBUG, "option 'root' = %s\n", handle->root); +	return(0);  } -void SYMEXPORT alpm_option_set_dbpath(const char *dbpath) +int SYMEXPORT alpm_option_set_dbpath(const char *dbpath)  { -	if(handle->dbpath) FREE(handle->dbpath); -	if(dbpath) { -		/* verify dbpath ends in a '/' */ -		int dbpathlen = strlen(dbpath); -		if(dbpath[dbpathlen-1] != '/') { -			dbpathlen += 1; -		} -		handle->dbpath = calloc(dbpathlen+1, sizeof(char)); -		strncpy(handle->dbpath, dbpath, dbpathlen); -		handle->dbpath[dbpathlen-1] = '/'; -		_alpm_log(PM_LOG_DEBUG, _("option 'dbpath' = %s"), handle->dbpath); +	struct stat st; +	size_t dbpathlen, lockfilelen; +	const char *lf = "db.lck"; + +	ALPM_LOG_FUNC; + +	if(!dbpath) { +		pm_errno = PM_ERR_WRONG_ARGS; +		return(-1); +	} +	if(stat(dbpath, &st) == -1 || !S_ISDIR(st.st_mode)) { +		pm_errno = PM_ERR_NOT_A_DIR; +		return(-1); +	} +	/* verify dbpath ends in a '/' */ +	dbpathlen = strlen(dbpath); +	if(dbpath[dbpathlen-1] != '/') { +		dbpathlen += 1; +	} +	if(handle->dbpath) { +		FREE(handle->dbpath);  	} +	handle->dbpath = calloc(dbpathlen+1, sizeof(char)); +	strncpy(handle->dbpath, dbpath, dbpathlen); +	handle->dbpath[dbpathlen-1] = '/'; +	_alpm_log(PM_LOG_DEBUG, "option 'dbpath' = %s\n", handle->dbpath); + +	if(handle->lockfile) { +		FREE(handle->lockfile); +	} +	lockfilelen = strlen(handle->dbpath) + strlen(lf) + 1; +	handle->lockfile = calloc(lockfilelen, sizeof(char)); +	snprintf(handle->lockfile, lockfilelen, "%s%s", handle->dbpath, lf); +	_alpm_log(PM_LOG_DEBUG, "option 'lockfile' = %s\n", handle->lockfile); +	return(0);  } -void SYMEXPORT alpm_option_set_cachedir(const char *cachedir) +int SYMEXPORT alpm_option_add_cachedir(const char *cachedir)  { -	if(handle->cachedir) FREE(handle->cachedir); -	if(cachedir) { -		/* verify cachedir ends in a '/' */ -		int cachedirlen = strlen(cachedir); -		if(cachedir[cachedirlen-1] != '/') { -			cachedirlen += 1; -		} -		handle->cachedir = calloc(cachedirlen+1, sizeof(char)); -		strncpy(handle->cachedir, cachedir, cachedirlen); -		handle->cachedir[cachedirlen-1] = '/'; -		_alpm_log(PM_LOG_DEBUG, _("option 'cachedir' = %s"), handle->cachedir); +	struct stat st; +	char *newcachedir; +	size_t cachedirlen; + +	ALPM_LOG_FUNC; + +	if(!cachedir) { +		pm_errno = PM_ERR_WRONG_ARGS; +		return(-1); +	} +	if(stat(cachedir, &st) == -1 || !S_ISDIR(st.st_mode)) { +		pm_errno = PM_ERR_NOT_A_DIR; +		return(-1); +	} +	/* verify cachedir ends in a '/' */ +	cachedirlen = strlen(cachedir); +	if(cachedir[cachedirlen-1] != '/') { +		cachedirlen += 1;  	} +	newcachedir = calloc(cachedirlen + 1, sizeof(char)); +	strncpy(newcachedir, cachedir, cachedirlen); +	newcachedir[cachedirlen-1] = '/'; +	handle->cachedirs = alpm_list_add(handle->cachedirs, newcachedir); +	_alpm_log(PM_LOG_DEBUG, "option 'cachedir' = %s\n", newcachedir); +	return(0); +} + +void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs) +{ +	if(handle->cachedirs) FREELIST(handle->cachedirs); +	if(cachedirs) handle->cachedirs = cachedirs;  } -void alpm_option_set_logfile(const char *logfile) +int SYMEXPORT alpm_option_set_logfile(const char *logfile)  { +	char *oldlogfile = handle->logfile; +  	ALPM_LOG_FUNC; -	if(handle->logfile) { -		FREE(handle->logfile); -		if(handle->logfd) { -			fclose(handle->logfd); -			handle->logfd = NULL; -		} +	if(!logfile) { +		pm_errno = PM_ERR_WRONG_ARGS; +		return(-1); +	} + +	handle->logfile = strdup(logfile); + +	/* free the old logfile path string, and close the stream so logaction +	 * will reopen a new stream on the new logfile */ +	if(oldlogfile) { +		FREE(oldlogfile);  	} -	if(logfile) { -		handle->logfile = strdup(logfile); -		handle->logfd = fopen(logfile, "a"); +	if(handle->logstream) { +		fclose(handle->logstream);  	} +	_alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile); +	return(0);  } -void alpm_option_set_usesyslog(unsigned short usesyslog) +void SYMEXPORT alpm_option_set_usesyslog(unsigned short usesyslog)  {  	handle->usesyslog = usesyslog;  } -void alpm_option_add_noupgrade(char *pkg) +void SYMEXPORT alpm_option_add_noupgrade(const char *pkg)  {  	handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(pkg));  } -void alpm_option_set_noupgrades(alpm_list_t *noupgrade) +void SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade)  {  	if(handle->noupgrade) FREELIST(handle->noupgrade);  	if(noupgrade) handle->noupgrade = noupgrade;  } -void alpm_option_add_noextract(char *pkg) +void SYMEXPORT alpm_option_add_noextract(const char *pkg)  {  	handle->noextract = alpm_list_add(handle->noextract, strdup(pkg));  } -void alpm_option_set_noextracts(alpm_list_t *noextract) + +void SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract)  {  	if(handle->noextract) FREELIST(handle->noextract);  	if(noextract) handle->noextract = noextract;  } -void SYMEXPORT alpm_option_add_ignorepkg(char *pkg) +void SYMEXPORT alpm_option_add_ignorepkg(const char *pkg)  {  	handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg));  } +  void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)  {  	if(handle->ignorepkg) FREELIST(handle->ignorepkg);  	if(ignorepkgs) handle->ignorepkg = ignorepkgs;  } -void alpm_option_add_holdpkg(char *pkg) +void SYMEXPORT alpm_option_add_holdpkg(const char *pkg)  {  	handle->holdpkg = alpm_list_add(handle->holdpkg, strdup(pkg));  } -void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs) + +void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)  {  	if(handle->holdpkg) FREELIST(handle->holdpkg);  	if(holdpkgs) handle->holdpkg = holdpkgs;  } -void alpm_option_set_upgradedelay(time_t delay) +void SYMEXPORT alpm_option_add_ignoregrp(const char *grp) +{ +	handle->ignoregrp = alpm_list_add(handle->ignoregrp, strdup(grp)); +} + +void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps) +{ +	if(handle->ignoregrp) FREELIST(handle->ignoregrp); +	if(ignoregrps) handle->ignoregrp = ignoregrps; +} + +void SYMEXPORT alpm_option_set_upgradedelay(time_t delay)  {  	handle->upgradedelay = delay;  } -void alpm_option_set_xfercommand(const char *cmd) +void SYMEXPORT alpm_option_set_xfercommand(const char *cmd)  {  	if(handle->xfercommand) FREE(handle->xfercommand);  	if(cmd) handle->xfercommand = strdup(cmd);  } -void alpm_option_set_nopassiveftp(unsigned short nopasv) +void SYMEXPORT alpm_option_set_nopassiveftp(unsigned short nopasv)  {  	handle->nopassiveftp = nopasv;  } -void alpm_option_set_chomp(unsigned short chomp) { handle->chomp = chomp; } - -void alpm_option_set_usecolor(unsigned short usecolor) +void SYMEXPORT alpm_option_set_usedelta(unsigned short usedelta)  { -	handle->use_color = usecolor; +	handle->usedelta = usedelta;  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h index 35e5eb23..fb3ced3c 100644 --- a/lib/libalpm/handle.h +++ b/lib/libalpm/handle.h @@ -1,8 +1,8 @@  /*   *  handle.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,13 +15,14 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_HANDLE_H  #define _ALPM_HANDLE_H -#include <stdio.h>  +#include <stdio.h> +#include <sys/types.h>  #include "alpm_list.h"  #include "db.h" @@ -29,50 +30,46 @@  #include "alpm.h"  #include "trans.h" -typedef enum _pmaccess_t { -	PM_ACCESS_RO, -	PM_ACCESS_RW -} pmaccess_t; -  typedef struct _pmhandle_t { -	/* Internal */ -	pmaccess_t access; -	uid_t uid; -	pmdb_t *db_local; -	alpm_list_t *dbs_sync; /* List of (pmdb_t *) */ -	FILE *logfd; -	int lckfd; +	/* internal usage */ +	uid_t uid;              /* current UID */ /* TODO is this used? */ +	pmdb_t *db_local;       /* local db pointer */ +	alpm_list_t *dbs_sync;  /* List of (pmdb_t *) */ +	FILE *logstream;        /* log file stream pointer */ +	int lckfd;              /* lock file descriptor if one exists */  	pmtrans_t *trans; -	 -	/* options */ -  alpm_cb_log logcb;				/* Log callback function */ -	alpm_cb_download dlcb;    /* Download callback function */ -  unsigned short logmask;		/* Output mask for logging functions */ -	char *root;								/* Root path, default '/' */ -	char *dbpath;							/* Base path to pacman's DBs */ -	char *cachedir;						/* Base path to pacman's cache */ -	char *logfile;						/* Name of the file to log to */ /*TODO is this used?*/ -	unsigned short usesyslog;	/* Use syslog instead of logfile? */ -	 -	alpm_list_t *noupgrade;			/* List of packages NOT to be upgraded */ -	alpm_list_t *noextract;			/* List of packages NOT to extrace */ /*TODO is this used?*/ -	alpm_list_t *ignorepkg;			/* List of packages to ignore */ -	alpm_list_t *holdpkg;				/* List of packages which 'hold' pacman */ -	time_t upgradedelay;			/* Amount of time to wait before upgrading a package*/ -	/* servers */ -	char *xfercommand;				/* External download command */ +	/* callback functions */ +	alpm_cb_log logcb;      /* Log callback function */ +	alpm_cb_download dlcb;  /* Download callback function */ + +	/* filesystem paths */ +	char *root;              /* Root path, default '/' */ +	char *dbpath;            /* Base path to pacman's DBs */ +	char *logfile;           /* Name of the log file */ +	char *lockfile;          /* Name of the lock file */ +	alpm_list_t *cachedirs;  /* Paths to pacman cache directories */ + +	/* package lists */ +	alpm_list_t *noupgrade;   /* List of packages NOT to be upgraded */ +	alpm_list_t *noextract;   /* List of packages NOT to extract */ /*TODO is this used?*/ +	alpm_list_t *ignorepkg;   /* List of packages to ignore */ +	alpm_list_t *holdpkg;     /* List of packages which 'hold' pacman */ +	alpm_list_t *ignoregrp;   /* List of groups to ignore */ + +	/* options */ +	unsigned short usesyslog;    /* Use syslog instead of logfile? */ /* TODO move to frontend */  	unsigned short nopassiveftp; /* Don't use PASV ftp connections */ -	unsigned short chomp;			/* I Love Candy! */ -	unsigned short use_color; /* enable colorful output */ +	time_t upgradedelay;      /* Time to wait before upgrading a package */ +	char *xfercommand;        /* External download command */ +	unsigned short usedelta;     /* Download deltas if possible */  } pmhandle_t; +/* global handle variable */  extern pmhandle_t *handle; -#define FREEHANDLE(p) do { if (p) { _alpm_handle_free(p); p = NULL; } } while (0) -  pmhandle_t *_alpm_handle_new(); -int _alpm_handle_free(pmhandle_t *handle); +void _alpm_handle_free(pmhandle_t *handle);  #endif /* _ALPM_HANDLE_H */ diff --git a/lib/libalpm/log.c b/lib/libalpm/log.c index b59ec64e..f666a099 100644 --- a/lib/libalpm/log.c +++ b/lib/libalpm/log.c @@ -1,8 +1,8 @@  /*   *  log.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -23,29 +23,85 @@  #include <stdio.h>  #include <stdarg.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h>  #include <time.h>  /* libalpm */  #include "log.h" +#include "handle.h" +#include "util.h" +#include "error.h"  #include "alpm.h" +/** \addtogroup alpm_log Logging Functions + * @brief Functions to log using libalpm + * @{ + */ + +/** A printf-like function for logging. + * @param fmt output format + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_logaction(char *fmt, ...) +{ +	int ret; +	va_list args; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	/* check if the logstream is open already, opening it if needed */ +	if(handle->logstream == NULL) { +		handle->logstream = fopen(handle->logfile, "a"); +		/* if we couldn't open it, we have an issue */ +		if(handle->logstream == NULL) { +			if(errno == EACCES) { +				pm_errno = PM_ERR_BADPERMS; +			} else if(errno == ENOENT) { +				pm_errno = PM_ERR_NOT_A_DIR; +			} else { +				pm_errno = PM_ERR_SYSTEM; +			} +		return(-1); +		} +	} + +	va_start(args, fmt); +	ret = _alpm_logaction(handle->usesyslog, handle->logstream, fmt, args); +	va_end(args); + +	/* TODO	We should add a prefix to log strings depending on who called us. +	 * If logaction was called by the frontend: +	 *   USER: <the frontend log> +	 * and if called internally: +	 *   ALPM: <the library log> +	 * Moreover, the frontend should be able to choose its prefix +	 * (USER by default?): +	 *   pacman: "PACMAN" +	 *   kpacman: "KPACMAN" +	 * This would allow us to share the log file between several frontends +	 * and know who does what */ +	return(ret); +} + +/** @} */ +  void _alpm_log(pmloglevel_t flag, char *fmt, ...)  { +	va_list args;  	alpm_cb_log logcb = alpm_option_get_logcb(); +  	if(logcb == NULL) {  		return;  	} -	if(flag & alpm_option_get_logmask()) { -		char str[LOG_STR_LEN]; -		va_list args; - -		va_start(args, fmt); -		vsnprintf(str, LOG_STR_LEN, fmt, args); -		va_end(args); - -		logcb(flag, str); -	} +	va_start(args, fmt); +	logcb(flag, fmt, args); +	va_end(args);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/log.h b/lib/libalpm/log.h index eb0b718d..00bb8152 100644 --- a/lib/libalpm/log.h +++ b/lib/libalpm/log.h @@ -1,8 +1,8 @@  /*   *  log.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_LOG_H @@ -23,16 +23,14 @@  #include "alpm.h" -#define LOG_STR_LEN 1024 -  #ifdef PACMAN_DEBUG  /* Log funtion entry points if debugging is enabled */ -#define ALPM_LOG_FUNC _alpm_log(PM_LOG_FUNCTION, "Enter %s", __func__) +#define ALPM_LOG_FUNC _alpm_log(PM_LOG_FUNCTION, "Enter %s\n", __func__)  #else  #define ALPM_LOG_FUNC  #endif -void _alpm_log(pmloglevel_t flag, char *fmt, ...); +void _alpm_log(pmloglevel_t flag, char *fmt, ...) __attribute__((format(printf,2,3)));  #endif /* _ALPM_LOG_H */ diff --git a/lib/libalpm/md5.c b/lib/libalpm/md5.c index 6d5aa6a3..2d111c9d 100644 --- a/lib/libalpm/md5.c +++ b/lib/libalpm/md5.c @@ -1,307 +1,335 @@ -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm +/* + *  RFC 1321 compliant MD5 implementation + * + *  Copyright (C) 2006-2007  Christophe Devine + * + *  This library is free software; you can redistribute it and/or + *  modify it under the terms of the GNU Lesser General Public + *  License, version 2.1 as published by the Free Software Foundation. + * + *  This library is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *  Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public + *  License along with this library; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + *  MA  02110-1301  USA   */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. +/* + *  The MD5 algorithm was designed by Ron Rivest in 1991. + * + *  http://www.ietf.org/rfc/rfc1321.txt   */ +/* + *  Pacman Notes: + * + *  Taken from the XySSL project at www.xyssl.org under terms of the + *  LGPL. This is from version 0.7 of the library, and has been modified + *  as following, which may be helpful for future updates: + *  * change include from "xyssl/md5.h" to "md5.h" + *  * removal of HMAC code + *  * removal of SELF_TEST code + *  * removal of ipad and opad from the md5_context struct in md5.h + *  * change of md5_file prototype from + *        int md5_file( char *path, unsigned char *output ) + *      to + *        int md5_file( const char *path, unsigned char *output ) + */ + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif  #include <string.h> +#include <stdio.h>  #include "md5.h" -/* Constants for MD5Transform routine. +/* + * 32-bit integer manipulation macros (little endian)   */ +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n,b,i)                            \ +{                                                       \ +    (n) = ( (unsigned long) (b)[(i)    ]       )        \ +        | ( (unsigned long) (b)[(i) + 1] <<  8 )        \ +        | ( (unsigned long) (b)[(i) + 2] << 16 )        \ +        | ( (unsigned long) (b)[(i) + 3] << 24 );       \ +} +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n,b,i)                            \ +{                                                       \ +    (b)[(i)    ] = (unsigned char) ( (n)       );       \ +    (b)[(i) + 1] = (unsigned char) ( (n) >>  8 );       \ +    (b)[(i) + 2] = (unsigned char) ( (n) >> 16 );       \ +    (b)[(i) + 3] = (unsigned char) ( (n) >> 24 );       \ +} +#endif -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform(UINT4 [4], unsigned char [64]); -static void Encode(unsigned char *, UINT4 *, unsigned int); -static void Decode(UINT4 *, unsigned char *, unsigned int); - -static unsigned char PADDING[64] = { -  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. +/* + * MD5 context setup   */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) +static inline void md5_starts( md5_context *ctx ) +{ +    ctx->total[0] = 0; +    ctx->total[1] = 0; -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) +    ctx->state[0] = 0x67452301; +    ctx->state[1] = 0xEFCDAB89; +    ctx->state[2] = 0x98BADCFE; +    ctx->state[3] = 0x10325476; +} -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -  } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -  } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -  } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -  } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void _alpm_MD5Init (context) -MD5_CTX *context;                                        /* context */ +static inline void md5_process( md5_context *ctx, unsigned char data[64] )  { -  context->count[0] = context->count[1] = 0; -  /* Load magic initialization constants. -*/ -  context->state[0] = 0x67452301; -  context->state[1] = 0xefcdab89; -  context->state[2] = 0x98badcfe; -  context->state[3] = 0x10325476; +    unsigned long X[16], A, B, C, D; + +    GET_UINT32_LE( X[ 0], data,  0 ); +    GET_UINT32_LE( X[ 1], data,  4 ); +    GET_UINT32_LE( X[ 2], data,  8 ); +    GET_UINT32_LE( X[ 3], data, 12 ); +    GET_UINT32_LE( X[ 4], data, 16 ); +    GET_UINT32_LE( X[ 5], data, 20 ); +    GET_UINT32_LE( X[ 6], data, 24 ); +    GET_UINT32_LE( X[ 7], data, 28 ); +    GET_UINT32_LE( X[ 8], data, 32 ); +    GET_UINT32_LE( X[ 9], data, 36 ); +    GET_UINT32_LE( X[10], data, 40 ); +    GET_UINT32_LE( X[11], data, 44 ); +    GET_UINT32_LE( X[12], data, 48 ); +    GET_UINT32_LE( X[13], data, 52 ); +    GET_UINT32_LE( X[14], data, 56 ); +    GET_UINT32_LE( X[15], data, 60 ); + +#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) + +#define P(a,b,c,d,k,s,t)                                \ +{                                                       \ +    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \ +} + +    A = ctx->state[0]; +    B = ctx->state[1]; +    C = ctx->state[2]; +    D = ctx->state[3]; + +#define F(x,y,z) (z ^ (x & (y ^ z))) + +    P( A, B, C, D,  0,  7, 0xD76AA478 ); +    P( D, A, B, C,  1, 12, 0xE8C7B756 ); +    P( C, D, A, B,  2, 17, 0x242070DB ); +    P( B, C, D, A,  3, 22, 0xC1BDCEEE ); +    P( A, B, C, D,  4,  7, 0xF57C0FAF ); +    P( D, A, B, C,  5, 12, 0x4787C62A ); +    P( C, D, A, B,  6, 17, 0xA8304613 ); +    P( B, C, D, A,  7, 22, 0xFD469501 ); +    P( A, B, C, D,  8,  7, 0x698098D8 ); +    P( D, A, B, C,  9, 12, 0x8B44F7AF ); +    P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); +    P( B, C, D, A, 11, 22, 0x895CD7BE ); +    P( A, B, C, D, 12,  7, 0x6B901122 ); +    P( D, A, B, C, 13, 12, 0xFD987193 ); +    P( C, D, A, B, 14, 17, 0xA679438E ); +    P( B, C, D, A, 15, 22, 0x49B40821 ); + +#undef F + +#define F(x,y,z) (y ^ (z & (x ^ y))) + +    P( A, B, C, D,  1,  5, 0xF61E2562 ); +    P( D, A, B, C,  6,  9, 0xC040B340 ); +    P( C, D, A, B, 11, 14, 0x265E5A51 ); +    P( B, C, D, A,  0, 20, 0xE9B6C7AA ); +    P( A, B, C, D,  5,  5, 0xD62F105D ); +    P( D, A, B, C, 10,  9, 0x02441453 ); +    P( C, D, A, B, 15, 14, 0xD8A1E681 ); +    P( B, C, D, A,  4, 20, 0xE7D3FBC8 ); +    P( A, B, C, D,  9,  5, 0x21E1CDE6 ); +    P( D, A, B, C, 14,  9, 0xC33707D6 ); +    P( C, D, A, B,  3, 14, 0xF4D50D87 ); +    P( B, C, D, A,  8, 20, 0x455A14ED ); +    P( A, B, C, D, 13,  5, 0xA9E3E905 ); +    P( D, A, B, C,  2,  9, 0xFCEFA3F8 ); +    P( C, D, A, B,  7, 14, 0x676F02D9 ); +    P( B, C, D, A, 12, 20, 0x8D2A4C8A ); + +#undef F + +#define F(x,y,z) (x ^ y ^ z) + +    P( A, B, C, D,  5,  4, 0xFFFA3942 ); +    P( D, A, B, C,  8, 11, 0x8771F681 ); +    P( C, D, A, B, 11, 16, 0x6D9D6122 ); +    P( B, C, D, A, 14, 23, 0xFDE5380C ); +    P( A, B, C, D,  1,  4, 0xA4BEEA44 ); +    P( D, A, B, C,  4, 11, 0x4BDECFA9 ); +    P( C, D, A, B,  7, 16, 0xF6BB4B60 ); +    P( B, C, D, A, 10, 23, 0xBEBFBC70 ); +    P( A, B, C, D, 13,  4, 0x289B7EC6 ); +    P( D, A, B, C,  0, 11, 0xEAA127FA ); +    P( C, D, A, B,  3, 16, 0xD4EF3085 ); +    P( B, C, D, A,  6, 23, 0x04881D05 ); +    P( A, B, C, D,  9,  4, 0xD9D4D039 ); +    P( D, A, B, C, 12, 11, 0xE6DB99E5 ); +    P( C, D, A, B, 15, 16, 0x1FA27CF8 ); +    P( B, C, D, A,  2, 23, 0xC4AC5665 ); + +#undef F + +#define F(x,y,z) (y ^ (x | ~z)) + +    P( A, B, C, D,  0,  6, 0xF4292244 ); +    P( D, A, B, C,  7, 10, 0x432AFF97 ); +    P( C, D, A, B, 14, 15, 0xAB9423A7 ); +    P( B, C, D, A,  5, 21, 0xFC93A039 ); +    P( A, B, C, D, 12,  6, 0x655B59C3 ); +    P( D, A, B, C,  3, 10, 0x8F0CCC92 ); +    P( C, D, A, B, 10, 15, 0xFFEFF47D ); +    P( B, C, D, A,  1, 21, 0x85845DD1 ); +    P( A, B, C, D,  8,  6, 0x6FA87E4F ); +    P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); +    P( C, D, A, B,  6, 15, 0xA3014314 ); +    P( B, C, D, A, 13, 21, 0x4E0811A1 ); +    P( A, B, C, D,  4,  6, 0xF7537E82 ); +    P( D, A, B, C, 11, 10, 0xBD3AF235 ); +    P( C, D, A, B,  2, 15, 0x2AD7D2BB ); +    P( B, C, D, A,  9, 21, 0xEB86D391 ); + +#undef F + +    ctx->state[0] += A; +    ctx->state[1] += B; +    ctx->state[2] += C; +    ctx->state[3] += D;  } -/* MD5 block update operation. Continues an MD5 message-digest -  operation, processing another message block, and updating the -  context. +/* + * MD5 process buffer   */ -void _alpm_MD5Update (context, input, inputLen) -MD5_CTX *context;                                        /* context */ -unsigned char *input;                                /* input block */ -unsigned int inputLen;                     /* length of input block */ +static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen )  { -  unsigned int i, index, partLen; - -  /* Compute number of bytes mod 64 */ -  index = (unsigned int)((context->count[0] >> 3) & 0x3F); +    int fill; +    unsigned long left; + +    if( ilen <= 0 ) +        return; + +    left = ctx->total[0] & 0x3F; +    fill = 64 - left; + +    ctx->total[0] += ilen; +    ctx->total[0] &= 0xFFFFFFFF; + +    if( ctx->total[0] < (unsigned long) ilen ) +        ctx->total[1]++; + +    if( left && ilen >= fill ) +    { +        memcpy( (void *) (ctx->buffer + left), +                (void *) input, fill ); +        md5_process( ctx, ctx->buffer ); +        input += fill; +        ilen  -= fill; +        left = 0; +    } + +    while( ilen >= 64 ) +    { +        md5_process( ctx, input ); +        input += 64; +        ilen  -= 64; +    } + +    if( ilen > 0 ) +    { +        memcpy( (void *) (ctx->buffer + left), +                (void *) input, ilen ); +    } +} -  /* Update number of bits */ -  if ((context->count[0] += ((UINT4)inputLen << 3)) +static unsigned char md5_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; -   < ((UINT4)inputLen << 3)) - context->count[1]++; -  context->count[1] += ((UINT4)inputLen >> 29); +/* + * MD5 final digest + */ +static inline void md5_finish( md5_context *ctx, unsigned char *output ) +{ +    unsigned long last, padn; +    unsigned long high, low; +    unsigned char msglen[8]; -  partLen = 64 - index; +    high = ( ctx->total[0] >> 29 ) +         | ( ctx->total[1] <<  3 ); +    low  = ( ctx->total[0] <<  3 ); -  /* Transform as many times as possible. -*/ -  if (inputLen >= partLen) { -    memcpy ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform (context->state, context->buffer); +    PUT_UINT32_LE( low,  msglen, 0 ); +    PUT_UINT32_LE( high, msglen, 4 ); - for (i = partLen; i + 63 < inputLen; i += 64) -   MD5Transform (context->state, &input[i]); +    last = ctx->total[0] & 0x3F; +    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - index = 0; -  } -  else - i = 0; +    md5_update( ctx, (unsigned char *) md5_padding, padn ); +    md5_update( ctx, msglen, 8 ); -  /* Buffer remaining input */ -  memcpy ((POINTER)&context->buffer[index], (POINTER)&input[i], inputLen-i); +    PUT_UINT32_LE( ctx->state[0], output,  0 ); +    PUT_UINT32_LE( ctx->state[1], output,  4 ); +    PUT_UINT32_LE( ctx->state[2], output,  8 ); +    PUT_UINT32_LE( ctx->state[3], output, 12 );  } -/* MD5 finalization. Ends an MD5 message-digest operation, writing the -  the message digest and zeroizing the context. +/* + * Output = MD5( input buffer )   */ -void _alpm_MD5Final (digest, context) -unsigned char digest[16];                         /* message digest */ -MD5_CTX *context;                                       /* context */ +void md5( unsigned char *input, int ilen, +          unsigned char *output )  { -  unsigned char bits[8]; -  unsigned int index, padLen; +    md5_context ctx; -  /* Save number of bits */ -  Encode (bits, context->count, 8); +    md5_starts( &ctx ); +    md5_update( &ctx, input, ilen ); +    md5_finish( &ctx, output ); -  /* Pad out to 56 mod 64. -*/ -  index = (unsigned int)((context->count[0] >> 3) & 0x3f); -  padLen = (index < 56) ? (56 - index) : (120 - index); -  _alpm_MD5Update (context, PADDING, padLen); - -  /* Append length (before padding) */ -  _alpm_MD5Update (context, bits, 8); - -  /* Store state in digest */ -  Encode (digest, context->state, 16); - -  /* Zeroize sensitive information. -*/ -  memset ((POINTER)context, 0, sizeof (*context)); +    memset( &ctx, 0, sizeof( md5_context ) );  } -/* MD5 basic transformation. Transforms state based on block. +/* + * Output = MD5( file contents )   */ -static void MD5Transform (state, block) -UINT4 state[4]; -unsigned char block[64]; +int md5_file( const char *path, unsigned char *output )  { -  UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - -  Decode (x, block, 64); - -  /* Round 1 */ -  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ -  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ -  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ -  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ -  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ -  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ -  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ -  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ -  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ -  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ -  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ -  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ -  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ -  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ -  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ -  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ -  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ -  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ -  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ -  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ -  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ -  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */ -  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ -  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ -  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ -  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ -  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - -  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ -  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ -  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ -  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ -  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - -  /* Round 3 */ -  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ -  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ -  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ -  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ -  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ -  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ -  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ -  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ -  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ -  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ -  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ -  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */ -  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ -  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ -  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ -  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - -  /* Round 4 */ -  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ -  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ -  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ -  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ -  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ -  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ -  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ -  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ -  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ -  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ -  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ -  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ -  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ -  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ -  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ -  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - -  state[0] += a; -  state[1] += b; -  state[2] += c; -  state[3] += d; - -  /* Zeroize sensitive information. - -*/ -  memset ((POINTER)x, 0, sizeof (x)); -} +    FILE *f; +    size_t n; +    md5_context ctx; +    unsigned char buf[1024]; -/* Encodes input (UINT4) into output (unsigned char). Assumes len is -  a multiple of 4. - */ -static void Encode (output, input, len) -unsigned char *output; -UINT4 *input; -unsigned int len; -{ -  unsigned int i, j; - -  for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); -  } -} +    if( ( f = fopen( path, "rb" ) ) == NULL ) +        return( 1 ); -/* Decodes input (unsigned char) into output (UINT4). Assumes len is -  a multiple of 4. - */ -static void Decode (output, input, len) -UINT4 *output; -unsigned char *input; -unsigned int len; -{ -  unsigned int i, j; +    md5_starts( &ctx ); -  for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | -   (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} +    while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) +        md5_update( &ctx, buf, (int) n ); -/* vim: set ts=2 sw=2 noet: */ +    md5_finish( &ctx, output ); + +    memset( &ctx, 0, sizeof( md5_context ) ); + +    if( ferror( f ) != 0 ) +    { +        fclose( f ); +        return( 2 ); +    } + +    fclose( f ); +    return( 0 ); +} diff --git a/lib/libalpm/md5.h b/lib/libalpm/md5.h index 8ae324e3..08dad1ec 100644 --- a/lib/libalpm/md5.h +++ b/lib/libalpm/md5.h @@ -1,53 +1,67 @@ -/* MD5.H - header file for MD5C.C +/* + *  RFC 1321 compliant MD5 implementation + * + *  Copyright (C) 2006-2007  Christophe Devine + * + *  This library is free software; you can redistribute it and/or + *  modify it under the terms of the GNU Lesser General Public + *  License, version 2.1 as published by the Free Software Foundation. + * + *  This library is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *  Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public + *  License along with this library; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + *  MA  02110-1301  USA   */ -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. +#ifndef _MD5_H +#define _MD5_H -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. +#ifdef __cplusplus +extern "C" { +#endif -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. */ -#ifndef _ALPM_MD5_H -#define _ALPM_MD5_H - -/* POINTER defines a generic pointer type */ -typedef unsigned char *POINTER; - -/* UINT2 defines a two byte word */ -typedef unsigned short int UINT2; - -/* UINT4 defines a four byte word */ -typedef unsigned int UINT4; - - -/* MD5 context. */ -typedef struct { -  UINT4 state[4];                                   /* state (ABCD) */ -  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */ -  unsigned char buffer[64];                         /* input buffer */ -} MD5_CTX; +/** + * \internal + * \brief          MD5 context structure + */ +typedef struct +{ +    unsigned long total[2];     /*!< number of bytes processed  */ +    unsigned long state[4];     /*!< intermediate digest state  */ +    unsigned char buffer[64];   /*!< data block being processed */ +} +md5_context; -void _alpm_MD5Init(MD5_CTX *); -void _alpm_MD5Update(MD5_CTX *, unsigned char *, unsigned int); -void _alpm_MD5Final(unsigned char [16], MD5_CTX *); +/** + * \internal + * \brief          Output = MD5( input buffer ) + * + * \param input    buffer holding the  data + * \param ilen     length of the input data + * \param output   MD5 checksum result + */ +void md5( unsigned char *input, int ilen, +          unsigned char *output ); -char* _alpm_MDFile(char *); -void  _alpm_MDPrint(unsigned char [16]); +/** + * \internal + * \brief          Output = MD5( file contents ) + * + * \param path     input file name + * \param output   MD5 checksum result + * + * \return         0 if successful, 1 if fopen failed, + *                 or 2 if fread failed + */ +int md5_file( const char *path, unsigned char *output ); -#endif /* _ALPM_MD5_H */ +#ifdef __cplusplus +} +#endif -/* vim: set ts=2 sw=2 noet: */ +#endif /* md5.h */ diff --git a/lib/libalpm/md5driver.c b/lib/libalpm/md5driver.c deleted file mode 100644 index 66071052..00000000 --- a/lib/libalpm/md5driver.c +++ /dev/null @@ -1,80 +0,0 @@ -/* MD5DRIVER.C - taken and modified from MDDRIVER.C (license below)  */ -/*               for use in pacman.                                  */ -/*********************************************************************/  - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* The following makes MD default to MD5 if it has not already been -  defined with C compiler flags. - */ -#define MD MD5 - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <libintl.h> - -/* libalpm */ -#include "alpm.h" -#include "log.h" -#include "util.h" -#include "md5.h" - -/* Length of test block, number of test blocks. - */ -#define TEST_BLOCK_LEN 1000 -#define TEST_BLOCK_COUNT 1000 - -#define MD_CTX MD5_CTX -#define MDInit _alpm_MD5Init -#define MDUpdate _alpm_MD5Update -#define MDFinal _alpm_MD5Final - -char* _alpm_MDFile(char *filename) -{ -	FILE *file; -	MD_CTX context; -	int len; -	char hex[3]; -	unsigned char buffer[1024], digest[16]; - -	ALPM_LOG_FUNC; - -	if((file = fopen(filename, "rb")) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("%s can't be opened\n"), filename); -	} else { -		char *ret; -		int i; - -		MDInit(&context); -		while((len = fread(buffer, 1, 1024, file))) { -			MDUpdate(&context, buffer, len); -		} -		MDFinal(digest, &context); -		fclose(file); - -		ret = calloc(33, sizeof(char)); -		for(i = 0; i < 16; i++) { -			snprintf(hex, 3, "%02x", digest[i]); -			strncat(ret, hex, 2); -		} - -		_alpm_log(PM_LOG_DEBUG, _("md5(%s) = %s"), filename, ret); -		return(ret); -	} -	return(NULL); -} - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 74adf5cd..172456d6 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -5,7 +5,7 @@   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -28,12 +28,16 @@  #include <stdlib.h>  #include <limits.h>  #include <string.h> -#include <libintl.h> -#include <locale.h> +#include <ctype.h>  #include <errno.h>  #include <sys/types.h>  #include <sys/stat.h>  #include <unistd.h> +#include <locale.h> /* setlocale */ + +/* libarchive */ +#include <archive.h> +#include <archive_entry.h>  /* libalpm */  #include "package.h" @@ -43,554 +47,113 @@  #include "error.h"  #include "db.h"  #include "cache.h" -#include "provide.h" +#include "delta.h"  #include "handle.h" -#include "versioncmp.h" -#include "alpm.h" - -pmpkg_t *_alpm_pkg_new(const char *name, const char *version) -{ -	pmpkg_t* pkg; - -	ALPM_LOG_FUNC; - -	if((pkg = calloc(1,sizeof(pmpkg_t))) == NULL) { -		RET_ERR(PM_ERR_MEMORY, NULL); -	} - -	if(name && name[0] != 0) { -		STRNCPY(pkg->name, name, PKG_NAME_LEN); -	} else { -		pkg->name[0]        = '\0'; -	} -	if(version && version[0] != 0) { -		STRNCPY(pkg->version, version, PKG_VERSION_LEN); -	} else { -		pkg->version[0]     = '\0'; -	} - -	return(pkg); -} - -pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg) -{ -	pmpkg_t* newpkg; - -	ALPM_LOG_FUNC; - -	if((newpkg = calloc(1, sizeof(pmpkg_t))) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmpkg_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} - -	memcpy(newpkg, pkg, sizeof(pmpkg_t)); -	newpkg->licenses    = alpm_list_strdup(alpm_pkg_get_licenses(pkg)); -	/*newpkg->desc_localized = alpm_list_strdup(pkg->desc_localized);*/ -	newpkg->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(pkg)); -	newpkg->conflicts  = alpm_list_strdup(alpm_pkg_get_conflicts(pkg)); -	newpkg->files      = alpm_list_strdup(alpm_pkg_get_files(pkg)); -	newpkg->backup     = alpm_list_strdup(alpm_pkg_get_backup(pkg)); -	newpkg->depends    = alpm_list_strdup(alpm_pkg_get_depends(pkg)); -	newpkg->removes    = alpm_list_strdup(alpm_pkg_get_removes(pkg)); -	newpkg->groups     = alpm_list_strdup(alpm_pkg_get_groups(pkg)); -	newpkg->provides   = alpm_list_strdup(alpm_pkg_get_provides(pkg)); -	newpkg->replaces   = alpm_list_strdup(alpm_pkg_get_replaces(pkg)); -	/* internal */ -	newpkg->data = (newpkg->origin == PKG_FROM_FILE) ? strdup(pkg->data) : pkg->data; - -	return(newpkg); -} - -void _alpm_pkg_free(void *data) -{ -	pmpkg_t *pkg = data; - -	ALPM_LOG_FUNC; - -	if(pkg == NULL) { -		return; -	} - -	FREELIST(pkg->licenses); -  /*FREELIST(pkg->desc_localized);*/ -	FREELIST(pkg->files); -	FREELIST(pkg->backup); -	FREELIST(pkg->depends); -	FREELIST(pkg->removes); -	FREELIST(pkg->conflicts); -	FREELIST(pkg->requiredby); -	FREELIST(pkg->groups); -	FREELIST(pkg->provides); -	FREELIST(pkg->replaces); -	if(pkg->origin == PKG_FROM_FILE) { -		FREE(pkg->data); -	} -	FREE(pkg); - -	return; -} - -/* Is pkgB an upgrade for pkgA ? */ -int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg) -{ -	int cmp = 0; - -	ALPM_LOG_FUNC; - -	if(pkg->origin == PKG_FROM_CACHE) { -		/* ensure we have the /desc file, which contains the 'force' option */ -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); -	} - -	if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(pkg))) { -		/* package should be ignored (IgnorePkg) */ -		_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (%s)"), -							alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg), -							alpm_pkg_get_version(pkg)); -		return(0); -	} - -	/* compare versions and see if we need to upgrade */ -	cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg)); - -	if(cmp != 0 && pkg->force) { -		cmp = 1; -		_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s"), -							alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); -	} else if(cmp < 0) { -		/* local version is newer */ -		pmdb_t *db = pkg->data; -		_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)"), -							alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg), -							alpm_db_get_name(db), alpm_pkg_get_version(pkg)); -		cmp = 0; -	} else if(cmp > 0) { -		/* we have an upgrade, make sure we should actually do it */ -		if(_alpm_pkg_istoonew(pkg)) { -			/* package too new (UpgradeDelay) */ -			_alpm_log(PM_LOG_WARNING, _("%s-%s: delaying upgrade of package (%s)"), -								alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg), -								alpm_pkg_get_version(pkg)); -			cmp = 0; -		} -	} +#include "deps.h" -	return(cmp); -} - -/* Helper function for comparing packages +/** \addtogroup alpm_packages Package Functions + * @brief Functions to manipulate libalpm packages + * @{   */ -int _alpm_pkg_cmp(const void *p1, const void *p2) -{ -	pmpkg_t *pk1 = (pmpkg_t *)p1; -	pmpkg_t *pk2 = (pmpkg_t *)p2; -	 -	return(strcmp(alpm_pkg_get_name(pk1), alpm_pkg_get_name(pk2))); -} -/* Parses the package description file for the current package - * TODO: this should ALL be in a backend interface (be_files), we should - *       be dealing with the abstracted concepts only in this file - * Returns: 0 on success, 1 on error - * +/** Create a package from a file. + * @param filename location of the package tarball + * @param full whether to stop the load after metadata is read or continue + *             through the full archive + * @param pkg address of the package pointer + * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -static int parse_descfile(const char *descfile, pmpkg_t *info) +int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full, +		pmpkg_t **pkg)  { -	FILE* fp = NULL; -	char line[PATH_MAX]; -	char *ptr = NULL; -	char *key = NULL; -	int linenum = 0; +	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_load\n"); -	ALPM_LOG_FUNC; +	/* Sanity checks */ +	ASSERT(filename != NULL && strlen(filename) != 0, +			RET_ERR(PM_ERR_WRONG_ARGS, -1)); +	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	if((fp = fopen(descfile, "r")) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), descfile, strerror(errno)); +	*pkg = _alpm_pkg_load(filename, full); +	if(*pkg == NULL) { +		/* pm_errno is set by pkg_load */  		return(-1);  	} -	while(!feof(fp)) { -		fgets(line, PATH_MAX, fp); -		linenum++; -		_alpm_strtrim(line); -		if(strlen(line) == 0 || line[0] == '#') { -			continue; -		} -		ptr = line; -		key = strsep(&ptr, "="); -		if(key == NULL || ptr == NULL) { -			_alpm_log(PM_LOG_DEBUG, _("%s: syntax error in description file line %d"), -								info->name[0] != '\0' ? info->name : "error", linenum); -		} else { -			_alpm_strtrim(key); -			key = _alpm_strtoupper(key); -			_alpm_strtrim(ptr); -			if(!strcmp(key, "PKGNAME")) { -				STRNCPY(info->name, ptr, sizeof(info->name)); -			} else if(!strcmp(key, "PKGVER")) { -				STRNCPY(info->version, ptr, sizeof(info->version)); -			} else if(!strcmp(key, "PKGDESC")) { -				/* -				char *lang_tmp; -				info->desc_localized = alpm_list_add(info->desc_localized, strdup(ptr)); -				if((lang_tmp = (char *)malloc(strlen(setlocale(LC_ALL, "")))) == NULL) { -					RET_ERR(PM_ERR_MEMORY, -1); -				} -				STRNCPY(lang_tmp, setlocale(LC_ALL, ""), strlen(setlocale(LC_ALL, ""))); -				if(info->desc_localized && !info->desc_localized->next) { -				*/ -				STRNCPY(info->desc, ptr, sizeof(info->desc)); -				/* -				} else if (ptr && !strncmp(ptr, lang_tmp, strlen(lang_tmp))) { -					STRNCPY(info->desc, ptr+strlen(lang_tmp)+1, sizeof(info->desc)); -				} -				FREE(lang_tmp); -				*/ -			} else if(!strcmp(key, "GROUP")) { -				info->groups = alpm_list_add(info->groups, strdup(ptr)); -			} else if(!strcmp(key, "URL")) { -				STRNCPY(info->url, ptr, sizeof(info->url)); -			} else if(!strcmp(key, "LICENSE")) { -				info->licenses = alpm_list_add(info->licenses, strdup(ptr)); -			} else if(!strcmp(key, "BUILDDATE")) { -				STRNCPY(info->builddate, ptr, sizeof(info->builddate)); -			} else if(!strcmp(key, "BUILDTYPE")) { -				STRNCPY(info->buildtype, ptr, sizeof(info->buildtype)); -			} else if(!strcmp(key, "INSTALLDATE")) { -				STRNCPY(info->installdate, ptr, sizeof(info->installdate)); -			} else if(!strcmp(key, "PACKAGER")) { -				STRNCPY(info->packager, ptr, sizeof(info->packager)); -			} else if(!strcmp(key, "ARCH")) { -				STRNCPY(info->arch, ptr, sizeof(info->arch)); -			} else if(!strcmp(key, "SIZE")) { -				/* size in the raw package is uncompressed (installed) size */ -				info->isize = atol(ptr); -			} else if(!strcmp(key, "DEPEND")) { -				info->depends = alpm_list_add(info->depends, strdup(ptr)); -			} else if(!strcmp(key, "REMOVE")) { -				info->removes = alpm_list_add(info->removes, strdup(ptr)); -			} else if(!strcmp(key, "CONFLICT")) { -				info->conflicts = alpm_list_add(info->conflicts, strdup(ptr)); -			} else if(!strcmp(key, "REPLACES")) { -				info->replaces = alpm_list_add(info->replaces, strdup(ptr)); -			} else if(!strcmp(key, "PROVIDES")) { -				info->provides = alpm_list_add(info->provides, strdup(ptr)); -			} else if(!strcmp(key, "BACKUP")) { -				info->backup = alpm_list_add(info->backup, strdup(ptr)); -			} else { -				_alpm_log(PM_LOG_DEBUG, _("%s: syntax error in description file line %d"), -									info->name[0] != '\0' ? info->name : "error", linenum); -			} -		} -		line[0] = '\0'; -	} -	fclose(fp); -	unlink(descfile); -  	return(0);  } -pmpkg_t *_alpm_pkg_load(const char *pkgfile) +/** Free a package. + * @param pkg package pointer to free + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)  { -	char *expath; -	int ret = ARCHIVE_OK; -	int config = 0; -	int filelist = 0; -	int scriptcheck = 0; -	struct archive *archive; -	struct archive_entry *entry; -	pmpkg_t *info = NULL; -	char *descfile = NULL; -	int fd = -1; -	alpm_list_t *all_files = NULL; -	struct stat st; - -	ALPM_LOG_FUNC; - -	if(pkgfile == NULL || strlen(pkgfile) == 0) { -		RET_ERR(PM_ERR_WRONG_ARGS, NULL); -	} - -	if((archive = archive_read_new()) == NULL) { -		RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL); -	} - -	archive_read_support_compression_all(archive); -	archive_read_support_format_all(archive); - -	if (archive_read_open_file(archive, pkgfile, ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { -		RET_ERR(PM_ERR_PKG_OPEN, NULL); -	} - -	info = _alpm_pkg_new(NULL, NULL); -	if(info == NULL) { -		archive_read_finish(archive); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} - -  if(stat(pkgfile, &st) == 0) { -		info->size = st.st_size; -	} +	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_free\n"); -	/* TODO there is no reason to make temp files to read -	 * from a libarchive archive, it can be done by reading -	 * directly from the archive -	 * See: archive_read_data_into_buffer -	 * requires changes 'parse_descfile' as well -	 * */ +	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* Read through the entire archive for metadata.  We will continue reading -	 * even if all metadata is found, to verify the integrity of the archive in -	 * full */ -	while((ret = archive_read_next_header (archive, &entry)) == ARCHIVE_OK) { -		const char *entry_name = archive_entry_pathname(entry); - -		if(strcmp(entry_name, ".PKGINFO") == 0) { -			/* extract this file into /tmp. it has info for us */ -			descfile = strdup("/tmp/alpm_XXXXXX"); -			fd = mkstemp(descfile); -			archive_read_data_into_fd (archive, fd); -			/* parse the info file */ -			if(parse_descfile(descfile, info) == -1) { -				_alpm_log(PM_LOG_ERROR, _("could not parse the package description file")); -				goto pkg_invalid; -			} -			if(!strlen(info->name)) { -				_alpm_log(PM_LOG_ERROR, _("missing package name in %s"), pkgfile); -				goto pkg_invalid; -			} -			if(!strlen(info->version)) { -				_alpm_log(PM_LOG_ERROR, _("missing package version in %s"), pkgfile); -				goto pkg_invalid; -			} -			config = 1; -			unlink(descfile); -			FREE(descfile); -			close(fd); -			continue; -		} else if(strcmp(entry_name,  ".INSTALL") == 0) { -			info->scriptlet = 1; -			scriptcheck = 1; -		} else if(strcmp(entry_name, ".FILELIST") == 0) { -			/* Build info->files from the filelist */ -			FILE *fp; -			char *fn; -			char *str; -			int fd; -			 -			if((str = (char *)malloc(PATH_MAX)) == NULL) { -				RET_ERR(PM_ERR_MEMORY, (pmpkg_t *)-1); -			} -			fn = strdup("/tmp/alpm_XXXXXX"); -			fd = mkstemp(fn); -			archive_read_data_into_fd(archive,fd); -			fp = fopen(fn, "r"); -			while(!feof(fp)) { -				if(fgets(str, PATH_MAX, fp) == NULL) { -					continue; -				} -				_alpm_strtrim(str); -				info->files = alpm_list_add(info->files, strdup(str)); -			} -			FREE(str); -			fclose(fp); -			if(unlink(fn)) { -				_alpm_log(PM_LOG_WARNING, _("could not remove tempfile %s"), fn); -			} -			FREE(fn); -			close(fd); -			filelist = 1; -			continue; -		} else { -			scriptcheck = 1; -			/* Keep track of all files so we can generate a filelist later if missing */ -			all_files = alpm_list_add(all_files, strdup(entry_name)); -		} - -		if(archive_read_data_skip(archive)) { -			_alpm_log(PM_LOG_ERROR, _("error while reading package: %s"), archive_error_string(archive)); -			pm_errno = PM_ERR_LIBARCHIVE_ERROR; -			goto error; -		} -		expath = NULL; -	} -	if(ret != ARCHIVE_EOF) { /* An error occured */ -		_alpm_log(PM_LOG_ERROR, _("error while reading package: %s"), archive_error_string(archive)); -		pm_errno = PM_ERR_LIBARCHIVE_ERROR; -		goto error; -	} - -	if(!config) { -		_alpm_log(PM_LOG_ERROR, _("missing package metadata"), pkgfile); -		goto error; -	} -	 -  archive_read_finish(archive); - -	if(!filelist) { -		_alpm_log(PM_LOG_ERROR, _("missing package filelist in %s, generating one"), pkgfile); -		info->files = all_files; -	} else { -		alpm_list_free_inner(all_files, free); -		alpm_list_free(all_files); +	/* Only free packages loaded in user space */ +	if(pkg->origin != PKG_FROM_CACHE) { +		_alpm_pkg_free(pkg);  	} -	/* this is IMPORTANT - "checking for conflicts" requires a sorted list, so we -	 * ensure that here */ -	info->files = alpm_list_msort(info->files, alpm_list_count(info->files), _alpm_str_cmp); - -	/* internal */ -	info->origin = PKG_FROM_FILE; -	info->data = strdup(pkgfile); -	info->infolevel = 0xFF; - -	return(info); - -pkg_invalid: -	pm_errno = PM_ERR_PKG_INVALID; -	if(descfile) { -		unlink(descfile); -		FREE(descfile); -	} -	if(fd != -1) { -		close(fd); -	} -error: -	FREEPKG(info); -	archive_read_finish(archive); - -	return(NULL); +	return(0);  } -/* Test for existence of a package in a alpm_list_t* - * of pmpkg_t* +/** Check the integrity (with md5) of a package from the sync cache. + * @param pkg package pointer + * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack) +int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)  { -	alpm_list_t *lp; +	char *fpath; +	char *md5sum = NULL; +	int retval = 0;  	ALPM_LOG_FUNC; -	if(needle == NULL || haystack == NULL) { -		return(NULL); -	} +	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); +	/* We only inspect packages from sync repositories */ +	ASSERT(pkg->origin == PKG_FROM_CACHE, RET_ERR(PM_ERR_PKG_INVALID, -1)); +	ASSERT(pkg->origin_data.db != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1)); -	for(lp = haystack; lp; lp = lp->next) { -		pmpkg_t *info = lp->data; +	fpath = _alpm_filecache_find(alpm_pkg_get_filename(pkg)); +	md5sum = alpm_get_md5sum(fpath); -		if(info && strcmp(alpm_pkg_get_name(info), needle) == 0) { -			return(info); -		} -	} -	return(NULL); -} - -int _alpm_pkg_splitname(const char *target, char *name, char *version, int witharch) -{ -	char tmp[PKG_FULLNAME_LEN+7]; -	const char *t; -	char *p, *q; - -	ALPM_LOG_FUNC; - -	if(target == NULL) { -		return(-1); -	} - -	/* trim path name (if any) */ -	if((t = strrchr(target, '/')) == NULL) { -		t = target; +	if(md5sum == NULL) { +		_alpm_log(PM_LOG_ERROR, _("could not get md5sum for package %s-%s\n"), +							alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); +		pm_errno = PM_ERR_NOT_A_FILE; +		retval = -1;  	} else { -		t++; -	} -	STRNCPY(tmp, t, PKG_FULLNAME_LEN+7); -	/* trim file extension (if any) */ -	if((p = strstr(tmp, PM_EXT_PKG))) { -		*p = '\0'; -	} - -	if(witharch) { -		/* trim architecture */ -		if((p = alpm_pkg_name_hasarch(tmp))) { -			*p = 0; +		if(strcmp(md5sum, alpm_pkg_get_md5sum(pkg)) == 0) { +			_alpm_log(PM_LOG_DEBUG, "md5sums for package %s-%s match\n", +								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); +		} else { +			_alpm_log(PM_LOG_ERROR, _("md5sums do not match for package %s-%s\n"), +								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); +			pm_errno = PM_ERR_PKG_INVALID; +			retval = -1;  		}  	} -	p = tmp + strlen(tmp); +	FREE(fpath); +	FREE(md5sum); -	for(q = --p; *q && *q != '-'; q--); -	if(*q != '-' || q == tmp) { -		return(-1); -	} -	for(p = --q; *p && *p != '-'; p--); -	if(*p != '-' || p == tmp) { -		return(-1); -	} -	if(version) { -		STRNCPY(version, p+1, PKG_VERSION_LEN); -	} -	*p = '\0'; - -	if(name) { -		STRNCPY(name, tmp, PKG_NAME_LEN); -	} - -	return(0); +	return(retval);  } - -void _alpm_pkg_update_requiredby(pmpkg_t *pkg) +/** Compare versions. + * @param ver1 first version + * @param ver2 secont version + * @return postive, 0 or negative if ver1 is less, equal or more + * than ver2, respectively. + */ +int SYMEXPORT alpm_pkg_vercmp(const char *ver1, const char *ver2)  { -	alpm_list_t *i, *j, *k; -	const char *pkgname = alpm_pkg_get_name(pkg); - -	pmdb_t *localdb = alpm_option_get_localdb(); -	for(i = _alpm_db_get_pkgcache(localdb); i; i = i->next) { -		if(!i->data) { -			continue; -		} -		pmpkg_t *cachepkg = i->data; -		const char *cachepkgname = alpm_pkg_get_name(cachepkg); - -		for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) { -			pmdepend_t *dep; -			if(!j->data) { -				continue; -			} -			dep = alpm_splitdep(j->data); -			if(dep == NULL) { -					continue; -			} -			 -			/* check the actual package itself */ -			if(strcmp(dep->name, pkgname) == 0) { -				alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg); - -				if(!alpm_list_find_str(reqs, cachepkgname)) { -					_alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"), -					          cachepkgname, pkg->name); -					reqs = alpm_list_add(reqs, strdup(cachepkgname)); -					pkg->requiredby = reqs; -				} -			} +	ALPM_LOG_FUNC; -			/* check for provisions as well */ -			for(k = alpm_pkg_get_provides(pkg); k; k = k->next) { -				const char *provname = k->data; -				if(strcmp(dep->name, provname) == 0) { -					alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg); - -					if(!alpm_list_find_str(reqs, cachepkgname)) { -						_alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s' (provides: %s)"), -						          cachepkgname, pkgname, provname); -						reqs = alpm_list_add(reqs, strdup(cachepkgname)); -						pkg->requiredby = reqs; -					} -				} -			} -			free(dep); -		} -	} +	return(_alpm_versioncmp(ver1, ver2));  }  const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg) @@ -604,13 +167,13 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)  	if(!strlen(pkg->filename)) {  		/* construct the file name, it's not in the desc file */  		if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -			_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +			_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  		}  		if(pkg->arch && strlen(pkg->arch) > 0) { -			snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PM_EXT_PKG, +			snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PKGEXT,  			         pkg->name, pkg->version, pkg->arch);  		} else { -			snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s" PM_EXT_PKG, +			snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s" PKGEXT,  			         pkg->name, pkg->version);  		}  	} @@ -627,7 +190,7 @@ const char SYMEXPORT *alpm_pkg_get_name(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_BASE); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);  	}  	return pkg->name;  } @@ -641,7 +204,7 @@ const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_BASE); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);  	}  	return pkg->version;  } @@ -655,7 +218,7 @@ const char SYMEXPORT *alpm_pkg_get_desc(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->desc;  } @@ -669,49 +232,35 @@ const char SYMEXPORT *alpm_pkg_get_url(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->url;  } -const char SYMEXPORT *alpm_pkg_get_builddate(pmpkg_t *pkg) +time_t SYMEXPORT alpm_pkg_get_builddate(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); +	ASSERT(handle != NULL, return(0)); +	ASSERT(pkg != NULL, return(0));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->builddate;  } -const char SYMEXPORT *alpm_pkg_get_buildtype(pmpkg_t *pkg) +time_t SYMEXPORT alpm_pkg_get_installdate(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); +	ASSERT(handle != NULL, return(0)); +	ASSERT(pkg != NULL, return(0));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); -	} -	return pkg->buildtype; -} - -const char SYMEXPORT *alpm_pkg_get_installdate(pmpkg_t *pkg) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->installdate;  } @@ -725,7 +274,7 @@ const char SYMEXPORT *alpm_pkg_get_packager(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->packager;  } @@ -739,25 +288,11 @@ const char SYMEXPORT *alpm_pkg_get_md5sum(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->md5sum;  } -const char SYMEXPORT *alpm_pkg_get_sha1sum(pmpkg_t *pkg) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); -	} -	return pkg->sha1sum; -} -  const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -767,7 +302,7 @@ const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->arch;  } @@ -781,7 +316,7 @@ unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(-1));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->size;  } @@ -795,7 +330,7 @@ unsigned long SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(-1));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->isize;  } @@ -809,7 +344,7 @@ pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(-1));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->reason;  } @@ -823,7 +358,7 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->licenses;  } @@ -837,12 +372,11 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->groups;  } -/* depends */  alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -852,12 +386,12 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DEPENDS); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);  	}  	return pkg->depends;  } -alpm_list_t SYMEXPORT *alpm_pkg_get_removes(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_optdepends(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -866,12 +400,12 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_removes(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DEPENDS); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);  	} -	return pkg->removes; +	return pkg->optdepends;  } -alpm_list_t SYMEXPORT *alpm_pkg_get_requiredby(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -880,12 +414,12 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_requiredby(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DEPENDS); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);  	} -	return pkg->requiredby; +	return pkg->conflicts;  } -alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -894,12 +428,12 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DEPENDS); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);  	} -	return pkg->conflicts; +	return pkg->provides;  } -alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(pmpkg_t *pkg)  {  	ALPM_LOG_FUNC; @@ -907,10 +441,10 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg)  	ASSERT(handle != NULL, return(NULL));  	ASSERT(pkg != NULL, return(NULL)); -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DEPENDS); +	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DELTAS)) { +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DELTAS);  	} -	return pkg->provides; +	return pkg->deltas;  }  alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg) @@ -922,7 +456,7 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg)  	ASSERT(pkg != NULL, return(NULL));  	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_DESC); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);  	}  	return pkg->replaces;  } @@ -935,9 +469,9 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_files(pmpkg_t *pkg)  	ASSERT(handle != NULL, return(NULL));  	ASSERT(pkg != NULL, return(NULL)); -	if(pkg->origin == PKG_FROM_CACHE && pkg->data == handle->db_local +	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local  		 && !(pkg->infolevel & INFRQ_FILES)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_FILES); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_FILES);  	}  	return pkg->files;  } @@ -950,9 +484,9 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)  	ASSERT(handle != NULL, return(NULL));  	ASSERT(pkg != NULL, return(NULL)); -	if(pkg->origin == PKG_FROM_CACHE && pkg->data == handle->db_local +	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local  		 && !(pkg->infolevel & INFRQ_FILES)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_FILES); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_FILES);  	}  	return pkg->backup;  } @@ -965,13 +499,572 @@ unsigned short SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)  	ASSERT(handle != NULL, return(-1));  	ASSERT(pkg != NULL, return(-1)); -	if(pkg->origin == PKG_FROM_CACHE && pkg->data == handle->db_local +	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local  		 && !(pkg->infolevel & INFRQ_SCRIPTLET)) { -		_alpm_db_read(pkg->data, pkg, INFRQ_SCRIPTLET); +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_SCRIPTLET);  	}  	return pkg->scriptlet;  } +/** + * @brief Compute the packages requiring a given package. + * @param pkg a package + * @return the list of packages requiring pkg + * + * A depends on B through n depends <=> A listed in B's requiredby n times + * n == 0 or 1 in almost all cases */ +alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg) +{ +	const alpm_list_t *i, *j; +	alpm_list_t *reqs = NULL; + +	pmdb_t *localdb = alpm_option_get_localdb(); +	for(i = _alpm_db_get_pkgcache(localdb); i; i = i->next) { +		if(!i->data) { +			continue; +		} +		pmpkg_t *cachepkg = i->data; +		const char *cachepkgname = alpm_pkg_get_name(cachepkg); + +		for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) { +			pmdepend_t *dep = j->data; + +			if(alpm_depcmp(pkg, dep)) { +				_alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'\n", +				          cachepkgname, pkg->name); +				reqs = alpm_list_add(reqs, strdup(cachepkgname)); +			} +		} +	} +	return(reqs); +} + +/** @} */ + +/* this function was taken from rpm 4.0.4 and rewritten */ +int _alpm_versioncmp(const char *a, const char *b) +{ +	char str1[64], str2[64]; +	char *ptr1, *ptr2; +	char *one, *two; +	char *rel1 = NULL, *rel2 = NULL; +	char oldch1, oldch2; +	int is1num, is2num; +	int rc; + +	ALPM_LOG_FUNC; + +	if(!strcmp(a,b)) { +		return(0); +	} + +	strncpy(str1, a, 64); +	str1[63] = 0; +	strncpy(str2, b, 64); +	str2[63] = 0; + +	/* lose the release number */ +	for(one = str1; *one && *one != '-'; one++); +	if(one) { +		*one = '\0'; +		rel1 = ++one; +	} +	for(two = str2; *two && *two != '-'; two++); +	if(two) { +		*two = '\0'; +		rel2 = ++two; +	} + +	one = str1; +	two = str2; + +	while(*one || *two) { +		while(*one && !isalnum((int)*one)) one++; +		while(*two && !isalnum((int)*two)) two++; + +		ptr1 = one; +		ptr2 = two; + +		/* find the next segment for each string */ +		if(isdigit((int)*ptr1)) { +			is1num = 1; +			while(*ptr1 && isdigit((int)*ptr1)) ptr1++; +		} else { +			is1num = 0; +			while(*ptr1 && isalpha((int)*ptr1)) ptr1++; +		} +		if(isdigit((int)*ptr2)) { +			is2num = 1; +			while(*ptr2 && isdigit((int)*ptr2)) ptr2++; +		} else { +			is2num = 0; +			while(*ptr2 && isalpha((int)*ptr2)) ptr2++; +		} + +		oldch1 = *ptr1; +		*ptr1 = '\0'; +		oldch2 = *ptr2; +		*ptr2 = '\0'; + +		/* see if we ran out of segments on one string */ +		if(one == ptr1 && two != ptr2) { +			return(is2num ? -1 : 1); +		} +		if(one != ptr1 && two == ptr2) { +			return(is1num ? 1 : -1); +		} + +		/* see if we have a type mismatch (ie, one is alpha and one is digits) */ +		if(is1num && !is2num) return(1); +		if(!is1num && is2num) return(-1); + +		if(is1num) while(*one == '0') one++; +		if(is2num) while(*two == '0') two++; + +		rc = strverscmp(one, two); +		if(rc) return(rc); + +		*ptr1 = oldch1; +		*ptr2 = oldch2; +		one = ptr1; +		two = ptr2; +	} + +	if((!*one) && (!*two)) { +		/* compare release numbers */ +		if(rel1 && rel2 && strlen(rel1) && strlen(rel2)) return(_alpm_versioncmp(rel1, rel2)); +		return(0); +	} + +	return(*one ? 1 : -1); +} + + +pmpkg_t *_alpm_pkg_new(const char *name, const char *version) +{ +	pmpkg_t* pkg; + +	ALPM_LOG_FUNC; + +	CALLOC(pkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL)); + +	if(name && name[0] != 0) { +		strncpy(pkg->name, name, PKG_NAME_LEN); +	} else { +		pkg->name[0]        = '\0'; +	} +	if(version && version[0] != 0) { +		strncpy(pkg->version, version, PKG_VERSION_LEN); +	} else { +		pkg->version[0]     = '\0'; +	} + +	return(pkg); +} + +pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg) +{ +	pmpkg_t* newpkg; + +	ALPM_LOG_FUNC; + +	CALLOC(newpkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL)); + +	memcpy(newpkg, pkg, sizeof(pmpkg_t)); +	newpkg->licenses    = alpm_list_strdup(alpm_pkg_get_licenses(pkg)); +	newpkg->conflicts  = alpm_list_strdup(alpm_pkg_get_conflicts(pkg)); +	newpkg->files      = alpm_list_strdup(alpm_pkg_get_files(pkg)); +	newpkg->backup     = alpm_list_strdup(alpm_pkg_get_backup(pkg)); +	newpkg->depends    = alpm_list_copy_data(alpm_pkg_get_depends(pkg), +	                                         sizeof(pmdepend_t)); +	newpkg->optdepends = alpm_list_strdup(alpm_pkg_get_optdepends(pkg)); +	newpkg->groups     = alpm_list_strdup(alpm_pkg_get_groups(pkg)); +	newpkg->provides   = alpm_list_strdup(alpm_pkg_get_provides(pkg)); +	newpkg->replaces   = alpm_list_strdup(alpm_pkg_get_replaces(pkg)); +	newpkg->deltas     = alpm_list_copy_data(alpm_pkg_get_deltas(pkg), +	                                         sizeof(pmdelta_t)); +	/* internal */ +	if(newpkg->origin == PKG_FROM_FILE) { +		newpkg->origin_data.file = strdup(pkg->origin_data.file); +	} else { +		newpkg->origin_data.db = pkg->origin_data.db; +	} + +	return(newpkg); +} + +void _alpm_pkg_free(pmpkg_t *pkg) +{ +	ALPM_LOG_FUNC; + +	if(pkg == NULL) { +		return; +	} + +	FREELIST(pkg->licenses); +	FREELIST(pkg->files); +	FREELIST(pkg->backup); +	FREELIST(pkg->depends); +	FREELIST(pkg->optdepends); +	FREELIST(pkg->conflicts); +	FREELIST(pkg->groups); +	FREELIST(pkg->provides); +	FREELIST(pkg->replaces); +	FREELIST(pkg->deltas); +	if(pkg->origin == PKG_FROM_FILE) { +		FREE(pkg->origin_data.file); +	} +	FREE(pkg); +} + +/* Is pkgB an upgrade for pkgA ? */ +int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg) +{ +	int cmp = 0; + +	ALPM_LOG_FUNC; + +	if(pkg->origin == PKG_FROM_CACHE) { +		/* ensure we have the /desc file, which contains the 'force' option */ +		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); +	} + +	/* compare versions and see if we need to upgrade */ +	cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg)); + +	if(cmp != 0 && pkg->force) { +		cmp = 1; +		_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s\n"), +							alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); +	} else if(cmp < 0) { +		/* local version is newer */ +		pmdb_t *db = pkg->origin_data.db; +		_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"), +							alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg), +							alpm_db_get_name(db), alpm_pkg_get_version(pkg)); +		cmp = 0; +	} else if(cmp > 0) { +		/* we have an upgrade, make sure we should actually do it */ +		if(_alpm_pkg_istoonew(pkg)) { +			/* package too new (UpgradeDelay) */ +			_alpm_log(PM_LOG_WARNING, _("%s-%s: delaying upgrade of package (%s)\n"), +								alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg), +								alpm_pkg_get_version(pkg)); +			cmp = 0; +		} +	} + +	return(cmp); +} + +/* Helper function for comparing packages + */ +int _alpm_pkg_cmp(const void *p1, const void *p2) +{ +	pmpkg_t *pk1 = (pmpkg_t *)p1; +	pmpkg_t *pk2 = (pmpkg_t *)p2; + +	return(strcmp(alpm_pkg_get_name(pk1), alpm_pkg_get_name(pk2))); +} + +/* Parses the package description file for the current package + * TODO: this should ALL be in a backend interface (be_files), we should + *       be dealing with the abstracted concepts only in this file + * Returns: 0 on success, 1 on error + * + */ +static int parse_descfile(const char *descfile, pmpkg_t *info) +{ +	FILE* fp = NULL; +	char line[PATH_MAX]; +	char *ptr = NULL; +	char *key = NULL; +	int linenum = 0; + +	ALPM_LOG_FUNC; + +	if((fp = fopen(descfile, "r")) == NULL) { +		_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), descfile, strerror(errno)); +		return(-1); +	} + +	while(!feof(fp)) { +		fgets(line, PATH_MAX, fp); +		linenum++; +		_alpm_strtrim(line); +		if(strlen(line) == 0 || line[0] == '#') { +			continue; +		} +		ptr = line; +		key = strsep(&ptr, "="); +		if(key == NULL || ptr == NULL) { +			_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n", +								info->name[0] != '\0' ? info->name : "error", linenum); +		} else { +			_alpm_strtrim(key); +			_alpm_strtrim(ptr); +			if(!strcmp(key, "pkgname")) { +				strncpy(info->name, ptr, sizeof(info->name)); +			} else if(!strcmp(key, "pkgver")) { +				strncpy(info->version, ptr, sizeof(info->version)); +			} else if(!strcmp(key, "pkgdesc")) { +				strncpy(info->desc, ptr, sizeof(info->desc)); +			} else if(!strcmp(key, "group")) { +				info->groups = alpm_list_add(info->groups, strdup(ptr)); +			} else if(!strcmp(key, "url")) { +				strncpy(info->url, ptr, sizeof(info->url)); +			} else if(!strcmp(key, "license")) { +				info->licenses = alpm_list_add(info->licenses, strdup(ptr)); +			} else if(!strcmp(key, "builddate")) { +				char first = tolower(ptr[0]); +				if(first > 'a' && first < 'z') { +					struct tm tmp_tm = {0}; //initialize to null incase of failure +					setlocale(LC_TIME, "C"); +					strptime(ptr, "%a %b %e %H:%M:%S %Y", &tmp_tm); +					info->builddate = mktime(&tmp_tm); +					setlocale(LC_TIME, ""); +				} else { +					info->builddate = atol(ptr); +				} +			} else if(!strcmp(key, "packager")) { +				strncpy(info->packager, ptr, sizeof(info->packager)); +			} else if(!strcmp(key, "arch")) { +				strncpy(info->arch, ptr, sizeof(info->arch)); +			} else if(!strcmp(key, "size")) { +				/* size in the raw package is uncompressed (installed) size */ +				info->isize = atol(ptr); +			} else if(!strcmp(key, "depend")) { +				pmdepend_t *dep = alpm_splitdep(ptr); +				info->depends = alpm_list_add(info->depends, dep); +			} else if(!strcmp(key, "optdepend")) { +				info->optdepends = alpm_list_add(info->optdepends, strdup(ptr)); +			} else if(!strcmp(key, "conflict")) { +				info->conflicts = alpm_list_add(info->conflicts, strdup(ptr)); +			} else if(!strcmp(key, "replaces")) { +				info->replaces = alpm_list_add(info->replaces, strdup(ptr)); +			} else if(!strcmp(key, "provides")) { +				info->provides = alpm_list_add(info->provides, strdup(ptr)); +			} else if(!strcmp(key, "backup")) { +				info->backup = alpm_list_add(info->backup, strdup(ptr)); +			} else { +				_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n", +									info->name[0] != '\0' ? info->name : "error", linenum); +			} +		} +		line[0] = '\0'; +	} +	fclose(fp); +	unlink(descfile); + +	return(0); +} + + +/** + * Load a package and create the corresponding pmpkg_t struct. + * @param pkgfile path to the package file + * @param full whether to stop the load after metadata is read or continue + *             through the full archive + * @return An information filled pmpkg_t struct + */ +pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full) +{ +	int ret = ARCHIVE_OK; +	int config = 0; +	int filelist = 0; +	struct archive *archive; +	struct archive_entry *entry; +	pmpkg_t *info = NULL; +	char *descfile = NULL; +	int fd = -1; +	alpm_list_t *all_files = NULL; +	struct stat st; + +	ALPM_LOG_FUNC; + +	if(pkgfile == NULL || strlen(pkgfile) == 0) { +		RET_ERR(PM_ERR_WRONG_ARGS, NULL); +	} + +	if((archive = archive_read_new()) == NULL) { +		RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL); +	} + +	archive_read_support_compression_all(archive); +	archive_read_support_format_all(archive); + +	if (archive_read_open_filename(archive, pkgfile, +				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +		RET_ERR(PM_ERR_PKG_OPEN, NULL); +	} + +	info = _alpm_pkg_new(NULL, NULL); +	if(info == NULL) { +		archive_read_finish(archive); +		RET_ERR(PM_ERR_MEMORY, NULL); +	} + +  if(stat(pkgfile, &st) == 0) { +		info->size = st.st_size; +	} + +	/* TODO there is no reason to make temp files to read +	 * from a libarchive archive, it can be done by reading +	 * directly from the archive +	 * See: archive_read_data_into_buffer +	 * requires changes 'parse_descfile' as well +	 * */ + +	/* If full is false, only read through the archive until we find our needed +	 * metadata. If it is true, read through the entire archive, which serves +	 * as a verfication of integrity. */ +	while((ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) { +		const char *entry_name = archive_entry_pathname(entry); + +		if(strcmp(entry_name, ".PKGINFO") == 0) { +			/* extract this file into /tmp. it has info for us */ +			descfile = strdup("/tmp/alpm_XXXXXX"); +			fd = mkstemp(descfile); +			archive_read_data_into_fd(archive, fd); +			/* parse the info file */ +			if(parse_descfile(descfile, info) == -1) { +				_alpm_log(PM_LOG_ERROR, _("could not parse package description file in %s\n"), +						pkgfile); +				goto pkg_invalid; +			} +			if(!strlen(info->name)) { +				_alpm_log(PM_LOG_ERROR, _("missing package name in %s\n"), pkgfile); +				goto pkg_invalid; +			} +			if(!strlen(info->version)) { +				_alpm_log(PM_LOG_ERROR, _("missing package version in %s\n"), pkgfile); +				goto pkg_invalid; +			} +			config = 1; +			unlink(descfile); +			FREE(descfile); +			close(fd); +			continue; +		} else if(strcmp(entry_name,  ".INSTALL") == 0) { +			info->scriptlet = 1; +		} else if(strcmp(entry_name, ".FILELIST") == 0) { +			/* Build info->files from the filelist */ +			FILE *fp; +			char *fn; +			char str[PATH_MAX+1]; +			int fd; + +			fn = strdup("/tmp/alpm_XXXXXX"); +			fd = mkstemp(fn); +			archive_read_data_into_fd(archive,fd); +			fp = fopen(fn, "r"); +			while(!feof(fp)) { +				if(fgets(str, PATH_MAX, fp) == NULL) { +					continue; +				} +				_alpm_strtrim(str); +				info->files = alpm_list_add(info->files, strdup(str)); +			} +			fclose(fp); +			if(unlink(fn)) { +				_alpm_log(PM_LOG_WARNING, _("could not remove tempfile %s\n"), fn); +			} +			FREE(fn); +			close(fd); +			filelist = 1; +			continue; +		} else if(*entry_name == '.') { +			/* for now, ignore all files starting with '.' that haven't +			 * already been handled (for future possibilities) */ +		} else { +			/* Keep track of all files so we can generate a filelist later if missing */ +			all_files = alpm_list_add(all_files, strdup(entry_name)); +		} + +		if(archive_read_data_skip(archive)) { +			_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"), +					pkgfile, archive_error_string(archive)); +			pm_errno = PM_ERR_LIBARCHIVE_ERROR; +			goto error; +		} + +		/* if we are not doing a full read, see if we have all we need */ +		if(!full && config && filelist) { +			break; +		} +	} + +	if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occured */ +		_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"), +				pkgfile, archive_error_string(archive)); +		pm_errno = PM_ERR_LIBARCHIVE_ERROR; +		goto error; +	} + +	if(!config) { +		_alpm_log(PM_LOG_ERROR, _("missing package metadata in %s\n"), pkgfile); +		goto error; +	} + +  archive_read_finish(archive); + +	if(!filelist) { +		_alpm_log(PM_LOG_ERROR, _("missing package filelist in %s, generating one\n"), pkgfile); +		info->files = all_files; +	} else { +		FREELIST(all_files); +	} + +	/* this is IMPORTANT - "checking for conflicts" requires a sorted list, so we +	 * ensure that here */ +	info->files = alpm_list_msort(info->files, alpm_list_count(info->files), _alpm_str_cmp); + +	/* internal */ +	info->origin = PKG_FROM_FILE; +	info->origin_data.file = strdup(pkgfile); +	info->infolevel = 0xFF; + +	return(info); + +pkg_invalid: +	pm_errno = PM_ERR_PKG_INVALID; +	if(descfile) { +		unlink(descfile); +		FREE(descfile); +	} +	if(fd != -1) { +		close(fd); +	} +error: +	_alpm_pkg_free(info); +	archive_read_finish(archive); + +	return(NULL); +} + +/* Test for existence of a package in a alpm_list_t* + * of pmpkg_t* + */ +pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack) +{ +	alpm_list_t *lp; + +	ALPM_LOG_FUNC; + +	if(needle == NULL || haystack == NULL) { +		return(NULL); +	} + +	for(lp = haystack; lp; lp = lp->next) { +		pmpkg_t *info = lp->data; + +		if(info && strcmp(alpm_pkg_get_name(info), needle) == 0) { +			return(info); +		} +	} +	return(NULL); +} +  /* TODO this should either be public, or done somewhere else */  int _alpm_pkg_istoonew(pmpkg_t *pkg)  { @@ -984,4 +1077,34 @@ int _alpm_pkg_istoonew(pmpkg_t *pkg)  	time(&t);  	return((pkg->date + handle->upgradedelay) > t);  } + +/** Test if a package should be ignored. + * + * Checks if the package is ignored via IgnorePkg, or if the package is + * in a group ignored via IgnoreGrp. + * + * @param pkg the package to test + * + * @return 1 if the package should be ignored, 0 otherwise + */ +int _alpm_pkg_should_ignore(pmpkg_t *pkg) +{ +	alpm_list_t *groups = NULL; + +	/* first see if the package is ignored */ +	if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(pkg))) { +		return(1); +	} + +	/* next see if the package is in a group that is ignored */ +	for(groups = handle->ignoregrp; groups; groups = alpm_list_next(groups)) { +		char *grp = (char *)alpm_list_getdata(groups); +		if(alpm_list_find_str(alpm_pkg_get_groups(pkg), grp)) { +			return(1); +		} +	} + +	return(0); +} +  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h index 8055c177..5e06785e 100644 --- a/lib/libalpm/package.h +++ b/lib/libalpm/package.h @@ -1,12 +1,12 @@  /*   *  package.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,15 +19,13 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_PACKAGE_H  #define _ALPM_PACKAGE_H -#if defined(__APPLE__) || defined(__sun__)  #include <time.h> -#endif  #include "alpm.h"  #include "db.h" @@ -48,7 +46,6 @@ typedef enum _pmpkgfrom_t {  #define PKG_TYPE_LEN     32  #define PKG_PACKAGER_LEN 64  #define PKG_MD5SUM_LEN   33 -#define PKG_SHA1SUM_LEN  41  #define PKG_ARCH_LEN     32  struct __pmpkg_t { @@ -57,12 +54,10 @@ struct __pmpkg_t {  	char version[PKG_VERSION_LEN];  	char desc[PKG_DESC_LEN];  	char url[PKG_URL_LEN]; -	char builddate[PKG_DATE_LEN]; -	char buildtype[PKG_TYPE_LEN]; -	char installdate[PKG_DATE_LEN]; +	time_t builddate; +	time_t installdate;  	char packager[PKG_PACKAGER_LEN];  	char md5sum[PKG_MD5SUM_LEN]; -	char sha1sum[PKG_SHA1SUM_LEN];  	char arch[PKG_ARCH_LEN];  	unsigned long size;  	unsigned long isize; @@ -70,44 +65,39 @@ struct __pmpkg_t {  	unsigned short force;  	time_t date;  	pmpkgreason_t reason; -	/* alpm_list_t *desc_localized;*/  	alpm_list_t *licenses;  	alpm_list_t *replaces;  	alpm_list_t *groups;  	alpm_list_t *files;  	alpm_list_t *backup;  	alpm_list_t *depends; -	alpm_list_t *removes; -	alpm_list_t *requiredby; +	alpm_list_t *optdepends;  	alpm_list_t *conflicts;  	alpm_list_t *provides; +	alpm_list_t *deltas;  	/* internal */  	pmpkgfrom_t origin; -	void *data; -	/* TODO replace 'data' with this: +	/* Replaced 'void *data' with this union as follows:    origin == PKG_FROM_CACHE, use pkg->origin_data.db -  origin == PKG_FROM_FILE, use pkg->origin_data.fd +  origin == PKG_FROM_FILE, use pkg->origin_data.file +	*/    union { -		int fd;  		pmdb_t *db; +		char *file;  	} origin_data; -	*/  	pmdbinfrq_t infolevel;  }; -#define FREEPKG(p) do { if(p){_alpm_pkg_free(p); p = NULL;}} while(0) -#define FREELISTPKGS(p) _FREELIST(p, _alpm_pkg_free) - +int _alpm_versioncmp(const char *a, const char *b);  pmpkg_t* _alpm_pkg_new(const char *name, const char *version);  pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg); -void _alpm_pkg_free(void *data); +void _alpm_pkg_free(pmpkg_t *pkg);  int _alpm_pkg_cmp(const void *p1, const void *p2);  int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg); -pmpkg_t *_alpm_pkg_load(const char *pkgfile); +pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full);  pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack); -int _alpm_pkg_splitname(const char *target, char *name, char *version, int witharch);  int _alpm_pkg_istoonew(pmpkg_t *pkg); -void _alpm_pkg_update_requiredby(pmpkg_t *pkg); +int _alpm_pkg_should_ignore(pmpkg_t *pkg);  #endif /* _ALPM_PACKAGE_H */ diff --git a/lib/libalpm/po/.gitignore b/lib/libalpm/po/.gitignore index 50a7b2a4..3be83ffa 100644 --- a/lib/libalpm/po/.gitignore +++ b/lib/libalpm/po/.gitignore @@ -1,5 +1,3 @@ -Makefile -Makefile.in  *.gmo  POTFILES  stamp-po diff --git a/lib/libalpm/po/POTFILES.in b/lib/libalpm/po/POTFILES.in index e668f661..80130f24 100644 --- a/lib/libalpm/po/POTFILES.in +++ b/lib/libalpm/po/POTFILES.in @@ -8,18 +8,16 @@ lib/libalpm/be_files.c  lib/libalpm/cache.c  lib/libalpm/conflict.c  lib/libalpm/db.c +lib/libalpm/delta.c  lib/libalpm/deps.c  lib/libalpm/error.c  lib/libalpm/group.c  lib/libalpm/handle.c  lib/libalpm/log.c  lib/libalpm/md5.c -lib/libalpm/md5driver.c  lib/libalpm/package.c -lib/libalpm/provide.c  lib/libalpm/remove.c -lib/libalpm/sha1.c +lib/libalpm/server.c  lib/libalpm/sync.c  lib/libalpm/trans.c  lib/libalpm/util.c -lib/libalpm/versioncmp.c diff --git a/lib/libalpm/po/de.po b/lib/libalpm/po/de.po index 6e699fa1..e444ba18 100644 --- a/lib/libalpm/po/de.po +++ b/lib/libalpm/po/de.po @@ -10,9 +10,9 @@ msgid ""  msgstr ""  "Project-Id-Version: de\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-04-17 20:26+0200\n" -"Last-Translator: Pierre Schmitz <pierre@archlinux.de>\n" +"Last-Translator: Matthias Gorissen <matthias@archlinux.de>\n"  "Language-Team: German <archlinux.de>\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=UTF-8\n" @@ -20,1499 +20,730 @@ msgstr ""  "Plural-Forms: nplurals=2; plural=(n != 1);X-Generator: KBabel 1.11.4\n"  "X-Generator: KBabel 1.11.4\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "Lade Ziel '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "Ersetze ältere Version %s-%s durch %s in der Ziel-Liste" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr "Neuere Version %s-%s ist in der Ziel-Liste -- Überspringe" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "Lese Metadaten von '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "Suche nach ungelösten Abhängigkeiten" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "Suche nach Konflikten" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "Das Ersetzen von Paketen mit -A und -U wird noch nicht unterstützt" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "Entfernen Sie bitte zuerst '%s' mit -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "Sortiere nach Abhängigkeiten" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "Räume auf" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "Suche nach Dateikonflikten" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "Aktualisiere Paket %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "Füge Paket %s-%s hinzu" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "Entferne zuerst altes Paket (%s-%s)" - -#: lib/libalpm/add.c:411 -#, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "Füge %s temporär zum NoUpgrade-Array hinzu" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "Entpacke Dateien" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "Konnte aktuelles Arbeitsverzeichnis nicht ermitteln" - -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 -#, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s ist in NoExtract, wird nicht entpackt" - -#: lib/libalpm/add.c:508 -#, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s ist in trans->skip_add, wird nicht entpackt" - -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" -msgstr "Konnte %s nicht entpacken (%s)" - -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "Prüfe MD5-Hashes für %s" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:600 +#: lib/libalpm/add.c:365  #, c-format -msgid "checking sha1 hashes for %s" -msgstr "Prüfe SHA1-Hashes für %s" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:602 +#: lib/libalpm/add.c:392  #, c-format -msgid "current:  %s" -msgstr "Aktuell:  %s" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:603 +#: lib/libalpm/add.c:399  #, c-format -msgid "new:      %s" -msgstr "Neu:      %s" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:604 +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422  #, c-format -msgid "original: %s" -msgstr "Original: %s" +msgid "could not extract %s (%s)\n" +msgstr "Konnte %s nicht entpacken (%s)\n" -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "Konnte %s nicht umbenennen (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "Fehler: Konnte %s nicht umbenennen (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "Konnte temporäre Datei nicht nach %s kopieren (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "Fehler: Konnte temporäre Datei nicht nach %s kopieren (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s gespeichert als %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "Warnung: %s gespeichert als %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "Aktion: Installiere neue Datei: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "Aktion: Belasse existierende Datei an ihrem Platz" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"Aktion: Behalte aktuelle Datei und installiere die neue mit der Endung ." -"pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "Konnte %s nicht als %s installieren: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "Fehler: Konnte %s nicht als %s installieren: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s installiert als %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "Warnung: %s installiert als %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s ist in NoUpgrade -- Überspringe" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "Entpacke %s als %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "Warnung: Entpacke %s als %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "Entpacke %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "Fehler: Konnte %s nicht entpacken (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "Hänge Sicherungseintrag für %s an" - -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" -msgstr "Fehler traten auf, während %s %s" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "Aktualisiere" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "Installiere" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "'%s' wird nicht mehr von %s bereitgestellt (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "Aktualisiere '%s' aufgrund einer Bereitstellungsänderung (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "Konnte Bereitstellung '%s' von '%s' nicht aktualisieren" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "Konnte aktuelles Arbeitsverzeichnis nicht ermitteln" -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "Aktualisiere Datenbank" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n" +msgstr "Fehler traten auf, während %s aktualisiert wurde" -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "Füge Datenbankeintrag '%s' hinzu" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "Fehler traten auf, während %s installiert wurde" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "Konnte Datenbankeintrag %s-%s nicht aktualisieren" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" +#: lib/libalpm/add.c:793 +#, fuzzy, c-format +msgid "could not add entry '%s' in cache\n"  msgstr "Konnte Eintrag '%s' nicht zum Pufferspeicher hinzufügen" -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "Führe \"ldconfig -r %s\" aus" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "Entferne Datenbank %s, %d verbleibend..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "Nicht registrierte Datenbank '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "Schließe Datenbank '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"Füge neuen Server zur Datenbank '%s' hinzu: Protokoll '%s', Server '%s', " -"Pfad '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "Server-Liste geleert für '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "Konnte letzte Update-Zeit für %s nicht ermitteln (nicht schlimm)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "Konnte Datenbank nicht synchronisieren: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "Synchronisation: Neue mtime für %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "Leere Datenbank %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "Konnte Datenbankeintrag %s%s nicht entfernen" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "Konnte SHA1-Prüfsumme für Paket %s-%s nicht ermitteln" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "SHA1-Prüfsummen für Paket %s-%s stimmen überein" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "SHA1-Prüfsummen für Paket %s-%s stimmen nicht überein" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "Konnte MD5-Prüfsumme für Paket %s-%s nicht ermitteln" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "MD5-Prüfsummen für Paket %s-%s stimmen überein" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "MD5-Prüfsummen für Paket %s-%s stimmen nicht überein" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "Konnte Sperrdatei %s nicht entfernen" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "Warnung: Konnte Sperrdatei %s nicht entfernen" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "Konfiguration: Neuer Abschnitt '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "Konfiguration: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "Konfiguration: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "Konfiguration: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "Konfiguration: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "Konfiguration: including %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "Konfiguration: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "Konfiguration: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "Konfiguration: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "Konfiguration: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "Konfiguration: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "Konfiguration: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 -#, c-format -msgid "config: rootdir: %s" -msgstr "Konfiguration: rootdir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "Konfiguration: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "Konfiguration: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "Konfiguration: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "Prüfe auf Paketersetzungen" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "Prüfe Ersetzung '%s' für Paket '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: Ignoriere zu aktualisierendes Packet (zu ersetzen durch %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s wurde zur Aktualisierung ausgewählt (wird durch %s-%s ersetzt)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' nicht in Sync-DB gefunden -- Überspringe" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' ist bereits zum Entfernen ausgewählt -- Überspringe" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s wurde zur Aktualisierung ausgewählt (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "Entpacke Datenbank '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "Öffne Datenbank aus Pfad '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "Konnte Paket nicht in Datenbank finden: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +#: lib/libalpm/be_files.c:223 +#, fuzzy, c-format +msgid "invalid name for database entry '%s'\n"  msgstr "Falscher Name für Datenbank-Eintrag '%s'" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "Ungültiger Paket-Eintrag wurde an _alpm_db_read übergeben, überspringe" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" -"Überspringe das Lesen der Datenbank-Information für das Datei-basierte Paket " -"'%s'..." - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" +#: lib/libalpm/be_files.c:275 +#, fuzzy, c-format +msgid "loading package data for %s : level=%d\n"  msgstr "Lade Paket-Daten für %s : level=%d" -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "Kann %s-%s nicht in der Datenbank '%s' finden" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "Konnte Datei %s nicht öffnen: %s" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "Schreibe %s-%s Informationen aus DESC-Datei zurück in die Datenbank" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "Schreibe %s-%s Informationen aus FILES-Datei zurück in die Datenbank" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "Schreibe %s-%s Informationen aus DEPENDS-Datei zurück in die Datenbank" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "Lade Paketpuffer für Repositorium '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" +#: lib/libalpm/cache.c:62 +#, fuzzy, c-format +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "Füge '%s' zum Paketpuffer der Datenbank '%s' hinzu" -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "Lösche Paketpuffer für Repositorium '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "Fehler: Paketpuffer ist NULL für Datenbank '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "Füge Eintrag '%s' zu '%s'-Puffer hinzu" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "Entferne Eintrag '%s' aus '%s'-Puffer" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "Konnte Eintrag '%s' aus '%s'-Puffer nicht entfernen: nicht gefunden" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "Fehler: Konnte Eintrag '%s' nicht aus dem NULL Paketpuffer laden" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "Lade Gruppenpuffer für Repositorium '%s'" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   Konflikt gefunden '%s' : Paket '%s'" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   Konflikt '%s' gefunden: Paket '%s' stellt '%s' bereit" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "Paket '%s' steht im Konflikt mit sich selbst - ist falsch gepackt" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: Ziel '%s' gegen Datenbank" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: Ziel '%s' gegen alle Ziele" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: Datenbank gegen Ziel '%s'" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "Ziel '%s' ist auch in der Ziel-Liste, benutze neue Konflikte" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLICTS:: %s steht im Konflikt mit %s" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "malloc-Fehler: Konnte %d Bytes nicht zuweisen" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc fehlgeschlagen: Konnte %d Bytes nicht zuweisen" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "Konnte Datenbankeintrag %s%s nicht entfernen" -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" +#: lib/libalpm/db.c:553 +#, fuzzy +msgid "attempt to re-register the 'local' DB\n"  msgstr "Versuche die lokale Datenbank neu zu registrieren" -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "Versuche die %s Datenbank neu zu registrieren, verwende die bestehende" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "Registriere Datenbank '%s'" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "Datenbank-Verzeichnis '%s' ist nicht vorhanden, erstelle es" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "Öffne Datenbank '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "Sortieren von Abhängigkeiten gestartet" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "Möglicher Abhängigkeitszyklus gefunden" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "Sortieren von Abhängigkeiten beendet" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "Ein leeres Paket wurde in der Paketliste gefunden" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "Konnte installiertes Paket '%s' nicht finden" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: Abhängigkeit'%s' wurde von '%s' nach '%s' verschoben" - -#: lib/libalpm/deps.c:280 -#, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "checkdeps: Abhängigkeit '%s' von installiertem Paket '%s' erfüllt" - -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "" -"checkdeps: aktualisiertes '%s' wird die Abhängigkeit von '%s' nicht erfüllen" - -#: lib/libalpm/deps.c:359 -#, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "Abhängigkeit '%s' für Paket '%s' fehlt" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: %s wird von %s benötigt" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "Datenbank-Pfad ist nicht definiert" -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "Schließe %s aus -- Ausdrücklich installiert" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "Abhängigkeits-Zyklus entdeckt\n" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/deps.c:175  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -"Kann Paket \"%s\" oder irgendwas, das es zur Verfügung stellt, nicht finden!" - -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "Füge '%s' zu der Ziel-Liste hinzu" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "Starte das Auflösen der Abhängigkeiten" -#: lib/libalpm/deps.c:601 +#: lib/libalpm/deps.c:177  #, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s stellt Abhängigkeit %s zur Verfügung -- Überspringe" - -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"Kann Abhängigkeiten für \"%s\" nicht auflösen (\"%s\" ist nicht in " -"Paketliste enthalten)" -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "Abhängigkeit %s ist bereits in der Ziel-Liste -- Überspringe" - -#: lib/libalpm/deps.c:667 -#, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "Ziehe Abhängigkeit %s (benötigt von %s)" - -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "Kann Abhängigkeiten für \"%s\" nicht auflösen" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "Abhängigkeits-Zyklus entdeckt: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "Auflösen von Abhängigkeiten beendet" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "Speicher ist voll!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "Unerwarteter Systemfehler" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "Unzureichende Rechte" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "Konnte Datei nicht finden oder lesen" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "Konnte Datei nicht finden oder lesen" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "Falsches oder NULL-Argument übergeben" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "Bibliothek nicht initialisiert" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "Bibliothek bereits initialisiert" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "Kann Datenbank nicht sperren" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "Konnte Datenbank nicht öffnen" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "Konnte Datenbank nicht erstellen" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "Datenbank nicht initialisiert" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "Datenbank bereits registriert" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "Konnte Datenbank nicht finden" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "Konnte Datenbank nicht aktualisieren" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "Konnte Datenbank-Eintrag nicht entfernen" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "Ungültige URL für den Server" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "Konnte Parameter nicht setzen" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized" -msgstr "Vorgang wurde schon gestartet" +msgstr "Vorgang bereits gestartet" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "Vorgang nicht gestartet" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "Doppelte Ziele" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "Vorgang nicht vorbereitet" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "Vorgang abgebrochen" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "Operation nicht mit dem Vorgangs-Typ kompatibel" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "Konnte den Vorgang nicht durchführen" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "Konnte nicht alle Dateien herunterladen" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "Konnte Paket nicht finden oder lesen" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "Ungültiges oder beschädigtes Paket" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "Kann Paketdatei nicht öffnen" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "Kann Paketdaten nicht laden" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "Paket ist bereits installiert" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "Paket ist nicht installiert oder ältere Version" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "Konnte nicht alle Dateien des Paketes entfernen" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "Paketname ist nicht gültig" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "Beschädigtes Paket" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "Kein solches Repositorium" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "Beschädigtes Paket" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "Gruppe nicht gefunden" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "Kann Abhängigkeiten nicht erfüllen" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "In Konflikt stehende Abhängigkeiten" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "In Konflikt stehende Dateien" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "Benutzer brach die Aktion ab" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "Interner Fehler" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "libarchive-Fehler" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "Nicht genügend Speicherplatz" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "Nicht bestätigt" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "Ungültiger Abschnittsname" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "'local' ist reserviert und kann nicht als Repositorium benutzt werden" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "Falsche Syntax in Beschreibungsdatei" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "Alle Anweisungen müssen zu einem Abschnitt gehören" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "Ungültiger Regulärer Ausdruck" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "Verbindung zum Server fehlgeschlagen" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "Unerwarteter Fehler" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "Kann das spezifizierte Wurzelverzeichnis nicht anerkennen '%s'" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "Konfiguration 'root' = %s" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "Konfiguration 'dbpath' = %s" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "Konfiguration 'cachedir' = %s" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "%s kann nicht geöffnet werden\n" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "MD5(%s) = %s" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "Konnte MD5-Prüfsumme für Paket %s-%s nicht ermitteln" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: Ignoriere Paketaktualisierung (%s)" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "MD5-Prüfsummen für Paket %s-%s stimmen nicht überein" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: Erzwungene Aktualisierung auf Version %s" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: Lokale Version (%s) ist neuer als %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "%s-%s: Verzögere die Aktualisierung von Paket (%s)" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: Falscher Syntax in Beschreibungsdatei, Zeile %d" - -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n"  msgstr "Konnte Paket-Beschreibungsdatei nicht analysieren" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n"  msgstr "Fehlender Paketname in %s" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n"  msgstr "Fehlende Paketversion in %s" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "Konnte tempfile %s nicht entfernen" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "Fehler beim Lesen des Paketes: %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n"  msgstr "Fehlende Paket-Metadaten" -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n"  msgstr "Fehlende Paket-Dateiliste in %s, erstelle eine" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "Füge '%s' zum requiredby-Feld für '%s' hinzu" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "Füge '%s' zum requiredby-Feld für '%s' hinzu (stellt bereit: %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "Konnte %s nicht in der Datenbank finden" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "Füge %s zur Ziel-Liste hinzu" -  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "Ziehe %s in die Ziel-Liste" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "Konnte %s nicht in Datenbank finden -- Überspringe" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "Finde entfernbare Abhängigkeiten" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "Kann Datei '%s' nicht entfernen: %s" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "Überspringe das Entfernen von '%s' wegen NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "Datei %s existiert nicht" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "Behalte Verzeichnis %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "Entferne Verzeichnis %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s ist in trans->skip_remove, überspringe das Entfernen" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "Vorgang wurde auf NOSAVE gesetzt, '%s' wird nicht gesichert" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "Lösche %s" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "Kann Datei %s nicht entfernen: %s" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "Entferne Paket %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "Paket '%s' wird nicht entfernt, konnte nicht alle Dateien löschen" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "Entferne %d Dateien" -  #: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "Entferne Datenbank-Eintrag '%s'" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n"  msgstr "Konnte Datenbank-Eintrag %s-%s nicht entfernen" -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n"  msgstr "Konnte Eintrag '%s' nicht aus dem Puffer entfernen" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: %s kann nicht geöffnet werden\n" - -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "Suche nach Paketaktualisierungen" - -#: lib/libalpm/sync.c:215 +#: lib/libalpm/server.c:56  #, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s ausgewählt für Aktualisierung (%s => %s)" +msgid "url '%s' is invalid, ignoring\n" +msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "Suche nach Ziel in Repositorium '%s'" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "Ziel '%s' wurde nicht gefunden -- suche nach Ähnlichem" +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "'%s' stellt '%s' bereit" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "Konnte manche Dateien von %s nicht übertragen\n" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" -msgstr "Repositorium '%s' nicht gefunden" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s ist aktuell -- Überspringe" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "Kann Datei '%s' nicht entfernen: %s" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "Füge das Ziel '%s' zur Vorgangsliste hinzu" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "Fehler beim Lesen des Paketes: %s" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "Auflösen von Ziel-Abhängigkeiten" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "Kann Datei '%s' nicht entfernen: %s" -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "Füge Paket %s-%s zur Vorgangszielen hinzu" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "Konnte nicht zu Verzeichnis / wechseln (%s)" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "Suche nach unlösbaren Abhängigkeiten" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "Paket '%s' steht im Konflikt mit '%s'" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "'%s' wurde nicht in der Vorgangsliste gefunden -- überspringe" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "Konnte nicht alle Dateien herunterladen" -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "Paket '%s' steht im Konflikt mit sich selbst" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: Ignoriere zu aktualisierendes Packet (zu ersetzen durch %s-%s)" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' ist in der Ziel-Liste -- ich behalte es" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: Ignoriere Paketaktualisierung (%s)" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "Entferne '%s' von Ziel-Liste" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n" +msgstr "Repositorium '%s' nicht gefunden" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "Löse Paket-Konflikt '%s'" +#: lib/libalpm/sync.c:354 +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s ist aktuell -- Überspringe" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "Wähle '%s' zum Entfernen aus" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s ist aktuell -- Überspringe" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "Nicht lösbare Paketkonflikte gefunden" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "Überprüfe die Abhängigkeiten der zu entfernenden Pakete" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "etwas ist fürchterlich schief gegangen" - -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "'%s' stellt '%s' bereit -- Konflikt abgewandt" - -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s ist bereits im Puffer\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "Es existiert kein %s-Puffer. Erstelle... \n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "Warnung: Es existiert kein %s Puffer. Erstelle..." +#: lib/libalpm/sync.c:628 +#, fuzzy, c-format +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "malloc-Fehler: Konnte %d Bytes nicht zuweisen"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "Konnte Paketpuffer nicht erstellen, benutze stattdessen /tmp\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "Warnung: Konnte Paketpuffer nicht erstellen; benutze stattdessen /tmp" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "Konnte manche Dateien von %s nicht übertragen\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr "Kann MD5- oder SHA1-Prüfsumme für Paket %s nicht ermitteln\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "Archiv %s war beschädigt (falsche MD5- oder SHA1-Prüfsumme)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "Archiv %s ist beschädigt (falsche MD5- oder SHA1-Prüfsumme)\n" +msgid "failed to retrieve some files from %s\n" +msgstr "Konnte manche Dateien von %s nicht übertragen\n" -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n"  msgstr "Konnte den Lösch-Vorgang nicht erstellen" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" +#: lib/libalpm/sync.c:1143 +#, fuzzy +msgid "could not initialize the removal transaction\n"  msgstr "Konnte den Lösch-Vorgang nicht beginnen" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "Entferne im Konflikt stehende und zu ersetzende Pakete" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n"  msgstr "Konnte Lösch-Vorgang nicht vorbereiten" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1171 +#, fuzzy +msgid "could not commit removal transaction\n"  msgstr "Konnte Lösch-Vorgang nicht durchführen" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "Installiere Pakete" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n"  msgstr "Konnte den Vorgang nicht erstellen" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1187 +#, fuzzy +msgid "could not initialize transaction\n"  msgstr "Konnte den Vorgang nicht beginnen" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n"  msgstr "Konnte den Vorgang nicht vorbereiten" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "Aktualisiere Datenbank für die Abhängigkeiten der ersetzten Pakete" +#: lib/libalpm/sync.c:1219 +#, fuzzy +msgid "could not commit transaction\n" +msgstr "Konnte den Vorgang nicht durchführen" -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "Konnte requiredby für Datenbank-Eintrag %s-%s nicht aktualisieren" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "Konnte Sperrdatei %s nicht entfernen" -#: lib/libalpm/sync.c:1039 +#: lib/libalpm/trans.c:483  #, c-format -msgid "could not update new database entry %s-%s" -msgstr "Konnte neuen Datenbank-Eintrag %s-%s nicht aktualisieren" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n" +msgstr "" -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "Paket '%s-%s' gefunden" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "Konnte temp-Verzeichnis nicht erstellen" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "Paket '%s' nicht in Datenbank gefunden" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "Konnte nicht zu Verzeichnis %s wechseln (%s)" -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "Aktualisiere requiredby-Felder abhängiger Pakete für %s-%s" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "Konnte keinen neuen Prozess starten (%s)" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "" -"Paket besitzt keine Abhängigkeiten, kein anderes Paket muß aktualisiert " -"werden" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "Konnte root-Verzeichnis nicht wechseln (%s)" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "Aktualisiere requiredby-Feld für Paket '%s'" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "Konnte nicht zu Verzeichnis / wechseln (%s)" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "Konnte requiredby-Eintrag %s-%s nicht aktualisieren" +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format +msgid "call to popen failed (%s)" +msgstr "Aufruf von 'waitpid' fehlgeschlagen (%s)" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "Konnte Abhängigkeit '%s' nicht finden" +#: lib/libalpm/trans.c:597 +#, fuzzy, c-format +msgid "call to waitpid failed (%s)\n" +msgstr "Aufruf von 'waitpid' fehlgeschlagen (%s)" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "" + +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "Konnte tmpdir %s nicht entfernen" + +#: lib/libalpm/util.c:204 +#, fuzzy, c-format +msgid "failed to make path '%s' : %s\n"  msgstr "Konnte Pfad nicht erstellen '%s' : %s" -#: lib/libalpm/util.c:280 +#: lib/libalpm/util.c:389  #, c-format  msgid "could not open %s: %s\n"  msgstr "Konnte Datei %s nicht öffnen: %s\n" -#: lib/libalpm/util.c:293 +#: lib/libalpm/util.c:573  #, c-format -msgid "could not extract %s: %s\n" -msgstr "Konnte %s nicht entpacken: %s\n" +msgid "no %s cache exists, creating...\n" +msgstr "Es existiert kein %s-Puffer. Erstelle... \n" + +#: lib/libalpm/util.c:593 +#, fuzzy +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "Konnte Paketpuffer nicht erstellen, benutze stattdessen /tmp" -#: lib/libalpm/util.c:350 +#: lib/libalpm/util.c:643  #, c-format -msgid "logaction called: %s" -msgstr "Log-Aktion aufgerufen: %s" +msgid "md5: %s can't be opened\n" +msgstr "md5: %s kann nicht geöffnet werden\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "Konnte temp-Verzeichnis nicht erstellen" +#: lib/libalpm/util.c:645 +#, fuzzy, c-format +msgid "md5: %s can't be read\n" +msgstr "md5: %s kann nicht geöffnet werden\n" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" -msgstr "Konnte nicht zu Verzeichnis %s wechseln (%s)" +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "Entfernen Sie bitte zuerst '%s' mit -Rd" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." -msgstr "Führe %s-Skript aus ..." +#~ msgid "could not extract %s (%s)" +#~ msgstr "Konnte %s nicht entpacken (%s)" -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" -msgstr "Konnte keinen neuen Prozess starten (%s)" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "Konnte Bereitstellung '%s' von '%s' nicht aktualisieren" -#: lib/libalpm/util.c:496 -#, c-format -msgid "chrooting in %s" -msgstr "chroot in %s" +#~ msgid "%s: description file is missing" +#~ msgstr "%s: Beschreibungsdatei fehlt" -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" -msgstr "Konnte root-Verzeichnis nicht wechseln (%s)" +#~ msgid "%s: dependency file is missing" +#~ msgstr "%s: Abhängige Datei fehlt" -#: lib/libalpm/util.c:502 -#, c-format -msgid "could not change directory to / (%s)" -msgstr "Konnte nicht zu Verzeichnis / wechseln (%s)" +#~ msgid "%s: file list is missing" +#~ msgstr "%s: Dateiliste fehlt" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "Führe \"%s\" aus" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "malloc fehlgeschlagen: Konnte %d Bytes nicht zuweisen" -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" -msgstr "Aufruf von 'popen' fehlgeschlagen (%s)" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "Kann Abhängigkeiten für \"%s\" nicht auflösen (\"%s\" ist nicht in " +#~ "Paketliste enthalten)" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" -msgstr "Aufruf von 'waitpid' fehlgeschlagen (%s)" +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "Kann das spezifizierte Wurzelverzeichnis '%s' nicht anerkennen" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "Konnte tmpdir %s nicht entfernen" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "Konnte SHA1-Prüfsumme für Paket %s-%s nicht ermitteln" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "Konnte freien Speicher von %s nicht ermitteln: %s" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "SHA1-Prüfsummen für Paket %s-%s stimmen nicht überein" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "Prüfe freien Speicher: Gesamte pkg-Größe: %lld, Speicherplatz: %lld" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "Kann Datei %s nicht entfernen: %s" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha1: %s kann nicht geöffnet werden\n" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "Archiv %s ist beschädigt (falsche MD5- oder SHA1-Prüfsumme)\n" + +#~ msgid "could not update requiredby for database entry %s-%s" +#~ msgstr "Konnte requiredby für Datenbank-Eintrag %s-%s nicht aktualisieren" + +#~ msgid "could not update new database entry %s-%s" +#~ msgstr "Konnte neuen Datenbank-Eintrag %s-%s nicht aktualisieren" + +#~ msgid "could not update 'requiredby' database entry %s-%s" +#~ msgstr "Konnte requiredby-Eintrag %s-%s nicht aktualisieren" diff --git a/lib/libalpm/po/en_GB.po b/lib/libalpm/po/en_GB.po index f4428e48..c9aa7a0b 100644 --- a/lib/libalpm/po/en_GB.po +++ b/lib/libalpm/po/en_GB.po @@ -7,8 +7,8 @@ msgid ""  msgstr ""  "Project-Id-Version: Pacman package manager 3.0.0\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" -"PO-Revision-Date: 2007-03-07 21:05+1100\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n" +"PO-Revision-Date: 2007-12-03 15:22+1000\n"  "Last-Translator: Jeff Bailes <thepizzaking@gmail.com>\n"  "Language-Team: English <en_gb@li.org>\n"  "MIME-Version: 1.0\n" @@ -16,1491 +16,713 @@ msgstr ""  "Content-Transfer-Encoding: 8bit\n"  "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/libalpm/add.c:77 +#: lib/libalpm/add.c:88  #, c-format -msgid "loading target '%s'" -msgstr "loading target '%s'" +msgid "replacing older version %s-%s by %s in target list\n" +msgstr "replacing older version %s-%s by %s in target list\n" -#: lib/libalpm/add.c:122 +#: lib/libalpm/add.c:97  #, c-format -msgid "replacing older version %s-%s by %s in target list" -msgstr "replacing older version %s-%s by %s in target list" +msgid "newer version %s-%s is in the target list -- skipping\n" +msgstr "newer version %s-%s is in the target list -- skipping\n" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" -msgstr "newer version %s-%s is in the target list -- skipping" - -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "reading '%s' metadata" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "looking for unsatisfied dependencies" - -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "looking for conflicts" - -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" -msgstr "replacing packages with -A and -U is not supported yet" - -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "please remove '%s' first, using -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "sorting by dependencies" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "cleaning up" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "looking for file conflicts" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "upgrading package %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "adding package %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "removing old package first (%s-%s)" - -#: lib/libalpm/add.c:411 -#, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "adding %s to the NoUpgrade array temporarily" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "extracting files" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "could not get current working directory" - -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 -#, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s is in NoExtract, skipping extraction" - -#: lib/libalpm/add.c:508 -#, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s is in trans->skip_add, skipping extraction" - -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" -msgstr "could not extract %s (%s)" - -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "checking md5 hashes for %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "checking sha1 hashes for %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "current:  %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "new:      %s" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "conflicting packages were found in the target list\n" -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "original: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" -msgstr "could not rename %s (%s)" - -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "error: could not rename %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" -msgstr "could not copy tempfile to %s (%s)" - -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "error: could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "you cannot install two conflicting packages at the same time\n" -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" -msgstr "%s saved as %s" - -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "warning: %s saved as %s" +#: lib/libalpm/add.c:172 +msgid "replacing packages with -A and -U is not supported yet\n" +msgstr "replacing packages with -A and -U is not supported yet\n" -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "action: installing new file: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "action: leaving existing file in place" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"action: keeping current file and installing new one with .pacnew ending" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" -msgstr "could not install %s as %s: %s" - -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "error: could not install %s as %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" -msgstr "%s installed as %s" - -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "warning: %s installed as %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s is in NoUpgrade -- skipping" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" -msgstr "extracting %s as %s.pacnew" - -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "warning: extracting %s as %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "extracting %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "error: could not extract %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "appending backup entry for %s" - -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" -msgstr "errors occurred while %s %s" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "upgrading" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "installing" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "provision '%s' has been removed from package %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "updating '%s' due to provision change (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "could not update provision '%s' from '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "updating database" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "adding database entry '%s'" - -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" -msgstr "could not update database entry %s-%s" - -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" -msgstr "could not add entry '%s' in cache" - -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "running \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "removing DB %s, %d remaining..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "unregistering database '%s'" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "you can replace packages manually using -Rd and -U\n" -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "closing database '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "serverlist flushed for '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "failed to get lastupdate time for %s (no big deal)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "failed to sync db: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sync: new mtime for %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "flushing database %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "could not remove database entry %s%s" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "could not get sha1sum for package %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "sha1sums for package %s-%s match" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "sha1sums do not match for package %s-%s" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "could not get md5sum for package %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "md5sums for package %s-%s match" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "md5sums do not match for package %s-%s" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "could not remove lock file %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "warning: could not remove lock file %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "config: new section '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "config: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "config: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "config: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "config: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "config: including %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "config: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "config: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "config: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "config: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "config: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 -#, fuzzy, c-format -msgid "config: rootdir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "config: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "config: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "config: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "checking for package replacements" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "checking replacement '%s' for package '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s elected for upgrade (to be replaced by %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' not found in sync db -- skipping" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' is already elected for removal -- skipping" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s elected for upgrade (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "unpacking database '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "opening database from path '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "db scan could not find package: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" -msgstr "invalid name for database entry '%s'" - -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "invalid package entry provided to _alpm_db_read, skipping" - -#: lib/libalpm/be_files.c:226 +#: lib/libalpm/add.c:365  #, c-format  msgid "" -"request to read database info for a file-based package '%s', skipping..." +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n"  msgstr "" -"request to read database info for a file-based package '%s', skipping..." +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" -#: lib/libalpm/be_files.c:239 +#: lib/libalpm/add.c:392  #, c-format -msgid "loading package data for %s : level=%d" -msgstr "loading package data for %s : level=%d" +msgid "extract: symlink %s does not point to dir\n" +msgstr "extract: symlink %s does not point to dir\n" -#: lib/libalpm/be_files.c:247 +#: lib/libalpm/add.c:399  #, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "cannot find '%s-%s' in db '%s'" +msgid "extract: not overwriting dir with file %s\n" +msgstr "extract: not overwriting dir with file %s\n" -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" -msgstr "could not open file %s: %s" - -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "writing %s-%s DESC information back to db" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "writing %s-%s FILES information back to db" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "writing %s-%s DEPENDS information back to db" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "loading package cache for repository '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" -msgstr "adding '%s' to package cache for db '%s'" - -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "freeing package cache for repository '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "error: pkgcache is NULL for db '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "adding entry '%s' in '%s' cache" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "removing entry '%s' from '%s' cache" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "cannot remove entry '%s' from '%s' cache: not found" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "error: failed to get '%s' from NULL pkgcache" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "loading group cache for repository '%s'" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   found conflict '%s' : package '%s'" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   found conflict '%s' : package '%s' provides '%s'" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "package '%s' conflicts with itself - packaging error" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: target '%s' vs db" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: target '%s' vs all targets" - -#: lib/libalpm/conflict.c:181 +#: lib/libalpm/add.c:454 +#: lib/libalpm/add.c:598 +#: lib/libalpm/util.c:422  #, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: db vs target '%s'" +msgid "could not extract %s (%s)\n" +msgstr "could not extract %s (%s)\n" -#: lib/libalpm/conflict.c:201 +#: lib/libalpm/add.c:505  #, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "target '%s' is also in target list, using NEW conflicts" +msgid "could not rename %s (%s)\n" +msgstr "could not rename %s (%s)\n" -#: lib/libalpm/conflict.c:257 +#: lib/libalpm/add.c:512 +#: lib/libalpm/add.c:532 +#: lib/libalpm/trans.c:508  #, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLICTS:: %s conflicts with %s" +msgid "could not copy tempfile to %s (%s)\n" +msgstr "could not copy tempfile to %s (%s)\n" -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 +#: lib/libalpm/add.c:517 +#: lib/libalpm/remove.c:234  #, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "malloc failure: could not allocate %d bytes" +msgid "%s saved as %s\n" +msgstr "%s saved as %s\n" -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 +#: lib/libalpm/add.c:556  #, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc failed: could not allocate %d bytes" - -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" -msgstr "attempt to re-register the 'local' DB" +msgid "could not install %s as %s: %s\n" +msgstr "could not install %s as %s: %s\n" -#: lib/libalpm/db.c:175 +#: lib/libalpm/add.c:559  #, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "attempt to re-register the '%s' database, using existing" +msgid "%s installed as %s\n" +msgstr "%s installed as %s\n" -#: lib/libalpm/db.c:181 +#: lib/libalpm/add.c:576  #, c-format -msgid "registering database '%s'" -msgstr "registering database '%s'" +msgid "extracting %s as %s.pacnew\n" +msgstr "extracting %s as %s.pacnew\n" -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "database directory '%s' does not exist, creating it" +#: lib/libalpm/add.c:711 +#: lib/libalpm/trans.c:529 +msgid "could not get current working directory\n" +msgstr "could not get current working directory\n" -#: lib/libalpm/db.c:197 +#: lib/libalpm/add.c:765  #, c-format -msgid "opening database '%s'" -msgstr "opening database '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "started sorting dependencies" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "possible dependency cycle detected" +msgid "problem occurred while upgrading %s\n" +msgstr "problem occurred while upgrading %s\n" -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "sorting dependencies finished" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "null package found in package list" - -#: lib/libalpm/deps.c:230 +#: lib/libalpm/add.c:770  #, c-format -msgid "cannot find package installed '%s'" -msgstr "cannot find package installed '%s'" +msgid "problem occurred while installing %s\n" +msgstr "problem occurred while installing %s\n" -#: lib/libalpm/deps.c:261 +#: lib/libalpm/add.c:785  #, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: dependency '%s' has moved from '%s' to '%s'" +msgid "could not update database entry %s-%s\n" +msgstr "could not update database entry %s-%s\n" -#: lib/libalpm/deps.c:280 +#: lib/libalpm/add.c:793  #, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "checkdeps: dependency '%s' satisfied by installed package '%s'" +msgid "could not add entry '%s' in cache\n" +msgstr "could not add entry '%s' in cache\n" -#: lib/libalpm/deps.c:289 +#: lib/libalpm/be_files.c:223  #, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "checkdeps: updated '%s' won't satisfy a dependency of '%s'" +msgid "invalid name for database entry '%s'\n" +msgstr "invalid name for database entry '%s'\n" -#: lib/libalpm/deps.c:359 +#: lib/libalpm/be_files.c:275  #, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "missing dependency '%s' for package '%s'" +msgid "loading package data for %s : level=%d\n" +msgstr "loading package data for %s : level=%d\n" -#: lib/libalpm/deps.c:409 +#: lib/libalpm/be_files.c:292 +#: lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 +#: lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 +#: lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787  #, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: found %s as required by %s" +msgid "could not open file %s: %s\n" +msgstr "could not open file %s: %s\n" -#: lib/libalpm/deps.c:485 +#: lib/libalpm/cache.c:62  #, c-format -msgid "excluding %s -- explicitly installed" -msgstr "excluding %s -- explicitly installed" +msgid "adding '%s' to package cache for db '%s'\n" +msgstr "adding '%s' to package cache for db '%s'\n" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/db.c:285  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "cannot find package \"%s\" or anything that provides it!" +msgid "could not remove database entry %s%s\n" +msgstr "could not remove database entry %s%s\n" -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "adding '%s' to the targets" +#: lib/libalpm/db.c:553 +msgid "attempt to re-register the 'local' DB\n" +msgstr "attempt to re-register the 'local' DB\n" -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "started resolving dependencies" +#: lib/libalpm/db.c:562 +#: lib/libalpm/db.c:613 +msgid "database path is undefined\n" +msgstr "database path is undefined\n" -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s provides dependency %s -- skipping" +#: lib/libalpm/deps.c:173 +msgid "dependency cycle detected:\n" +msgstr "dependency cycle detected:\n" -#: lib/libalpm/deps.c:630 +#: lib/libalpm/deps.c:175  #, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" -msgstr "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be removed after its %s dependency\n" +msgstr "%s will be removed after its %s dependency\n" -#: lib/libalpm/deps.c:647 +#: lib/libalpm/deps.c:177  #, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "dependency %s is already in the target list -- skipping" +msgid "%s will be installed before its %s dependency\n" +msgstr "%s will be installed before its %s dependency\n" -#: lib/libalpm/deps.c:667 +#: lib/libalpm/deps.c:573  #, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "pulling dependency %s (needed by %s)" +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n" +msgstr "cannot resolve \"%s\", a dependency of \"%s\"\n" -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" -msgstr "cannot resolve dependencies for \"%s\"" - -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "dependency cycle detected: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "finished resolving dependencies" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "out of memory!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "unexpected system error" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "insufficient privileges" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "could not find or read file" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +msgid "could not find or read directory" +msgstr "could not find or read directory" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "wrong or NULL argument passed" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "library not initialised" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "library already initialised" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "unable to lock database" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "could not open database" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "could not create database" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "database not initialised" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "database already registered" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "could not find database" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "could not update database" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "could not remove database entry" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "invalid url for server" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "could not set parameter" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "transaction already initialised" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 +#: lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "transaction not initialised" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "duplicate target" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "transaction not prepared" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "transaction aborted" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "operation not compatible with the transaction type" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "could not commit transaction" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "could not download all files" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "could not find or read package" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "invalid or corrupted package" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "cannot open package file" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "cannot load package data" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "package already installed" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "package not installed or lesser version" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "cannot remove all files for package" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "package name is not valid" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "corrupted package" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "no such repository" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +msgid "corrupted delta" +msgstr "corrupted delta" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "delta patch failed" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "group not found" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "could not satisfy dependencies" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "conflicting dependencies" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "conflicting files" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "user aborted the operation" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "internal error" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "libarchive error" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "not enough space on disk" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "not confirmed" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "bad configuration section name" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "'local' is reserved and cannot be used as a repository name" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "syntax error in config file" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "all directives must belong to a section" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "invalid regular expression" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "connection to remote host failed" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "unexpected error" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "cannot canonicalise specified root path '%s'" - -#: lib/libalpm/handle.c:175 +#: lib/libalpm/package.c:124  #, c-format -msgid "option 'root' = %s" -msgstr "option 'root' = %s" +msgid "could not get md5sum for package %s-%s\n" +msgstr "could not get md5sum for package %s-%s\n" -#: lib/libalpm/handle.c:195 +#: lib/libalpm/package.c:133  #, c-format -msgid "option 'dbpath' = %s" -msgstr "option 'dbpath' = %s" +msgid "md5sums do not match for package %s-%s\n" +msgstr "md5sums do not match for package %s-%s\n" -#: lib/libalpm/handle.c:211 +#: lib/libalpm/package.c:737  #, c-format -msgid "option 'cachedir' = %s" -msgstr "option 'cachedir' = %s" +msgid "%s: forcing upgrade to version %s\n" +msgstr "%s: forcing upgrade to version %s\n" -#: lib/libalpm/md5driver.c:56 +#: lib/libalpm/package.c:742  #, c-format -msgid "%s can't be opened\n" -msgstr "%s can't be opened\n" +msgid "%s: local (%s) is newer than %s (%s)\n" +msgstr "%s: local (%s) is newer than %s (%s)\n" -#: lib/libalpm/md5driver.c:74 +#: lib/libalpm/package.c:750  #, c-format -msgid "md5(%s) = %s" -msgstr "md5(%s) = %s" +msgid "%s-%s: delaying upgrade of package (%s)\n" +msgstr "%s-%s: delaying upgrade of package (%s)\n" -#: lib/libalpm/package.c:147 +#: lib/libalpm/package.c:931  #, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: ignoring package upgrade (%s)" +msgid "could not parse package description file in %s\n" +msgstr "could not parse package description file in %s\n" -#: lib/libalpm/package.c:158 +#: lib/libalpm/package.c:936  #, c-format -msgid "%s: forcing upgrade to version %s" -msgstr "%s: forcing upgrade to version %s" +msgid "missing package name in %s\n" +msgstr "missing package name in %s\n" -#: lib/libalpm/package.c:163 +#: lib/libalpm/package.c:940  #, c-format -msgid "%s: local (%s) is newer than %s (%s)" -msgstr "%s: local (%s) is newer than %s (%s)" +msgid "missing package version in %s\n" +msgstr "missing package version in %s\n" -#: lib/libalpm/package.c:171 +#: lib/libalpm/package.c:970  #, c-format -msgid "%s-%s: delaying upgrade of package (%s)" -msgstr "%s-%s: delaying upgrade of package (%s)" +msgid "could not remove tempfile %s\n" +msgstr "could not remove tempfile %s\n" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 +#: lib/libalpm/package.c:985 +#: lib/libalpm/package.c:998  #, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: syntax error in description file line %d" +msgid "error while reading package %s: %s\n" +msgstr "error while reading package %s: %s\n" -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" -msgstr "could not parse the package description file" - -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" -msgstr "missing package name in %s" - -#: lib/libalpm/package.c:363 +#: lib/libalpm/package.c:1005  #, c-format -msgid "missing package version in %s" -msgstr "missing package version in %s" +msgid "missing package metadata in %s\n" +msgstr "missing package metadata in %s\n" -#: lib/libalpm/package.c:398 +#: lib/libalpm/package.c:1012  #, c-format -msgid "could not remove tempfile %s" -msgstr "could not remove tempfile %s" - -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" -msgstr "error while reading package: %s" - -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "missing package metadata" - -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" -msgstr "missing package filelist in %s, generating one" - -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "adding '%s' in requiredby field for '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "adding '%s' in requiredby field for '%s' (provides: %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "could not find %s in database" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "adding %s in the targets list" +msgid "missing package filelist in %s, generating one\n" +msgstr "missing package filelist in %s, generating one\n"  #: lib/libalpm/remove.c:121  #, c-format -msgid "pulling %s in the targets list" -msgstr "pulling %s in the targets list" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" -msgstr "could not find %s in database -- skipping" - -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "finding removable dependencies" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" -msgstr "cannot remove file '%s': %s" - -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "Skipping removal of '%s' due to NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "file %s does not exist" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "keeping directory %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "removing directory %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s is in trans->skip_remove, skipping removal" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "transaction is set to NOSAVE, not backing up '%s'" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "unlinking %s" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "cannot remove file %s: %s" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "removing package %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "not removing package '%s', can't remove all files" +msgid "could not find %s in database -- skipping\n" +msgstr "could not find %s in database -- skipping\n" -#: lib/libalpm/remove.c:316 +#: lib/libalpm/remove.c:172 +#: lib/libalpm/remove.c:243  #, c-format -msgid "removing %d files" -msgstr "removing %d files" +msgid "cannot remove file '%s': %s\n" +msgstr "cannot remove file '%s': %s\n"  #: lib/libalpm/remove.c:337  #, c-format -msgid "removing database entry '%s'" -msgstr "removing database entry '%s'" +msgid "could not remove database entry %s-%s\n" +msgstr "could not remove database entry %s-%s\n" -#: lib/libalpm/remove.c:339 +#: lib/libalpm/remove.c:342  #, c-format -msgid "could not remove database entry %s-%s" -msgstr "could not remove database entry %s-%s" +msgid "could not remove entry '%s' from cache\n" +msgstr "could not remove entry '%s' from cache\n" -#: lib/libalpm/remove.c:344 +#: lib/libalpm/server.c:56  #, c-format -msgid "could not remove entry '%s' from cache" -msgstr "could not remove entry '%s' from cache" +msgid "url '%s' is invalid, ignoring\n" +msgstr "URL '%s' is invalid, ignoring\n" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: %s can't be opened\n" - -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "checking for package upgrades" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s elected for upgrade (%s => %s)" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "URL scheme not specified, assuming http\n" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "searching for target in repo '%s'" +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "disk" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 +#: lib/libalpm/server.c:245  #, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "target '%s' not found -- looking for provisions" +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "failed retrieving file '%s' from %s : %s\n" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "found '%s' as a provision for '%s'" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "cannot resume download, starting over\n" -#: lib/libalpm/sync.c:290 +#: lib/libalpm/server.c:288  #, c-format -msgid "repository '%s' not found" -msgstr "repository '%s' not found" +msgid "cannot write to file '%s'\n" +msgstr "cannot write to file '%s'\n" -#: lib/libalpm/sync.c:331 +#: lib/libalpm/server.c:307  #, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s is up to date -- skipping" +msgid "error downloading '%s': %s\n" +msgstr "error downloading '%s': %s\n" -#: lib/libalpm/sync.c:354 +#: lib/libalpm/server.c:319  #, c-format -msgid "adding target '%s' to the transaction set" -msgstr "adding target '%s' to the transaction set" +msgid "error writing to file '%s': %s\n" +msgstr "error writing to file '%s': %s\n" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "resolving target's dependencies" - -#: lib/libalpm/sync.c:422 +#: lib/libalpm/server.c:387  #, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "adding package %s-%s to the transaction targets" +msgid "could not chdir to %s\n" +msgstr "could not chdir to %s\n" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "looking for unresolvable dependencies" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "running XferCommand: fork failed!\n" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "package '%s' conflicts with '%s'" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "URL does not contain a file for download\n" -#: lib/libalpm/sync.c:516 +#: lib/libalpm/server.c:458  #, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "'%s' not found in transaction set -- skipping" +msgid "failed to download %s\n" +msgstr "failed to download %s\n" -#: lib/libalpm/sync.c:527 +#: lib/libalpm/sync.c:135  #, c-format -msgid "package '%s' provides its own conflict" -msgstr "package '%s' provides its own conflict" +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 +#: lib/libalpm/sync.c:250  #, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' is in the target list -- keeping it" +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s: ignoring package upgrade (%s => %s)\n" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 +#: lib/libalpm/sync.c:320  #, c-format -msgid "removing '%s' from target list" -msgstr "removing '%s' from target list" +msgid "repository '%s' not found\n" +msgstr "repository '%s' not found\n" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "resolving package '%s' conflict" - -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "electing '%s' for removal" - -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" -msgstr "unresolvable package conflicts detected" - -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "checking dependencies of packages designated for removal" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "something has gone horribly wrong" - -#: lib/libalpm/sync.c:712 +#: lib/libalpm/sync.c:354  #, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "found '%s' as a provision for '%s' -- conflict aborted" +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s is up to date -- skipping\n" -#: lib/libalpm/sync.c:808 +#: lib/libalpm/sync.c:358  #, c-format -msgid "%s is already in the cache\n" -msgstr "%s is already in the cache\n" +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s is up to date -- reinstalling\n" -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "no %s cache exists, creating...\n" +#: lib/libalpm/sync.c:613 +#: lib/libalpm/sync.c:618 +msgid "unresolvable package conflicts detected\n" +msgstr "unresolvable package conflicts detected\n" -#: lib/libalpm/sync.c:820 +#: lib/libalpm/sync.c:628  #, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "warning: no %s cache exists, creating..." +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "malloc failure: could not allocate %zd bytes\n"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "couldn't create package cache, using /tmp instead\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "warning: couldn't create package cache, using /tmp instead" - -#: lib/libalpm/sync.c:833 -#, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "failed to retrieve some files from %s\n" - -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" -msgstr "can't get md5 or sha1 checksum for package %s\n" - -#: lib/libalpm/sync.c:894  #, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +msgid "command: %s\n" +msgstr "command: %s\n" +#: lib/libalpm/sync.c:888  #: lib/libalpm/sync.c:896  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" - -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" -msgstr "could not create removal transaction" - -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" -msgstr "could not initialise the removal transaction" - -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "removing conflicting and to-be-replaced packages" +msgid "can't get md5 checksum for file %s\n" +msgstr "can't get md5 checksum for file %s\n" -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" -msgstr "could not prepare removal transaction" - -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" -msgstr "could not commit removal transaction" - -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "installing packages" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" -msgstr "could not create transaction" - -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" -msgstr "could not initialise transaction" - -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" -msgstr "could not prepare transaction" - -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "updating database for replaced packages' dependencies" - -#: lib/libalpm/sync.c:1030 +#: lib/libalpm/sync.c:910  #, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "could not update requiredby for database entry %s-%s" +msgid "file %s was corrupted (bad MD5 checksum)\n" +msgstr "file %s was corrupted (bad MD5 checksum)\n" -#: lib/libalpm/sync.c:1039 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "could not update new database entry %s-%s" -msgstr "could not update new database entry %s-%s" +msgid "failed to retrieve some files from %s\n" +msgstr "failed to retrieve some files from %s\n" -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "found package '%s-%s' in sync" +#: lib/libalpm/sync.c:1137 +msgid "could not create removal transaction\n" +msgstr "could not create removal transaction\n" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "package '%s' not found in sync" +#: lib/libalpm/sync.c:1143 +msgid "could not initialize the removal transaction\n" +msgstr "could not initialise the removal transaction\n" -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "updating dependency packages 'requiredby' fields for %s-%s" +#: lib/libalpm/sync.c:1165 +msgid "could not prepare removal transaction\n" +msgstr "could not prepare removal transaction\n" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "package has no dependencies, no other packages to update" +#: lib/libalpm/sync.c:1171 +msgid "could not commit removal transaction\n" +msgstr "could not commit removal transaction\n" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "updating 'requiredby' field for package '%s'" - -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "could not update 'requiredby' database entry %s-%s" +#: lib/libalpm/sync.c:1182 +msgid "could not create transaction\n" +msgstr "could not create transaction\n" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "could not find dependency '%s'" +#: lib/libalpm/sync.c:1187 +msgid "could not initialize transaction\n" +msgstr "could not initialise transaction\n" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" -msgstr "failed to make path '%s' : %s" +#: lib/libalpm/sync.c:1214 +msgid "could not prepare transaction\n" +msgstr "could not prepare transaction\n" -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" -msgstr "could not open %s: %s\n" +#: lib/libalpm/sync.c:1219 +msgid "could not commit transaction\n" +msgstr "could not commit transaction\n" -#: lib/libalpm/util.c:293 +#: lib/libalpm/trans.c:214  #, c-format -msgid "could not extract %s: %s\n" -msgstr "could not extract %s: %s\n" +msgid "could not remove lock file %s\n" +msgstr "could not remove lock file %s\n" -#: lib/libalpm/util.c:350 +#: lib/libalpm/trans.c:483  #, c-format -msgid "logaction called: %s" -msgstr "logaction called: %s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n" +msgstr "No /bin/sh in root dir (%s), aborting scriptlet\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "could not create temp directory" +#: lib/libalpm/trans.c:494 +msgid "could not create temp directory\n" +msgstr "could not create temp directory\n" -#: lib/libalpm/util.c:472 +#: lib/libalpm/trans.c:536  #, c-format -msgid "could not change directory to %s (%s)" -msgstr "could not change directory to %s (%s)" +msgid "could not change directory to %s (%s)\n" +msgstr "could not change directory to %s (%s)\n" -#: lib/libalpm/util.c:476 +#: lib/libalpm/trans.c:554  #, c-format -msgid "executing %s script..." -msgstr "executing %s script..." +msgid "could not fork a new process (%s)\n" +msgstr "could not fork a new process (%s)\n" -#: lib/libalpm/util.c:489 +#: lib/libalpm/trans.c:564  #, c-format -msgid "could not fork a new process (%s)" -msgstr "could not fork a new process (%s)" +msgid "could not change the root directory (%s)\n" +msgstr "could not change the root directory (%s)\n" -#: lib/libalpm/util.c:496 +#: lib/libalpm/trans.c:569  #, c-format -msgid "chrooting in %s" -msgstr "chrooting in %s" +msgid "could not change directory to / (%s)\n" +msgstr "could not change directory to / (%s)\n" -#: lib/libalpm/util.c:498 +#: lib/libalpm/trans.c:578  #, c-format -msgid "could not change the root directory (%s)" -msgstr "could not change the root directory (%s)" +msgid "call to popen failed (%s)" +msgstr "call to popen failed (%s)" -#: lib/libalpm/util.c:502 +#: lib/libalpm/trans.c:597  #, c-format -msgid "could not change directory to / (%s)" -msgstr "could not change directory to / (%s)" +msgid "call to waitpid failed (%s)\n" +msgstr "call to waitpid failed (%s)\n" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "executing \"%s\"" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "scriptlet failed to execute correctly\n" -#: lib/libalpm/util.c:509 +#: lib/libalpm/trans.c:615  #, c-format -msgid "call to popen failed (%s)" -msgstr "call to popen failed (%s)" +msgid "could not remove tmpdir %s\n" +msgstr "could not remove tmpdir %s\n" -#: lib/libalpm/util.c:541 +#: lib/libalpm/util.c:204  #, c-format -msgid "call to waitpid failed (%s)" -msgstr "call to waitpid failed (%s)" +msgid "failed to make path '%s' : %s\n" +msgstr "failed to make path '%s' : %s\n" -#: lib/libalpm/util.c:550 +#: lib/libalpm/util.c:389  #, c-format -msgid "could not remove tmpdir %s" -msgstr "could not remove tmpdir %s" +msgid "could not open %s: %s\n" +msgstr "could not open %s: %s\n" -#: lib/libalpm/util.c:568 +#: lib/libalpm/util.c:573  #, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "" +msgid "no %s cache exists, creating...\n" +msgstr "no %s cache exists, creating...\n" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "check_freespace: total pkg size: %lld, disk space: %lld" +#: lib/libalpm/util.c:593 +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "couldn't create package cache, using /tmp instead\n" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +#: lib/libalpm/util.c:643 +#, c-format +msgid "md5: %s can't be opened\n" +msgstr "md5: %s can't be opened\n" + +#: lib/libalpm/util.c:645 +#, c-format +msgid "md5: %s can't be read\n" +msgstr "md5: %s can't be read\n" + +#~ msgid "please remove '%s' first, using -Rd\n" +#~ msgstr "please remove '%s' first, using -Rd\n" +#~ msgid "cannot resolve dependencies for \"%s\"\n" +#~ msgstr "cannot resolve dependencies for \"%s\"\n" +#~ msgid "could not update requiredby for database entry %s-%s\n" +#~ msgstr "could not update requiredby for database entry %s-%s\n" +#~ msgid "could not update new database entry %s-%s\n" +#~ msgstr "could not update new database entry %s-%s\n" +#~ msgid "could not update 'requiredby' database entry %s-%s\n" +#~ msgstr "could not update 'requiredby' database entry %s-%s\n" +#~ msgid "could not extract %s (%s)" +#~ msgstr "could not extract %s (%s)" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "could not update provision '%s' from '%s'" + +#, fuzzy +#~ msgid "%s: description file is missing" +#~ msgstr "%s: syntax error in description file line %d" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "malloc failed: could not allocate %d bytes" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "cannot canonicalise specified root path '%s'" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "could not get sha1sum for package %s-%s" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "sha1sums do not match for package %s-%s" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "cannot remove file %s: %s" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha1: %s can't be opened\n" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" diff --git a/lib/libalpm/po/es.po b/lib/libalpm/po/es.po index 60acc003..10cd8329 100644 --- a/lib/libalpm/po/es.po +++ b/lib/libalpm/po/es.po @@ -1,16 +1,9 @@ -# translation of es.fix.po to -# Spanish translation for libalpm package. -# Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org> -# This file is distributed under the same license as the Pacman package manager package. -# -# Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>, 2007. -# Juan Pablo González Tognarelli <jotapesan@gmail.com>, 2007.  msgid ""  msgstr ""  "Project-Id-Version: libalpm\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" -"PO-Revision-Date: 2007-04-29 11:12-0300\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n" +"PO-Revision-Date: 2007-04-20 21:19-0300\n"  "Last-Translator: Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>\n"  "Language-Team: juan pablo gonzález tognarelli <lord_jotape@yahoo.com.ar>\n"  "MIME-Version: 1.0\n" @@ -20,1513 +13,729 @@ msgstr ""  "X-Poedit-Country: CHILE\n"  "X-Poedit-SourceCharset: utf-8\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "cargando el archivo  '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "reemplazando la versión antigua  %s-%s por %s en la lista de objetivos" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr ""  "una nueva versión  %s-%s esta en la lista de objetivos list -- saltándola" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "leyendo los metadatos '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "buscando por dependencias no satisfechas" - -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "buscando por conflictos" - -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" -msgstr "el reemplazo de paquetes con -A y -U aún no esta soportado" - -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "por favor quitar '%s' primero, usando -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "ordenando por dependencias" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "limpiando" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "buscando por conflictos de archivos" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "actualizando el paquete %s-%s" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "agregando el paquete %s-%s" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n" +msgstr "el reemplazo de paqutes con -A y -U aún no esta soportado" -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "quitando el paquete antiguo primero (%s-%s)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:411 +#: lib/libalpm/add.c:365  #, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "agregando %s al arreglo NoUpgrade temporalmente" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "descomprimiendo archivos" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "no se pudo obtener el directorio de trabajo actual" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 +#: lib/libalpm/add.c:392  #, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s está en NoExtract. Saltando la extracción" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:399  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s esta en la extracción trans->skip_add, skipping" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422 +#, fuzzy, c-format +msgid "could not extract %s (%s)\n"  msgstr "no se pudo extraer %s (%s)" -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "verificando los hash md5 para %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "verificando los hash SHA1 para %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "actual:  %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "nuevo:      %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "original: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "no se pudo renombrar %s (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "error: no se pudo renombrar %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "no se pudo copiar el archivo temporal a %s (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "error: no se pudo copiar el archivo temporal a %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s guardado como %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "advertencia: %s guardado como %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "acción: instalando nuevo archivo: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "acción: dejando el archivo existente en su lugar" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"action:manteniendo el archivo actual e instalando un no nuevo con postfijo ." -"pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "no se pudo instalar %s como %s: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "error: no se pudo instalar %s como %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s instalado como %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "advertencia: %s instalado como %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s esta en en los no actualizables -- saltando" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "descomprimiendo %s como %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "advertencia: descomprimiendo %s como %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "descomprimiendo %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "error: no se pudo descomprimir %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "agregando la entrada de respaldo para %s" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "no se pudo obtener el directorio de trabajo actual" -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n"  msgstr "ocurrieron errores mientras  %s %s" -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "actualizando" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "instalando" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "el provisional '%s' ha sido eliminado desde el paquete %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "actualizando '%s' debido a un cambio de provisiones (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "no se pudo actualizar la provisión '%s' desde '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "actualizando la base de datos" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "agregando a la base de datos '%s'" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "ocurrieron errores mientras  %s %s" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "no se pudo actualizar en la base de datos la entrada %s-%s" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" +#: lib/libalpm/add.c:793 +#, fuzzy, c-format +msgid "could not add entry '%s' in cache\n"  msgstr "no se pudo agregar '%s' en la cache" -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "ejecutando \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "quitando la base de datos %s, %d quedando..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "desmarcando la base de datos '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "cerrando la base de datos '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"agregando un nuevo servidor a la base de datos '%s': protocolo '%s', " -"servidor '%s', ruta '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "lista de servidores se ha barrido para '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"fallo al obtener la última fecha de actualización para %s (no es un  gran " -"problema)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "fallo al sincronizar la base de datos:  %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sync: nuevo mtime para %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "barriendo la base de datos %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "no se pudo quitar la entrada en la base de datos %s%s" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "no se pudo obtener la verificación sha1 para %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "verificando sha1 para el paquete %s-%s coincide" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "la verificación sha1 no coincide para %s-%s" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "no se pudo obtener la verificación md5 para %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "la verificación md5 para el paquete %s-%s concuerda" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "la verificación md5 para el paquete %s-%s no concuerda" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "no se pudo quitar el archivo de bloqueo %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "advertencia: no se pudo eliminar el archivo de bloqueo %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "config: nueva sección '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "config: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "config: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "config: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "config: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "config: incluyendo %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "config: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "config: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "config: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "config: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "config: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 +#: lib/libalpm/be_files.c:223  #, fuzzy, c-format -msgid "config: rootdir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "config: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "config: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "config: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "verificando si hay reemplazo de paquetes" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "verificando el reemplazo '%s' para el paquete '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "" -"%s-%s: ignorando la actualización del paquete(para ser reemplazado por %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s escogido para actualizar (para ser reemplazado por %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' not encontrado en la base -- saltando" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' está ya seleccionado para quitar -- saltando" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s seleccionado para actualizar (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "desempaquetando la base de datos '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "abriendo la base de datos desde la ruta '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "db scan no pudo encontrar el paquete: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +msgid "invalid name for database entry '%s'\n"  msgstr "nombre invalido para la entrada de la base de datos '%s'" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "entrada de paquete invalida a _alpm_db_read, saltando" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" -"petición para leer la información de la base para el paquete basado en " -"archivo '%s', saltando..." - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" +#: lib/libalpm/be_files.c:275 +#, fuzzy, c-format +msgid "loading package data for %s : level=%d\n"  msgstr "cargando la información del paquete para %s : nivel=%d" -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "no se pudo encontrar '%s-%s' en la base '%s'" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "no se pudo abrir el archivo %s: %s" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "escribiendo %s-%s, información DESC en la base" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "escribiendo %s-%s, información FILES en la base" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "escribiendo %s-%s, información DEPENDS en la base" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "cargando la cache de paquetes para el repositorio '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" +#: lib/libalpm/cache.c:62 +#, fuzzy, c-format +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "agregando '%s' a la cache de paquetes para la base '%s'" -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "liberando la cache de paquetes para el repositorio '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "error: la cache de paquetes es nula para la base de datos '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "agregando '%s' en la cache '%s'" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "quitando '%s' de la cache '%s'" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "no se pudo quitar '%s' de la cache '%s': no encontrado" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "" -"error: se produjo un fallo al obtener '%s' desde la cache de paquetes \"NULL" -"\"" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "cargando la cache de grupo para el repositorio '%s'" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   se ha encontrado un conflicto '%s' : paquete '%s'" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   se ha encontrado un conflicto '%s' : paquete '%s' provee '%s'" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "el paquete '%s' posee conflictos con si mismo- error del paquete" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: el objetivo '%s' vs la base de datos" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: el objetivo '%s' vs todos los objetivos" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: la base de datos vs el objetivo '%s'" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" -"'%s' esta también en la lista de objetivos, usando NEW provoca conflictos" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLICTS:: %s posee conflictos con %s" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "falla en malloc: no se pudo alocar %d bytes" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc falló: no se pudo alocar %d bytes" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "no se pudo quitar la entrada en la base de datos %s%s" -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" +#: lib/libalpm/db.c:553 +#, fuzzy +msgid "attempt to re-register the 'local' DB\n"  msgstr "intento para re-registrar la base de datos 'local'" -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "intento para re-registrar la base de datos '%s', usando la existente" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "registrando la base de datos '%s'" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "el directorio de base de datos '%s'  no existe, creando" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "abriendo la base de datos '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "empezando a ordenar dependencias" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "posible ciclo de dependencias detectado" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "ordenamiento de dependencias finalizado" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "se ha encontrado un paquete nulo en la lista de paquetes" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "no se pudo encontrar el paquete instalado '%s'" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: la dependencia '%s' ha sido movida desde '%s' a '%s'" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "base de datos no inicializada" -#: lib/libalpm/deps.c:280 -#, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "" -"checkdeps: la dependencia '%s' es satisfecha por el paquete instalado '%s'" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "ciclo de dependencias detectado: %s" -#: lib/libalpm/deps.c:289 +#: lib/libalpm/deps.c:175  #, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -"checkdeps: El paquete actualizado '%s' no satisfará una dependencia de'%s'" -#: lib/libalpm/deps.c:359 +#: lib/libalpm/deps.c:177  #, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "dependencia faltante '%s' para el paquete '%s'" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: encontrado %s como lo requería %s" - -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "excluyendo %s -- instalado explícitamente" - -#: lib/libalpm/deps.c:532 -#, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "no se pudo encontrar el paquete \"%s\" o algo que lo provea!" - -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "agregando '%s' a los objetivos" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "empezando a resolver dependencias" - -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s provee la dependencia %s -- saltando" - -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"no se pudo resolver dependecias para \"%s\" (\"%s\" no está en las listas de " -"paquetes)" -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "la dependencia %s ya está en la lista de objetivos -- saltando" - -#: lib/libalpm/deps.c:667 -#, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "trayendo la dependencia %s (necesitada por %s)" - -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "no se pudo resolver las dependencias para \"%s\"" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "ciclo de dependencias detectado: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "se ha finalizado la resolución de dependencias" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "no hay memoria!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "error de sistema inesperado" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "privilegios insuficientes" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "no se pudo encontrar o leer el archivo" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "no se pudo encontrar o leer el archivo" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "argumento erroneo o núlo" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "librería no inicializada" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "la librería ya fue inicializada" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "no se pudo bloquear la base de datos" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "no se pudo abrir la base de datos" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "no se pudo crear la base de datos" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "base de datos no inicializada" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "base de datos ya registrada" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "no se pudo encontrar la base de datos" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "no se pudo actualizar la base de datos" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "no se pudo quitar la entrada de la base de datos" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "dirección inválida para el servidor" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "no se pudo fijar el parámetro" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "la operación ya se inicializó" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "operación no inicializada" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "objetivo duplicado" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "operación no lista" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "operación abortada" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "la operación no es compatible con el tipo de transacción" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "no se pudo hacer la transacción" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "no se pudo descargar todos los archivos" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "no se pudo encontrar o leer el paquete" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "paquete invalido o corrupto" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "no se pudo abrir el archivo de paquetes" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "no se pudo cargar la información del paquete" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "el paquete ya está instalado" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "el paquete no está instalado o es una versión menor" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "no se pudo quitar todos los archivos del paquete" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "el nombre del paquete no es válido" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "paquete corrupto" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "no existe el repositorio" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "paquete corrupto" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "grupo no encontrado" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "no se pudieron satisfacer las dependencias" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "dependencias en conflicto" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "archivos en conflicto" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "el usuario abortó la operación" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "error interno" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "error de libarchive" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "no hay suficiente espacio en el disco" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "no confirmado" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "nombre de sección de configuración erróneo" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "" -"'local'  esta reservado y no puede ser utilizado como nombre de repositorio" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "error de sintaxis en el archivo de configuración" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "todas las directivas deben pertenecer a una sección" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "expresión regular inválida" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "falló la conexión con el host remoto" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "error inesperado" -# canonicalize.. no supe traducirla bien -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "no se pudo obtener el la ruta canonica de la raiz especificada '%s'" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "opción 'root' = %s" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "opción 'dbpath' = %s" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "opción 'cachedir' = %s" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "%s no puede ser abierto\n" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "md5(%s) = %s" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "no se pudo obtener la verificación md5 para %s-%s" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: ignorando la actualización del paquete (%s)" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "la verificación md5 para el paquete %s-%s no concuerda" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: forzando la actualización a la versión %s" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: local (%s) es más nuevo que %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "%s-%s: aplazando la actualización del paquete (%s)" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: error de sintaxis en la linea de descripción de archivos %d" - -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n"  msgstr "no se pudo interpretar el archivo de descripción" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n"  msgstr "nombre de paquete perdido en %s" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n"  msgstr "versión de paquete perdida en %s" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "no se pudo quitar el archivo temporal %s" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "error mientras se leía el paquete : %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "faltan los metadatos del paquete " +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n" +msgstr "falta la metadata del paquete " -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n"  msgstr "falta la lita de paquetes en %s. generando una" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "agregando '%s' en el campo requiredby para '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "agregando '%s' en el campo requiredby para '%s' (provee %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "no se pudo encontrar %s en la base de datos" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "agregando %s en la lista de objetivos" -  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "poniendo %s en la lista de objetivos" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "no se pudo encontrar %s en la base de datos -- saltando" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "buscando dependencias a eliminar" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "no se pudo quitar el archivo '%s': %s" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "" -"saltando la eliminación de  '%s' debido a la condición de no actualización" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "el archivo %s no existe" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "manteniendo el directorio %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "quitando el directorio %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s esta en trans->skip_remove, saltando la eliminación" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "la transacción esta definida como NOSAVE, no se respaldará '%s'" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "desvinculando %s" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "no se pudo quitar el archivo %s: %s" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "quitando el paquete %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "no se quitará el paquete '%s', no se puede quitar todos los archivos" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "quitando %d archivos" -  #: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "quitando de la base de datos '%s'" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n"  msgstr "no se pudo quitar de la base de datos %s-%s" -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n"  msgstr "no se pudo quitar la entrada '%s' de la cache" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: %s no puede ser abierto\n" - -#: lib/libalpm/sha1.c:412 +#: lib/libalpm/server.c:56  #, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "verificando actualizaciones de paquetes" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s seleccionada para actualización (%s => %s)" +msgid "url '%s' is invalid, ignoring\n" +msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "buscando el objetivo en el repositorio '%s'" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "'%s' no se encontró -- buscando provisionales" +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "encontrado '%s' como provisional para '%s'" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "fallo al descargar algunos archivos desde %s\n" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" -msgstr "repositorio '%s' no encontrado" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s esta al día -- saltando" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "no se pudo quitar el archivo '%s': %s" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "agregando el objetivo '%s' a la lista de transacciones" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "error mientras se leía el paquete : %s" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "resolviendo las dependencias" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "no se pudo quitar el archivo '%s': %s" -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "agregando el paquete  %s-%s como blanco para la transacción" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "no se pudo cambiar el directorio a / (%s)" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "buscando dependencias no resueltas" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "el paquete '%s' posee conflictos con '%s'" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "'%s' no se encontró en las transacciones -- saltando" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "no se pudo descargar todos los archivos" -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "el paquete  '%s' provee su propio conflicto" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "" +"%s-%s: ignorando la actualización del paquete(para ser reemplazado por %s-%s)" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' esta en la lista de objetivos -- manteniendolo" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: ignorando la actualización del paquete (%s)" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "quitando '%s' de la lista de objetivos" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n" +msgstr "repositorio '%s' no encontrado" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "resolviendo el conflicto del paquete '%s'" +#: lib/libalpm/sync.c:354 +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s esta al día -- saltando" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "escogiendo '%s' para quitarlo" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s esta al día -- saltando" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "se han detectado paquetes con conflictos no resueltos" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "verificando dependencias de paquetes indicados para quitar" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "algo ha ido horriblemente mal" - -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "encontrado '%s' como provisional para '%s' -- conflicto abortado" - -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s ya esta en la cache\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "no existe la cache %s, creando...\n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "advertencia: no existe la cache %s. creándola..." +#: lib/libalpm/sync.c:628 +#, fuzzy, c-format +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "falla en malloc: no se pudo alocar %d bytes"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "no se pudo crear la cache de paquetes, usando /tmp en su lugar\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" -"advertencia: no se pudo crear la cache para paquetes. usando /tmp en su lugar" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "fallo al descargar algunos archivos desde %s\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr "no se pudo verificar md5 o sha1 para el paquete %s\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr ""  "el archivo %s estaba corrupto (no coincidió la verificación MD5 o SHA1)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "el archivo %s esta corrupto (verificación MD5 o SHA1 errónea)\n" +msgid "failed to retrieve some files from %s\n" +msgstr "fallo al descargar algunos archivos desde %s\n" -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n"  msgstr "no se pudo crear la operación de eliminación" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" +#: lib/libalpm/sync.c:1143 +#, fuzzy +msgid "could not initialize the removal transaction\n"  msgstr "no se pudo iniciar la operación de eliminación" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "quitando paquetes conflictivos y los que serán reemplazados" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n"  msgstr "no se pudo preparar la operación de eliminación" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1171 +#, fuzzy +msgid "could not commit removal transaction\n"  msgstr "no se pudo asignar la operación de quitado" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "instalando paquetes" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n"  msgstr "no se pudo crear la operación" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1187 +#, fuzzy +msgid "could not initialize transaction\n"  msgstr "no se pudo iniciar la operación" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n"  msgstr "no se pudo preparar la transacción" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "" -"actuando la base de datos para las dependencias de los paquetes reemplazados" +#: lib/libalpm/sync.c:1219 +#, fuzzy +msgid "could not commit transaction\n" +msgstr "no se pudo hacer la transacción" -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "no se pudo actualizar \"requiredby\" para la entrada %s-%s" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "no se pudo quitar el archivo de bloqueo %s" -#: lib/libalpm/sync.c:1039 +#: lib/libalpm/trans.c:483  #, c-format -msgid "could not update new database entry %s-%s" -msgstr "no se pudo actualizar la nueva entrada a la base de datos %s-%s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n" +msgstr "" -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "paquete encontrado '%s-%s' en la base de sincronización" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "no se puede crear el directorio temporal " -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "el paquete '%s' no fue encontrado en la base de sincronización" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "no se pudo cambiar el directorio a %s (%s)" -# No me agrada mucho esta traducción. Habrá una mejor manera de indicarlo? -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "" -"actualizando los campos 'requeridospor' de los paquetes de dependencias  " -"para %s-%s" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "no se pudo crear un nuevo proceso (%s)" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "el paquete no posee dependencias, no hay más paquetes para actualizar" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "no se pudo cambiar el directorio raíz (%s)" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "actualizando el campo 'requiredby' para '%s'" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "no se pudo cambiar el directorio a / (%s)" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "no se pudo actualizar \"requiredby\" para la entrada %s-%s" +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format +msgid "call to popen failed (%s)" +msgstr "llamada a waitpid fallida (%s)" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "no se pudo encontrar la dependencia '%s'" +#: lib/libalpm/trans.c:597 +#, fuzzy, c-format +msgid "call to waitpid failed (%s)\n" +msgstr "llamada a waitpid fallida (%s)" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "" + +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "no se pudo quitar el directorio temporal %s" + +#: lib/libalpm/util.c:204 +#, fuzzy, c-format +msgid "failed to make path '%s' : %s\n"  msgstr "fallo al crear la ruta '%s' : %s" -#: lib/libalpm/util.c:280 +#: lib/libalpm/util.c:389  #, c-format  msgid "could not open %s: %s\n"  msgstr "no se pudo abrir %s: %s\n" -#: lib/libalpm/util.c:293 +#: lib/libalpm/util.c:573  #, c-format -msgid "could not extract %s: %s\n" -msgstr "no se pudo extraer %s: %s\n" +msgid "no %s cache exists, creating...\n" +msgstr "no existe la cache %s, creando...\n" -#: lib/libalpm/util.c:350 -#, c-format -msgid "logaction called: %s" -msgstr "acción de registro llamada: %s" +#: lib/libalpm/util.c:593 +#, fuzzy +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "no se pudo crear la cache de paquetes, usando /tmp en su lugar\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "no se puede crear el directorio temporal " +#: lib/libalpm/util.c:643 +#, fuzzy, c-format +msgid "md5: %s can't be opened\n" +msgstr "%s no puede ser abierto\n" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" -msgstr "no se pudo cambiar el directorio a %s (%s)" +#: lib/libalpm/util.c:645 +#, fuzzy, c-format +msgid "md5: %s can't be read\n" +msgstr "%s no puede ser abierto\n" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." -msgstr "ejecutando el script %s..." +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "por favor quitar '%s' primero, usando -Rd" -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" -msgstr "no se pudo crear un nuevo proceso (%s)" +#~ msgid "could not extract %s (%s)" +#~ msgstr "no se pudo extraer %s (%s)" -#: lib/libalpm/util.c:496 -#, c-format -msgid "chrooting in %s" -msgstr "haciendo cambio de raiz en %s" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "no se pudo actualizar la provisión '%s' desde '%s'" -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" -msgstr "no se pudo cambiar el directorio raíz (%s)" +#, fuzzy +#~ msgid "%s: description file is missing" +#~ msgstr "%s: error de sintaxis en la linea de descripción de archivos %d" -#: lib/libalpm/util.c:502 -#, c-format -msgid "could not change directory to / (%s)" -msgstr "no se pudo cambiar el directorio a / (%s)" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "malloc falló: no se pudo alocar %d bytes" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "ejecutando \"%s\"" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "no se pudo resolver dependecias para \"%s\" (\"%s\" no está en las listas " +#~ "de paquetes)" -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" -msgstr "llamada a popen fallida (%s)" +# canonicalize.. no supe traducirla bien +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "no se pudo obtener el la ruta canonica de la raiz especificada '%s'" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" -msgstr "llamada a waitpid fallida (%s)" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "no se pudo obtener la verificación sha1 para %s-%s" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "no se pudo quitar el directorio temporal %s" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "la verificación sha1 no coincide para %s-%s" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "no se pudo quitar el archivo %s: %s" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "verificando espacio libre: tamaño total: %lld, espacio en disco: %lld" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha1: %s no puede ser abierto\n" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "el archivo %s esta corrupto (verificación MD5 o SHA1 errónea)\n" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" +#~ msgid "could not update requiredby for database entry %s-%s" +#~ msgstr "no se pudo actualizar \"requiredby\" para la entrada %s-%s" + +#~ msgid "could not update new database entry %s-%s" +#~ msgstr "no se pudo actualizar la nueva entrada a la base de datos %s-%s" + +#~ msgid "could not update 'requiredby' database entry %s-%s" +#~ msgstr "no se pudo actualizar \"requiredby\" para la entrada %s-%s" diff --git a/lib/libalpm/po/fr.po b/lib/libalpm/po/fr.po index d317e575..3ae1dff0 100644 --- a/lib/libalpm/po/fr.po +++ b/lib/libalpm/po/fr.po @@ -5,7 +5,7 @@ msgid ""  msgstr ""  "Project-Id-Version: Pacman package manager 3.0.1\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-04-17 12:45+0100\n"  "Last-Translator: nam <37ii11@altern.org>\n"  "Language-Team: solsTiCe d'Hiver <solstice.dhiver@laposte.net>\n" @@ -15,1664 +15,733 @@ msgstr ""  "X-Poedit-Language: French\n"  "X-Poedit-Country: FRANCE\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "chargement de la cible '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr ""  "remplacement de l'ancienne version %s-%s par %s dans la liste des cibles" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr ""  "une version plus récente %s-%s est dans la liste des cibles -- paquet ignoré" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "lecture des méta-données '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "recherche des dépendances non satisfaites" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "recherche des conflits" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "remplacer un paquet avec -A ou -U n'est pas encore possible" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "veuillez supprimer '%s' d'abord, en utilisant -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "tri par dépendances" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "nettoyage" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "recherche de conflits entre fichiers" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "mise à jour du paquet %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "ajout du paquet %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "suppression préalable de l'ancien paquet (%s-%s)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:411 +#: lib/libalpm/add.c:365  #, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "ajout provisoire de %s parmi les paquets à ne pas mettre à jour" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "extraction des fichiers" - -# j'ai traduit chaque fois "could not" par "a échoué" -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "déterminer le répertoire courant a échoué" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 +#: lib/libalpm/add.c:392  #, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s est dans la liste des paquets NoExtract -- extraction non effectuée" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:399  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s est dans trans->skip_add, extraction ignorée" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422 +#, fuzzy, c-format +msgid "could not extract %s (%s)\n"  msgstr "l'extraction de %s (%s) a échoué" -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "vérification de la 'signature' md5 pour %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "vérification de la 'signature' sha1 pour %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "courant:   %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "nouveau: %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "original:   %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "renommer %s (%s) a échoué" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "erreur: renommer %s (%s) a échoué" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "la copie du fichier temporaire vers %s (%s) a échoué" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "erreur: la copie du fichier temporaire vers %s (%s) a échoué" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s enregistré en tant que %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "avertissement: %s enregistré en tant que %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "action: installation du nouveau fichier: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "action: quitte en préservant les fichiers existants" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"action: conserve le fichier actuel et installe le nouveau avec l'extension ." -"pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "l'installation de %s en tant que %s: %s a échoué" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "erreur: l'installation de %s en tant que %s: %s a échoué" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s installé en tant que %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "avertissement: %s installé en tant que %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s est parmi les paquets à ne pas mettre à jour -- ignoré" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "extraction de %s comme %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "avertissement: extraction de %s comme %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "extraction de %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "erreur: l'extraction de %s (%s) a échoué" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "ajoute une entrée de sauvegarde pour %s" +# j'ai traduit chaque fois "could not" par "a échoué" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "déterminer le répertoire courant a échoué" -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n"  msgstr "des erreurs sont survenues pendant %s %s" -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "mise à jour" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "installation" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "la condition '%s' a été supprimée du paquet %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "mise à jour de '%s' suite à un changement de contenu (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "la mise à jour du contenu '%s' dans '%s' a échoué" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "mise à jour de la base de données" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "ajout de l'entrée de base de données '%s'" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "des erreurs sont survenues pendant %s %s" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "la mise à jour l'entrée de base de données %s-%s a échoué" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" +#: lib/libalpm/add.c:793 +#, fuzzy, c-format +msgid "could not add entry '%s' in cache\n"  msgstr "l'ajout au cache de l'entrée '%s' a échoué" -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "exécution de \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "suppression de la DB %s, %d restant..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "désenregistrement de la base de données '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "fermeture de la base de données '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"ajout d'un nouveau serveur à la base '%s': protocole '%s', serveur '%s', " -"chemin '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "liste des serveurs mise à jour pour '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"échec de récupération de la date de dernière mise à jour pour %s (problème " -"mineur)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "échec de synchronisation de la base de données: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sync: nouveau mtime pour %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "mise à jour de la base de données %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "la suppression de l'entrée de base de données %s%s a échoué" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "l'obtention de la 'signature' sha1 pour le paquet %s-%s a échoué" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "les 'signatures' sha1 correspondent pour le paquet %s-%s" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "les 'signatures' sha1 ne correspondent pas pour le paquet %s-%s" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "l'obtention de la 'signature' md5 pour le paquet %s-%s a échoué" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "les 'signatures' md5 correspondent pour le paquet %s-%s" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "les 'signatures' md5 ne correspondent pas pour le paquet %s-%s" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "la suppression du fichier de verrouillage %s a échoué" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "avertissement: la suppression du fichier de verrouillage %s a échoué" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "config: nouvelle section '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "config: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "config: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "config: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "config: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "config: inclusion de %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "config: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "config: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "config: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "config: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "config: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 -#, c-format -msgid "config: rootdir: %s" -msgstr "config: rootdir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "config: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "config: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "config: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "analyse de remplacements possibles pour le paquet" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "analyse du remplacement '%s' pour le paquet '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: ignore la mise à jour du paquet (à remplacer par %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s sélectionné pour mise à jour (à remplacer par %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' non trouvé dans la liste de synchronisation -- ignoré" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' est déjà sélectionné pour suppression -- ignoré" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s sélectionné pour mise à jour (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "décompression de la base de données '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "ouverture de la base de données à partir du chemin '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "l'analyse de la base de données n'a pas pu trouver le paquet: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +#: lib/libalpm/be_files.c:223 +#, fuzzy, c-format +msgid "invalid name for database entry '%s'\n"  msgstr "nom invalide pour l'entrée de base de données '%s'" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "paquet invalide fournit à _alpm_db_read, et ignoré" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" -"demande de lecture de la base de données pour un paquet type fichier '%s', " -"ignoré..." - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" +#: lib/libalpm/be_files.c:275 +#, fuzzy, c-format +msgid "loading package data for %s : level=%d\n"  msgstr "chargement des données du paquet %s : niveau=%d" -# j'ai traduit chaque fois "cannot" par "impossible de" -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "impossible de trouver %s-%s dans la base de données '%s'" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "l'ouverture du fichier %s: %s a échoué" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "écriture des informations DESC pour %s-%s dans la base de données" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "écriture des informations FILES pour %s-%s dans la base de données" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "écriture des informations DEPENDS pour %s-%s dans la base de données" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "chargement du cache de paquets pour le dépôt '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" +#: lib/libalpm/cache.c:62 +#, fuzzy, c-format +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "ajout de '%s' au cache de paquets pour la base de données '%s'" -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "nettoyage du cache de paquets pour le dépot '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "erreur: pkgcache est NULL pour la base de données '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "ajout de l'entrée '%s' dans '%s' cache" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "suppression de l'entrée '%s' du '%s' cache" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "impossible de supprimer le cache '%s' de l'entrée '%s': non trouvé" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "erreur: échec d'obtention de '%s' de NULL pkgcache" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "chargement du cache de groupe pour le dépôt '%s'" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   conflit détecté '%s' : paquet '%s'" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   conflit détecté '%s': paquet '%s' fournit '%s'" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "" -"le paquet '%s' est en conflit avec lui-même - erreur de création de paquet" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "analyse des conflits: cible '%s' comparée à la base" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "analyse des conflits: cible '%s' comparée aux cibles" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "analyse des conflits: base de données comparée à la cible '%s'" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" -"'%s' est aussi dans la liste de cibles, analyse des nouveaux conflits " -"possibles" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLITS:: %s est en conflit avec %s" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "erreur malloc: n'a pas pu allouer %d bytes" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc a echoué: n'a pas pu allouer %d bytes" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "la suppression de l'entrée de base de données %s%s a échoué" -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" +#: lib/libalpm/db.c:553 +#, fuzzy +msgid "attempt to re-register the 'local' DB\n"  msgstr "tentative de ré-enregistrer la base de données locale" -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" -"essai de ré-enregistrement de la base de données '%s', utilisant celle qui " -"existe" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "enregistrement de la base de données '%s'" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "le répertoire de base de données '%s' n'existe pas, création" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "ouverture de la base de données '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "début du tri des dépendances" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "possible cycle de dépendances détecté" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "fin du tri des dépendances" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "aucun paquet trouvé dans la liste des paquets" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "impossible de trouver le paquet installé '%s'" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: dépendance '%s' a changé de '%s' à '%s'" - -#: lib/libalpm/deps.c:280 -#, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "checkdeps: dépendance '%s' satisfaite par le paquet installé '%s'" - -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "checkdeps: '%s' mis à jour ne satisfera pas une dépendance de '%s'" - -#: lib/libalpm/deps.c:359 -#, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "dépendance manquante '%s' pour le paquet '%s'" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: trouvé %s, comme requis par %s" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "base de données non initialisée" -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "exclusion de %s -- explicitement installé" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "cycle de dépendances détecté: %s" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/deps.c:175  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -"impossible de trouver le paquet \"%s\" ou quoique ce soit qui le fournisse!" -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 +#: lib/libalpm/deps.c:177  #, c-format -msgid "adding '%s' to the targets" -msgstr "ajout de '%s' aux cibles" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "début du tri des dépendances" - -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s fournit la dépendance %s -- ignoré" - -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"résolution des dépendances impossible pour \"%s\" (\"%s\" n'est pas parmi " -"les paquets)" - -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "la dépendance %s est déjà dans la liste de cibles -- ignorée" -#: lib/libalpm/deps.c:667 -#, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "récupération de la dépendance %s (requise par %s)" - -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "résolution des dépendances impossible pour \"%s\"" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "cycle de dépendances détecté: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "fin du tri des dépendances" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "dépassement de mémoire!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "erreur système non prévue" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "autorisation insuffisante" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "trouver ou lire le fichier a échoué" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "trouver ou lire le fichier a échoué" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "un argument erroné ou nul a été fourni" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "librairie non initialisée" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "librairie déjà initialisée" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "verrouillage de la base de données impossible" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "l'ouverture de la base de données a échoué" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "la création de la base de données a échoué" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "base de données non initialisée" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "base de données déjà enregistrée" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "trouver la base de données a échoué" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "la mise à jour de la base de données a échoué" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "la suppression de l'entrée de base de données a échoué" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "URL invalide pour le serveur" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "définir le paramètre a échoué" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "transaction déjà initialisée" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "transaction non initialisée" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "cible répétée" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "transaction non préparée" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "transaction annulée" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "opération incompatible avec le type de transaction" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "appliquer la transaction a échoué" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "tous les fichiers n'ont pas pu être téléchargés" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "trouver ou de lire le paquet a échoué" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "paquet invalide ou corrompu" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "ouverture du fichier paquet impossible" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "chargement des données du paquet impossible" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "paquet déjà installé" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "paquet non installé ou version plus ancienne" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "suppression de certains fichiers du paquet impossible" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "nom de paquet invalide" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "paquet corrompu" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "ce dépôt n'existe pas" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "paquet corrompu" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "groupe non trouvé" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "la satisfaction des dépendances a échoué" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "conflit de dépendances" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "conflit de fichiers" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "opération annulée par l'utilisateur" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "erreur interne" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "erreur de libarchive" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "espace disque insuffisant" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "non confirmé" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "nom de la section de configuration erroné" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "'local' est réservé et ne peut être utilisé comme nom de dépôt" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "erreur de syntaxe dans le fichier de configuration" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "toutes les directives doivent appartenir à une section" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "expression régulière incorrecte" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "échec de connexion à l'hôte distant " -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "erreur non prévue" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "normalisation du chemin root '%s' impossible" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "option 'root' = %s" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "option 'dbpath' = %s" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "option 'cachedir' = %s" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "l'ouverture de %s a échoué\n" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "md5(%s) = %s" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "l'obtention de la 'signature' md5 pour le paquet %s-%s a échoué" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: ignore la mise à jour du paquet (%s)" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "les 'signatures' md5 ne correspondent pas pour le paquet %s-%s" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: force la mise à jour à la version %s" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: la version locale (%s) est plus récente que %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "%s-%s: retarde la mise à jour du paquet (%s)" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: erreur de syntaxe dans le fichier de description à la ligne %d" - -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n"  msgstr "l'analyse du fichier de description a échoué" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n"  msgstr "nom de paquet manquant dans %s" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n"  msgstr "version de paquet manquante dans %s" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "la suppression du fichier temporaire %s a échoué" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "erreur lors de la lecture du paquet: %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n"  msgstr "méta-données du paquet manquantes" -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n"  msgstr "liste de fichiers absente du paquet %s, création" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "ajoute '%s' dans le champ 'requis par' pour '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "ajoute '%s' dans le champ 'requis par' pour '%s' (fournit: %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "trouver %s dans la base de données a échoué" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "ajoute %s dans la liste des cibles" -  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "ajoute %s à la liste des cibles" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "trouver %s dans la base de données a échoué -- ignoré" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "trouve les dépendances susceptibles d'être supprimées" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "suppression du fichier '%s': %s impossible" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "Ignore la suppression de %s pour cause de NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "le fichier %s n'existe pas" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "préservation du répertoire %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "suppression du répertoire %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s est dans trans->skip_remove, suppression ignorée" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "la transaction se fait avec option NOSAVE, pas de sauvegarde de '%s'" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "suppression du lien %s" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "suppression du fichier %s: %s impossible" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "suppression du paquet %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "paquet '%s' non supprimé, certains fichiers ne peuvent être supprimés" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "suppression de %d fichiers" -  #: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "suppression de l'entrée de base de données %s" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n"  msgstr "la suppression de l'entrée de base de données %s-%s a échoué" -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n"  msgstr "la suppression du cache de l'entrée '%s' a échoué" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: %s ne peut être ouvert\n" - -#: lib/libalpm/sha1.c:412 +#: lib/libalpm/server.c:56  #, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "vérification des mises à jour disponibles" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s sélectionné pour mise à jour (%s => %s)" +msgid "url '%s' is invalid, ignoring\n" +msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "cherche la cible dans le dépôt '%s'" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "cible '%s' non trouvée -- recherche des " +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "trouvé '%s' comme condition pour '%s'" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "échec de récupération de certains fichiers depuis %s\n" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" -msgstr "dépôt '%s' non trouvé" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s est à jour -- ignoré" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "suppression du fichier '%s': %s impossible" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "ajout de la cible '%s' au jeu de transactions" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "erreur lors de la lecture du paquet: %s" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "résolution des dépendances pour la cible" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "suppression du fichier '%s': %s impossible" -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "ajout du paquet %s-%s aux cibles de la transaction" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "changer de répertoire vers / (%s) a échoué" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "recherche de dépendances impossibles à résoudre" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "le paquet '%s' est en conflit avec '%s'" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "'%s' non trouvé dans le jeu de transactions -- ignoré" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "tous les fichiers n'ont pas pu être téléchargés" -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "le paquet '%s' génère son propre conflit" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: ignore la mise à jour du paquet (à remplacer par %s-%s)" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' est dans la la liste de cibles -- conservation" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: ignore la mise à jour du paquet (%s)" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "suppression de '%s' de la liste des cibles" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n" +msgstr "dépôt '%s' non trouvé" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "résolution des conflits pour le paquet '%s'" +#: lib/libalpm/sync.c:354 +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s est à jour -- ignoré" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "sélection de '%s' pour suppression" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s est à jour -- ignoré" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "un conflit de paquets impossible à résoudre a été détecté" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "analyse des dépendances des paquets sélectionnés pour suppression" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "quelque chose s'est horriblement mal passé" - -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "trouvé '%s' comme  pour '%s' -- conflit annulé" - -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s est déjà dans le cache\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "le cache %s n'existe pas, création...\n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "avertissement: le cache %s n'existe pas, création..." +#: lib/libalpm/sync.c:628 +#, fuzzy, c-format +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "erreur malloc: n'a pas pu allouer %d bytes"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "n'a pas pu créer le cache de paquets, /tmp sera utilisé à la place\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" -"avertissement: ne peut créer le cache de paquets, /tmp sera utilisé à la " -"place" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "échec de récupération de certains fichiers depuis %s\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr "ne peut obtenir la 'signature' md5 ou sha1 pour le paquet %s\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "l'archive %s était corrompue (mauvaise somme MD5 ou SHA1)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "l'archive %s est corrompue (mauvaise somme MD5 ou SHA1)\n" +msgid "failed to retrieve some files from %s\n" +msgstr "échec de récupération de certains fichiers depuis %s\n" -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n"  msgstr "la création de la transaction de suppression a échoué" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" +#: lib/libalpm/sync.c:1143 +#, fuzzy +msgid "could not initialize the removal transaction\n"  msgstr "l'initialisation de la transaction de suppression a échoué" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "suppression des paquets en conflit et de ceux à remplacer" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n"  msgstr "la préparation de la transaction de suppression a échoué" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1171 +#, fuzzy +msgid "could not commit removal transaction\n"  msgstr "appliquer la transaction de suppression a échoué" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "installation des paquets" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n"  msgstr "la création de la transaction a échoué" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1187 +#, fuzzy +msgid "could not initialize transaction\n"  msgstr "l'initialisation de la transaction a échoué" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n"  msgstr "la préparation de la transaction a échoué" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "" -"mise à jour de la base de données avec les dépendances des paquets remplacés" - -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "" -"la mise à jour du champ requiredby pour l'entrée de base de données %s-%s a " -"échoué" - -#: lib/libalpm/sync.c:1039 -#, c-format -msgid "could not update new database entry %s-%s" -msgstr "la mise à jour de la nouvelle entrée de base de données %s-%s a échoué" - -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "paquet '%s-%s' trouvé dans sync" - -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "paquet '%s' non trouvé dans la liste de synchronisation" - -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "mise à jour des dépendances dans les champs 'requiredby' pour %s-%s" - -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "le paquet n'a aucune dépendance, pas d'autres paquets à mettre à jour" +#: lib/libalpm/sync.c:1219 +#, fuzzy +msgid "could not commit transaction\n" +msgstr "appliquer la transaction a échoué" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "mise à jour du champ 'requiredby' pour le paquet '%s'" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "la suppression du fichier de verrouillage %s a échoué" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 +#: lib/libalpm/trans.c:483  #, c-format -msgid "could not update 'requiredby' database entry %s-%s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"  msgstr "" -"la mise à jour du champ 'requiredby' de l'entrée de base de données %s-%s a " -"échoué" - -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "trouver la dépendance '%s' a échoué" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" -msgstr "échec de la création du chemin '%s' : %s" - -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" -msgstr "l'ouverture de %s: %s a échoué\n" - -#: lib/libalpm/util.c:293 -#, c-format -msgid "could not extract %s: %s\n" -msgstr "l'extraction de %s: %s a échoué\n" - -#: lib/libalpm/util.c:350 -#, c-format -msgid "logaction called: %s" -msgstr "logaction called: %s" - -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n"  msgstr "la création du répertoire temporaire a échoué" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n"  msgstr "changer de répertoire vers %s (%s) a échoué" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." -msgstr "exécution du script %s ..." - -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n"  msgstr "la génération d'un nouveau processus (%s) a échoué" -#: lib/libalpm/util.c:496 -#, c-format -msgid "chrooting in %s" -msgstr "chroot dans %s" - -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n"  msgstr "changer le répertoire racine (%s) a échoué" -#: lib/libalpm/util.c:502 -#, c-format -msgid "could not change directory to / (%s)" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n"  msgstr "changer de répertoire vers / (%s) a échoué" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "exécution de \"%s\"" - -#: lib/libalpm/util.c:509 -#, c-format +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format  msgid "call to popen failed (%s)" -msgstr "l'appel à popen a échoué (%s)" +msgstr "call to waitpid failed (%s)" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" +#: lib/libalpm/trans.c:597 +#, fuzzy, c-format +msgid "call to waitpid failed (%s)\n"  msgstr "call to waitpid failed (%s)" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "la suppression du répertoire temporaire %s a échoué" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "impossible de lire l'information concernant l'espace disque de %s: %s" +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "la suppression du répertoire temporaire %s a échoué" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "check_freespace: taille totale: %lld, espace disque: %lld" +#: lib/libalpm/util.c:204 +#, fuzzy, c-format +msgid "failed to make path '%s' : %s\n" +msgstr "échec de la création du chemin '%s' : %s" -#: lib/libalpm/versioncmp.c:279 +#: lib/libalpm/util.c:389  #, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +msgid "could not open %s: %s\n" +msgstr "l'ouverture de %s: %s a échoué\n" -#: lib/libalpm/versioncmp.c:284 +#: lib/libalpm/util.c:573  #, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" - -#~ msgid "%s saved as %s.pacorig" -#~ msgstr "%s sauve en tant que %s.pacorig" - -#~ msgid "could not parse token %s" -#~ msgstr "ne peut analyser l'élément %s" - -#~ msgid "notice: %s is in NoExtract -- skipping extraction" -#~ msgstr "note: %s est dans la liste NoExtract -- ignore l'extraction" - -#~ msgid "loading package cache (infolevel=%#x) for repository '%s'" -#~ msgstr "chargement du cache de paquet (infolevel=%#x) pour le dépot '%s'" - -#, fuzzy -#~ msgid "package cache reloaded (infolevel=%#x) for repository '%s'" -#~ msgstr "chargement du cache de paquet (infolevel=%#x) pour le dépot '%s'" - -#~ msgid "targs vs db: found %s as a conflict for %s" -#~ msgstr "" -#~ "comparaison cibles / base de données : trouve %s comme conflit pour %s" - -#~ msgid "targs vs targs: found %s as a conflict for %s" -#~ msgstr "" -#~ "comparaison cible / liste de cibles : trouve %s comme conflit pour %s" - -#~ msgid "db vs targs: found %s as a conflict for %s" -#~ msgstr "comparaison base de donnée / cibles: trouve %s en conflit avec %s" - -#, fuzzy -#~ msgid "no dependencies for target '%s'" -#~ msgstr "ne peut résoudre les dépendances pour \"%s\"" - -#, fuzzy -#~ msgid "%s-%s: ignoring package upgrade (%s => %s)" -#~ msgstr "%s-%s: ignore la mise à jour du paquet (%s)" - -#~ msgid "adding new package %s-%s" -#~ msgstr "ajout du nouveau paquet %s-%s" - -#~ msgid "error updating database for %s-%s!" -#~ msgstr "erreur lors de la mise a jour de la base de données pour %s-%s!" - -#~ msgid "dep is NULL!" -#~ msgstr "dep est NULL!" - -#~ msgid "loading ALL info for '%s'" -#~ msgstr "chargement de TOUTES les infos pour '%s'" +msgid "no %s cache exists, creating...\n" +msgstr "le cache %s n'existe pas, création...\n" +#: lib/libalpm/util.c:593  #, fuzzy -#~ msgid "could not find dependency '%s' for removal" -#~ msgstr "n'a pas pu trouver la dépendance '%s'" +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "n'a pas pu créer le cache de paquets, /tmp sera utilisé à la place\n" -#~ msgid "loading FILES info for '%s'" -#~ msgstr "chargement des informations de fichiers pour '%s'" +#: lib/libalpm/util.c:643 +#, fuzzy, c-format +msgid "md5: %s can't be opened\n" +msgstr "l'ouverture de %s a échoué\n" -#~ msgid "loading DESC info for '%s'" -#~ msgstr "chargement des informations descriptives pour '%s'" +#: lib/libalpm/util.c:645 +#, fuzzy, c-format +msgid "md5: %s can't be read\n" +msgstr "l'ouverture de %s a échoué\n" -#, fuzzy -#~ msgid "syntax error" -#~ msgstr "erreur interne" +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "veuillez supprimer '%s' d'abord, en utilisant -Rd" -#~ msgid "unpacking %s" -#~ msgstr "décompacte %s" +#~ msgid "could not extract %s (%s)" +#~ msgstr "l'extraction de %s (%s) a échoué" -#~ msgid "loading SCRIPLET info for '%s'" -#~ msgstr "charge les infos de SCRIPLET pour '%s'" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "la mise à jour du contenu '%s' dans '%s' a échoué"  #, fuzzy -#~ msgid "config: %s: server: %s\n" -#~ msgstr "avertissement: %s sauve en tant que %s" - -#~ msgid "db_write: could not open file %s/desc" -#~ msgstr "db_write: n'a pas pu ouvrir le fichier %s/desc" - -#~ msgid "db_write: could not open file %s/files" -#~ msgstr "db_write: n'a pas pu ouvrir le fichier %s/files" - -#~ msgid "db_write: could not open file %s/depends" -#~ msgstr "db_write: n' pas pu ouvrir le fichier %s/depends" - -#~ msgid "PM_OPT_DBPATH set to '%s'" -#~ msgstr "PM_OPT_DBPATH défini à '%s'" - -#~ msgid "PM_OPT_CACHEDIR set to '%s'" -#~ msgstr "PM_OPT_CACHEDIR défini à '%s'" - -#~ msgid "can't open log file %s" -#~ msgstr "ne peut ouvrir le fichier de log %s" - -#~ msgid "PM_OPT_LOGFILE set to '%s'" -#~ msgstr "PM_OPT_LOGFILE défini à '%s'" +#~ msgid "%s: description file is missing" +#~ msgstr "%s: erreur de syntaxe dans le fichier de description à la ligne %d" -#~ msgid "'%s' added to PM_OPT_NOUPGRADE" -#~ msgstr "'%s' ajouté à PM_OPT_NOUPGRADE" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "malloc a echoué: n'a pas pu allouer %d bytes" -#~ msgid "PM_OPT_NOUPGRADE flushed" -#~ msgstr "PM_OPT_NOUPGRADE rechargé" - -#~ msgid "'%s' added to PM_OPT_NOEXTRACT" -#~ msgstr "'%s' ajouté à PM_OPT_NOEXTRACT" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "résolution des dépendances impossible pour \"%s\" (\"%s\" n'est pas parmi " +#~ "les paquets)" -#~ msgid "PM_OPT_NOEXTRACT flushed" -#~ msgstr "PM_OPT_NOEXTRACT rechargé" +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "normalisation du chemin root '%s' impossible" -#~ msgid "'%s' added to PM_OPT_IGNOREPKG" -#~ msgstr "'%s' ajouté à PM_OPT_IGNOREPKG" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "l'obtention de la 'signature' sha1 pour le paquet %s-%s a échoué" -#~ msgid "PM_OPT_IGNOREPKG flushed" -#~ msgstr "PM_OPT_IGNOREPKG rechargé" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "les 'signatures' sha1 ne correspondent pas pour le paquet %s-%s" -#, fuzzy -#~ msgid "'%s' added to PM_OPT_HOLDPKG" -#~ msgstr "'%s' ajouté à PM_OPT_IGNOREPKG" - -#, fuzzy -#~ msgid "PM_OPT_HOLDPKG flushed" -#~ msgstr "PM_OPT_IGNOREPKG rechargé" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "suppression du fichier %s: %s impossible" -#~ msgid "PM_OPT_USESYSLOG set to '%d'" -#~ msgstr "PM_OPT_USESYSLOG défini à '%d'" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha1: %s ne peut être ouvert\n" -#~ msgid "PM_OPT_LOGMASK set to '%02x'" -#~ msgstr "PM_OPT_LOGMASK défini à '%02x'" - -#, fuzzy -#~ msgid "PM_OPT_PROXYHOST set to '%s'" -#~ msgstr "PM_OPT_DBPATH défini à '%s'" - -#, fuzzy -#~ msgid "PM_OPT_PROXYPORT set to '%d'" -#~ msgstr "PM_OPT_DBPATH défini à '%s'" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "l'archive %s est corrompue (mauvaise somme MD5 ou SHA1)\n" -#, fuzzy -#~ msgid "PM_OPT_XFERCOMMAND set to '%s'" -#~ msgstr "PM_OPT_CACHEDIR défini à '%s'" - -#, fuzzy -#~ msgid "PM_OPT_NOPASSIVEFTP set to '%d'" -#~ msgstr "PM_OPT_DBPATH défini à '%s'" - -#, fuzzy -#~ msgid "PM_OPT_CHOMP set to '%d'" -#~ msgstr "PM_OPT_CACHEDIR défini à '%s'" +#~ msgid "could not update requiredby for database entry %s-%s" +#~ msgstr "" +#~ "la mise à jour du champ requiredby pour l'entrée de base de données %s-%s " +#~ "a échoué" -#~ msgid "bad package file in %s" -#~ msgstr "mauvais fichier de paquet dans %s" +#~ msgid "could not update new database entry %s-%s" +#~ msgstr "" +#~ "la mise à jour de la nouvelle entrée de base de données %s-%s a échoué" -#~ msgid "%s-%s: local version is newer -- skipping" -#~ msgstr "%s-%s: la version locale est plus récente -- ignoré" +#~ msgid "could not update 'requiredby' database entry %s-%s" +#~ msgstr "" +#~ "la mise à jour du champ 'requiredby' de l'entrée de base de données %s-%s " +#~ "a échoué" diff --git a/lib/libalpm/po/hu.po b/lib/libalpm/po/hu.po index 2caf23fe..cd0555fe 100644 --- a/lib/libalpm/po/hu.po +++ b/lib/libalpm/po/hu.po @@ -7,7 +7,7 @@ msgid ""  msgstr ""  "Project-Id-Version: hu\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-03-14 13:45+0100\n"  "Last-Translator: Nagy Gabor <ngaba@petra.hos.u-szeged.hu>\n"  "Language-Team:  <hu@li.org>\n" @@ -17,1502 +17,728 @@ msgstr ""  "Plural-Forms: nplurals=1; plural=0;\n"  "X-Generator: KBabel 1.11.4\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "cl betltse '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "a %s-%s-t lecserli a %s a cl listban" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr "az jabb verzi (%s-%s) mr elrhet a cl listban -- kihagys" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "'%s' metaadat olvassa" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "elgtelen fggsgek keresse" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "konfliktusok keresse" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "csomagok lecserlse mg nem tmogatott -A s -U esetn" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "krem elszr tvoltsa el '%s'-t a -Rd kapcsolt hasznlva" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "rendezs fggsgek szerint" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "tisztts" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "fjl konfliktusok keresse" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "csomag frisstse: %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "csomag hozzadsa %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "elsknt a rgi csomag eltvoltsa (%s-%s)" - -#: lib/libalpm/add.c:411 -#, c-format -msgid "adding %s to the NoUpgrade array temporarily" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n"  msgstr "" -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "fjlok kitmrtse" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "a jelenlegi munkaknyvtr nem kaphat meg" - -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 -#, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s a NoExtractben van, kitmrts kihagysa" - -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:365  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n"  msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" -msgstr "nem sikerlt kitmrteni: %s (%s)" - -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "md5 sszegek vizsglata a %s szmra" - -#: lib/libalpm/add.c:600 +#: lib/libalpm/add.c:392  #, c-format -msgid "checking sha1 hashes for %s" -msgstr "sha1 sszegek vizsglata a %s szmra" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "jelenlegi: %s" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:603 +#: lib/libalpm/add.c:399  #, c-format -msgid "new:      %s" -msgstr "j:       %s" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:604 +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422  #, c-format -msgid "original: %s" -msgstr "eredeti:  %s" +msgid "could not extract %s (%s)\n" +msgstr "nem sikerlt kitmrteni: %s (%s)\n" -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "nem sikerlt tnevezni: %s (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "hiba: nem sikerlt tnevezni: %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "nem sikerlt az ideiglenes fjlt ide msolni: %s (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "hiba: nem sikerlt az ideiglenes fjlt ide msolni: %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "a %s elmentve %s nven" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "figyelmeztets: a %s elmentve %s nven" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "folyamat: j fjl teleptse: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "folyamat: a jelenlegi fjl megtartsa" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"folyamat: a jelenlegi fjl megtartsa s az j .pacnew vgzdssel val " -"teleptse" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "nem sikerlt telepteni a %s-t %s-knt: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "hiba: nem sikerlt telepteni a %s-t %s-knt: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "a %s %s nven lett teleptve" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "figyelmeztets: a %s nven %s lett teleptve" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s a NoUpgrade-ben van -- kihagys" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "%s kitmrtse %s.pacnew nven" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "figyelmeztets: %s kitmrtse %s.pacnew nven" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "a %s kitmrtse" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "hiba: nem sikerlt kitmrteni: %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "" - -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" -msgstr "hiba %s kzben: %s" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "frissts" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "telepts" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "a jelenlegi munkaknyvtr nem kaphat meg" -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "az adatbzis frisstse" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n" +msgstr "hiba trtnt a(z) %s frisstse kzben" -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "adatbzis mez hozzadsa '%s'" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "hiba trtnt a(z) %s teleptse kzben" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "sikertelen a '%s-%s' adatbzis-bejegyzs frisstse" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" +#: lib/libalpm/add.c:793 +#, fuzzy, c-format +msgid "could not add entry '%s' in cache\n"  msgstr "sikertelen a '%s' bejegyzs hozzadsa a gyorsttrhoz" -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "az \"ldconfig -r %s\" futtatsa" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "" - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "adatbzis eltvoltsa: '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "adatbzis bezrsa: '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"j szerver hozzadsa a(z) '%s' adatbzishoz: protokoll '%s', szerver '%s', " -"t '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "a szerverlista rtve a(z) '%s' szmra" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"nem sikerlt megkapni az utols mdostsi idpontjt a kvetkeznek: %s " -"(nincs sok esly)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "nem sikerlt szinkronizlni a(z) '%s' adatbzist [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "sikertelen a %s%s adatbzis-bejegyzs eltvoltsa" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "sikertelen az sha1 ellenrz sszeg elrse a %s-%s csomag szmra" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "a %s-%s csomag sha1 ellenrz sszegei megegyeznek" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "%s-%s csomag sha1 ellenrz sszegei nem egyeznek meg" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "sikertelen az md5 ellenrz sszeg elrse a %s-%s csomag szmra" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "a %s-%s csomag md5 ellenrz sszegei megegyeznek" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "%s-%s csomag md5 ellenrz sszegei nem egyeznek meg" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "nem sikerlt a zrol fjl (%s) eltvoltsa" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "figyelmeztets: nem sikerlt a zrol fjl (%s) eltvoltsa" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "belltsok: j szekci '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "belltsok: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "belltsok: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "belltsok: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "belltsok: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "belltsok: a %s beolvassa" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "belltsok: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "belltsok: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "belltsok: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "belltsok: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "belltsok: adatbzistvonal: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "belltsok: gyorsttrknyvtr: %s" - -#: lib/libalpm/alpm.c:1044 +#: lib/libalpm/be_files.c:223  #, fuzzy, c-format -msgid "config: rootdir: %s" -msgstr "belltsok: gyorsttrknyvtr: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "belltsok: naplfjl: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "belltsok: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "belltsok: frissts ksleltetse: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "csomagcserk ellenrzse" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "csere vizsglata: '%s' -> '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: frissts figyelmen kvl hagysa (a %s-%s fogja lecserlni)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "a %s-%s kivlasztva frisstsre (a %s-%s fogja lecserlni)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "a '%s' nem tallhat a tvoli adatbzisban -- kihagys" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "a '%s' mr kijellve eltvoltsra -- kihagys" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "a(z) %s kivlasztva frisstsre (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "a(z) '%s' adatbzis kitmrtse" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +msgid "invalid name for database entry '%s'\n"  msgstr "rvnytelen nv a '%s' adatbzis-bejegyzs szmra" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "az _alpm_db_read nem rvnyes csomag bejegyzst kapott, kihagys" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" -msgstr "" - -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "nem tallhat '%s-%s' a(z) '%s' adatbzisban" +#: lib/libalpm/be_files.c:275 +#, fuzzy, c-format +msgid "loading package data for %s : level=%d\n" +msgstr "a(z) %s csomag adatainak betltse : szint=%d" -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "nem sikerlt megnyitni a %s fjlt: %s" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "csomaggyorsttr betltse '%s' rep szmra" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" +#: lib/libalpm/cache.c:62 +#, fuzzy, c-format +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "a(z) '%s' csomag hozzadsa a(z) '%s' adatbzis csomaggyorsttrhoz" -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "csomaggyorsttr felszabadtsa a '%s' rep szmra" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "a '%s' bejegyzs hozzadsa a '%s' gyorsttrhoz" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "a '%s' bejegyzs eltvoltsa a '%s' gyorsttrbl" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "" -"nem sikerlt a '%s' bejegyzs eltvoltsa a '%s' gyorsttrbl: nem " -"tallhat" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "csoportgyorsttr betltse a '%s' rep szmra" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "a(z) '%s' csomag tkzik sajt magval - csomag hiba" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: cl '%s' vs db" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: cl '%s' vs sszes cl" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: db vs cl '%s'" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "malloc problma: nem sikerlt alloklni %d byte-ot" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc problma: nem sikerlt alloklni %d byte-ot" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "sikertelen a %s%s adatbzis-bejegyzs eltvoltsa" -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" +#: lib/libalpm/db.c:553 +#, fuzzy +msgid "attempt to re-register the 'local' DB\n"  msgstr "ksrlet a 'local' adatbzis jraregisztrlsra" -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" -"ksrlet a(z) '%s' adatbzis jraregisztrlsra, a jelenlegi hasznlata" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "adatbzis regisztrlsa: '%s'" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "'%s' adatbzis-knyvtr nem ltezik, ltrehozs" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "adatbzis megnyitsa: '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "a fggsgek rendezse elkezddtt" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "az adatbzis-tvonal nincs megadva" -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "lehetsges krkrs fggsgi problma szlelve" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "krkrs fggsg szlelve\n" -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "a fggsgek rendezse befejezdtt" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "" - -#: lib/libalpm/deps.c:280 +#: lib/libalpm/deps.c:175  #, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "checkdeps: a frisstett '%s' nem elgti ki '%s' egy fggsgt" - -#: lib/libalpm/deps.c:359 -#, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "hinyz '%s' fggsg a '%s' csomagnl" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: a %s ignyelt a %s ltal" - -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "a %s kihagysa -- explicit mdon lett teleptve" - -#: lib/libalpm/deps.c:532 -#, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "nem tallhat a \"%s\" csomag s nem is szolgltatja semmi!" - -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 +#: lib/libalpm/deps.c:177  #, c-format -msgid "adding '%s' to the targets" -msgstr "a '%s' hozzadsa a clcsomagokhoz" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "a fggsgek rendezse elkezddtt" - -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "a %s szolgltatja a %s fggsget -- kihagys" - -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"nem sikerlt a fggsgek feloldsa a \"%s\" szmra (nem tallhat a \"%s\" " -"a csomagok kztt)" - -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "a %s fggsg mr a clcsomagok kztt szerepel -- kihagys" -#: lib/libalpm/deps.c:667 -#, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "a %s fggsg behozsa (a %s ignyli)" - -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "nem sikerlt feloldani a fggsgeket a \"%s\" szmra" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "krkrs fggsg szlelve: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "a fggsgek rendezse elkezddtt" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "elfogyott a memria!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "nemvrt hiba" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "elgtelen jogosultsgok" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "nem tallhat vagy nem olvashat a fjl" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "nem tallhat vagy nem olvashat a fjl" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "rossz vagy NULL argumentum rkezett" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "a knyvtr nem inicializlt" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "a knyvtr mr inicializlt" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "nem sikerlt zrolni az adatbzist" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "nem sikerlt megnyitni az adatbzist" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "nem sikerlt ltrehozni az adatbzist" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "az adatbzis nem inicializlt" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "az adatbzis mr regisztrlt" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "nem tallhat az adatbzis" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "nem sikerlt megnyitni az adatbzist" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "nem sikerlt eltvoltani az adatbzis-bejegyzst" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "rvnytelen url" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "nem sikerlt belltani a paramtert" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "a tranzakci mr inicializlt" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "a tranzakci nem inicializlt" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "kt azonos clcsomag" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "a tranzakci nincs elksztve" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "a tranzakci flbeszaktva" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "a mvelet nem egyeztethet ssze a jelenlegi tranzakcitpussal" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "nem sikerlt commitolni a tranzakcit" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "nem sikerlt letlteni az sszes fjlt" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "nem tallhat vagy nem olvashat a csomag" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "nem rvnyes vagy srlt csomag" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "nem sikerlt megnyitni a csomagfjlt" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "nem sikerlt betlteni a csomagadatokat" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "a csomag mr teleptve van" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "a csomag nincs teleptve vagy kisebb verzij" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "nem sikerlt eltvoltani a csomag sszes fjljt" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "nem rvnyes a csomagnv" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "srlt csomag" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "nincs ilyen rep" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "srlt csomag" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "a csoport nem tallhat" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "nem sikerlt kielgteni a fggsgeket" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "tkz fggsgek" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "tkz fjlok" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "felhasznli megszakts" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "bels hiba" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "libarchive hiba" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "nincs elg hely" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "nem megerstett" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "a 'local' nv fenntartott s nem hasznlhat repnvknt" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "szintaktikai hiba a belltsfjlban" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "minden direktvnak egy szekcihoz kell tartoznia" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "rvnytelen regulris kifejezs" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "nem sikerlt csatlakozni a tvoli gphez" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "nemvrt hiba" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "nem sikerlt megnyitni a kvetkezt: %s\n" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "sikertelen az md5 ellenrz sszeg elrse a %s-%s csomag szmra" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: a csomagfrissts figyelmen kvl hagysa (%s)" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "%s-%s csomag md5 ellenrz sszegei nem egyeznek meg" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: erltetett frissts a %s verzira" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: a helyi (%s) jabb, mint %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "%s-%s: a csomag frisstsnek ksleltetse (%s)" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: szintaktikai hiba a lerfjl %d. sorban" - -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n"  msgstr "nem sikerlt rtelmezni a csomagler fjlt" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n"  msgstr "hinyz csomagnv itt: %s" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n"  msgstr "hinyz csomagverzi itt: %s" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "nem sikerlt eltvoltani a %s ideiglenes fjlt" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "hiba a csomag olvassa kzben: %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "" - -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" -msgstr "" - -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "nem tallhat a %s az adatbzisban" +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n" +msgstr "hinyz csomaginformcis fjl" -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "a %s hozzadsa a cllisthoz" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n" +msgstr "hinyzik a(z) %s csomag fjllistja, generls"  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "a %s behozsa a cllistba" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "nem tallhat a %s az adatbzisban -- kihagys" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "eltvolthat fggsgek keresse" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "nem sikerlt eltvoltani a '%s' fjlt : %s" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "A '%s' trlsnek kihagysa a NoUpgrade miatt" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "a %s fjl nemltezik" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "a %s knyvtr megtartsa" +#: lib/libalpm/remove.c:337 +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n" +msgstr "nem sikerlt eltvoltani a %s-%s adatbzis-bejegyzst" -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "a %s knyvtr trlse" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n" +msgstr "nem sikerlt eltvoltani a '%s' bejegyzst a gyorsttrbl" -#: lib/libalpm/remove.c:236 +#: lib/libalpm/server.c:56  #, c-format -msgid "%s is in trans->skip_remove, skipping removal" +msgid "url '%s' is invalid, ignoring\n"  msgstr "" -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n"  msgstr "" -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "a %s trlse" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "nem sikerlt eltvoltani a %s fjlt: %s" +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "" -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "a %s-%s csomag eltvoltsa" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "nem sikerlt nhny fjlt letlteni innen: %s\n" -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n"  msgstr "" -"nem tvoltom el a(z) '%s' csomagot, nem tudom eltvoltani az sszes fjlt" -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "%d fjl trlse" - -#: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "a '%s' adatbzis-bejegyzs eltvoltsa" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "nem sikerlt eltvoltani a '%s' fjlt : %s" -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" -msgstr "nem sikerlt eltvoltani a %s-%s adatbzis-bejegyzst" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "hiba a csomag olvassa kzben: %s" -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" -msgstr "nem sikerlt eltvoltani a '%s' bejegyzst a gyorsttrbl" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "nem sikerlt eltvoltani a '%s' fjlt : %s" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha2: nem sikerlt megnyitni a kvetkezt: %s\n" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "nem sikerlt a knyvtrat a /-re vltani (%s)" -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n"  msgstr "" -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "csomagfrisstsek vizsglata" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "a(z) %s-%s kivlasztva frisstsre (%s => %s)" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "cl keresse a '%s' repban" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "nem sikerlt letlteni az sszes fjlt" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "a(z) '%s' cl nem tallhat - szolglatk keresse" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: frissts figyelmen kvl hagysa (a %s-%s fogja lecserlni)" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "a(z) '%s' szolgltatja a(z) '%s' csomagot" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: a csomagfrissts figyelmen kvl hagysa (%s)" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n"  msgstr "a(z) '%s' rep nem tallhat" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "a(z) %s-%s napraksz -- kihagys" -  #: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "a '%s' hozzadsa a tranzakcihoz" - -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "a clok fggsgeinek feloldsa" - -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "a '%s-%s' hozzadsa a clcsomagokhoz" - -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "elgtelen fggsgek keresse" - -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "a(z) '%s' csomag tkzik a(z) '%s' csomaggal" - -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "a '%s' nem tallhat a tranzakciban -- kihagys" - -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "a(z) '%s' csomag sajt magval tkzik" - -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "a(z) '%s' mr a cl listban -- megtarts" - -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "a(z) '%s' bejegyzs eltvoltsa a cllistbl" - -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "konfliktus feloldsa a(z) '%s' csomag szmra" +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "a(z) %s-%s napraksz -- kihagys" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "a(z) '%s' kivlasztsa eltvoltsra" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "a(z) %s-%s napraksz -- kihagys" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "feloldhatatlan csomagtkzsek" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "az eltvoltand csomagok fggsgeinek ellenrzse" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "valami nagyon rosszul ment" - -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "a(z) '%s' szolgltatja a(z) '%s' csomagot - konfliktus flbeszaktva" - -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s mr a gyorsttrban\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "nem ltezik a(z) %s gyorsttr. ltrehozs...\n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "figyelmeztets: a(z) %s gyorsttr nem ltezik. ltrehozs..." +#: lib/libalpm/sync.c:628 +#, fuzzy, c-format +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "malloc problma: nem sikerlt alloklni %d byte-ot"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "nem sikerlt ltrehozni a csomag gyorsttrat, a /tmp hasznlata\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" -"figyelmeztets: nem sikerlt ltrehozni a csomag gyorsttrat, a /tmp " -"hasznlata" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "nem sikerlt nhny fjlt letlteni innen: %s\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr ""  "sikertelen az md5 vagy sha1 ellenrz sszeg elrse a %s csomag szmra\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "a(z) %s archvum srlt volt (rossz MD5 vagy SHA1 szumma)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "a(z) %s archvum srlt (rossz MD5 vagy SHA1 szumma)\n" +msgid "failed to retrieve some files from %s\n" +msgstr "nem sikerlt nhny fjlt letlteni innen: %s\n" -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n"  msgstr "nem sikerlt ltrehozni az eltvoltsi tranzakcit" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" +#: lib/libalpm/sync.c:1143 +#, fuzzy +msgid "could not initialize the removal transaction\n"  msgstr "nem sikerlt inicializlni az eltvoltsi tranzakcit" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "az tkz s lecserlend csomagok eltvoltsa" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n"  msgstr "nem sikerlt ltrehozni az eltvoltsi tranzakcit" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1171 +#, fuzzy +msgid "could not commit removal transaction\n"  msgstr "nem sikerlt commitolni az eltvolt tranzakcit" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "csomagok teleptse" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n"  msgstr "nem sikerlt ltrehozni a tranzakcit" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1187 +#, fuzzy +msgid "could not initialize transaction\n"  msgstr "nem sikerlt inicializlni a tranzakcit" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n"  msgstr "nem sikerlt elkszteni a tranzakcit" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "a lecserlt csomagok fggsgeinek frisstse az adatbzisban" - -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "sikertelen a %s-%s 'fgg tle' adatbzis-bejegyzsnek frisstse" +#: lib/libalpm/sync.c:1219 +#, fuzzy +msgid "could not commit transaction\n" +msgstr "nem sikerlt commitolni a tranzakcit" -#: lib/libalpm/sync.c:1039 -#, c-format -msgid "could not update new database entry %s-%s" -msgstr "sikertelen a '%s-%s' adatbzis-bejegyzs frisstse" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "nem sikerlt a zrol fjl (%s) eltvoltsa" -#: lib/libalpm/sync.c:1079 +#: lib/libalpm/trans.c:483  #, c-format -msgid "found package '%s-%s' in sync" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"  msgstr "" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "a '%s' csomag nem tallhat a tvoli adatbzisban" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "nem sikerlt ltrehozni az ideiglenes knyvtrat" -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "nem sikerlt a(z) %s knyvtrba vltani (%s)" + +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "nem sikerlt forkolni egy j folyamatot (%s)" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "a csomagnak nincsenek fggsgei, nincs tbb frisstend csomag" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "nem sikerlt a gykrknyvtrba vltani (%s)" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "a '%s' csomag 'fgg tle' mezjnek frisstse" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "nem sikerlt a knyvtrat a /-re vltani (%s)" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "sikertelen a %s-%s 'fgg tle' adatbzis-bejegyzsnek frisstse" +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format +msgid "call to popen failed (%s)" +msgstr "a waitpid hvs sikertelen (%s)" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "nem tallhat a '%s' fggsg" +#: lib/libalpm/trans.c:597 +#, fuzzy, c-format +msgid "call to waitpid failed (%s)\n" +msgstr "a waitpid hvs sikertelen (%s)" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "" + +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "nem sikerlt eltvoltani a %s ideiglenes knyvtrat" + +#: lib/libalpm/util.c:204 +#, fuzzy, c-format +msgid "failed to make path '%s' : %s\n"  msgstr "nem sikerlt a '%s' tvonal ltrehozsa: %s" -#: lib/libalpm/util.c:280 +#: lib/libalpm/util.c:389  #, c-format  msgid "could not open %s: %s\n"  msgstr "nem sikerlt megnyitni a %s fjlt: %s\n" -#: lib/libalpm/util.c:293 +#: lib/libalpm/util.c:573  #, c-format -msgid "could not extract %s: %s\n" -msgstr "nem sikerlt a(z) %s-t kitmrteni: %s\n" +msgid "no %s cache exists, creating...\n" +msgstr "nem ltezik a(z) %s gyorsttr. ltrehozs...\n" -#: lib/libalpm/util.c:350 +#: lib/libalpm/util.c:593 +#, fuzzy +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "nem sikerlt ltrehozni a csomag gyorsttrat, a /tmp hasznlata" + +#: lib/libalpm/util.c:643  #, c-format -msgid "logaction called: %s" -msgstr "" +msgid "md5: %s can't be opened\n" +msgstr "md5: nem sikerlt megnyitni a kvetkezt: %s\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "nem sikerlt ltrehozni az ideiglenes knyvtrat" +#: lib/libalpm/util.c:645 +#, fuzzy, c-format +msgid "md5: %s can't be read\n" +msgstr "md5: nem sikerlt megnyitni a kvetkezt: %s\n" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" -msgstr "nem sikerlt a(z) %s knyvtrba vltani (%s)" +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "krem elszr tvoltsa el '%s'-t a -Rd kapcsolt hasznlva" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." -msgstr "a(z) %s script vgrehajtsa..." +#~ msgid "could not extract %s (%s)" +#~ msgstr "nem sikerlt kitmrteni: %s (%s)" -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" -msgstr "nem sikerlt forkolni egy j folyamatot (%s)" +#~ msgid "%s: description file is missing" +#~ msgstr "%s: hinyz csomagler fjl" -#: lib/libalpm/util.c:496 -#, c-format -msgid "chrooting in %s" -msgstr "chrootols a kvetkez knyvtrba: %s" +#~ msgid "%s: dependency file is missing" +#~ msgstr "%s: hinyz csomagfggsg fjl" -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" -msgstr "nem sikerlt a gykrknyvtrba vltani (%s)" +#~ msgid "%s: file list is missing" +#~ msgstr "%s: hinyz fjllista" -#: lib/libalpm/util.c:502 -#, c-format -msgid "could not change directory to / (%s)" -msgstr "nem sikerlt a knyvtrat a /-re vltani (%s)" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "malloc problma: nem sikerlt alloklni %d byte-ot" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "a(z) %s vgrehajtsa" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "nem sikerlt a fggsgek feloldsa a \"%s\" szmra (nem tallhat a \"%s" +#~ "\" a csomagok kztt)" -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" -msgstr "a popen hvs sikertelen (%s)" +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "nem sikerlt rtelmezni a megadott gykrknyvtr-tvonalat: '%s'" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" -msgstr "a waitpid hvs sikertelen (%s)" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "sikertelen az sha1 ellenrz sszeg elrse a %s-%s csomag szmra" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "nem sikerlt eltvoltani a %s ideiglenes knyvtrat" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "%s-%s csomag sha1 ellenrz sszegei nem egyeznek meg" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "nem sikerlt eltvoltani a %s fjlt: %s" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "check_freespace: teljes csomagmret: %lld, lemezterlet: %lld" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha2: nem sikerlt megnyitni a kvetkezt: %s\n" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "a(z) %s archvum srlt (rossz MD5 vagy SHA1 szumma)\n" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "" +#~ msgid "could not update requiredby for database entry %s-%s" +#~ msgstr "sikertelen a %s-%s 'fgg tle' adatbzis-bejegyzsnek frisstse" + +#~ msgid "could not update new database entry %s-%s" +#~ msgstr "sikertelen a '%s-%s' adatbzis-bejegyzs frisstse" + +#~ msgid "could not update 'requiredby' database entry %s-%s" +#~ msgstr "sikertelen a %s-%s 'fgg tle' adatbzis-bejegyzsnek frisstse" diff --git a/lib/libalpm/po/it.po b/lib/libalpm/po/it.po index 557e4f24..aaf85633 100644 --- a/lib/libalpm/po/it.po +++ b/lib/libalpm/po/it.po @@ -9,1569 +9,691 @@ msgid ""  msgstr ""  "Project-Id-Version: libalpm VERSION\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" -"PO-Revision-Date: 2007-04-17 22:00+0100\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n" +"PO-Revision-Date: 2007-11-08 20:30+0100\n"  "Last-Translator: Giovanni Scafora <linuxmania@gmail.com>\n"  "Language-Team: Arch Linux Italian Team <linuxmania@gmail.com>\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=utf-8\n"  "Content-Transfer-Encoding: 8bitPlural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/libalpm/add.c:77 +#: lib/libalpm/add.c:88  #, c-format -msgid "loading target '%s'" -msgstr "caricamento del pacchetto '%s' in corso" +msgid "replacing older version %s-%s by %s in target list\n" +msgstr "sostituzione in corso della vecchia versione di %s-%s con %s\n" -#: lib/libalpm/add.c:122 +#: lib/libalpm/add.c:97  #, c-format -msgid "replacing older version %s-%s by %s in target list" -msgstr "sostituzione in corso della vecchia versione %s-%s con %s" +msgid "newer version %s-%s is in the target list -- skipping\n" +msgstr "la versione di %s-%s è più recente e sarà ignorata\n" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" -msgstr "la versione di %s-%s è più recente e sarà ignorato" - -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "lettura dei metadata di '%s' in corso" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "ricerca delle dipendenze non soddisfatte" - -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "ricerca dei conflitti in corso" - -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" -msgstr "la sostituzione dei pacchetti con -A e -U non è ancora supportata" - -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "Si consiglia di rimuovere prima '%s', usando -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "ordinamento per dipendenze in corso" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "pulizia in corso" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "ricerca dei conflitti tra file in corso" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "aggiornamento del pacchetto %s-%s in corso" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "inclusione del pacchetto %s-%s in corso" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "rimozione del vecchio pacchetto (%s-%s) in corso" - -#: lib/libalpm/add.c:411 -#, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "aggiunta temporanea di %s nell'array NoUpgrade in corso" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "estrazione dei file in corso" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "impossibile ottenere la directory corrente" - -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 -#, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s è in NoExtract, estrazione ignorata" - -#: lib/libalpm/add.c:508 -#, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s è in trans->skip_add, estrazione ignorata" - -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" -msgstr "impossibile estrarre %s (%s)" - -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "controllo dell'hash md5 di %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "controllo dell'hash sha1 di %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "attuale:  %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "nuovo:      %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "originale: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" -msgstr "impossibile rinominare %s (%s)" - -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "errore: impossibile rinominare %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" -msgstr "impossibile copiare il file temporaneo in %s (%s)" - -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "errore: impossibile copiare il file temporaneo in %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" -msgstr "%s salvato come %s" - -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "attenzione: %s salvato come %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "azione: installazione del nuovo file %s in corso" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "azione: il file non è stato spostato" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n"  msgstr "" -"azione: il file attuale non è stato spostato e sarà installato un nuovo file " -"con il suffisso .pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" -msgstr "impossibile installare %s come %s: %s" - -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "errore: impossibile installare %s come %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" -msgstr "%s installato come %s" - -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "attenzione: %s installato come %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s è in NoUpgrade e sarà ignorato" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" -msgstr "estrazione di %s come %s.pacnew" - -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "attenzione: estrazione in corso di %s come %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "estrazione di %s in corso" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "errore: impossibile estrarre %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "aggiunta in corso della voce di backup per %s" - -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" -msgstr "si sono verificati degli errori durante %s %s" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "l'aggiornamento" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "l'installazione" -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "'%s' è stato rimosso dal pacchetto %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "aggiornamento in corso di '%s' dovuto ad un cambiamento (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "impossibile aggiornare '%s' da '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "aggiornamento del database in corso" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "inclusione della voce '%s' nel database" - -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" -msgstr "impossibile aggiornare la voce %s-%s nel database" - -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" -msgstr "impossible includere la voce '%s' nella cache" - -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "esecuzione in corso di \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "rimozione in corso del DB %s, %d restante..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "cancellazione del database '%s' in corso" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "chiusura del database '%s' in corso" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n"  msgstr "" -"inclusione di un nuovo server nel database '%s': protocollo '%s', server '%" -"s', path '%s'" -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "svuotata la lista dei server per '%s'" +#: lib/libalpm/add.c:172 +msgid "replacing packages with -A and -U is not supported yet\n" +msgstr "la sostituzione dei pacchetti con -A e -U non è ancora supportata\n" -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n"  msgstr "" -"impossibile recuperare la data dell'ultimo aggiornamento di %s (nulla di " -"grave)" -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "impossibile sincronizzare il database: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sync: nuovo mtime per %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "pulizia del database %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "impossibile rimuovere la voce %s%s dal database" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "impossibile recuperare la somma sha1 del pacchetto %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "la somma sha1 del pacchetto %s-%s corrisponde" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "la somma sha1 del pacchetto %s-%s non corrisponde" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "impossibile recuperare la somma md5 del pacchetto %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "la somma md5 del pacchetto %s-%s corrisponde" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "la somma md5 del pacchetto %s-%s non corrisponde" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "impossibile rimuovere il file di lock %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "attenzione: impossibile rimuovere il file di lock %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "config: nuova sezione '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "config: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "config: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "config: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "config: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "config: including %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "config: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "config: noextract:·%s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "config: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "config: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "config: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "config: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 -#, c-format -msgid "config: rootdir: %s" -msgstr "config: rootdir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "config: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "config: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "config: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "controllo della sostituzione dei pacchetti in corso" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "controllo in corso della sostituzione di '%s' con il pacchetto '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "" -"%s-%s: aggiornamento del pacchetto ignorato (per essere sostituito con %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "" -"%s-%s selezionato per l'aggiornamento (per essere sostituito con %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "impossibile trovare '%s' nel database, sarà ignorato" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' è già selezionato per la rimozione, sarà ignorato" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s selezionato per l'aggiornamento (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "estrazione del database '%s' in corso" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "apertura in corso del database dal path '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "impossibile trovare il pacchetto: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" -msgstr "nome non valido per la voce del database '%s'" - -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "" -"nome non valido per il pacchetto fornito a _alpm_db_read, sarà ignorato" - -#: lib/libalpm/be_files.c:226 +#: lib/libalpm/add.c:365  #, c-format  msgid "" -"request to read database info for a file-based package '%s', skipping..." +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n"  msgstr "" -"richiesta di lettura del database per un pacchetto file-based '%s', sarà " -"ignorata..." - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" -msgstr "caricamento in corso dei dati del pacchetto %s : livello=%d" - -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "impossibile trovare '%s-%s' nel database '%s'" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" -msgstr "impossibile aprire il file %s: %s" - -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "scrittura in corso del campo DESC di %s-%s nel database" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "scrittura in corso del campo FILES di %s-%s nel database" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "scrittura in corso del campo DEPENDS di %s-%s nel database" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "caricamento in corso della cache del pacchetto per il repository '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" -msgstr "aggiunta di '%s' alla cache del pacchetto per il database '%s'" - -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "pulizia in corso della cache dei pacchetti per il repository '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "errore: pkgcache è NULL per il database '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "inclusione della voce '%s' nella cache di '%s'" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "rimozione della voce '%s' dalla cache di '%s'" +"i permessi delle directory differiscono su %s\n" +"filesystem: %o pacchetto: %o\n" -#: lib/libalpm/cache.c:156 +#: lib/libalpm/add.c:392  #, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "impossibile rimuovere '%s' dalla cache di '%s': non trovato" +msgid "extract: symlink %s does not point to dir\n" +msgstr "estrazione: il link simbolico %s non punta alla directory\n" -#: lib/libalpm/cache.c:178 +#: lib/libalpm/add.c:399  #, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "errore: impossibile prelevare '%s' da pkgcache NULL" +msgid "extract: not overwriting dir with file %s\n" +msgstr "estrazione: non sovrascrivere la directory con il file %s\n" -#: lib/libalpm/cache.c:201 +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422  #, c-format -msgid "loading group cache for repository '%s'" -msgstr "caricamento della cache del gruppo per il repository '%s'" +msgid "could not extract %s (%s)\n" +msgstr "impossibile estrarre %s (%s)\n" -#: lib/libalpm/conflict.c:69 +#: lib/libalpm/add.c:505  #, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   trovato il conflitto '%s' : pacchetto '%s'" +msgid "could not rename %s (%s)\n" +msgstr "impossibile rinominare %s (%s)\n" -#: lib/libalpm/conflict.c:78 +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508  #, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   trovato il conflitto '%s' : il pacchetto '%s' fornisce '%s'" +msgid "could not copy tempfile to %s (%s)\n" +msgstr "impossibile copiare il file temporaneo in %s (%s)\n" -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234  #, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "" -"il pacchetto '%s' va in conflitto con se stesso - errore di pacchettizzazione" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: target '%s' vs db" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: target '%s' vs all targets" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: db vs target '%s'" +msgid "%s saved as %s\n" +msgstr "%s salvato come %s\n" -#: lib/libalpm/conflict.c:201 +#: lib/libalpm/add.c:556  #, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "il pacchetto '%s' è già presente nella lista, usando nuovi conflitti" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLITTI:: %s va in conflitto con %s" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "malloc failure: impossibile allocare %d byte" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "malloc failed: impossibile allocare %d byte" - -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" -msgstr "tentativo in corso di registrare di nuovo il database 'locale'" +msgid "could not install %s as %s: %s\n" +msgstr "impossibile installare %s come %s: %s\n" -#: lib/libalpm/db.c:175 +#: lib/libalpm/add.c:559  #, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" -"tentativo in corso di registrare di nuovo il database '%s', usando quello " -"esistente" +msgid "%s installed as %s\n" +msgstr "%s installato come %s\n" -#: lib/libalpm/db.c:181 +#: lib/libalpm/add.c:576  #, c-format -msgid "registering database '%s'" -msgstr "registrazione del database '%s'" +msgid "extracting %s as %s.pacnew\n" +msgstr "estrazione di %s come %s.pacnew\n" -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "la directory '%s' del database non esiste e sarà creata" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +msgid "could not get current working directory\n" +msgstr "impossibile ottenere la directory corrente\n" -#: lib/libalpm/db.c:197 +#: lib/libalpm/add.c:765  #, c-format -msgid "opening database '%s'" -msgstr "apertura del database '%s' in corso" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "avvio dell'ordinamento delle dipendenze" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "individuato un possibile ciclo di dipendenze" +msgid "problem occurred while upgrading %s\n" +msgstr "si sono verificati degli errori durante l'aggiornamento di %s\n" -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "ordinamento delle dipendenze terminato" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "è stato trovato un pacchetto vuoto nella lista" - -#: lib/libalpm/deps.c:230 +#: lib/libalpm/add.c:770  #, c-format -msgid "cannot find package installed '%s'" -msgstr "impossibile trovare il pacchetto installato '%s'" +msgid "problem occurred while installing %s\n" +msgstr "si sono verificati degli errori durante l'installazione di %s\n" -#: lib/libalpm/deps.c:261 +#: lib/libalpm/add.c:785  #, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: la dipendenza '%s' è stata spostata da '%s' a '%s'" +msgid "could not update database entry %s-%s\n" +msgstr "impossibile aggiornare la voce %s-%s nel database\n" -#: lib/libalpm/deps.c:280 +#: lib/libalpm/add.c:793  #, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "checkdeps: dipendenza '%s' soddisfatta dal pacchetto '%s'" +msgid "could not add entry '%s' in cache\n" +msgstr "impossible includere la voce '%s' nella cache\n" -#: lib/libalpm/deps.c:289 +#: lib/libalpm/be_files.c:223  #, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "" -"checkdeps: il pacchetto aggiornato di '%s' non soddisfa una dipendenza di '%" -"s'" +msgid "invalid name for database entry '%s'\n" +msgstr "nome non valido per la voce del database '%s'\n" -#: lib/libalpm/deps.c:359 +#: lib/libalpm/be_files.c:275  #, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "manca la dipendenza '%s' richiesta dal pacchetto '%s'" +msgid "loading package data for %s : level=%d\n" +msgstr "caricamento in corso dei dati del pacchetto %s : livello=%d\n" -#: lib/libalpm/deps.c:409 +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787  #, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: trovato %s come richiesto da %s" +msgid "could not open file %s: %s\n" +msgstr "impossibile aprire il file %s: %s\n" -#: lib/libalpm/deps.c:485 +#: lib/libalpm/cache.c:62  #, c-format -msgid "excluding %s -- explicitly installed" -msgstr "esclusione di %s in corso, installato esplicitamente" +msgid "adding '%s' to package cache for db '%s'\n" +msgstr "aggiunta di '%s' alla cache del pacchetto per il database '%s'\n" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/db.c:285  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "impossibile trovare il pacchetto \"%s\" o qualcosa che lo fornisca!" +msgid "could not remove database entry %s%s\n" +msgstr "impossibile rimuovere la voce %s%s dal database\n" -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "inclusione in corso di '%s' nei pacchetti" +#: lib/libalpm/db.c:553 +msgid "attempt to re-register the 'local' DB\n" +msgstr "tentativo in corso di registrare di nuovo il database 'locale'\n" -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "avvio risoluzione delle dipendenze" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +msgid "database path is undefined\n" +msgstr "il percorso del database non è definito\n" -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s fornisce la dipendenza %s, sarà ignorato" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "individuato un possibile ciclo di dipendenze\n" -#: lib/libalpm/deps.c:630 +#: lib/libalpm/deps.c:175  #, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -"impossibile risolvere le dipendenze per \"%s\" (\"%s\" non è presente nella " -"lista dei pacchetti)" -#: lib/libalpm/deps.c:647 +#: lib/libalpm/deps.c:177  #, c-format -msgid "dependency %s is already in the target list -- skipping" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"la dipendenza %s è già presente nella lista dei pacchetti e sarà ignorata" -#: lib/libalpm/deps.c:667 +#: lib/libalpm/deps.c:573  #, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "aggiunta la dipendenza %s (richiesta da %s)" +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n" +msgstr "impossibile risolvere \"%s\", una dipendenza di \"%s\"\n" -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" -msgstr "impossibile risolvere le dipendenze per \"%s\"" - -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "individuato un possibile ciclo di dipendenze: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "risoluzione delle dipendenze terminata" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "memoria insufficiente!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error" -msgstr "errore di sistema" +msgstr "errore di sistema inaspettato" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "privilegi insufficienti" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "impossibile trovare o leggere il file" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +msgid "could not find or read directory" +msgstr "impossibile trovare o leggere la directory" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "è stato passato un argomento sbagliato o NULL" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "libreria non inizializzata" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "libreria già inizializzata" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "impossibile bloccare il database" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "impossibile aprire il database" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "impossibile creare il database" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "database non inizializzato" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "il database è già registrato" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "impossibile trovare il database" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "impossibile aggiornare il database" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "impossibile rimuovere la voce dal database" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "url non valido per il server" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "impossibile impostare il parametro" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "operazione già inizializzata" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "operazione non inizializzata" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "pacchetto doppio" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "operazione non preparata" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "operazione annullata" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "operazione incompatibile con il tipo di transazione" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "impossibile eseguire l'operazione" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "impossibile prelevare tutti i file" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "impossibile trovare o leggere il pacchetto" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "pacchetto non valido o corrotto" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "impossibile aprire il pacchetto" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "impossibile caricare i dati del pacchetto" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "pacchetto già installato" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "pacchetto non installato o una versione precedente" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "impossibile rimuovere tutti i file del pacchetto" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "il nome del pacchetto non è valido" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "pacchetto corrotto" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "nessun repository corrispondente" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +msgid "corrupted delta" +msgstr "il delta è corrotto" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "si sono verificati degli errori con la patch di delta" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "gruppo non trovato" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "impossibile soddisfare le dipendenze" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "dipendenze in conflitto" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "file in conflitto" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "operazione annullata" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "errore interno" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "errore di libarchive" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "spazio sul disco insufficiente" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "non confermato" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "errore nel nome della sezione di configurazione" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "'local' è riservato e non può essere usato come nome di un repository" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "errore di sintassi nel file di configurazione" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "tutte le direttive devono appartenere a una sezione" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "espressione regolare non valida" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "impossibile stabilire una connessione con l'host remoto" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "errore inaspettato" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "impossibile canonicalizzare il path di root specificato '%s'" - -#: lib/libalpm/handle.c:175 +#: lib/libalpm/package.c:124  #, c-format -msgid "option 'root' = %s" -msgstr "opzione 'root' = %s" +msgid "could not get md5sum for package %s-%s\n" +msgstr "impossibile recuperare la somma md5 del pacchetto %s-%s\n" -#: lib/libalpm/handle.c:195 +#: lib/libalpm/package.c:133  #, c-format -msgid "option 'dbpath' = %s" -msgstr "opzione 'dbpath' = %s" +msgid "md5sums do not match for package %s-%s\n" +msgstr "la somma md5 del pacchetto %s-%s non corrisponde\n" -#: lib/libalpm/handle.c:211 +#: lib/libalpm/package.c:737  #, c-format -msgid "option 'cachedir' = %s" -msgstr "opzione 'cachedir' = %s" +msgid "%s: forcing upgrade to version %s\n" +msgstr "%s: aggiornamento forzato alla versione %s\n" -#: lib/libalpm/md5driver.c:56 +#: lib/libalpm/package.c:742  #, c-format -msgid "%s can't be opened\n" -msgstr "impossibile aprire %s\n" +msgid "%s: local (%s) is newer than %s (%s)\n" +msgstr "%s: la versione installata (%s) è più recente di %s (%s)\n" -#: lib/libalpm/md5driver.c:74 +#: lib/libalpm/package.c:750  #, c-format -msgid "md5(%s) = %s" -msgstr "md5(%s) = %s" +msgid "%s-%s: delaying upgrade of package (%s)\n" +msgstr "%s-%s: ritardo durante l'aggiornamento del pacchetto (%s)\n" -#: lib/libalpm/package.c:147 +#: lib/libalpm/package.c:931  #, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: aggiornamento del pacchetto (%s) ignorato" +msgid "could not parse package description file in %s\n" +msgstr "impossibile analizzare il file di descrizione del pacchetto in %s\n" -#: lib/libalpm/package.c:158 +#: lib/libalpm/package.c:936  #, c-format -msgid "%s: forcing upgrade to version %s" -msgstr "%s: aggiornamento forzato alla versione %s" +msgid "missing package name in %s\n" +msgstr "manca il nome del pacchetto in %s\n" -#: lib/libalpm/package.c:163 +#: lib/libalpm/package.c:940  #, c-format -msgid "%s: local (%s) is newer than %s (%s)" -msgstr "%s: la versione installata (%s) è più recente di %s (%s)" +msgid "missing package version in %s\n" +msgstr "manca la versione del pacchetto in %s\n" -#: lib/libalpm/package.c:171 +#: lib/libalpm/package.c:970  #, c-format -msgid "%s-%s: delaying upgrade of package (%s)" -msgstr "%s-%s: ritardo durante l'aggiornamento del pacchetto (%s)" +msgid "could not remove tempfile %s\n" +msgstr "impossibile rimuovere il file temporaneo %s\n" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998  #, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: errore di sintassi nel file di descrizione alla linea %d" +msgid "error while reading package %s: %s\n" +msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n" -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" -msgstr "impossibile analizzare il file di descrizione del pacchetto" - -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" -msgstr "manca il nome del pacchetto in %s" - -#: lib/libalpm/package.c:363 +#: lib/libalpm/package.c:1005  #, c-format -msgid "missing package version in %s" -msgstr "manca la versione del pacchetto in %s" +msgid "missing package metadata in %s\n" +msgstr "manca il metadata del pacchetto in %s\n" -#: lib/libalpm/package.c:398 +#: lib/libalpm/package.c:1012  #, c-format -msgid "could not remove tempfile %s" -msgstr "impossibile rimuovere il file temporaneo %s" - -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" -msgstr "si è verificato un errore durante la lettura del pacchetto: %s" - -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "manca il metadata del pacchetto" - -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" -msgstr "manca il filelist nel pacchetto %s, creazione in corso" - -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "inclusione di '%s' nel campo 'richiesto da' di '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "inclusione di '%s' nel campo 'richiesto da' di '%s' (fornisce: %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "impossibile trovare %s nel database" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "aggiunta in corso di %s nella lista dei pacchetti" +msgid "missing package filelist in %s, generating one\n" +msgstr "manca il filelist nel pacchetto %s, creazione in corso\n"  #: lib/libalpm/remove.c:121  #, c-format -msgid "pulling %s in the targets list" -msgstr "estrazione in corso di %s nella lista dei pacchetti" +msgid "could not find %s in database -- skipping\n" +msgstr "impossibile trovare %s nel database, sarà ignorato\n" -#: lib/libalpm/remove.c:124 +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243  #, c-format -msgid "could not find %s in database -- skipping" -msgstr "impossibile trovare %s nel database, sarà ignorato" - -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "ricerca delle dipendenze eliminabili" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" -msgstr "impossibile rimuovere il file '%s': %s" - -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "rimozione di '%s' ignorata dovuta a NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "il file %s non esiste" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "conservazione in corso della directory %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "rimozione in corso della directory %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s è in trans->skip_remove, rimozione ignorata" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "operazione impostata su NOSAVE, nessun backup di '%s'" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "rimozione di %s in corso" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "impossibile rimuovere il file %s: %s" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "rimozione in corso del pacchetto %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "impossibile rimuovere il pacchetto '%s' e tutti i file" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "rimozione in corso di %d file" +msgid "cannot remove file '%s': %s\n" +msgstr "impossibile rimuovere il file '%s': %s\n"  #: lib/libalpm/remove.c:337  #, c-format -msgid "removing database entry '%s'" -msgstr "rimozione in corso della voce '%s' dal database" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" -msgstr "impossibile rimuovere la voce %s-%s dal database" - -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" -msgstr "impossibile rimuovere '%s' dalla cache" +msgid "could not remove database entry %s-%s\n" +msgstr "impossibile rimuovere la voce %s-%s dal database\n" -#: lib/libalpm/sha1.c:397 +#: lib/libalpm/remove.c:342  #, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: impossibile aprire %s\n" +msgid "could not remove entry '%s' from cache\n" +msgstr "impossibile rimuovere la voce '%s' dalla cache\n" -#: lib/libalpm/sha1.c:412 +#: lib/libalpm/server.c:56  #, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "ricerca dei pacchetti da aggiornare in corso" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s selezionato per l'aggiornamento (%s => %s)" - -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "ricerca in corso del pacchetto nel repository '%s'" +msgid "url '%s' is invalid, ignoring\n" +msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "pacchetto '%s' non trovato, ricerca delle alternative in corso" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "trovato '%s' come alternativa a '%s'" +#: lib/libalpm/server.c:241 +msgid "disk" +msgstr "" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" -msgstr "impossibile trovare il repository '%s'" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "impossibile recuperare alcuni file da %s\n" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s è aggiornato, sarà ignorato" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "aggiunta in corso del pacchetto '%s'" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "impossibile rimuovere il file '%s': %s\n" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "risoluzione in corso delle dipendenze dei pacchetti" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n" -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "aggiunta in corso del pacchetto %s-%s" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "impossibile rimuovere il file '%s': %s\n" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "ricerca in corso delle dipendenze irrisolvibili" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "impossibile spostarsi nella directory / (%s)\n" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "il pacchetto '%s' va in conflitto con '%s'" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "" -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "impossibile trovare '%s', sarà ignorato" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "il pacchetto '%s' fornisce il suo stesso conflitto" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "impossibile prelevare tutti i file" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 +#: lib/libalpm/sync.c:135  #, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' è nella lista dei pacchetti e sarà conservato" +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "" +"%s-%s: aggiornamento del pacchetto ignorato (per essere sostituito con %s-%" +"s)\n" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "rimozione in corso di '%s' dalla lista dei pacchetti" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: aggiornamento del pacchetto (%s) ignorato\n" -#: lib/libalpm/sync.c:576 +#: lib/libalpm/sync.c:320  #, c-format -msgid "resolving package '%s' conflict" -msgstr "risoluzione in corso del conflitto del pacchetto '%s'" +msgid "repository '%s' not found\n" +msgstr "impossibile trovare il repository '%s'\n" -#: lib/libalpm/sync.c:599 +#: lib/libalpm/sync.c:354  #, c-format -msgid "electing '%s' for removal" -msgstr "selezionato '%s' per la rimozione" +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s è aggiornato, sarà ignorato\n" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" -msgstr "sono stati rilevati dei conflitti irrisolvibili" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s è aggiornato, sarà ignorato\n" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "" -"controllo in corso delle dipendenze dei pacchetti designati per la rimozione" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "qualcosa è andato orribilmente storto" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +msgid "unresolvable package conflicts detected\n" +msgstr "sono stati rilevati dei conflitti irrisolvibili\n" -#: lib/libalpm/sync.c:712 +#: lib/libalpm/sync.c:628  #, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "trovato '%s' come alternativa a '%s', conflitto annullato" +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "malloc failure: impossibile allocare %zd byte\n" -#: lib/libalpm/sync.c:808 +#: lib/libalpm/sync.c:825  #, c-format -msgid "%s is already in the cache\n" -msgstr "%s è già presente nella cache\n" +msgid "command: %s\n" +msgstr "comando: %s\n" -#: lib/libalpm/sync.c:819 +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896  #, c-format -msgid "no %s cache exists, creating...\n" -msgstr "la cache di %s non esiste, creazione in corso...\n" +msgid "can't get md5 checksum for file %s\n" +msgstr "impossibile recuperare il checksum md5 del file %s\n" -#: lib/libalpm/sync.c:820 +#: lib/libalpm/sync.c:910  #, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "attenzione: la cache di %s non esiste, creazione in corso..." +msgid "file %s was corrupted (bad MD5 checksum)\n" +msgstr "il file %s è corrotto (MD5 errato)\n" -#: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "" -"impossibile creare la cache del pacchetto, al suo posto sarà usata /tmp\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" -"attenzione: impossibile creare la cache del pacchetto, al suo posto sarà " -"usata /tmp" - -#: lib/libalpm/sync.c:833 +#: lib/libalpm/sync.c:1056  #, c-format  msgid "failed to retrieve some files from %s\n"  msgstr "impossibile recuperare alcuni file da %s\n" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" -msgstr "impossibile recuperare il checksum md5 o sha1 del pacchetto %s\n" - -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archivio %s era corrotto (MD5 o SHA1 checksum errato)\n" - -#: lib/libalpm/sync.c:896 -#, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archivio %s è corrotto (MD5 o SHA1 checksum errato)\n" - -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" -msgstr "impossibile avviare l'operazione di rimozione" +#: lib/libalpm/sync.c:1137 +msgid "could not create removal transaction\n" +msgstr "impossibile avviare l'operazione di rimozione\n" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" -msgstr "impossibile inizializzare l'operazione di rimozione" +#: lib/libalpm/sync.c:1143 +msgid "could not initialize the removal transaction\n" +msgstr "impossibile inizializzare l'operazione di rimozione\n" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "rimozione in corso dei pacchetti in conflitto e da sostituire" +#: lib/libalpm/sync.c:1165 +msgid "could not prepare removal transaction\n" +msgstr "impossibile preparare l'operazione di rimozione\n" -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" -msgstr "impossibile preparare l'operazione di rimozione" +#: lib/libalpm/sync.c:1171 +msgid "could not commit removal transaction\n" +msgstr "impossibile eseguire l'operazione di rimozione\n" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" -msgstr "impossibile eseguire l'operazione di rimozione" +#: lib/libalpm/sync.c:1182 +msgid "could not create transaction\n" +msgstr "impossibile avviare l'operazione\n" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "installazione dei pacchetti in corso" +#: lib/libalpm/sync.c:1187 +msgid "could not initialize transaction\n" +msgstr "impossibile inizializzare l'operazione\n" -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" -msgstr "impossibile avviare l'operazione" +#: lib/libalpm/sync.c:1214 +msgid "could not prepare transaction\n" +msgstr "impossibile preparare l'operazione\n" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" -msgstr "impossibile inizializzare l'operazione" +#: lib/libalpm/sync.c:1219 +msgid "could not commit transaction\n" +msgstr "impossibile eseguire l'operazione\n" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" -msgstr "impossibile preparare l'operazione" - -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "" -"aggiornamento in corso del database per le dipendenze dei pacchetti " -"sostituiti" - -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "" -"impossibile aggiornare il campo 'richiesto da' per la voce del database %s-%s" - -#: lib/libalpm/sync.c:1039 -#, c-format -msgid "could not update new database entry %s-%s" -msgstr "impossibile aggiornare la nuova voce del database %s-%s" - -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "trovato il pacchetto '%s-%s' nel database" - -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "impossibile trovare il pacchetto '%s'" - -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "aggiornamento delle dipendenze nei campi 'richiesto da' di %s-%s" - -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "il pacchetto non ha dipendenze, nessun altro pacchetto da aggiornare" - -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "aggiornamento in corso del campo 'richiesto da' del pacchetto '%s'" - -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "impossibile aggiornare la voce 'richiesto da' del database %s-%s" - -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "impossibile trovare la dipendenza '%s'" - -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" -msgstr "impossibile creare il path '%s' : %s" - -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" -msgstr "impossibile aprire %s: %s\n" - -#: lib/libalpm/util.c:293 +#: lib/libalpm/trans.c:214  #, c-format -msgid "could not extract %s: %s\n" -msgstr "impossibile estrarre %s: %s\n" +msgid "could not remove lock file %s\n" +msgstr "impossibile rimuovere il file di lock %s\n" -#: lib/libalpm/util.c:350 +#: lib/libalpm/trans.c:483  #, c-format -msgid "logaction called: %s" -msgstr "logaction chiamata: %s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n" +msgstr "" +"/bin/sh non è presente nella root directory (%s), lo scriptlet sarà " +"interrotto\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "impossibile creare la directory temporanea" +#: lib/libalpm/trans.c:494 +msgid "could not create temp directory\n" +msgstr "impossibile creare la directory temporanea\n" -#: lib/libalpm/util.c:472 +#: lib/libalpm/trans.c:536  #, c-format -msgid "could not change directory to %s (%s)" -msgstr "impossibile spostarsi nella directory %s (%s)" +msgid "could not change directory to %s (%s)\n" +msgstr "impossibile spostarsi nella directory %s (%s)\n" -#: lib/libalpm/util.c:476 +#: lib/libalpm/trans.c:554  #, c-format -msgid "executing %s script..." -msgstr "esecuzione dello script %s in corso..." +msgid "could not fork a new process (%s)\n" +msgstr "impossibile effettuare il fork di un nuovo processo (%s)\n" -#: lib/libalpm/util.c:489 +#: lib/libalpm/trans.c:564  #, c-format -msgid "could not fork a new process (%s)" -msgstr "impossibile effettuare il fork di un nuovo processo (%s)" +msgid "could not change the root directory (%s)\n" +msgstr "impossibile cambiare la root directory (%s)\n" -#: lib/libalpm/util.c:496 +#: lib/libalpm/trans.c:569  #, c-format -msgid "chrooting in %s" -msgstr "chroot in corso nella directory %s" +msgid "could not change directory to / (%s)\n" +msgstr "impossibile spostarsi nella directory / (%s)\n" -#: lib/libalpm/util.c:498 +#: lib/libalpm/trans.c:578  #, c-format -msgid "could not change the root directory (%s)" -msgstr "impossibile cambiare la root directory (%s)" +msgid "call to popen failed (%s)" +msgstr "chiamata a popen non riuscita (%s)" -#: lib/libalpm/util.c:502 +#: lib/libalpm/trans.c:597  #, c-format -msgid "could not change directory to / (%s)" -msgstr "impossibile spostarsi nella directory / (%s)" +msgid "call to waitpid failed (%s)\n" +msgstr "chiamata a waitpid non riuscita (%s)\n" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "esecuzione in corso di \"%s\"" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n" +msgstr "L'esecuzione dello scriptlet non è riuscita correttamente\n" -#: lib/libalpm/util.c:509 +#: lib/libalpm/trans.c:615  #, c-format -msgid "call to popen failed (%s)" -msgstr "chiamata a popen non riuscita (%s)" +msgid "could not remove tmpdir %s\n" +msgstr "impossibile rimuovere la directory temporanea %s\n" -#: lib/libalpm/util.c:541 +#: lib/libalpm/util.c:204  #, c-format -msgid "call to waitpid failed (%s)" -msgstr "chiamata a waitpid non riuscita (%s)" +msgid "failed to make path '%s' : %s\n" +msgstr "impossibile seguire il percorso '%s' : %s\n" -#: lib/libalpm/util.c:550 +#: lib/libalpm/util.c:389  #, c-format -msgid "could not remove tmpdir %s" -msgstr "impossibile rimuovere la directory temporanea %s" +msgid "could not open %s: %s\n" +msgstr "impossibile aprire %s: %s\n" -#: lib/libalpm/util.c:568 +#: lib/libalpm/util.c:573  #, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "impossibile leggere le informazioni dello spazio del disco da %s: %s" +msgid "no %s cache exists, creating...\n" +msgstr "la cache di %s non esiste, creazione in corso...\n" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" +#: lib/libalpm/util.c:593 +msgid "couldn't create package cache, using /tmp instead\n"  msgstr "" -"check_freespace: dimensione totale dei pacchetti: %lld, spazio disponibile: %" -"lld" +"impossibile creare la cache del pacchetto, al suo posto sarà usata /tmp\n" -#: lib/libalpm/versioncmp.c:279 +#: lib/libalpm/util.c:643  #, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +msgid "md5: %s can't be opened\n" +msgstr "md5: impossibile aprire %s\n" -#: lib/libalpm/versioncmp.c:284 +#: lib/libalpm/util.c:645  #, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" - -#~ msgid "%s saved as %s.pacorig" -#~ msgstr "%s salvato come %s.pacorig" +msgid "md5: %s can't be read\n" +msgstr "md5: impossibile leggere %s\n" -#~ msgid "notice: %s is in NoExtract -- skipping extraction" -#~ msgstr "avviso: %s è in NoExtract -- estrazione ignorata" +#~ msgid "please remove '%s' first, using -Rd\n" +#~ msgstr "Si consiglia di rimuovere prima '%s', usando l'opzione -Rd\n" -#~ msgid "loading package cache (infolevel=%#x) for repository '%s'" -#~ msgstr "" -#~ "caricamento della cache del pacchetto (infolevel=%#x) per il repository '%" -#~ "s'" +#~ msgid "cannot resolve dependencies for \"%s\"\n" +#~ msgstr "impossibile risolvere le dipendenze per \"%s\"\n" -#~ msgid "package cache reloaded (infolevel=%#x) for repository '%s'" +#~ msgid "could not update requiredby for database entry %s-%s\n"  #~ msgstr "" -#~ "ricaricamento della cache del pacchetto (infolevel=%#x) per il repository " -#~ "'%s'" - -#~ msgid "targs vs db: found %s as a conflict for %s" -#~ msgstr "target vs db: trovato %s come conflitto per %s" - -#~ msgid "targs vs targs: found %s as a conflict for %s" -#~ msgstr "targs vs targs: trovato %s come conflitto per %s" - -#~ msgid "db vs targs: found %s as a conflict for %s" -#~ msgstr "db vs targs: trovato %s come conflitto per %s" - -#~ msgid "no dependencies for target '%s'" -#~ msgstr "nessuna dipendenza richiesta dal pacchetto '%s'" - -#~ msgid "could not parse token %s" -#~ msgstr "impossibile analizzare il simbolo %s" - -#~ msgid "compare versions for %s: %s vs %s, result=%d" -#~ msgstr "confronto delle versioni di %s: %s vs %s, risultato=%d" - -#~ msgid "%s-%s: ignoring package upgrade (%s => %s)" -#~ msgstr "%s-%s: aggiornamento del pacchetto (%s => %s) ignorato" - -#~ msgid "db scan found package: %s" -#~ msgstr "trovato il pacchetto: %s" +#~ "impossibile aggiornare il campo richiesto da per la voce del database %s-%" +#~ "s\n" -#~ msgid "dep is NULL!" -#~ msgstr "dep è NULL!" +#~ msgid "could not update new database entry %s-%s\n" +#~ msgstr "impossibile aggiornare la nuova voce del database %s-%s\n" -#~ msgid "loading ALL info for '%s'" -#~ msgstr "caricamento in corso di tutte le informazioni di '%s'" +#~ msgid "could not update 'requiredby' database entry %s-%s\n" +#~ msgstr "impossibile aggiornare la voce 'richiesto da' del database %s-%s\n" diff --git a/lib/libalpm/po/libalpm.pot b/lib/libalpm/po/libalpm.pot index 4f7a1bf3..9e0f1829 100644 --- a/lib/libalpm/po/libalpm.pot +++ b/lib/libalpm/po/libalpm.pot @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: PACKAGE VERSION\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"  "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,1487 +16,658 @@ msgstr ""  "Content-Type: text/plain; charset=CHARSET\n"  "Content-Transfer-Encoding: 8bit\n" -#: lib/libalpm/add.c:77 +#: lib/libalpm/add.c:88  #, c-format -msgid "loading target '%s'" +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "" -#: lib/libalpm/add.c:122 +#: lib/libalpm/add.c:97  #, c-format -msgid "replacing older version %s-%s by %s in target list" +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr "" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" -msgstr "" - -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "" - -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "" - -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" -msgstr "" - -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "" - -#: lib/libalpm/add.c:411 -#, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "" - -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 -#, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "" - -#: lib/libalpm/add.c:508 -#, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "" - -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" -msgstr "" - -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" -msgstr "" - -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" -msgstr "" - -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" -msgstr "" - -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "" - -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" -msgstr "" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "" - -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" -msgstr "" - -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" -msgstr "" - -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "" - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1044 -#, c-format -msgid "config: rootdir: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n"  msgstr "" -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n"  msgstr "" -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +#: lib/libalpm/add.c:172 +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n"  msgstr "" -#: lib/libalpm/be_files.c:226 +#: lib/libalpm/add.c:365  #, c-format  msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" -msgstr "" - -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" -msgstr "" - -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n"  msgstr "" -#: lib/libalpm/cache.c:129 +#: lib/libalpm/add.c:392  #, c-format -msgid "adding entry '%s' in '%s' cache" +msgid "extract: symlink %s does not point to dir\n"  msgstr "" -#: lib/libalpm/cache.c:149 +#: lib/libalpm/add.c:399  #, c-format -msgid "removing entry '%s' from '%s' cache" +msgid "extract: not overwriting dir with file %s\n"  msgstr "" -#: lib/libalpm/cache.c:156 +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422  #, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" +msgid "could not extract %s (%s)\n"  msgstr "" -#: lib/libalpm/cache.c:178 +#: lib/libalpm/add.c:505  #, c-format -msgid "error: failed to get '%s' from NULL pkgcache" +msgid "could not rename %s (%s)\n"  msgstr "" -#: lib/libalpm/cache.c:201 +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508  #, c-format -msgid "loading group cache for repository '%s'" +msgid "could not copy tempfile to %s (%s)\n"  msgstr "" -#: lib/libalpm/conflict.c:69 +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234  #, c-format -msgid "   found conflict '%s' : package '%s'" +msgid "%s saved as %s\n"  msgstr "" -#: lib/libalpm/conflict.c:78 +#: lib/libalpm/add.c:556  #, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" +msgid "could not install %s as %s: %s\n"  msgstr "" -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 +#: lib/libalpm/add.c:559  #, c-format -msgid "package '%s' conflicts with itself - packaging error" +msgid "%s installed as %s\n"  msgstr "" -#: lib/libalpm/conflict.c:107 +#: lib/libalpm/add.c:576  #, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" -msgstr "" - -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" +msgid "extracting %s as %s.pacnew\n"  msgstr "" -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +msgid "could not get current working directory\n"  msgstr "" -#: lib/libalpm/deps.c:230 +#: lib/libalpm/add.c:765  #, c-format -msgid "cannot find package installed '%s'" +msgid "problem occurred while upgrading %s\n"  msgstr "" -#: lib/libalpm/deps.c:261 +#: lib/libalpm/add.c:770  #, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" +msgid "problem occurred while installing %s\n"  msgstr "" -#: lib/libalpm/deps.c:280 +#: lib/libalpm/add.c:785  #, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" +msgid "could not update database entry %s-%s\n"  msgstr "" -#: lib/libalpm/deps.c:289 +#: lib/libalpm/add.c:793  #, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" +msgid "could not add entry '%s' in cache\n"  msgstr "" -#: lib/libalpm/deps.c:359 +#: lib/libalpm/be_files.c:223  #, c-format -msgid "missing dependency '%s' for package '%s'" +msgid "invalid name for database entry '%s'\n"  msgstr "" -#: lib/libalpm/deps.c:409 +#: lib/libalpm/be_files.c:275  #, c-format -msgid "checkdeps: found %s as required by %s" +msgid "loading package data for %s : level=%d\n"  msgstr "" -#: lib/libalpm/deps.c:485 +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787  #, c-format -msgid "excluding %s -- explicitly installed" +msgid "could not open file %s: %s\n"  msgstr "" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/cache.c:62  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "" -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 +#: lib/libalpm/db.c:285  #, c-format -msgid "adding '%s' to the targets" +msgid "could not remove database entry %s%s\n"  msgstr "" -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" +#: lib/libalpm/db.c:553 +msgid "attempt to re-register the 'local' DB\n"  msgstr "" -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +msgid "database path is undefined\n"  msgstr "" -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#: lib/libalpm/deps.c:173 +msgid "dependency cycle detected:\n"  msgstr "" -#: lib/libalpm/deps.c:647 +#: lib/libalpm/deps.c:175  #, c-format -msgid "dependency %s is already in the target list -- skipping" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:667 +#: lib/libalpm/deps.c:177  #, c-format -msgid "pulling dependency %s (needed by %s)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:671 +#: lib/libalpm/deps.c:573  #, c-format -msgid "cannot resolve dependencies for \"%s\"" +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +msgid "could not find or read directory" +msgstr "" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "" -#: lib/libalpm/error.c:123 -msgid "group not found" -msgstr "" - -#: lib/libalpm/error.c:126 -msgid "could not satisfy dependencies" -msgstr "" -  #: lib/libalpm/error.c:128 -msgid "conflicting dependencies" +msgid "corrupted delta"  msgstr ""  #: lib/libalpm/error.c:130 -msgid "conflicting files" +msgid "delta patch failed"  msgstr ""  #: lib/libalpm/error.c:133 -msgid "user aborted the operation" +msgid "group not found"  msgstr "" -#: lib/libalpm/error.c:135 -msgid "internal error" +#: lib/libalpm/error.c:136 +msgid "could not satisfy dependencies"  msgstr "" -#: lib/libalpm/error.c:137 -msgid "libarchive error" +#: lib/libalpm/error.c:138 +msgid "conflicting dependencies"  msgstr "" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" +#: lib/libalpm/error.c:140 +msgid "conflicting files"  msgstr "" -#: lib/libalpm/error.c:142 -msgid "not confirmed" +#: lib/libalpm/error.c:143 +msgid "user aborted the operation"  msgstr ""  #: lib/libalpm/error.c:145 -msgid "bad configuration section name" +msgid "internal error"  msgstr ""  #: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" +msgid "libarchive error"  msgstr "" -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" +#: lib/libalpm/error.c:150 +msgid "not confirmed"  msgstr "" -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "" - -#: lib/libalpm/handle.c:195 +#: lib/libalpm/package.c:124  #, c-format -msgid "option 'dbpath' = %s" +msgid "could not get md5sum for package %s-%s\n"  msgstr "" -#: lib/libalpm/handle.c:211 +#: lib/libalpm/package.c:133  #, c-format -msgid "option 'cachedir' = %s" +msgid "md5sums do not match for package %s-%s\n"  msgstr "" -#: lib/libalpm/md5driver.c:56 +#: lib/libalpm/package.c:737  #, c-format -msgid "%s can't be opened\n" +msgid "%s: forcing upgrade to version %s\n"  msgstr "" -#: lib/libalpm/md5driver.c:74 +#: lib/libalpm/package.c:742  #, c-format -msgid "md5(%s) = %s" +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "" -#: lib/libalpm/package.c:147 +#: lib/libalpm/package.c:750  #, c-format -msgid "%s-%s: ignoring package upgrade (%s)" +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "" -#: lib/libalpm/package.c:158 +#: lib/libalpm/package.c:931  #, c-format -msgid "%s: forcing upgrade to version %s" +msgid "could not parse package description file in %s\n"  msgstr "" -#: lib/libalpm/package.c:163 +#: lib/libalpm/package.c:936  #, c-format -msgid "%s: local (%s) is newer than %s (%s)" +msgid "missing package name in %s\n"  msgstr "" -#: lib/libalpm/package.c:171 +#: lib/libalpm/package.c:940  #, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +msgid "missing package version in %s\n"  msgstr "" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 +#: lib/libalpm/package.c:970  #, c-format -msgid "%s: syntax error in description file line %d" +msgid "could not remove tempfile %s\n"  msgstr "" -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" -msgstr "" - -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" -msgstr "" - -#: lib/libalpm/package.c:363 +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998  #, c-format -msgid "missing package version in %s" +msgid "error while reading package %s: %s\n"  msgstr "" -#: lib/libalpm/package.c:398 +#: lib/libalpm/package.c:1005  #, c-format -msgid "could not remove tempfile %s" +msgid "missing package metadata in %s\n"  msgstr "" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 +#: lib/libalpm/package.c:1012  #, c-format -msgid "error while reading package: %s" -msgstr "" - -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "" - -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" -msgstr "" - -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" +msgid "missing package filelist in %s, generating one\n"  msgstr ""  #: lib/libalpm/remove.c:121  #, c-format -msgid "pulling %s in the targets list" -msgstr "" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" -msgstr "" - -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" -msgstr "" - -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" +msgid "could not find %s in database -- skipping\n"  msgstr "" -#: lib/libalpm/remove.c:236 +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243  #, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" +msgid "cannot remove file '%s': %s\n"  msgstr ""  #: lib/libalpm/remove.c:337  #, c-format -msgid "removing database entry '%s'" -msgstr "" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" +msgid "could not remove database entry %s-%s\n"  msgstr "" -#: lib/libalpm/remove.c:344 +#: lib/libalpm/remove.c:342  #, c-format -msgid "could not remove entry '%s' from cache" +msgid "could not remove entry '%s' from cache\n"  msgstr "" -#: lib/libalpm/sha1.c:397 +#: lib/libalpm/server.c:56  #, c-format -msgid "sha1: %s can't be opened\n" -msgstr "" - -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" -msgstr "" - -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" +msgid "url '%s' is invalid, ignoring\n"  msgstr "" -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n"  msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" +#: lib/libalpm/server.c:241 +msgid "disk"  msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 +#: lib/libalpm/server.c:245  #, c-format -msgid "target '%s' not found -- looking for provisions" +msgid "failed retrieving file '%s' from %s : %s\n"  msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n"  msgstr "" -#: lib/libalpm/sync.c:290 +#: lib/libalpm/server.c:288  #, c-format -msgid "repository '%s' not found" +msgid "cannot write to file '%s'\n"  msgstr "" -#: lib/libalpm/sync.c:331 +#: lib/libalpm/server.c:307  #, c-format -msgid "%s-%s is up to date -- skipping" +msgid "error downloading '%s': %s\n"  msgstr "" -#: lib/libalpm/sync.c:354 +#: lib/libalpm/server.c:319  #, c-format -msgid "adding target '%s' to the transaction set" -msgstr "" - -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" +msgid "error writing to file '%s': %s\n"  msgstr "" -#: lib/libalpm/sync.c:422 +#: lib/libalpm/server.c:387  #, c-format -msgid "adding package %s-%s to the transaction targets" +msgid "could not chdir to %s\n"  msgstr "" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n"  msgstr "" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n"  msgstr "" -#: lib/libalpm/sync.c:516 +#: lib/libalpm/server.c:458  #, c-format -msgid "'%s' not found in transaction set -- skipping" +msgid "failed to download %s\n"  msgstr "" -#: lib/libalpm/sync.c:527 +#: lib/libalpm/sync.c:135  #, c-format -msgid "package '%s' provides its own conflict" +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"  msgstr "" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 +#: lib/libalpm/sync.c:250  #, c-format -msgid "'%s' is in the target list -- keeping it" +msgid "%s: ignoring package upgrade (%s => %s)\n"  msgstr "" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 +#: lib/libalpm/sync.c:320  #, c-format -msgid "removing '%s' from target list" +msgid "repository '%s' not found\n"  msgstr "" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "" - -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "" - -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" -msgstr "" - -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "" - -#: lib/libalpm/sync.c:712 +#: lib/libalpm/sync.c:354  #, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" +msgid "%s-%s is up to date -- skipping\n"  msgstr "" -#: lib/libalpm/sync.c:808 +#: lib/libalpm/sync.c:358  #, c-format -msgid "%s is already in the cache\n" +msgid "%s-%s is up to date -- reinstalling\n"  msgstr "" -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +msgid "unresolvable package conflicts detected\n"  msgstr "" -#: lib/libalpm/sync.c:820 +#: lib/libalpm/sync.c:628  #, c-format -msgid "warning: no %s cache exists, creating..." +msgid "malloc failure: could not allocate %zd bytes\n"  msgstr ""  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" - -#: lib/libalpm/sync.c:833 -#, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "" - -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" -msgstr "" - -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "" - -#: lib/libalpm/sync.c:896  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "" - -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" -msgstr "" - -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" -msgstr "" - -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" -msgstr "" - -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" +msgid "command: %s\n"  msgstr "" -#: lib/libalpm/sync.c:1030 +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896  #, c-format -msgid "could not update requiredby for database entry %s-%s" +msgid "can't get md5 checksum for file %s\n"  msgstr "" -#: lib/libalpm/sync.c:1039 +#: lib/libalpm/sync.c:910  #, c-format -msgid "could not update new database entry %s-%s" +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "" -#: lib/libalpm/sync.c:1079 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "found package '%s-%s' in sync" +msgid "failed to retrieve some files from %s\n"  msgstr "" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" +#: lib/libalpm/sync.c:1137 +msgid "could not create removal transaction\n"  msgstr "" -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" +#: lib/libalpm/sync.c:1143 +msgid "could not initialize the removal transaction\n"  msgstr "" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" +#: lib/libalpm/sync.c:1165 +msgid "could not prepare removal transaction\n"  msgstr "" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" +#: lib/libalpm/sync.c:1171 +msgid "could not commit removal transaction\n"  msgstr "" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" +#: lib/libalpm/sync.c:1182 +msgid "could not create transaction\n"  msgstr "" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" +#: lib/libalpm/sync.c:1187 +msgid "could not initialize transaction\n"  msgstr "" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" +#: lib/libalpm/sync.c:1214 +msgid "could not prepare transaction\n"  msgstr "" -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" +#: lib/libalpm/sync.c:1219 +msgid "could not commit transaction\n"  msgstr "" -#: lib/libalpm/util.c:293 +#: lib/libalpm/trans.c:214  #, c-format -msgid "could not extract %s: %s\n" +msgid "could not remove lock file %s\n"  msgstr "" -#: lib/libalpm/util.c:350 +#: lib/libalpm/trans.c:483  #, c-format -msgid "logaction called: %s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"  msgstr "" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" +#: lib/libalpm/trans.c:494 +msgid "could not create temp directory\n"  msgstr "" -#: lib/libalpm/util.c:472 +#: lib/libalpm/trans.c:536  #, c-format -msgid "could not change directory to %s (%s)" +msgid "could not change directory to %s (%s)\n"  msgstr "" -#: lib/libalpm/util.c:476 +#: lib/libalpm/trans.c:554  #, c-format -msgid "executing %s script..." +msgid "could not fork a new process (%s)\n"  msgstr "" -#: lib/libalpm/util.c:489 +#: lib/libalpm/trans.c:564  #, c-format -msgid "could not fork a new process (%s)" +msgid "could not change the root directory (%s)\n"  msgstr "" -#: lib/libalpm/util.c:496 +#: lib/libalpm/trans.c:569  #, c-format -msgid "chrooting in %s" +msgid "could not change directory to / (%s)\n"  msgstr "" -#: lib/libalpm/util.c:498 +#: lib/libalpm/trans.c:578  #, c-format -msgid "could not change the root directory (%s)" +msgid "call to popen failed (%s)"  msgstr "" -#: lib/libalpm/util.c:502 +#: lib/libalpm/trans.c:597  #, c-format -msgid "could not change directory to / (%s)" +msgid "call to waitpid failed (%s)\n"  msgstr "" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n"  msgstr "" -#: lib/libalpm/util.c:509 +#: lib/libalpm/trans.c:615  #, c-format -msgid "call to popen failed (%s)" +msgid "could not remove tmpdir %s\n"  msgstr "" -#: lib/libalpm/util.c:541 +#: lib/libalpm/util.c:204  #, c-format -msgid "call to waitpid failed (%s)" +msgid "failed to make path '%s' : %s\n"  msgstr "" -#: lib/libalpm/util.c:550 +#: lib/libalpm/util.c:389  #, c-format -msgid "could not remove tmpdir %s" +msgid "could not open %s: %s\n"  msgstr "" -#: lib/libalpm/util.c:568 +#: lib/libalpm/util.c:573  #, c-format -msgid "cannot read disk space information from %s: %s" +msgid "no %s cache exists, creating...\n"  msgstr "" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" +#: lib/libalpm/util.c:593 +msgid "couldn't create package cache, using /tmp instead\n"  msgstr "" -#: lib/libalpm/versioncmp.c:279 +#: lib/libalpm/util.c:643  #, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" +msgid "md5: %s can't be opened\n"  msgstr "" -#: lib/libalpm/versioncmp.c:284 +#: lib/libalpm/util.c:645  #, c-format -msgid "depcmp: %s-%s %s %s => %s" +msgid "md5: %s can't be read\n"  msgstr "" diff --git a/lib/libalpm/po/pl_PL.po b/lib/libalpm/po/pl_PL.po index 0790a611..01e0fa07 100644 --- a/lib/libalpm/po/pl_PL.po +++ b/lib/libalpm/po/pl_PL.po @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: Pacman package manager 3.0.1\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-04-12 04:23+0200\n"  "Last-Translator: Mateusz Jędrasik <m.jedrasik@gmail.com>\n"  "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" @@ -18,1507 +18,728 @@ msgstr ""  "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "  "|| n%100>=20) ? 1 : 2);\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "ładowanie celu '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "zastępowanie starszej wersji %s-%s na %s z listy celów" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr "nowsza wersja %s-%s znajduje się w liście celów -- pomijam" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "czytanie metadane '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "szukanie nieusatysfakcjonowanych zależności" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "szukanie konfliktów" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "zastępowanie pakietów z -A i -U nie jest jeszcze wspierane" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "proszę usunąć pierw '%s', korzystając z -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "sortowanie według zależności" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "czyszczenie" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "szukanie konfliktów plików" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "aktualizowanie pakietu %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "dodawanie pakietu %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "usuwanie wpierw starego pakietu (%s-%s)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:411 +#: lib/libalpm/add.c:365  #, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "dodawanie %s tymczasowo do tablicy NoUpgrade" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "rozpakowywanie plików" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "nie można znaleźć obecnego katalogu" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 +#: lib/libalpm/add.c:392  #, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s znajduje się w NoExtract, pomijanie rozpakowywania" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:399  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "%s znajduje się w trans->skip_add, pomijanie rozpakowywania" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422 +#, fuzzy, c-format +msgid "could not extract %s (%s)\n"  msgstr "nie udało się rozpakować %s (%s)" -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "sprawdzanie sum md5 dla %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "sprawdzanie sum sha1 dla %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "bieżące:   %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "nowe:     %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "oryginalne: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "nie udało się zmienić nazwy %s (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "błąd: nie udało się zmienić nazwy %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "nie udało się skopiować pliku tymczasowego do %s (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "błąd: nie udało się skopiować pliku tymczasowego do %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s zachowane jako %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "uwaga: %s zachowane jako %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "czynność: instalowanie nowego pliku: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "czynność: zostawianie obecnych plików na miejscu" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"czynność: zachowywanie obecnego pliku i instalowanie nowego z końcówką ." -"pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "nie udało się zainstalować %s jako %s: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "błąd: nie udało się zainstalować %s jako %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s zainstalowano jako %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "uwaga: %s zainstalowano jako %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s znajduje się w NoUpgrade -- pomijanie" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "rozpakowywanie %s jako %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "uwaga: rozpakowywanie %s jako %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "rozpakowywanie %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "błąd: nie udało się rozpakować %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "dodawanie pozycji kopii zapasowej dla %s" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "nie można znaleźć obecnego katalogu" -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n"  msgstr "wystąpiły błędy podczas %s %s" -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "aktualizowanie" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "instalowanie" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "zasób '%s' został usunięty z pakietu %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "aktualizowanie '%s' z powodu zmiany zasobu (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "nie udało się zaktualizować zasobu '%s' z '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "aktualizowanie bazy danych" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "dodawanie pozycji bazy danych '%s'" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "wystąpiły błędy podczas %s %s" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "nie udało się zaktualizować pozycji bazy danych %s-%s" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" +#: lib/libalpm/add.c:793 +#, fuzzy, c-format +msgid "could not add entry '%s' in cache\n"  msgstr "nie udało się dodać pozycji '%s' w pliku podręcznym" -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "uruchamianie \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "usuwanie BD %s, pozostało %d..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "odrejestrowywanie bazy danych '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "zamykanie bazy danych '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"dodawanie nowego serwera do bazy danych '%s': protokół '%s', serwer '%s', " -"ścieżka '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "lista serwerów spuszczona(?) dla '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"nie udało się otrzymać czasu ostatniej aktualizacji dla %s (nic wielkiego)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "nie udało się zsynchronizować bd: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sync: nowy mtime dla %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "spuszczanie(?) bazy danych %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "nie udało się usunąć wpisu %s%s z bazy danych" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "nie udało się otrzymać sumy sha1 dla pakietu %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "sumy kontrolne sha1 zgadzają się dla pakietu %s-%s" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "sumy kontrolne sha1 dla pakietu %s-%s nie zgadzają się" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "nie udało się otrzymać sumy md5 dla pakietu %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "sumy kontrolne md5 zgadzają się dla pakietu %s-%s" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "sumy kontrolne md5 dla pakietu %s-%s nie zgadzają się" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "nie udało się usunąć pliku blokującego %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "uwaga: nie udało się usunąć pliku blokującego %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "konfiguracja: nowa sekcja '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "konfiguracja: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "konfiguracja: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "konfiguracja: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "konfiguracja: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "konfiguracja: zawieranie %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "konfiguracja: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "konfiguracja: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "konfiguracja: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "konfiguracja: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "konfiguracja: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "konfiguracja: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 -#, c-format -msgid "config: rootdir: %s" -msgstr "konfiguracja: rootdir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "konfiguracja: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "konfiguracja: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "konfiguracja: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "sprawdzanie potencjalnych pakietów zastępczych" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "sprawdzanie zastępcy '%s' dla pakietu '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s wybrany do zaktualizowania (do zastąpienia przez %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' nie odnaleziony w bd sync -- pomijanie" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' jest już wybrany do usunięcia -- pomijanie" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s wybrany do zaktualizowania (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "rozpakowywanie bazy danych '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "otwieranie bazy danych ze ścieżki '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "skan bd nie odnalazł pakietu: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +#: lib/libalpm/be_files.c:223 +#, fuzzy, c-format +msgid "invalid name for database entry '%s'\n"  msgstr "nieprawidłowa nazwa dla wpisu bazy danych '%s'" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "dostarczono nieprawidłowy wpis pakietu do _alpm_db_read, pomijanie" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" -"żądanie odczytania informacji bazy danych dla pakietu '%s' bazowanego na " -"pliku, pomijanie..." - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" +#: lib/libalpm/be_files.c:275 +#, fuzzy, c-format +msgid "loading package data for %s : level=%d\n"  msgstr "ładowanie danych pakietu dla %s : poziom=%d" -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "nie udało się odnaleźć '%s-%s' w bd '%s'" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "nie udało się otworzyć pliku %s: %s" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "zapisywanie informacji DESC dla %s-%s spowrotem do bd" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "zapisywanie informacji FILES dla %s-%s spowrotem do bd" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "zapisywanie informacji DEPENDS dla %s-%s spowrotem do bd" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "ładowanie pamięci podręcznej pakietów dla repozytorium '%s'" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" +#: lib/libalpm/cache.c:62 +#, fuzzy, c-format +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "dodawanie '%s' do pamięci podręcznej pakietów dla bd '%s'" -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "uwalnianie pamięci podręcznej pakietów dla repozytorium '%s'" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "błąd: pkgcache jest równy NULL dla bd '%s'" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "dodawanie wpisu '%s' pamięci podręcznej '%s'" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "usuwanie wpisu '%s' z pamięci podręcznej '%s'" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "" -"nie udało się usunąć wpisu '%s' z pamięci podręcznej '%s': nie znaleziono" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "błąd: nie udało się otrzymać '%s' z NULL pkgcache" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "ładowanie pamięci podręcznej grup z repozytorium '%s'" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "   znaleziono konflikt '%s' : pakiet '%s'" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "   znaleziono konflikt '%s' : pakiet '%s' dostarcza '%s'" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "pakiet '%s' konfliktuje ze sobą - błąd pakowania" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "checkconflicts: cel '%s' vs bd" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "checkconflicts: cel '%s' vs wszystkie cele" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "checkconflicts: bd vs cel '%s'" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "cel '%s' jest także w liście celów, używanie NOWYCH konfliktów" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "\tCONFLICTS:: %s konfliktuje z %s" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "błąd malloc: nie udało się zaalokować %d bajtów" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "błąd malloc: nie udało się zaalokować %d bajtów" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "nie udało się usunąć wpisu %s%s z bazy danych" -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" +#: lib/libalpm/db.c:553 +#, fuzzy +msgid "attempt to re-register the 'local' DB\n"  msgstr "próba ponownej rejestracji 'lokalnej' BD" -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "próba ponownej rejestracji bazy danych '%s', używając obecnej" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "rejestrowanie bazy danych '%s'" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "katalog bazy danych '%s' nie istnieje, utwarzanie" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "otwieranie bazy danych '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "rozpoczynanie sortowania zależności" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "odkryto potencjalny cykl zależności" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "sortowanie zależności ukończone" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "zerowy pakiet odnaleziony w liście pakietów" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "nie udało się odnaleźć pakietu który zainstalował '%s'" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "baza danych nie została zainicjowana" -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "checkdeps: zależność '%s' została przesunięta z '%s' do '%s'" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "wykryto cykl zależności: %s" -#: lib/libalpm/deps.c:280 +#: lib/libalpm/deps.c:175  #, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -"checkdeps: zależność '%s' satysfakcjonowana przez zainstalowany pakiet '%s'" - -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "checkdeps: zaktualizowany '%s' nie satysfakcjonuje zależności '%s'" -#: lib/libalpm/deps.c:359 +#: lib/libalpm/deps.c:177  #, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "brakująca zależność '%s' dla pakietu '%s'" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "checkdeps: znaleziono %s wymagane przez %s" - -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "wykluczanie %s -- zainstalowany eksplicytnie" - -#: lib/libalpm/deps.c:532 -#, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "nie udało się odnaleźć pakietu \"%s\" ani niczego co go dostarcza!" - -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "dodawanie '%s' do celów" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "rozpoczynanie rozwiązywania zależności" - -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "%s dostarcza zależność %s -- pomijanie" - -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -"nie udało się rozwiązać zależności dla \"%s\" (\"%s\" nie znajduje się w " -"zbiorze pakietów)" - -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" -msgstr "zależność %s jest już w liście celów -- pomijanie" -#: lib/libalpm/deps.c:667 -#, c-format -msgid "pulling dependency %s (needed by %s)" -msgstr "wciąganie zależności %s (wymagane przez %s)" - -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "nie udało się rozwiązać zależności dla \"%s\"" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "wykryto cykl zależności: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "zakończono rozwiązywanie zależności" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "brak pamięci!" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "niespodziewany błąd systemu" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "niewystarczające przywileje" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "nie udało się znaleźć bądź odczytać pliku" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "nie udało się znaleźć bądź odczytać pliku" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "błędny bądź ZEROWY argument dany" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "biblioteka nie została zainicjowana" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "biblioteka już zainicjowana" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "nie udało się zablokować bazy danych" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "nie udało się otworzyć bazy danych" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "nie udało się stworzyć bazy danych" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "baza danych nie została zainicjowana" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "baza danych już zarejestrowana" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "nie udało się odnaleźc bazy danych" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "nie udało się zaktualizować bazy danych" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "nie udało się usunąć wpisu do bazy danych" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "nieprawidłowy url dla serwera" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "nie udało się ustawić parametru" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "tranzakcja już zainicjowana" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "tranzakcja nie została zainicjowana" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "duplikat celu" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "tranzakcja nie została przygotowana" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "tranzakcja zaniechana" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "operacja niekompatybilna z typem tranzakcji" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "nie udało się wykonać tranzakcji" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "nie udało się pobrać wszystkich plików" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "nie udało się znaleźć bądź odczytać pakietu" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package" -msgstr "nieprawidłowy bądź uszkodzony pakiet" +msgstr "nieprawidłowy bądź skorumpowany pakiet" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "nie udało się otworzyć pliku pakietu" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "nie udało się załadować danych pakietu" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "pakiet już zainstalowany" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "nie udało się usunąć wszystkich plików pakietu" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "nieprawidłowa nazwa pakietu" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package" -msgstr "uszkodzony pakiet" +msgstr "skorumpowany pakiet" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "nie ma takiego repozytorium" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "skorumpowany pakiet" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "grupa nie została odnaleziona" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "nie udało się usatysfakcjonować zależności" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "konfliktujące zależności" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "konfliktujące pliki" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "użytkownik zaniechał operacji" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "błąd wewnętrzny" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "błąd libarchive" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "nie wystarczająca ilość wolnego miejsca na dysku" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "nie potwierdzono" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "zła nazwa sekcji konfiguracji" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "" -"'local' jest nazwą zarezerwowaną i nie może zostać użyty jako nazwa " -"repozytorium" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "błąd składni w pliku konfiguracyjnym" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "wszystkie dyrektywy muszą być własnością sekcji" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "nieprawidłowe wyrażenie regularne" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "połączenie ze zdalnym hostem nieudane" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "niespodziewany błąd" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "nie udało się skanonizować podanej ścieżki docelowej '%s'" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "opcja 'root' = %s" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "opcja 'dbpath' = %s" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "opcja 'cachedir' = %s" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "%s nie może być otwarte\n" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "md5(%s) = %s" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "nie udało się otrzymać sumy md5 dla pakietu %s-%s" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "%s-%s: ignorowanie aktualizacji pakietu (%s)" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "sumy kontrolne md5 dla pakietu %s-%s nie zgadzają się" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: wymuszanie aktualizacji do wersji %s" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: local (%s) jest nowsze niż %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "%s-%s: opóźnianie aktualizacji pakietu (%s)" -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "%s: błąd składni w pliku opisu linia %d" - -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n"  msgstr "nie udało się przeczytać pliku opisu" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n"  msgstr "brak nazwy pakietu w %s" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n"  msgstr "brak wersji pakietu w %s" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "nie udało się usunąć pliku tymczasowego %s" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "błąd odczytywania pakietu: %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n"  msgstr "brak metadanych pakietu" -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n"  msgstr "brak listy plików pakietu w %s, generowanie" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "dodawanie '%s' w polu requiredby dla '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "dodawanie '%s' w polu requiredby dla '%s' (dostarcza: %s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "nie udało się odnaleźć %s w bazie danych" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "dodawanie %s do listy celów" -  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "wciąganie %s na listę celów" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "nie udało się odnaleźć %s w bazie danych -- pomijanie" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "odnajdywanie usuwalnych zależności" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "nie udało się usunąć pliku '%s': %s" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "Pomijanie usunięcia '%s' ze względu na NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "plik %s nie istnieje" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "zachowywanie katalogu %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "usuwanie katalogu %s" +#: lib/libalpm/remove.c:337 +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n" +msgstr "nie udało się usunąć wpisu %s-%s z bazy danych" -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "%s jest w trans->skip_remove, pomijanie usunięcia" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n" +msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej" -#: lib/libalpm/remove.c:250 +#: lib/libalpm/server.c:56  #, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" +msgid "url '%s' is invalid, ignoring\n"  msgstr "" -"tranzakcja ustawiona jako NOSAVE, brak tworzenia kopii zapasowej dla '%s'" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "odlinkowywanie %s" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "nie udało się usunąć pliku %s: %s" -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "usuwanie pakietu %s-%s" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n" +msgstr "" -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" +#: lib/libalpm/server.c:241 +msgid "disk"  msgstr "" -"pakiet '%s' nie zostanie usunięty, nie udało się usunąć wszystkich plików" -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "usuwanie %d plików" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "nie udało się pobrać niektórych plików z %s\n" -#: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "usuwanie wpisu '%s' z bazy danych" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n" +msgstr "" -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" -msgstr "nie udało się usunąć wpisu %s-%s z bazy danych" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "nie udało się usunąć pliku '%s': %s" -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" -msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "błąd odczytywania pakietu: %s" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "sha1: %s nie może zostać otwarty\n" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "nie udało się usunąć pliku '%s': %s" -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" -msgstr "sha1(%s) = %s" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "nie udało się zmienić katalogu na / (%s)" -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "sprawdzanie potencjalnych uaktualnień pakietów" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n" +msgstr "" -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s wybrany do aktualizacji (%s => %s)" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n" +msgstr "" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" -msgstr "poszukiwanie celu w repo '%s'" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "nie udało się pobrać wszystkich plików" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "cel '%s' nie został odnaleziony -- szukanie zasobów dostarczających" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%s)" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "znaleziono '%s' jako zasób dla '%s'" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: ignorowanie aktualizacji pakietu (%s)" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n"  msgstr "repozytorium '%s' nie zostało znalezione" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s jest w najnowszej wersji -- pomijanie" -  #: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "dodawanie celu '%s' do zestawu tranzakcji" - -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "rozwiązywanie zależności celu" - -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "dodawanie pakietu %s-%s do celów tranzakcji" - -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "szukanie nierozwiązywalnych zależności" - -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "pakiet '%s' konfliktuje z '%s'" - -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "'%s' nie znaleziony w zestawie tranzakcji -- pomijanie" - -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "pakiet '%s' dostarcza swój własny konflikt" - -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "'%s' jest w liście celów -- zachowywanie" - -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "usuwanie '%s' z listy celów" - -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "rozwiązywanie konfliktu pakietu '%s'" +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s jest w najnowszej wersji -- pomijanie" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "wybieranie '%s' do usunięcia" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s jest w najnowszej wersji -- pomijanie" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "odkryto nierozwiązywalne konflikty pakietów" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "sprawdzanie zależności pakietów wyznaczonych do usunięcia" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "coś się bardzo nie udało" - -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "znaleziono '%s' jako zasób dla '%s' -- konflikt zaniechany" - -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s jest już w pamięci podręcznej\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "brak pamięci podręcznej dla %s, tworzenie...\n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "uwaga: brak pamięci podręcznej dla %s, tworzenie..." +#: lib/libalpm/sync.c:628 +#, fuzzy, c-format +msgid "malloc failure: could not allocate %zd bytes\n" +msgstr "błąd malloc: nie udało się zaalokować %d bajtów"  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "" -"nie udało się stworzenie pamięci podręcznej pakietu, używanie /tmp w zamian\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" -"uwaga: nie udało się stworzenie pamięci podręcznej pakietu, używanie /tmp w " -"zamian" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "nie udało się pobrać niektórych plików z %s\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr "nie udało się otrzymać sum kontrolnych md5 lub sha1 dla pakietu %s\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archiwum %s było uszkodzone (błąd sumy kontrolnej MD5 lub SHA1)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n" +msgstr "archiwum %s było skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "archiwum %s jest uszkodzone (błąd sumy kontrolnej MD5 lub SHA1)\n" +msgid "failed to retrieve some files from %s\n" +msgstr "nie udało się pobrać niektórych plików z %s\n" -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n"  msgstr "nie udało się utworzyć tranzakcji usuwania" -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" +#: lib/libalpm/sync.c:1143 +#, fuzzy +msgid "could not initialize the removal transaction\n"  msgstr "nie udało się zainicjować tranzakcji usuwania" -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "usuwanie pakietów konfliktujących i pakietów do zastąpienia" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n"  msgstr "nie udało się przygotować tranzakcji usuwania" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1171 +#, fuzzy +msgid "could not commit removal transaction\n"  msgstr "nie udało się wykonać tranzakcji usuwania" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "instalowanie pakietów" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n"  msgstr "nie udało się stworzyć tranzakcji" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1187 +#, fuzzy +msgid "could not initialize transaction\n"  msgstr "nie udało się zainicjować tranzakcji" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n"  msgstr "nie udało się przygotować tranzakcji" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" -msgstr "aktualizowanie baz danych dla zależności zastąpionych pakietów" +#: lib/libalpm/sync.c:1219 +#, fuzzy +msgid "could not commit transaction\n" +msgstr "nie udało się wykonać tranzakcji" -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "nie udało się zaktualizować requiredby dla wpisu %s-%s w bazie danych" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "nie udało się usunąć pliku blokującego %s" -#: lib/libalpm/sync.c:1039 +#: lib/libalpm/trans.c:483  #, c-format -msgid "could not update new database entry %s-%s" -msgstr "nie udało się zaktualizować nowego wpisu %s-%s w bazie danych" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n" +msgstr "" -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" -msgstr "znaleziono pakiet '%s-%s' w sync" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "nie udało się stworzyć katalogu tymczasowego" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "pakiet '%s' nie został odnaleziony w sync" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "nie udało się zmienić katalogu na %s (%s)" -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "aktualizowanie pól 'requiredby' pakietów zależności dla %s-%s" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "nie udało się odwidlić nowego procesu (%s)" -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "" -"pakiet nie ma żadnych zależności, brak innych pakietów do zaktualizowania" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "nie udało się zmienić katalogu głównego (%s)" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "aktualizowanie pola 'requiredby' dla pakietu '%s'" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "nie udało się zmienić katalogu na / (%s)" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format +msgid "call to popen failed (%s)" +msgstr "zawołanie do waitpid nieudane (%s)" + +#: lib/libalpm/trans.c:597 +#, fuzzy, c-format +msgid "call to waitpid failed (%s)\n" +msgstr "zawołanie do waitpid nieudane (%s)" + +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n"  msgstr "" -"nie udało się zaktualizować wpisu do bazy danych 'requiredby' dla %s-%s" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "nie udało się odnaleźć zależności '%s'" +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "nie udało się usunąć katalogu tymczasowego %s" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" +#: lib/libalpm/util.c:204 +#, fuzzy, c-format +msgid "failed to make path '%s' : %s\n"  msgstr "nie udało się stworzyć ścieżki '%s' : %s" -#: lib/libalpm/util.c:280 +#: lib/libalpm/util.c:389  #, c-format  msgid "could not open %s: %s\n"  msgstr "nie udało się otworzyć %s: %s\n" -#: lib/libalpm/util.c:293 +#: lib/libalpm/util.c:573  #, c-format -msgid "could not extract %s: %s\n" -msgstr "nie udało się rozpakować %s: %s\n" +msgid "no %s cache exists, creating...\n" +msgstr "brak pamięci podręcznej dla %s, tworzenie...\n" -#: lib/libalpm/util.c:350 -#, c-format -msgid "logaction called: %s" -msgstr "zawołane logaction: %s" +#: lib/libalpm/util.c:593 +#, fuzzy +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "" +"nie udało się stworzenie pamięci podręcznej pakietu, używanie /tmp w zamian\n" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "nie udało się stworzyć katalogu tymczasowego" +#: lib/libalpm/util.c:643 +#, fuzzy, c-format +msgid "md5: %s can't be opened\n" +msgstr "%s nie może być otwarte\n" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" -msgstr "nie udało się zmienić katalogu na %s (%s)" +#: lib/libalpm/util.c:645 +#, fuzzy, c-format +msgid "md5: %s can't be read\n" +msgstr "%s nie może być otwarte\n" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." -msgstr "wykonywanie skryptu %s..." +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "proszę usunąć pierw '%s', korzystając z -Rd" -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" -msgstr "nie udało się odwidlić nowego procesu (%s)" +#~ msgid "could not extract %s (%s)" +#~ msgstr "nie udało się rozpakować %s (%s)" -#: lib/libalpm/util.c:496 -#, c-format -msgid "chrooting in %s" -msgstr "chroot'owanie do %s" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "nie udało się zaktualizować zasobu '%s' z '%s'" -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" -msgstr "nie udało się zmienić katalogu głównego (%s)" +#, fuzzy +#~ msgid "%s: description file is missing" +#~ msgstr "%s: błąd składni w pliku opisu linia %d" -#: lib/libalpm/util.c:502 -#, c-format -msgid "could not change directory to / (%s)" -msgstr "nie udało się zmienić katalogu na / (%s)" +#~ msgid "malloc failed: could not allocate %d bytes" +#~ msgstr "błąd malloc: nie udało się zaalokować %d bajtów" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "wykonywanie \"%s\"" +#~ msgid "" +#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" +#~ msgstr "" +#~ "nie udało się rozwiązać zależności dla \"%s\" (\"%s\" nie znajduje się w " +#~ "zbiorze pakietów)" -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" -msgstr "zawołanie do popen nieudane (%s)" +#~ msgid "cannot canonicalize specified root path '%s'" +#~ msgstr "nie udało się skanonizować podanej ścieżki docelowej '%s'" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" -msgstr "zawołanie do waitpid nieudane (%s)" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "nie udało się otrzymać sumy sha1 dla pakietu %s-%s" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "nie udało się usunąć katalogu tymczasowego %s" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "sumy kontrolne sha1 dla pakietu %s-%s nie zgadzają się" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "nie udało się odczytać informacji o ilości danych na dysku z %s: %s" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "nie udało się usunąć pliku %s: %s" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "check_freespace: pełen rozmiar pakietu: %lld, wolna przestrzeń: %lld" +#~ msgid "sha1: %s can't be opened\n" +#~ msgstr "sha1: %s nie może zostać otwarty\n" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "depcmp: %s-%s %s %s-%s => %s" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "archiwum %s jest skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "depcmp: %s-%s %s %s => %s" +#~ msgid "could not update requiredby for database entry %s-%s" +#~ msgstr "" +#~ "nie udało się zaktualizować requiredby dla wpisu %s-%s w bazie danych" + +#~ msgid "could not update new database entry %s-%s" +#~ msgstr "nie udało się zaktualizować nowego wpisu %s-%s w bazie danych" + +#~ msgid "could not update 'requiredby' database entry %s-%s" +#~ msgstr "" +#~ "nie udało się zaktualizować wpisu do bazy danych 'requiredby' dla %s-%s" diff --git a/lib/libalpm/po/pt_BR.po b/lib/libalpm/po/pt_BR.po index 5d734e38..35c7c880 100644 --- a/lib/libalpm/po/pt_BR.po +++ b/lib/libalpm/po/pt_BR.po @@ -12,7 +12,7 @@ msgid ""  msgstr ""  "Project-Id-Version: pt_BR\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-03-07 01:18-0300\n"  "Last-Translator: Douglas Soares de Andrade <dsandrade@gmail.com>\n"  "Language-Team: Português do Brasil <pt@li.org>\n" @@ -22,1495 +22,683 @@ msgstr ""  "Plural-Forms:  nplurals=2; plural=(n > 1);\n"  "X-Generator: KBabel 1.11.4\n" -#: lib/libalpm/add.c:77 -#, c-format -msgid "loading target '%s'" -msgstr "carregando pacotes '%s'" - -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" +#: lib/libalpm/add.c:88 +#, fuzzy, c-format +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "substituindo a versão antiga %s-%s por '%s' na lista de pacotes" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n"  msgstr "versão atualizada %s-%s está na lista de pacotes -- pulando" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "lendo os metadados de '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "procurando por dependências não satisfeitas" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n" +msgstr "" -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "procurando por conflitos" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "substituir pacotes com -A e -U ainda não é suportado" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "por favor, remova '%s' primeiro usando -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "ordenando por dependências" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "finalizando" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "procurando por conflitos de arquivos" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "atualizando pacote %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "adicionando pacote %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "removendo pacotes antigos primeiro (%s-%s)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:411 +#: lib/libalpm/add.c:365  #, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "adicionando %s para NoUpgrade temporariamente" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "extraindo arquivos" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "não foi possível obter o diretório de trabalho atual" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 +#: lib/libalpm/add.c:392  #, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s está incluso em NoExtract -- não descompactando" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:399  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" -msgstr "o pacote %s está incluso em trans->skip_add, não descompactando" +msgid "extract: not overwriting dir with file %s\n" +msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422 +#, fuzzy, c-format +msgid "could not extract %s (%s)\n"  msgstr "não foi possível extrair %s (%s)" -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "verificando hashes md5 para %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "verificando hashes sha1 para %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "atual:  %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "novo:      %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "original: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "não foi possível renomear %s (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "erro: não foi possível renomear %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "não foi possível copiar arquivo temporário para %s (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "erro: não foi possível copiar arquivo temporário para %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s salvo como %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "aviso: %s salvo como %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "ação: instalando novo arquivo: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "ação: preservando o arquivo existente" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"ação: preservando o arquivo existente e instalando o novo com um final ." -"pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "não foi possível instalar %s como %s: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "erro: não foi possível instalar %s como %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s instalado como %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "atenção: %s instalado como %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s está como NoUpgrade -- pulando" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "extraindo %s como %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "aviso: extraindo %s como %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "extraindo %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "erro: não foi possível descompactar %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "adicionando entrada de backup para %s" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "não foi possível obter o diretório de trabalho atual" -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n"  msgstr "erros ocorreram durante %s %s" -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "atualizando" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "instalando" - -#: lib/libalpm/add.c:771 -#, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "a provisão '%s' foi removida do pacote %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "atualizando '%s' devido a uma mudança de provisão (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "não foi possível atualizar a provisão '%s' para '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "atualizando base de dados" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "adicionando a entrada de base de dados '%s'" +#: lib/libalpm/add.c:770 +#, fuzzy, c-format +msgid "problem occurred while installing %s\n" +msgstr "erros ocorreram durante %s %s" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "não foi possível atualizar a entrada na base de dados %s-%s" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" -msgstr "não foi possível adicionar a entrada '%s' ao cache" - -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "executando \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "removendo DB %s, %d continua existindo..." - -#: lib/libalpm/alpm.c:181 -#, c-format -msgid "unregistering database '%s'" -msgstr "desregistrando a base de dados '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "fechando a base de dados '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"adicionando novo servidor à base de dados '%s': protocolo '%s', servidor '%" -"s', caminho '%s'" - -#: lib/libalpm/alpm.c:236 -#, c-format -msgid "serverlist flushed for '%s'" -msgstr "lista de servidores nivelada para '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"falha para conseguir o horário da última atualização de %s (no big deal)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "falha ao sincronizar base de dados: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "sincronizar: novo mtime para %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "nivelando a base de dados %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" -msgstr "não foi possível remover a entrada da base de dados %s%s" - -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "não foi possível conseguir a soma sha1 para o pacote %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "somas sha1 para o pacote %s - %s coincidem" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "somas sha1 não coincidem para o pacote %s-%s" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "não foi possível conseguir a soma md5 para o pacote %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "somas md5 para o pacote %s - %s coincidem" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "somas md5 não coincidem para o pacote %s-%s" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "não foi possível remover o arquivo de lock %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "aviso: não foi possível remover o arquivo de lock %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "configuração: nova seção '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "configuração: nopassiveftp" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "configuração: usesyslog" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "configuração: chomp" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "configuração: usecolor" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "configuração: including %s" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "configuração: noupgrade: %s" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "configuração: noextract: %s" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "configuração: ignorepkg: %s" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "configuração: holdpkg: %s" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "configuração: dbpath: %s" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "configuração: cachedir: %s" - -#: lib/libalpm/alpm.c:1044 +#: lib/libalpm/add.c:793  #, fuzzy, c-format -msgid "config: rootdir: %s" -msgstr "configuração: cachedir: %s" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "configuração: logfile: %s" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "configuração: xfercommand: %s" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "configuração: upgradedelay: %d" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "verificando por substitutos do pacote" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "verificando substituto '%s' para o pacote '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "descompactando base de dados '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "abrindo base de dados '%s'" +msgid "could not add entry '%s' in cache\n" +msgstr "não foi possível adicionar a entrada '%s' ao cache" -#: lib/libalpm/be_files.c:182 +#: lib/libalpm/be_files.c:223  #, fuzzy, c-format -msgid "db scan could not find package: %s" -msgstr "não foi possível encontrar a base de dados" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" +msgid "invalid name for database entry '%s'\n"  msgstr "nome inválido para a entrada na base de dados '%s'" -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" -msgstr "" - -#: lib/libalpm/be_files.c:247 +#: lib/libalpm/be_files.c:275  #, c-format -msgid "cannot find '%s-%s' in db '%s'" +msgid "loading package data for %s : level=%d\n"  msgstr "" -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n"  msgstr "não foi possível abrir o arquivo %s: %s" -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:85 +#: lib/libalpm/cache.c:62  #, c-format -msgid "freeing package cache for repository '%s'" +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "" -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 +#: lib/libalpm/db.c:285  #, fuzzy, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "pacote '%s' conflita com '%s'" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" -msgstr "" - -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "abrindo base de dados '%s'" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "" - -#: lib/libalpm/deps.c:280 -#, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "" - -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "" - -#: lib/libalpm/deps.c:359 -#, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "" - -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "" - -#: lib/libalpm/deps.c:532 -#, c-format -msgid "cannot find package \"%s\" or anything that provides it!" -msgstr "" - -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "" - -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" -msgstr "" +msgid "could not remove database entry %s%s\n" +msgstr "não foi possível remover a entrada da base de dados %s%s" -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" +#: lib/libalpm/db.c:553 +msgid "attempt to re-register the 'local' DB\n"  msgstr "" -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" -msgstr "" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "base de dados não inicializada" -#: lib/libalpm/deps.c:647 -#, c-format -msgid "dependency %s is already in the target list -- skipping" +#: lib/libalpm/deps.c:173 +msgid "dependency cycle detected:\n"  msgstr "" -#: lib/libalpm/deps.c:667 +#: lib/libalpm/deps.c:175  #, c-format -msgid "pulling dependency %s (needed by %s)" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:671 +#: lib/libalpm/deps.c:177  #, c-format -msgid "cannot resolve dependencies for \"%s\"" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:687 +#: lib/libalpm/deps.c:573  #, c-format -msgid "dependency cycle detected: %s" -msgstr "" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "" -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "não foi possível obter o diretório de trabalho atual" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "biblioteca não inicializada" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "biblioteca já inicializada" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "não foi possível abrir a base de dados" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "não foi possível criar a base de dados" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "base de dados não inicializada" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "base de dados já registrada" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "não foi possível encontrar a base de dados" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "não foi possível atualizar a base de dados" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "não foi possível remover a entrada da base de dados" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "alvo duplicado" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "o nome do pacote não é valido" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "pacote corrompido" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "pacote corrompido" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "grupo não encontrado" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "erro interno" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "espaço insuficiente em disco" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "expressão regular inválida" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "erro inesperado" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "" - -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "" - -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" -msgstr "" - -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" -msgstr "" - -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" -msgstr "" - -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "não foi possível conseguir a soma md5 para o pacote %s-%s" -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" -msgstr "" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "somas md5 não coincidem para o pacote %s-%s" -#: lib/libalpm/package.c:359 +#: lib/libalpm/package.c:737  #, c-format -msgid "missing package name in %s" +msgid "%s: forcing upgrade to version %s\n"  msgstr "" -#: lib/libalpm/package.c:363 +#: lib/libalpm/package.c:742  #, c-format -msgid "missing package version in %s" +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "" -#: lib/libalpm/package.c:398 +#: lib/libalpm/package.c:750  #, c-format -msgid "could not remove tempfile %s" +msgid "%s-%s: delaying upgrade of package (%s)\n"  msgstr "" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" -msgstr "" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n" +msgstr "não foi possível remover o arquivo de lock %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n" +msgstr "o nome do pacote não é valido" -#: lib/libalpm/package.c:431 +#: lib/libalpm/package.c:940  #, c-format -msgid "missing package filelist in %s, generating one" +msgid "missing package version in %s\n"  msgstr "" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n" +msgstr "não foi possível remover o arquivo de lock %s" -#: lib/libalpm/package.c:584 +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998  #, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" +msgid "error while reading package %s: %s\n"  msgstr "" -#: lib/libalpm/remove.c:79 +#: lib/libalpm/package.c:1005  #, c-format -msgid "could not find %s in database" +msgid "missing package metadata in %s\n"  msgstr "" -#: lib/libalpm/remove.c:93 +#: lib/libalpm/package.c:1012  #, c-format -msgid "adding %s in the targets list" +msgid "missing package filelist in %s, generating one\n"  msgstr ""  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" -msgstr "" - -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" -msgstr "" - -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "o arquivo %s não existe" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "mantendo diretório %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "removendo diretório %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n" +msgstr "não foi possível encontrar a base de dados" -#: lib/libalpm/remove.c:316 +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243  #, fuzzy, c-format -msgid "removing %d files" -msgstr "removendo diretório %s" +msgid "cannot remove file '%s': %s\n" +msgstr "não foi possível abrir o arquivo %s: %s"  #: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "" - -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" -msgstr "" - -#: lib/libalpm/remove.c:344 -#, c-format -msgid "could not remove entry '%s' from cache" -msgstr "" +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n" +msgstr "não foi possível remover a entrada da base de dados %s%s" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" -msgstr "" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n" +msgstr "não foi possível adicionar a entrada '%s' ao cache" -#: lib/libalpm/sha1.c:412 +#: lib/libalpm/server.c:56  #, c-format -msgid "sha1(%s) = %s" +msgid "url '%s' is invalid, ignoring\n"  msgstr "" -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n"  msgstr "" -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" +#: lib/libalpm/server.c:241 +msgid "disk"  msgstr "" -#: lib/libalpm/sync.c:270 +#: lib/libalpm/server.c:245  #, c-format -msgid "searching for target in repo '%s'" +msgid "failed retrieving file '%s' from %s : %s\n"  msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n"  msgstr "" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "não foi possível remover o arquivo de lock %s" -#: lib/libalpm/sync.c:290 +#: lib/libalpm/server.c:307  #, c-format -msgid "repository '%s' not found" +msgid "error downloading '%s': %s\n"  msgstr "" -#: lib/libalpm/sync.c:331 +#: lib/libalpm/server.c:319  #, c-format -msgid "%s-%s is up to date -- skipping" +msgid "error writing to file '%s': %s\n"  msgstr "" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" -msgstr "" - -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "" - -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" -msgstr "" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "não foi possível extrair %s (%s)" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n"  msgstr "" -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "pacote '%s' conflita com '%s'" - -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n"  msgstr "" -#: lib/libalpm/sync.c:527 +#: lib/libalpm/server.c:458  #, c-format -msgid "package '%s' provides its own conflict" +msgid "failed to download %s\n"  msgstr "" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 +#: lib/libalpm/sync.c:135  #, c-format -msgid "'%s' is in the target list -- keeping it" +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"  msgstr "" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "removendo '%s' da lista de alvos" - -#: lib/libalpm/sync.c:576 +#: lib/libalpm/sync.c:250  #, c-format -msgid "resolving package '%s' conflict" +msgid "%s: ignoring package upgrade (%s => %s)\n"  msgstr "" -#: lib/libalpm/sync.c:599 +#: lib/libalpm/sync.c:320  #, c-format -msgid "electing '%s' for removal" -msgstr "" - -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" -msgstr "" - -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" +msgid "repository '%s' not found\n"  msgstr "" -#: lib/libalpm/sync.c:712 -#, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" -msgstr "" +#: lib/libalpm/sync.c:354 +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "versão atualizada %s-%s está na lista de pacotes -- pulando" -#: lib/libalpm/sync.c:808 +#: lib/libalpm/sync.c:358  #, c-format -msgid "%s is already in the cache\n" +msgid "%s-%s is up to date -- reinstalling\n"  msgstr "" -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +msgid "unresolvable package conflicts detected\n"  msgstr "" -#: lib/libalpm/sync.c:820 +#: lib/libalpm/sync.c:628  #, c-format -msgid "warning: no %s cache exists, creating..." +msgid "malloc failure: could not allocate %zd bytes\n"  msgstr ""  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" +msgid "command: %s\n"  msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" -msgstr "" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n" +msgstr "não foi possível conseguir a soma md5 para o pacote %s-%s" -#: lib/libalpm/sync.c:894 +#: lib/libalpm/sync.c:910  #, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "" - -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "" - -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" +msgid "failed to retrieve some files from %s\n"  msgstr "" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" -msgstr "" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n" +msgstr "não foi possível criar a base de dados" -#: lib/libalpm/sync.c:958 -msgid "installing packages" +#: lib/libalpm/sync.c:1143 +msgid "could not initialize the removal transaction\n"  msgstr "" -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" -msgstr "" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n" +msgstr "não foi possível criar a base de dados" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1171 +msgid "could not commit removal transaction\n"  msgstr "" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" -msgstr "" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n" +msgstr "não foi possível criar a base de dados" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" +#: lib/libalpm/sync.c:1187 +msgid "could not initialize transaction\n"  msgstr "" -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n" +msgstr "não foi possível criar a base de dados" -#: lib/libalpm/sync.c:1039 -#, c-format -msgid "could not update new database entry %s-%s" +#: lib/libalpm/sync.c:1219 +msgid "could not commit transaction\n"  msgstr "" -#: lib/libalpm/sync.c:1079 +#: lib/libalpm/trans.c:214  #, fuzzy, c-format -msgid "found package '%s-%s' in sync" -msgstr "atualizando pacote %s-%s" - -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "" - -#: lib/libalpm/trans.c:271 -#, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "" - -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" -msgstr "" - -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "" +msgid "could not remove lock file %s\n" +msgstr "não foi possível remover o arquivo de lock %s" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 +#: lib/libalpm/trans.c:483  #, c-format -msgid "could not update 'requiredby' database entry %s-%s" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"  msgstr "" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "não foi possível encontrar a dependência '%s'" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "não foi possível obter o diretório de trabalho atual" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" -msgstr "" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "não foi possível extrair %s (%s)" -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" -msgstr "" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "não foi possível renomear %s (%s)" -#: lib/libalpm/util.c:293 -#, c-format -msgid "could not extract %s: %s\n" -msgstr "" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "não foi possível obter o diretório de trabalho atual" -#: lib/libalpm/util.c:350 -#, c-format -msgid "logaction called: %s" -msgstr "" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "não foi possível extrair %s (%s)" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" -msgstr "" +#: lib/libalpm/trans.c:578 +#, fuzzy, c-format +msgid "call to popen failed (%s)" +msgstr "não foi possível abrir o arquivo %s: %s" -#: lib/libalpm/util.c:472 +#: lib/libalpm/trans.c:597  #, c-format -msgid "could not change directory to %s (%s)" +msgid "call to waitpid failed (%s)\n"  msgstr "" -#: lib/libalpm/util.c:476 -#, c-format -msgid "executing %s script..." +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n"  msgstr "" -#: lib/libalpm/util.c:489 -#, c-format -msgid "could not fork a new process (%s)" -msgstr "" +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "não foi possível remover o arquivo de lock %s" -#: lib/libalpm/util.c:496 +#: lib/libalpm/util.c:204  #, c-format -msgid "chrooting in %s" +msgid "failed to make path '%s' : %s\n"  msgstr "" -#: lib/libalpm/util.c:498 +#: lib/libalpm/util.c:389  #, c-format -msgid "could not change the root directory (%s)" +msgid "could not open %s: %s\n"  msgstr "" -#: lib/libalpm/util.c:502 +#: lib/libalpm/util.c:573  #, c-format -msgid "could not change directory to / (%s)" +msgid "no %s cache exists, creating...\n"  msgstr "" -#: lib/libalpm/util.c:506 -#, c-format -msgid "executing \"%s\"" -msgstr "executando \"%s\"" - -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" +#: lib/libalpm/util.c:593 +msgid "couldn't create package cache, using /tmp instead\n"  msgstr "" -#: lib/libalpm/util.c:541 +#: lib/libalpm/util.c:643  #, c-format -msgid "call to waitpid failed (%s)" +msgid "md5: %s can't be opened\n"  msgstr "" -#: lib/libalpm/util.c:550 +#: lib/libalpm/util.c:645  #, c-format -msgid "could not remove tmpdir %s" +msgid "md5: %s can't be read\n"  msgstr "" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "" +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "por favor, remova '%s' primeiro usando -Rd" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "" +#~ msgid "could not extract %s (%s)" +#~ msgstr "não foi possível extrair %s (%s)" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "não foi possível atualizar a provisão '%s' para '%s'" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "não foi possível conseguir a soma sha1 para o pacote %s-%s" -#~ msgid "%s saved as %s.pacorig" -#~ msgstr "%s salvo como %s.pacorig" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "somas sha1 não coincidem para o pacote %s-%s" diff --git a/lib/libalpm/po/ru_RU.po b/lib/libalpm/po/ru_RU.po index ec5eb0d7..89fb8f28 100644 --- a/lib/libalpm/po/ru_RU.po +++ b/lib/libalpm/po/ru_RU.po @@ -7,7 +7,7 @@ msgid ""  msgstr ""  "Project-Id-Version: Pacman package manager 3.0.0\n"  "Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n" -"POT-Creation-Date: 2007-09-16 16:55-0500\n" +"POT-Creation-Date: 2007-12-02 21:40-0600\n"  "PO-Revision-Date: 2007-03-16 02:52+1000\n"  "Last-Translator:  Vladimir Bayrakovskiy <4rayven@gmail.com>\n"  "MIME-Version: 1.0\n" @@ -16,1494 +16,692 @@ msgstr ""  "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"  "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: lib/libalpm/add.c:77 +#: lib/libalpm/add.c:88  #, c-format -msgid "loading target '%s'" +msgid "replacing older version %s-%s by %s in target list\n"  msgstr "" -#: lib/libalpm/add.c:122 -#, c-format -msgid "replacing older version %s-%s by %s in target list" -msgstr "" +#: lib/libalpm/add.c:97 +#, fuzzy, c-format +msgid "newer version %s-%s is in the target list -- skipping\n" +msgstr "%s-%s не устарел --  пропускаю" -#: lib/libalpm/add.c:131 -#, c-format -msgid "newer version %s-%s is in the target list -- skipping" +#: lib/libalpm/add.c:168 +msgid "conflicting packages were found in the target list\n"  msgstr "" -#: lib/libalpm/add.c:138 -#, c-format -msgid "reading '%s' metadata" -msgstr "читаю метаданные из '%s'" - -#: lib/libalpm/add.c:191 lib/libalpm/remove.c:111 -msgid "looking for unsatisfied dependencies" -msgstr "поиск неразрешенных зависимостей" - -#: lib/libalpm/add.c:203 lib/libalpm/sync.c:483 -msgid "looking for conflicts" -msgstr "поиск конфликтов" +#: lib/libalpm/add.c:169 +msgid "you cannot install two conflicting packages at the same time\n" +msgstr "" -#: lib/libalpm/add.c:208 -msgid "replacing packages with -A and -U is not supported yet" +#: lib/libalpm/add.c:172 +#, fuzzy +msgid "replacing packages with -A and -U is not supported yet\n"  msgstr "замещение пакетов с использованием опций -A и -U еще не реализовано" -#: lib/libalpm/add.c:209 -#, c-format -msgid "please remove '%s' first, using -Rd" -msgstr "пожалуйста, уделите сначала '%s' используя -Rd" - -#: lib/libalpm/add.c:250 lib/libalpm/remove.c:147 -msgid "sorting by dependencies" -msgstr "сортировка по зависимостям" - -#: lib/libalpm/add.c:262 -msgid "cleaning up" -msgstr "прибираем за собой" - -#: lib/libalpm/add.c:277 -msgid "looking for file conflicts" -msgstr "поиск конфликтующих файлов" - -#: lib/libalpm/add.c:346 -#, c-format -msgid "upgrading package %s-%s" -msgstr "обновляется пакет %s-%s" - -#: lib/libalpm/add.c:370 -#, c-format -msgid "adding package %s-%s" -msgstr "добавляю пакет %s-%s" - -#: lib/libalpm/add.c:383 -#, c-format -msgid "removing old package first (%s-%s)" -msgstr "сперва удаляю старый пакет (%s-%s)" +#: lib/libalpm/add.c:173 +msgid "you can replace packages manually using -Rd and -U\n" +msgstr "" -#: lib/libalpm/add.c:411 +#: lib/libalpm/add.c:365  #, c-format -msgid "adding %s to the NoUpgrade array temporarily" -msgstr "временно добавляю %s в список NoUpgrade" - -#: lib/libalpm/add.c:429 -msgid "extracting files" -msgstr "извлекаю файлы из архива" - -#: lib/libalpm/add.c:444 lib/libalpm/util.c:465 -msgid "could not get current working directory" -msgstr "не могу определить текущую рабочую директорию" +msgid "" +"directory permissions differ on %s\n" +"filesystem: %o  package: %o\n" +msgstr "" -#: lib/libalpm/add.c:500 lib/libalpm/add.c:501 +#: lib/libalpm/add.c:392  #, c-format -msgid "%s is in NoExtract, skipping extraction" -msgstr "%s в списке NoExtract, пропускаю при распаковке" +msgid "extract: symlink %s does not point to dir\n" +msgstr "" -#: lib/libalpm/add.c:508 +#: lib/libalpm/add.c:399  #, c-format -msgid "%s is in trans->skip_add, skipping extraction" +msgid "extract: not overwriting dir with file %s\n"  msgstr "" -#: lib/libalpm/add.c:554 lib/libalpm/add.c:555 lib/libalpm/add.c:706 -#, c-format -msgid "could not extract %s (%s)" +#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422 +#, fuzzy, c-format +msgid "could not extract %s (%s)\n"  msgstr "не могу извлечь %s (%s)" -#: lib/libalpm/add.c:598 -#, c-format -msgid "checking md5 hashes for %s" -msgstr "проверяю md5 хеши для %s" - -#: lib/libalpm/add.c:600 -#, c-format -msgid "checking sha1 hashes for %s" -msgstr "проверяю sha1 хеши для %s" - -#: lib/libalpm/add.c:602 -#, c-format -msgid "current:  %s" -msgstr "текущий:  %s" - -#: lib/libalpm/add.c:603 -#, c-format -msgid "new:      %s" -msgstr "новый:    %s" - -#: lib/libalpm/add.c:604 -#, c-format -msgid "original: %s" -msgstr "исходный: %s" - -#: lib/libalpm/add.c:616 -#, c-format -msgid "could not rename %s (%s)" +#: lib/libalpm/add.c:505 +#, fuzzy, c-format +msgid "could not rename %s (%s)\n"  msgstr "не могу переименовать %s (%s)" -#: lib/libalpm/add.c:617 -#, c-format -msgid "error: could not rename %s (%s)" -msgstr "ошибка: не могу переименовать %s (%s)" - -#: lib/libalpm/add.c:623 lib/libalpm/add.c:642 -#, c-format -msgid "could not copy tempfile to %s (%s)" +#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508 +#, fuzzy, c-format +msgid "could not copy tempfile to %s (%s)\n"  msgstr "не могу скопировать временный файл в %s (%s)" -#: lib/libalpm/add.c:624 -#, c-format -msgid "error: could not copy tempfile to %s (%s)" -msgstr "ошибка: не могу скопировать временный файл в %s (%s)" - -#: lib/libalpm/add.c:628 lib/libalpm/remove.c:247 -#, c-format -msgid "%s saved as %s" +#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234 +#, fuzzy, c-format +msgid "%s saved as %s\n"  msgstr "%s сохранен как %s" -#: lib/libalpm/add.c:629 -#, c-format -msgid "warning: %s saved as %s" -msgstr "предупреждение: %s сохранен как %s" - -#: lib/libalpm/add.c:639 -#, c-format -msgid "action: installing new file: %s" -msgstr "действие: устанавливаю новый файл: %s" - -#: lib/libalpm/add.c:649 lib/libalpm/add.c:655 lib/libalpm/add.c:660 -msgid "action: leaving existing file in place" -msgstr "действие: оставляем существующий файл на месте" - -#: lib/libalpm/add.c:663 -msgid "action: keeping current file and installing new one with .pacnew ending" -msgstr "" -"действие: оставляем текущий файл нетронутым и устанавливаем новый с " -"суффиксом .pacnew" - -#: lib/libalpm/add.c:666 -#, c-format -msgid "could not install %s as %s: %s" +#: lib/libalpm/add.c:556 +#, fuzzy, c-format +msgid "could not install %s as %s: %s\n"  msgstr "не могу установить %s как %s: %s" -#: lib/libalpm/add.c:667 -#, c-format -msgid "error: could not install %s as %s: %s" -msgstr "ошибка: не могу установить %s как %s: %s" - -#: lib/libalpm/add.c:669 -#, c-format -msgid "%s installed as %s" +#: lib/libalpm/add.c:559 +#, fuzzy, c-format +msgid "%s installed as %s\n"  msgstr "%s установлен как %s" -#: lib/libalpm/add.c:670 -#, c-format -msgid "warning: %s installed as %s" -msgstr "предупреждение: %s установлен как %s" - -#: lib/libalpm/add.c:684 -#, c-format -msgid "%s is in NoUpgrade -- skipping" -msgstr "%s есть в списке NoUpgrade -- пропускаю" - -#: lib/libalpm/add.c:685 -#, c-format -msgid "extracting %s as %s.pacnew" +#: lib/libalpm/add.c:576 +#, fuzzy, c-format +msgid "extracting %s as %s.pacnew\n"  msgstr "извлекаю %s как %s.pacnew" -#: lib/libalpm/add.c:686 -#, c-format -msgid "warning: extracting %s as %s.pacnew" -msgstr "предупреждение: извлекаю %s как %s.pacnew" - -#: lib/libalpm/add.c:689 -#, c-format -msgid "extracting %s" -msgstr "извлекаю %s" - -#: lib/libalpm/add.c:707 -#, c-format -msgid "error: could not extract %s (%s)" -msgstr "ошибка: не могу извлечь %s (%s)" - -#: lib/libalpm/add.c:719 -#, c-format -msgid "appending backup entry for %s" -msgstr "добавляю запись для отката для %s" +#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529 +#, fuzzy +msgid "could not get current working directory\n" +msgstr "не могу определить текущую рабочую директорию" -#: lib/libalpm/add.c:751 lib/libalpm/add.c:753 -#, c-format -msgid "errors occurred while %s %s" +#: lib/libalpm/add.c:765 +#, fuzzy, c-format +msgid "problem occurred while upgrading %s\n"  msgstr "во время %s %s произошли ошибки" -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "upgrading" -msgstr "обновляю" - -#: lib/libalpm/add.c:752 lib/libalpm/add.c:754 -msgid "installing" -msgstr "устанавливаю" - -#: lib/libalpm/add.c:771 +#: lib/libalpm/add.c:770  #, fuzzy, c-format -msgid "provision '%s' has been removed from package %s (%s => %s)" -msgstr "'%s' был удален из пакета %s (%s => %s)" - -#: lib/libalpm/add.c:783 -#, c-format -msgid "updating '%s' due to provision change (%s)" -msgstr "обновляю '%s' в связи с изменениями в (%s)" - -#: lib/libalpm/add.c:787 lib/libalpm/add.c:788 -#, c-format -msgid "could not update provision '%s' from '%s'" -msgstr "не могу обновить '%s' из '%s'" - -#: lib/libalpm/add.c:801 lib/libalpm/remove.c:336 -msgid "updating database" -msgstr "обновляю базу данных" - -#: lib/libalpm/add.c:802 -#, c-format -msgid "adding database entry '%s'" -msgstr "добавляю в базу данных запись '%s'" +msgid "problem occurred while installing %s\n" +msgstr "во время %s %s произошли ошибки" -#: lib/libalpm/add.c:805 lib/libalpm/add.c:807 -#, c-format -msgid "could not update database entry %s-%s" +#: lib/libalpm/add.c:785 +#, fuzzy, c-format +msgid "could not update database entry %s-%s\n"  msgstr "не могу обновить в базе данных запись %s-%s" -#: lib/libalpm/add.c:813 -#, c-format -msgid "could not add entry '%s' in cache" -msgstr "не могу добавить запись '%s' в кэш" - -#: lib/libalpm/add.c:843 lib/libalpm/remove.c:363 lib/libalpm/sync.c:1055 -#, c-format -msgid "running \"ldconfig -r %s\"" -msgstr "запускаю \"ldconfig -r %s\"" - -#: lib/libalpm/alpm.c:116 -#, c-format -msgid "removing DB %s, %d remaining..." -msgstr "удаляю БД %s, %d осталось..." - -#: lib/libalpm/alpm.c:181 +#: lib/libalpm/add.c:793  #, fuzzy, c-format -msgid "unregistering database '%s'" -msgstr "дерегестрирую базу данных '%s'" - -#: lib/libalpm/alpm.c:186 -#, c-format -msgid "closing database '%s'" -msgstr "закрываю базу данных '%s'" - -#: lib/libalpm/alpm.c:232 -#, c-format -msgid "" -"adding new server to database '%s': protocol '%s', server '%s', path '%s'" -msgstr "" -"добавляю новый сервер в базу данных '%s': протокол '%s', сервер '%s', путь '%" -"s'" +msgid "could not add entry '%s' in cache\n" +msgstr "не могу добавить запись '%s' в кэш" -#: lib/libalpm/alpm.c:236 +#: lib/libalpm/be_files.c:223  #, fuzzy, c-format -msgid "serverlist flushed for '%s'" -msgstr "список серверов пополнен для '%s'" - -#: lib/libalpm/alpm.c:279 -#, c-format -msgid "failed to get lastupdate time for %s (no big deal)" -msgstr "" -"не удалось узнать время последнего обновления для %s (ни чего страшного)" - -#: lib/libalpm/alpm.c:298 -#, c-format -msgid "failed to sync db: %s [%d]" -msgstr "не удалось синхронизировать базу данных: %s [%d]" - -#: lib/libalpm/alpm.c:302 -#, c-format -msgid "sync: new mtime for %s: %s" -msgstr "синхронизация: обновлен mtime для %s: %s" - -#: lib/libalpm/alpm.c:308 -#, c-format -msgid "flushing database %s%s" -msgstr "обновляю базу данных %s%s" - -#: lib/libalpm/alpm.c:312 -#, c-format -msgid "could not remove database entry %s%s" +msgid "invalid name for database entry '%s'\n"  msgstr "не могу удалить из базы данных запись %s%s" -#: lib/libalpm/alpm.c:481 -#, c-format -msgid "could not get sha1sum for package %s-%s" -msgstr "не могу получить контрольную сумму sha1sum для пакета %s-%s" - -#: lib/libalpm/alpm.c:487 -#, c-format -msgid "sha1sums for package %s-%s match" -msgstr "контрольные суммы sha1sum для пакета %s-%s совпали" - -#: lib/libalpm/alpm.c:490 -#, c-format -msgid "sha1sums do not match for package %s-%s" -msgstr "контрольные суммы sha1sum для пакета %s-%s не совпали" - -#: lib/libalpm/alpm.c:525 -#, c-format -msgid "could not get md5sum for package %s-%s" -msgstr "не могу получить контрольную сумму md5sum для пакета %s-%s" - -#: lib/libalpm/alpm.c:531 -#, c-format -msgid "md5sums for package %s-%s match" -msgstr "контрольные суммы md5sum для пакета %s-%s совпали" - -#: lib/libalpm/alpm.c:534 -#, c-format -msgid "md5sums do not match for package %s-%s" -msgstr "контрольные суммы md5sum для пакета %s-%s не совпали" - -#: lib/libalpm/alpm.c:783 -#, c-format -msgid "could not remove lock file %s" -msgstr "не могу удалить lock-файл %s" - -#: lib/libalpm/alpm.c:784 -#, c-format -msgid "warning: could not remove lock file %s" -msgstr "предупреждение: не могу удалить lock-файл %s" - -#: lib/libalpm/alpm.c:920 -#, c-format -msgid "config: new section '%s'" -msgstr "config: новая секция '%s'" - -#: lib/libalpm/alpm.c:951 -msgid "config: nopassiveftp" -msgstr "" - -#: lib/libalpm/alpm.c:954 -msgid "config: usesyslog" -msgstr "" - -#: lib/libalpm/alpm.c:957 -msgid "config: chomp" -msgstr "" - -#: lib/libalpm/alpm.c:960 -msgid "config: usecolor" -msgstr "" - -#: lib/libalpm/alpm.c:969 -#, c-format -msgid "config: including %s" -msgstr "" - -#: lib/libalpm/alpm.c:979 lib/libalpm/alpm.c:984 -#, c-format -msgid "config: noupgrade: %s" -msgstr "" - -#: lib/libalpm/alpm.c:992 lib/libalpm/alpm.c:997 -#, c-format -msgid "config: noextract: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1005 lib/libalpm/alpm.c:1010 -#, c-format -msgid "config: ignorepkg: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1018 lib/libalpm/alpm.c:1023 -#, c-format -msgid "config: holdpkg: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1030 -#, c-format -msgid "config: dbpath: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1037 -#, c-format -msgid "config: cachedir: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1044 +#: lib/libalpm/be_files.c:275  #, fuzzy, c-format -msgid "config: rootdir: %s" -msgstr "config: новая секция '%s'" - -#: lib/libalpm/alpm.c:1047 -#, c-format -msgid "config: logfile: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1050 -#, c-format -msgid "config: xfercommand: %s" -msgstr "" - -#: lib/libalpm/alpm.c:1055 -#, c-format -msgid "config: upgradedelay: %d" -msgstr "" - -#: lib/libalpm/alpm.c:1093 lib/libalpm/sync.c:107 -msgid "checking for package replacements" -msgstr "проверяю замены для пакетов" - -#: lib/libalpm/alpm.c:1104 lib/libalpm/sync.c:123 -#, c-format -msgid "checking replacement '%s' for package '%s'" -msgstr "проверяю замену '%s' для пакета '%s'" - -#: lib/libalpm/alpm.c:1107 lib/libalpm/sync.c:125 -#, c-format -msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)" -msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)" - -#: lib/libalpm/alpm.c:1137 lib/libalpm/sync.c:160 -#, c-format -msgid "%s-%s elected for upgrade (to be replaced by %s-%s)" -msgstr "%s-%s выбран для обновления (будет заменен на %s-%s)" - -#: lib/libalpm/alpm.c:1159 lib/libalpm/sync.c:194 -#, c-format -msgid "'%s' not found in sync db -- skipping" -msgstr "'%s' не найден в базе данных -- пропускаю" - -#: lib/libalpm/alpm.c:1173 lib/libalpm/sync.c:208 lib/libalpm/sync.c:509 -#, c-format -msgid "'%s' is already elected for removal -- skipping" -msgstr "'%s' уже выбран для удаления -- пропускаю" - -#: lib/libalpm/alpm.c:1179 -#, c-format -msgid "%s elected for upgrade (%s => %s)" -msgstr "%s выбран для обновления (%s => %s)" - -#: lib/libalpm/be_files.c:61 -#, c-format -msgid "unpacking database '%s'" -msgstr "распаковываю базу данных '%s'" - -#: lib/libalpm/be_files.c:78 -#, c-format -msgid "opening database from path '%s'" -msgstr "открываю базу данных расположенную в '%s'" - -#: lib/libalpm/be_files.c:182 -#, c-format -msgid "db scan could not find package: %s" -msgstr "в БД не удалось найти пакет: %s" - -#: lib/libalpm/be_files.c:186 -#, c-format -msgid "invalid name for database entry '%s'" -msgstr "" - -#: lib/libalpm/be_files.c:221 -msgid "invalid package entry provided to _alpm_db_read, skipping" -msgstr "" - -#: lib/libalpm/be_files.c:226 -#, c-format -msgid "" -"request to read database info for a file-based package '%s', skipping..." -msgstr "" - -#: lib/libalpm/be_files.c:239 -#, c-format -msgid "loading package data for %s : level=%d" +msgid "loading package data for %s : level=%d\n"  msgstr "загружаю данные пакета %s : уровень=%d" -#: lib/libalpm/be_files.c:247 -#, c-format -msgid "cannot find '%s-%s' in db '%s'" -msgstr "" - -#: lib/libalpm/be_files.c:255 lib/libalpm/be_files.c:401 -#: lib/libalpm/be_files.c:424 lib/libalpm/be_files.c:515 -#: lib/libalpm/be_files.c:605 lib/libalpm/be_files.c:632 -#: lib/libalpm/package.c:208 -#, c-format -msgid "could not open file %s: %s" -msgstr "" - -#: lib/libalpm/be_files.c:512 -#, c-format -msgid "writing %s-%s DESC information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:602 -#, c-format -msgid "writing %s-%s FILES information back to db" -msgstr "" - -#: lib/libalpm/be_files.c:629 -#, c-format -msgid "writing %s-%s DEPENDS information back to db" -msgstr "" - -#: lib/libalpm/cache.c:59 -#, c-format -msgid "loading package cache for repository '%s'" -msgstr "" - -#: lib/libalpm/cache.c:64 -#, c-format -msgid "adding '%s' to package cache for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:85 -#, c-format -msgid "freeing package cache for repository '%s'" -msgstr "" - -#: lib/libalpm/cache.c:109 -#, c-format -msgid "error: pkgcache is NULL for db '%s'" -msgstr "" - -#: lib/libalpm/cache.c:129 -#, c-format -msgid "adding entry '%s' in '%s' cache" -msgstr "" - -#: lib/libalpm/cache.c:149 -#, c-format -msgid "removing entry '%s' from '%s' cache" -msgstr "" - -#: lib/libalpm/cache.c:156 -#, c-format -msgid "cannot remove entry '%s' from '%s' cache: not found" -msgstr "" - -#: lib/libalpm/cache.c:178 -#, c-format -msgid "error: failed to get '%s' from NULL pkgcache" -msgstr "" - -#: lib/libalpm/cache.c:201 -#, c-format -msgid "loading group cache for repository '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:69 -#, c-format -msgid "   found conflict '%s' : package '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:78 -#, c-format -msgid "   found conflict '%s' : package '%s' provides '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:101 lib/libalpm/conflict.c:143 -#, c-format -msgid "package '%s' conflicts with itself - packaging error" -msgstr "" - -#: lib/libalpm/conflict.c:107 -#, c-format -msgid "checkconflicts: target '%s' vs db" -msgstr "" - -#: lib/libalpm/conflict.c:149 -#, c-format -msgid "checkconflicts: target '%s' vs all targets" -msgstr "" - -#: lib/libalpm/conflict.c:181 -#, c-format -msgid "checkconflicts: db vs target '%s'" -msgstr "" - -#: lib/libalpm/conflict.c:201 -#, c-format -msgid "target '%s' is also in target list, using NEW conflicts" -msgstr "" - -#: lib/libalpm/conflict.c:257 -#, c-format -msgid "\tCONFLICTS:: %s conflicts with %s" -msgstr "" - -#: lib/libalpm/conflict.c:349 lib/libalpm/deps.c:60 lib/libalpm/deps.c:438 -#: lib/libalpm/deps.c:634 lib/libalpm/deps.c:674 lib/libalpm/group.c:45 -#: lib/libalpm/handle.c:51 lib/libalpm/package.c:82 lib/libalpm/sync.c:67 -#: lib/libalpm/sync.c:614 lib/libalpm/sync.c:630 lib/libalpm/sync.c:727 -#: lib/libalpm/trans.c:55 lib/libalpm/util.c:614 lib/libalpm/util.c:621 -#, c-format -msgid "malloc failure: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:64 lib/libalpm/db.c:71 -#, c-format -msgid "malloc failed: could not allocate %d bytes" -msgstr "" - -#: lib/libalpm/db.c:167 -msgid "attempt to re-register the 'local' DB" -msgstr "" - -#: lib/libalpm/db.c:175 -#, c-format -msgid "attempt to re-register the '%s' database, using existing" -msgstr "" - -#: lib/libalpm/db.c:181 -#, c-format -msgid "registering database '%s'" -msgstr "" - -#: lib/libalpm/db.c:186 -#, c-format -msgid "database directory '%s' does not exist, creating it" -msgstr "" - -#: lib/libalpm/db.c:197 -#, c-format -msgid "opening database '%s'" -msgstr "" - -#: lib/libalpm/deps.c:131 -msgid "started sorting dependencies" -msgstr "" - -#: lib/libalpm/deps.c:136 -msgid "possible dependency cycle detected" -msgstr "" - -#: lib/libalpm/deps.c:183 -msgid "sorting dependencies finished" -msgstr "" - -#: lib/libalpm/deps.c:225 lib/libalpm/deps.c:310 -msgid "null package found in package list" -msgstr "" - -#: lib/libalpm/deps.c:230 -#, c-format -msgid "cannot find package installed '%s'" -msgstr "" - -#: lib/libalpm/deps.c:261 -#, c-format -msgid "checkdeps: dependency '%s' has moved from '%s' to '%s'" -msgstr "" - -#: lib/libalpm/deps.c:280 -#, c-format -msgid "checkdeps: dependency '%s' satisfied by installed package '%s'" -msgstr "" - -#: lib/libalpm/deps.c:289 -#, c-format -msgid "checkdeps: updated '%s' won't satisfy a dependency of '%s'" -msgstr "" - -#: lib/libalpm/deps.c:359 -#, c-format -msgid "missing dependency '%s' for package '%s'" -msgstr "" - -#: lib/libalpm/deps.c:409 -#, c-format -msgid "checkdeps: found %s as required by %s" -msgstr "" - -#: lib/libalpm/deps.c:485 -#, c-format -msgid "excluding %s -- explicitly installed" -msgstr "" +#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429 +#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563 +#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669 +#: lib/libalpm/package.c:787 +#, fuzzy, c-format +msgid "could not open file %s: %s\n" +msgstr "не могу скопировать временный файл в %s (%s)" -#: lib/libalpm/deps.c:532 +#: lib/libalpm/cache.c:62  #, c-format -msgid "cannot find package \"%s\" or anything that provides it!" +msgid "adding '%s' to package cache for db '%s'\n"  msgstr "" -#: lib/libalpm/deps.c:540 lib/libalpm/deps.c:551 -#, c-format -msgid "adding '%s' to the targets" -msgstr "" +#: lib/libalpm/db.c:285 +#, fuzzy, c-format +msgid "could not remove database entry %s%s\n" +msgstr "не могу удалить из базы данных запись %s%s" -#: lib/libalpm/deps.c:583 -msgid "started resolving dependencies" +#: lib/libalpm/db.c:553 +msgid "attempt to re-register the 'local' DB\n"  msgstr "" -#: lib/libalpm/deps.c:601 -#, c-format -msgid "%s provides dependency %s -- skipping" -msgstr "" +#: lib/libalpm/db.c:562 lib/libalpm/db.c:613 +#, fuzzy +msgid "database path is undefined\n" +msgstr "база данных не инициализирована" -#: lib/libalpm/deps.c:630 -#, c-format -msgid "" -"cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)" -msgstr "" +#: lib/libalpm/deps.c:173 +#, fuzzy +msgid "dependency cycle detected:\n" +msgstr "обнаружена циклическая зависимость: %s" -#: lib/libalpm/deps.c:647 +#: lib/libalpm/deps.c:175  #, c-format -msgid "dependency %s is already in the target list -- skipping" +msgid "%s will be removed after its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:667 +#: lib/libalpm/deps.c:177  #, c-format -msgid "pulling dependency %s (needed by %s)" +msgid "%s will be installed before its %s dependency\n"  msgstr "" -#: lib/libalpm/deps.c:671 -#, c-format -msgid "cannot resolve dependencies for \"%s\"" +#: lib/libalpm/deps.c:573 +#, fuzzy, c-format +msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"  msgstr "не удается удовлетворить зависимости для \"%s\"" -#: lib/libalpm/deps.c:687 -#, c-format -msgid "dependency cycle detected: %s" -msgstr "обнаружена циклическая зависимость: %s" - -#: lib/libalpm/deps.c:691 -msgid "finished resolving dependencies" -msgstr "" - -#: lib/libalpm/error.c:40 +#: lib/libalpm/error.c:43  msgid "out of memory!"  msgstr "" -#: lib/libalpm/error.c:42 +#: lib/libalpm/error.c:45  msgid "unexpected system error"  msgstr "" -#: lib/libalpm/error.c:44 +#: lib/libalpm/error.c:47  msgid "insufficient privileges"  msgstr "" -#: lib/libalpm/error.c:46 +#: lib/libalpm/error.c:49  msgid "could not find or read file"  msgstr "" -#: lib/libalpm/error.c:48 +#: lib/libalpm/error.c:51 +#, fuzzy +msgid "could not find or read directory" +msgstr "не удается найти или прочитать пакет" + +#: lib/libalpm/error.c:53  msgid "wrong or NULL argument passed"  msgstr "" -#: lib/libalpm/error.c:51 +#: lib/libalpm/error.c:56  msgid "library not initialized"  msgstr "" -#: lib/libalpm/error.c:53 +#: lib/libalpm/error.c:58  msgid "library already initialized"  msgstr "" -#: lib/libalpm/error.c:55 +#: lib/libalpm/error.c:60  msgid "unable to lock database"  msgstr "не удается заблокировать базу данных" -#: lib/libalpm/error.c:58 +#: lib/libalpm/error.c:63  msgid "could not open database"  msgstr "не удается открыть базу данных" -#: lib/libalpm/error.c:60 +#: lib/libalpm/error.c:65  msgid "could not create database"  msgstr "не удается создать базу данных" -#: lib/libalpm/error.c:62 +#: lib/libalpm/error.c:67  msgid "database not initialized"  msgstr "база данных не инициализирована" -#: lib/libalpm/error.c:64 +#: lib/libalpm/error.c:69  msgid "database already registered"  msgstr "база данных уже зарегистрирована" -#: lib/libalpm/error.c:66 +#: lib/libalpm/error.c:71  msgid "could not find database"  msgstr "не удается найти базу данных" -#: lib/libalpm/error.c:68 +#: lib/libalpm/error.c:73  msgid "could not update database"  msgstr "не удается обновить базу данных" -#: lib/libalpm/error.c:70 +#: lib/libalpm/error.c:75  msgid "could not remove database entry"  msgstr "не удается удалить запись в базе данных" -#: lib/libalpm/error.c:73 +#: lib/libalpm/error.c:78  msgid "invalid url for server"  msgstr "неверный url" -#: lib/libalpm/error.c:80 +#: lib/libalpm/error.c:85  msgid "could not set parameter"  msgstr "ну могу установить параметр" -#: lib/libalpm/error.c:83 +#: lib/libalpm/error.c:88  msgid "transaction already initialized"  msgstr "" -#: lib/libalpm/error.c:85 lib/libalpm/error.c:89 +#: lib/libalpm/error.c:90 lib/libalpm/error.c:94  msgid "transaction not initialized"  msgstr "" -#: lib/libalpm/error.c:87 +#: lib/libalpm/error.c:92  msgid "duplicate target"  msgstr "" -#: lib/libalpm/error.c:91 +#: lib/libalpm/error.c:96  msgid "transaction not prepared"  msgstr "" -#: lib/libalpm/error.c:93 +#: lib/libalpm/error.c:98  msgid "transaction aborted"  msgstr "" -#: lib/libalpm/error.c:95 +#: lib/libalpm/error.c:100  msgid "operation not compatible with the transaction type"  msgstr "" -#: lib/libalpm/error.c:97 lib/libalpm/sync.c:994 +#: lib/libalpm/error.c:102  msgid "could not commit transaction"  msgstr "" -#: lib/libalpm/error.c:99 +#: lib/libalpm/error.c:104  msgid "could not download all files"  msgstr "не могу загрузить все файлы" -#: lib/libalpm/error.c:102 +#: lib/libalpm/error.c:107  msgid "could not find or read package"  msgstr "не удается найти или прочитать пакет" -#: lib/libalpm/error.c:104 +#: lib/libalpm/error.c:109  msgid "invalid or corrupted package"  msgstr "пакет неправильный или поврежден" -#: lib/libalpm/error.c:106 +#: lib/libalpm/error.c:111  msgid "cannot open package file"  msgstr "не удается открыть файл пакета" -#: lib/libalpm/error.c:108 +#: lib/libalpm/error.c:113  msgid "cannot load package data"  msgstr "не удается загрузить данные пакета" -#: lib/libalpm/error.c:110 +#: lib/libalpm/error.c:115  msgid "package already installed"  msgstr "пакет уже установлен" -#: lib/libalpm/error.c:112 +#: lib/libalpm/error.c:117  msgid "package not installed or lesser version"  msgstr "" -#: lib/libalpm/error.c:114 +#: lib/libalpm/error.c:119  msgid "cannot remove all files for package"  msgstr "не могу удалить все файлы пакета" -#: lib/libalpm/error.c:116 +#: lib/libalpm/error.c:121  msgid "package name is not valid"  msgstr "неверное имя пакета" -#: lib/libalpm/error.c:118 +#: lib/libalpm/error.c:123  msgid "corrupted package"  msgstr "пакет поврежден" -#: lib/libalpm/error.c:120 +#: lib/libalpm/error.c:125  msgid "no such repository"  msgstr "нет такого репозитория" -#: lib/libalpm/error.c:123 +#: lib/libalpm/error.c:128 +#, fuzzy +msgid "corrupted delta" +msgstr "пакет поврежден" + +#: lib/libalpm/error.c:130 +msgid "delta patch failed" +msgstr "" + +#: lib/libalpm/error.c:133  msgid "group not found"  msgstr "группа не найдена" -#: lib/libalpm/error.c:126 +#: lib/libalpm/error.c:136  msgid "could not satisfy dependencies"  msgstr "не удается удовлетворить зависимости" -#: lib/libalpm/error.c:128 +#: lib/libalpm/error.c:138  msgid "conflicting dependencies"  msgstr "" -#: lib/libalpm/error.c:130 +#: lib/libalpm/error.c:140  msgid "conflicting files"  msgstr "" -#: lib/libalpm/error.c:133 +#: lib/libalpm/error.c:143  msgid "user aborted the operation"  msgstr "пользователь прервал операцию" -#: lib/libalpm/error.c:135 +#: lib/libalpm/error.c:145  msgid "internal error"  msgstr "внутренняя ошибка" -#: lib/libalpm/error.c:137 +#: lib/libalpm/error.c:147  msgid "libarchive error"  msgstr "ошибка в libarchive" -#: lib/libalpm/error.c:139 -msgid "not enough space on disk" -msgstr "недостаточно места на диске" - -#: lib/libalpm/error.c:142 +#: lib/libalpm/error.c:150  msgid "not confirmed"  msgstr "" -#: lib/libalpm/error.c:145 -msgid "bad configuration section name" -msgstr "неверное название секции в конфигурационном файле" - -#: lib/libalpm/error.c:147 -msgid "'local' is reserved and cannot be used as a repository name" -msgstr "" -"название 'local' зарезервировано и не может использоваться как название " -"репозитория" - -#: lib/libalpm/error.c:149 -msgid "syntax error in config file" -msgstr "синтаксическая ошибка в конфигурационном файле" - -#: lib/libalpm/error.c:151 -msgid "all directives must belong to a section" -msgstr "все директивы должны находиться в соответствующих секциях" - -#: lib/libalpm/error.c:153 +#: lib/libalpm/error.c:152  msgid "invalid regular expression"  msgstr "неверное регулярное выражение" -#: lib/libalpm/error.c:156 +#: lib/libalpm/error.c:155  msgid "connection to remote host failed"  msgstr "не удалось подключиться к удаленному хосту" -#: lib/libalpm/error.c:159 +#: lib/libalpm/error.c:158  msgid "unexpected error"  msgstr "непредвиденная ошибка" -#: lib/libalpm/handle.c:163 -#, c-format -msgid "cannot canonicalize specified root path '%s'" -msgstr "" - -#: lib/libalpm/handle.c:175 -#, c-format -msgid "option 'root' = %s" -msgstr "" - -#: lib/libalpm/handle.c:195 -#, c-format -msgid "option 'dbpath' = %s" -msgstr "" - -#: lib/libalpm/handle.c:211 -#, c-format -msgid "option 'cachedir' = %s" -msgstr "" - -#: lib/libalpm/md5driver.c:56 -#, c-format -msgid "%s can't be opened\n" -msgstr "" - -#: lib/libalpm/md5driver.c:74 -#, c-format -msgid "md5(%s) = %s" -msgstr "" +#: lib/libalpm/package.c:124 +#, fuzzy, c-format +msgid "could not get md5sum for package %s-%s\n" +msgstr "не могу получить контрольную сумму md5sum для пакета %s-%s" -#: lib/libalpm/package.c:147 -#, c-format -msgid "%s-%s: ignoring package upgrade (%s)" -msgstr "" +#: lib/libalpm/package.c:133 +#, fuzzy, c-format +msgid "md5sums do not match for package %s-%s\n" +msgstr "контрольные суммы md5sum для пакета %s-%s не совпали" -#: lib/libalpm/package.c:158 -#, c-format -msgid "%s: forcing upgrade to version %s" +#: lib/libalpm/package.c:737 +#, fuzzy, c-format +msgid "%s: forcing upgrade to version %s\n"  msgstr "%s: принудительно обновляю до версии %s" -#: lib/libalpm/package.c:163 -#, c-format -msgid "%s: local (%s) is newer than %s (%s)" +#: lib/libalpm/package.c:742 +#, fuzzy, c-format +msgid "%s: local (%s) is newer than %s (%s)\n"  msgstr "%s: установленная версия (%s) новее, чем в %s (%s)" -#: lib/libalpm/package.c:171 -#, c-format -msgid "%s-%s: delaying upgrade of package (%s)" -msgstr "" - -#: lib/libalpm/package.c:222 lib/libalpm/package.c:281 -#, c-format -msgid "%s: syntax error in description file line %d" -msgstr "" +#: lib/libalpm/package.c:750 +#, fuzzy, c-format +msgid "%s-%s: delaying upgrade of package (%s)\n" +msgstr "%s: принудительно обновляю до версии %s" -#: lib/libalpm/package.c:355 -msgid "could not parse the package description file" -msgstr "" +#: lib/libalpm/package.c:931 +#, fuzzy, c-format +msgid "could not parse package description file in %s\n" +msgstr "не могу удалить временный файл %s" -#: lib/libalpm/package.c:359 -#, c-format -msgid "missing package name in %s" -msgstr "" +#: lib/libalpm/package.c:936 +#, fuzzy, c-format +msgid "missing package name in %s\n" +msgstr "отсутствует список файлов пакета в %s, генерирую его" -#: lib/libalpm/package.c:363 -#, c-format -msgid "missing package version in %s" -msgstr "" +#: lib/libalpm/package.c:940 +#, fuzzy, c-format +msgid "missing package version in %s\n" +msgstr "отсутствует список файлов пакета в %s, генерирую его" -#: lib/libalpm/package.c:398 -#, c-format -msgid "could not remove tempfile %s" +#: lib/libalpm/package.c:970 +#, fuzzy, c-format +msgid "could not remove tempfile %s\n"  msgstr "не могу удалить временный файл %s" -#: lib/libalpm/package.c:411 lib/libalpm/package.c:418 -#, c-format -msgid "error while reading package: %s" +#: lib/libalpm/package.c:985 lib/libalpm/package.c:998 +#, fuzzy, c-format +msgid "error while reading package %s: %s\n"  msgstr "ошибка при чтении пакета: %s" -#: lib/libalpm/package.c:424 -msgid "missing package metadata" -msgstr "" - -#: lib/libalpm/package.c:431 -#, c-format -msgid "missing package filelist in %s, generating one" +#: lib/libalpm/package.c:1005 +#, fuzzy, c-format +msgid "missing package metadata in %s\n"  msgstr "отсутствует список файлов пакета в %s, генерирую его" -#: lib/libalpm/package.c:570 -#, c-format -msgid "adding '%s' in requiredby field for '%s'" -msgstr "добавляю '%s' в поле requiredby для '%s'" - -#: lib/libalpm/package.c:584 -#, c-format -msgid "adding '%s' in requiredby field for '%s' (provides: %s)" -msgstr "добавляю '%s' в поле requiredby для '%s' (обеспечивает :%s)" - -#: lib/libalpm/remove.c:79 -#, c-format -msgid "could not find %s in database" -msgstr "не могу найти %s в базе данных" - -#: lib/libalpm/remove.c:93 -#, c-format -msgid "adding %s in the targets list" -msgstr "" +#: lib/libalpm/package.c:1012 +#, fuzzy, c-format +msgid "missing package filelist in %s, generating one\n" +msgstr "отсутствует список файлов пакета в %s, генерирую его"  #: lib/libalpm/remove.c:121 -#, c-format -msgid "pulling %s in the targets list" -msgstr "" - -#: lib/libalpm/remove.c:124 -#, c-format -msgid "could not find %s in database -- skipping" +#, fuzzy, c-format +msgid "could not find %s in database -- skipping\n"  msgstr "не могу найти %s в базе данных --  пропускаю" -#: lib/libalpm/remove.c:142 -msgid "finding removable dependencies" -msgstr "ищу устранимые зависимости" - -#: lib/libalpm/remove.c:175 -#, c-format -msgid "cannot remove file '%s': %s" +#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243 +#, fuzzy, c-format +msgid "cannot remove file '%s': %s\n"  msgstr "не могу удалить файл '%s': %s" -#: lib/libalpm/remove.c:213 -#, c-format -msgid "Skipping removal of '%s' due to NoUpgrade" -msgstr "Пакет '%s' не будет удален, так как он входит в список NoUpgrade" - -#: lib/libalpm/remove.c:220 -#, c-format -msgid "file %s does not exist" -msgstr "файл %s не существует" - -#: lib/libalpm/remove.c:227 -#, c-format -msgid "keeping directory %s" -msgstr "сохраняю директорию %s" - -#: lib/libalpm/remove.c:229 -#, c-format -msgid "removing directory %s" -msgstr "удаляю директорию %s" - -#: lib/libalpm/remove.c:236 -#, c-format -msgid "%s is in trans->skip_remove, skipping removal" -msgstr "" - -#: lib/libalpm/remove.c:250 -#, c-format -msgid "transaction is set to NOSAVE, not backing up '%s'" -msgstr "" - -#: lib/libalpm/remove.c:254 -#, c-format -msgid "unlinking %s" -msgstr "" - -#: lib/libalpm/remove.c:261 -#, c-format -msgid "cannot remove file %s: %s" -msgstr "не могу удалить файл %s: %s" - -#: lib/libalpm/remove.c:294 -#, c-format -msgid "removing package %s-%s" -msgstr "удаляю пакет %s-%s" - -#: lib/libalpm/remove.c:309 -#, c-format -msgid "not removing package '%s', can't remove all files" -msgstr "пакет '%s' не удален, так как не удается удалить все файлы" - -#: lib/libalpm/remove.c:316 -#, c-format -msgid "removing %d files" -msgstr "удаляю %d файлов" -  #: lib/libalpm/remove.c:337 -#, c-format -msgid "removing database entry '%s'" -msgstr "удаляю запись '%s' в базе данных" +#, fuzzy, c-format +msgid "could not remove database entry %s-%s\n" +msgstr "не могу удалить из базы данных запись %s%s" -#: lib/libalpm/remove.c:339 -#, c-format -msgid "could not remove database entry %s-%s" -msgstr "" +#: lib/libalpm/remove.c:342 +#, fuzzy, c-format +msgid "could not remove entry '%s' from cache\n" +msgstr "не могу добавить запись '%s' в кэш" -#: lib/libalpm/remove.c:344 +#: lib/libalpm/server.c:56  #, c-format -msgid "could not remove entry '%s' from cache" +msgid "url '%s' is invalid, ignoring\n"  msgstr "" -#: lib/libalpm/sha1.c:397 -#, c-format -msgid "sha1: %s can't be opened\n" +#: lib/libalpm/server.c:60 +msgid "url scheme not specified, assuming http\n"  msgstr "" -#: lib/libalpm/sha1.c:412 -#, c-format -msgid "sha1(%s) = %s" +#: lib/libalpm/server.c:241 +msgid "disk"  msgstr "" -#: lib/libalpm/sync.c:183 -msgid "checking for package upgrades" -msgstr "проверяю наличие обновлений" - -#: lib/libalpm/sync.c:215 -#, c-format -msgid "%s-%s elected for upgrade (%s => %s)" -msgstr "%s-%s выбран для обновления (%s => %s)" +#: lib/libalpm/server.c:245 +#, fuzzy, c-format +msgid "failed retrieving file '%s' from %s : %s\n" +msgstr "не удалось получить некоторые файлы с %s\n" -#: lib/libalpm/sync.c:270 -#, c-format -msgid "searching for target in repo '%s'" +#: lib/libalpm/server.c:275 +msgid "cannot resume download, starting over\n"  msgstr "" -#: lib/libalpm/sync.c:278 lib/libalpm/sync.c:301 -#, c-format -msgid "target '%s' not found -- looking for provisions" -msgstr "" +#: lib/libalpm/server.c:288 +#, fuzzy, c-format +msgid "cannot write to file '%s'\n" +msgstr "не могу удалить файл '%s': %s" -#: lib/libalpm/sync.c:283 lib/libalpm/sync.c:306 -#, c-format -msgid "found '%s' as a provision for '%s'" -msgstr "" +#: lib/libalpm/server.c:307 +#, fuzzy, c-format +msgid "error downloading '%s': %s\n" +msgstr "ошибка при чтении пакета: %s" -#: lib/libalpm/sync.c:290 -#, c-format -msgid "repository '%s' not found" -msgstr "репозиторий '%s' не найден" +#: lib/libalpm/server.c:319 +#, fuzzy, c-format +msgid "error writing to file '%s': %s\n" +msgstr "не могу удалить файл '%s': %s" -#: lib/libalpm/sync.c:331 -#, c-format -msgid "%s-%s is up to date -- skipping" -msgstr "%s-%s не устарел --  пропускаю" +#: lib/libalpm/server.c:387 +#, fuzzy, c-format +msgid "could not chdir to %s\n" +msgstr "не могу извлечь %s (%s)" -#: lib/libalpm/sync.c:354 -#, c-format -msgid "adding target '%s' to the transaction set" +#: lib/libalpm/server.c:394 +msgid "running XferCommand: fork failed!\n"  msgstr "" -#: lib/libalpm/sync.c:402 -msgid "resolving target's dependencies" -msgstr "разрешаю зависимости пакетов" - -#: lib/libalpm/sync.c:422 -#, c-format -msgid "adding package %s-%s to the transaction targets" +#: lib/libalpm/server.c:445 +msgid "URL does not contain a file for download\n"  msgstr "" -#: lib/libalpm/sync.c:463 -msgid "looking for unresolvable dependencies" -msgstr "ищу неразрешимые зависимости" - -#: lib/libalpm/sync.c:494 -#, c-format -msgid "package '%s' conflicts with '%s'" -msgstr "пакет '%s' конфликтует с '%s'" - -#: lib/libalpm/sync.c:516 -#, c-format -msgid "'%s' not found in transaction set -- skipping" -msgstr "" +#: lib/libalpm/server.c:458 +#, fuzzy, c-format +msgid "failed to download %s\n" +msgstr "не могу загрузить все файлы" -#: lib/libalpm/sync.c:527 -#, c-format -msgid "package '%s' provides its own conflict" -msgstr "" +#: lib/libalpm/sync.c:135 +#, fuzzy, c-format +msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n" +msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)" -#: lib/libalpm/sync.c:550 lib/libalpm/sync.c:555 -#, c-format -msgid "'%s' is in the target list -- keeping it" -msgstr "" +#: lib/libalpm/sync.c:250 +#, fuzzy, c-format +msgid "%s: ignoring package upgrade (%s => %s)\n" +msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)" -#: lib/libalpm/sync.c:567 lib/libalpm/sync.c:604 -#, c-format -msgid "removing '%s' from target list" -msgstr "" +#: lib/libalpm/sync.c:320 +#, fuzzy, c-format +msgid "repository '%s' not found\n" +msgstr "репозиторий '%s' не найден" -#: lib/libalpm/sync.c:576 -#, c-format -msgid "resolving package '%s' conflict" -msgstr "разрешаю конфликт пакета '%s'" +#: lib/libalpm/sync.c:354 +#, fuzzy, c-format +msgid "%s-%s is up to date -- skipping\n" +msgstr "%s-%s не устарел --  пропускаю" -#: lib/libalpm/sync.c:599 -#, c-format -msgid "electing '%s' for removal" -msgstr "помечаю '%s' для удаления" +#: lib/libalpm/sync.c:358 +#, fuzzy, c-format +msgid "%s-%s is up to date -- reinstalling\n" +msgstr "%s-%s не устарел --  пропускаю" -#: lib/libalpm/sync.c:610 lib/libalpm/sync.c:626 -msgid "unresolvable package conflicts detected" +#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618 +#, fuzzy +msgid "unresolvable package conflicts detected\n"  msgstr "обнаружен неразрешимый конфликт пакетов" -#: lib/libalpm/sync.c:678 -msgid "checking dependencies of packages designated for removal" -msgstr "проверяю зависимости пакетов отмеченных для удаления" - -#: lib/libalpm/sync.c:692 -msgid "something has gone horribly wrong" -msgstr "произошло что-то ужасное и непонятное" - -#: lib/libalpm/sync.c:712 +#: lib/libalpm/sync.c:628  #, c-format -msgid "found '%s' as a provision for '%s' -- conflict aborted" +msgid "malloc failure: could not allocate %zd bytes\n"  msgstr "" -#: lib/libalpm/sync.c:808 -#, c-format -msgid "%s is already in the cache\n" -msgstr "%s уже есть в кэше\n" - -#: lib/libalpm/sync.c:819 -#, c-format -msgid "no %s cache exists, creating...\n" -msgstr "кэш %s не существует, создаю...\n" - -#: lib/libalpm/sync.c:820 -#, c-format -msgid "warning: no %s cache exists, creating..." -msgstr "предупреждение: кэш %s не существует, создаю..." -  #: lib/libalpm/sync.c:825 -msgid "couldn't create package cache, using /tmp instead\n" -msgstr "не могу создать кэш пакета, будет использован /tmp\n" - -#: lib/libalpm/sync.c:826 -msgid "warning: couldn't create package cache, using /tmp instead" -msgstr "предупреждение: не могу создать кэш пакета, будет использован /tmp" - -#: lib/libalpm/sync.c:833  #, c-format -msgid "failed to retrieve some files from %s\n" -msgstr "не удалось получить некоторые файлы с %s\n" +msgid "command: %s\n" +msgstr "" -#: lib/libalpm/sync.c:863 lib/libalpm/sync.c:875 -#, c-format -msgid "can't get md5 or sha1 checksum for package %s\n" +#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896 +#, fuzzy, c-format +msgid "can't get md5 checksum for file %s\n"  msgstr "не удалось получить md5 или sha1 контрольную сумму для пакета %s\n" -#: lib/libalpm/sync.c:894 -#, c-format -msgid "archive %s was corrupted (bad MD5 or SHA1 checksum)\n" +#: lib/libalpm/sync.c:910 +#, fuzzy, c-format +msgid "file %s was corrupted (bad MD5 checksum)\n"  msgstr "архив %s был поврежден (не сходится MD5 или SHA1 контрольная сумма)\n" -#: lib/libalpm/sync.c:896 +#: lib/libalpm/sync.c:1056  #, c-format -msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" -msgstr "архив %s поврежден (не сходится MD5 или SHA1 контрольная сумма)\n" - -#: lib/libalpm/sync.c:917 -msgid "could not create removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:923 -msgid "could not initialize the removal transaction" -msgstr "" - -#: lib/libalpm/sync.c:943 -msgid "removing conflicting and to-be-replaced packages" -msgstr "" +msgid "failed to retrieve some files from %s\n" +msgstr "не удалось получить некоторые файлы с %s\n" -#: lib/libalpm/sync.c:945 -msgid "could not prepare removal transaction" -msgstr "" +#: lib/libalpm/sync.c:1137 +#, fuzzy +msgid "could not create removal transaction\n" +msgstr "не удается создать базу данных" -#: lib/libalpm/sync.c:951 -msgid "could not commit removal transaction" +#: lib/libalpm/sync.c:1143 +msgid "could not initialize the removal transaction\n"  msgstr "" -#: lib/libalpm/sync.c:958 -msgid "installing packages" -msgstr "устанавливаю пакеты" - -#: lib/libalpm/sync.c:961 -msgid "could not create transaction" -msgstr "" +#: lib/libalpm/sync.c:1165 +#, fuzzy +msgid "could not prepare removal transaction\n" +msgstr "не удается создать базу данных" -#: lib/libalpm/sync.c:966 -msgid "could not initialize transaction" +#: lib/libalpm/sync.c:1171 +msgid "could not commit removal transaction\n"  msgstr "" -#: lib/libalpm/sync.c:989 -msgid "could not prepare transaction" -msgstr "" +#: lib/libalpm/sync.c:1182 +#, fuzzy +msgid "could not create transaction\n" +msgstr "не удается создать базу данных" -#: lib/libalpm/sync.c:1001 -msgid "updating database for replaced packages' dependencies" +#: lib/libalpm/sync.c:1187 +msgid "could not initialize transaction\n"  msgstr "" -#: lib/libalpm/sync.c:1030 -#, c-format -msgid "could not update requiredby for database entry %s-%s" -msgstr "" - -#: lib/libalpm/sync.c:1039 -#, c-format -msgid "could not update new database entry %s-%s" -msgstr "" +#: lib/libalpm/sync.c:1214 +#, fuzzy +msgid "could not prepare transaction\n" +msgstr "не удается создать базу данных" -#: lib/libalpm/sync.c:1079 -#, c-format -msgid "found package '%s-%s' in sync" +#: lib/libalpm/sync.c:1219 +msgid "could not commit transaction\n"  msgstr "" -#: lib/libalpm/sync.c:1085 -#, c-format -msgid "package '%s' not found in sync" -msgstr "пакет '%s' не найден в базе данных" +#: lib/libalpm/trans.c:214 +#, fuzzy, c-format +msgid "could not remove lock file %s\n" +msgstr "не могу удалить lock-файл %s" -#: lib/libalpm/trans.c:271 +#: lib/libalpm/trans.c:483  #, c-format -msgid "updating dependency packages 'requiredby' fields for %s-%s" -msgstr "" - -#: lib/libalpm/trans.c:274 -msgid "package has no dependencies, no other packages to update" +msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"  msgstr "" -#: lib/libalpm/trans.c:311 lib/libalpm/trans.c:341 -#, c-format -msgid "updating 'requiredby' field for package '%s'" -msgstr "" +#: lib/libalpm/trans.c:494 +#, fuzzy +msgid "could not create temp directory\n" +msgstr "не могу определить текущую рабочую директорию" -#: lib/libalpm/trans.c:326 lib/libalpm/trans.c:356 -#, c-format -msgid "could not update 'requiredby' database entry %s-%s" -msgstr "" +#: lib/libalpm/trans.c:536 +#, fuzzy, c-format +msgid "could not change directory to %s (%s)\n" +msgstr "не могу извлечь %s (%s)" -#: lib/libalpm/trans.c:333 -#, c-format -msgid "could not find dependency '%s'" -msgstr "" +#: lib/libalpm/trans.c:554 +#, fuzzy, c-format +msgid "could not fork a new process (%s)\n" +msgstr "не могу переименовать %s (%s)" -#: lib/libalpm/util.c:142 -#, c-format -msgid "failed to make path '%s' : %s" -msgstr "" +#: lib/libalpm/trans.c:564 +#, fuzzy, c-format +msgid "could not change the root directory (%s)\n" +msgstr "не могу определить текущую рабочую директорию" -#: lib/libalpm/util.c:280 -#, c-format -msgid "could not open %s: %s\n" -msgstr "" +#: lib/libalpm/trans.c:569 +#, fuzzy, c-format +msgid "could not change directory to / (%s)\n" +msgstr "не могу извлечь %s (%s)" -#: lib/libalpm/util.c:293 +#: lib/libalpm/trans.c:578  #, c-format -msgid "could not extract %s: %s\n" +msgid "call to popen failed (%s)"  msgstr "" -#: lib/libalpm/util.c:350 +#: lib/libalpm/trans.c:597  #, c-format -msgid "logaction called: %s" +msgid "call to waitpid failed (%s)\n"  msgstr "" -#: lib/libalpm/util.c:445 -msgid "could not create temp directory" +#: lib/libalpm/trans.c:606 +msgid "scriptlet failed to execute correctly\n"  msgstr "" -#: lib/libalpm/util.c:472 -#, c-format -msgid "could not change directory to %s (%s)" -msgstr "" +#: lib/libalpm/trans.c:615 +#, fuzzy, c-format +msgid "could not remove tmpdir %s\n" +msgstr "не могу удалить временный файл %s" -#: lib/libalpm/util.c:476 +#: lib/libalpm/util.c:204  #, c-format -msgid "executing %s script..." +msgid "failed to make path '%s' : %s\n"  msgstr "" -#: lib/libalpm/util.c:489 +#: lib/libalpm/util.c:389  #, c-format -msgid "could not fork a new process (%s)" +msgid "could not open %s: %s\n"  msgstr "" -#: lib/libalpm/util.c:496 +#: lib/libalpm/util.c:573  #, c-format -msgid "chrooting in %s" -msgstr "" +msgid "no %s cache exists, creating...\n" +msgstr "кэш %s не существует, создаю...\n" -#: lib/libalpm/util.c:498 -#, c-format -msgid "could not change the root directory (%s)" -msgstr "" +#: lib/libalpm/util.c:593 +#, fuzzy +msgid "couldn't create package cache, using /tmp instead\n" +msgstr "не могу создать кэш пакета, будет использован /tmp\n" -#: lib/libalpm/util.c:502 +#: lib/libalpm/util.c:643  #, c-format -msgid "could not change directory to / (%s)" +msgid "md5: %s can't be opened\n"  msgstr "" -#: lib/libalpm/util.c:506 +#: lib/libalpm/util.c:645  #, c-format -msgid "executing \"%s\"" +msgid "md5: %s can't be read\n"  msgstr "" -#: lib/libalpm/util.c:509 -#, c-format -msgid "call to popen failed (%s)" -msgstr "" +#~ msgid "please remove '%s' first, using -Rd" +#~ msgstr "пожалуйста, уделите сначала '%s' используя -Rd" -#: lib/libalpm/util.c:541 -#, c-format -msgid "call to waitpid failed (%s)" -msgstr "" +#~ msgid "could not extract %s (%s)" +#~ msgstr "не могу извлечь %s (%s)" -#: lib/libalpm/util.c:550 -#, c-format -msgid "could not remove tmpdir %s" -msgstr "" +#~ msgid "could not update provision '%s' from '%s'" +#~ msgstr "не могу обновить '%s' из '%s'" -#: lib/libalpm/util.c:568 -#, c-format -msgid "cannot read disk space information from %s: %s" -msgstr "" +#~ msgid "could not get sha1sum for package %s-%s" +#~ msgstr "не могу получить контрольную сумму sha1sum для пакета %s-%s" -#: lib/libalpm/util.c:609 -#, c-format -msgid "check_freespace: total pkg size: %lld, disk space: %lld" -msgstr "" +#~ msgid "sha1sums do not match for package %s-%s" +#~ msgstr "контрольные суммы sha1sum для пакета %s-%s не совпали" -#: lib/libalpm/versioncmp.c:279 -#, c-format -msgid "depcmp: %s-%s %s %s-%s => %s" -msgstr "" +#~ msgid "cannot remove file %s: %s" +#~ msgstr "не могу удалить файл %s: %s" -#: lib/libalpm/versioncmp.c:284 -#, c-format -msgid "depcmp: %s-%s %s %s => %s" -msgstr "" +#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n" +#~ msgstr "архив %s поврежден (не сходится MD5 или SHA1 контрольная сумма)\n" diff --git a/lib/libalpm/provide.c b/lib/libalpm/provide.c deleted file mode 100644 index df600be7..00000000 --- a/lib/libalpm/provide.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - *  provide.c - *  - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  - *  This program is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  - *  USA. - */ - -#include "config.h" - -#include <stdlib.h> -#include <string.h> - -/* libalpm */ -#include "provide.h" -#include "alpm_list.h" -#include "cache.h" -#include "db.h" -#include "log.h" - -/* return a alpm_list_t of packages in "db" that provide "package" - */ -alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package) -{ -	alpm_list_t *pkgs = NULL; -	alpm_list_t *lp; - -	ALPM_LOG_FUNC; - -	if(db == NULL || package == NULL || strlen(package) == 0) { -		return(NULL); -	} - -	for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { -		pmpkg_t *info = lp->data; - -		if(alpm_list_find_str(alpm_pkg_get_provides(info), package)) { -			pkgs = alpm_list_add(pkgs, info); -		} -	} - -	return(pkgs); -} - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/provide.h b/lib/libalpm/provide.h deleted file mode 100644 index b5c55db3..00000000 --- a/lib/libalpm/provide.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - *  provide.h - *  - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  - *  This program is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  - *  USA. - */ -#ifndef _ALPM_PROVIDE_H -#define _ALPM_PROVIDE_H - -#include "db.h" -#include "alpm_list.h" -#include "config.h" - -alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package); - -#endif /* _ALPM_PROVIDE_H */ - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 291eb7a0..349ff10c 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -1,12 +1,12 @@  /*   *  remove.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,7 +19,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -31,15 +31,8 @@  #include <fcntl.h>  #include <string.h>  #include <limits.h> -#if defined(__APPLE__) || defined(__OpenBSD__) -#include <sys/syslimits.h> -#endif -#if defined(__APPLE__) || defined(__OpenBSD__) || defined(__sun__) -#include <sys/stat.h> -#endif  #include <unistd.h> -#include <errno.h> -#include <libintl.h> +#include <sys/stat.h>  /* libalpm */  #include "remove.h" @@ -47,16 +40,12 @@  #include "trans.h"  #include "util.h"  #include "error.h" -#include "versioncmp.h" -#include "md5.h" -#include "sha1.h"  #include "log.h"  #include "backup.h"  #include "package.h"  #include "db.h"  #include "cache.h"  #include "deps.h" -#include "provide.h"  #include "handle.h"  #include "alpm.h" @@ -76,7 +65,7 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  	if((info = _alpm_db_scan(db, name)) == NULL) {  		/* Unimportant - just ignore it if we can't find it */ -		_alpm_log(PM_LOG_DEBUG, _("could not find %s in database"), name); +		_alpm_log(PM_LOG_DEBUG, "could not find %s in database\n", name);  		RET_ERR(PM_ERR_PKG_NOT_FOUND, -1);  	} @@ -90,7 +79,7 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  		}  	} -	_alpm_log(PM_LOG_DEBUG, _("adding %s in the targets list"), info->name); +	_alpm_log(PM_LOG_DEBUG, "adding %s in the targets list\n", info->name);  	trans->packages = alpm_list_add(trans->packages, info);  	return(0); @@ -105,28 +94,36 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));  	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	if(!(trans->flags & (PM_TRANS_FLAG_NODEPS)) && (trans->type != PM_TRANS_TYPE_UPGRADE)) { -		EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL); +	/* skip all checks if we are doing this removal as part of an upgrade */ +	if(trans->type == PM_TRANS_TYPE_REMOVEUPGRADE) { +		return(0); +	} + +	EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL); -		_alpm_log(PM_LOG_DEBUG, _("looking for unsatisfied dependencies")); -		lp = _alpm_checkdeps(trans, db, trans->type, trans->packages); +	if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) { +		_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n"); +		lp = alpm_checkdeps(db, 1, trans->packages, NULL);  		if(lp != NULL) {  			if(trans->flags & PM_TRANS_FLAG_CASCADE) {  				while(lp) {  					alpm_list_t *i;  					for(i = lp; i; i = i->next) {  						pmdepmissing_t *miss = (pmdepmissing_t *)i->data; -						pmpkg_t *info = _alpm_db_scan(db, miss->depend.name); +						pmpkg_t *info = _alpm_db_scan(db, miss->target);  						if(info) { -							_alpm_log(PM_LOG_DEBUG, _("pulling %s in the targets list"), alpm_pkg_get_name(info)); -							trans->packages = alpm_list_add(trans->packages, info); +							if(!_alpm_pkg_find(alpm_pkg_get_name(info), trans->packages)) { +								_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n", +										alpm_pkg_get_name(info)); +								trans->packages = alpm_list_add(trans->packages, info); +							}  						} else { -							_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping"), -							          miss->depend.name); +							_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"), +							          miss->target);  						}  					}  					FREELIST(lp); -					lp = _alpm_checkdeps(trans, db, trans->type, trans->packages); +					lp = alpm_checkdeps(db, 1, trans->packages, NULL);  				}  			} else {  				if(data) { @@ -137,22 +134,22 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)  				RET_ERR(PM_ERR_UNSATISFIED_DEPS, -1);  			}  		} +	} -		if(trans->flags & PM_TRANS_FLAG_RECURSE) { -			_alpm_log(PM_LOG_DEBUG, _("finding removable dependencies")); -			trans->packages = _alpm_removedeps(db, trans->packages); -		} - -		/* re-order w.r.t. dependencies */  -		_alpm_log(PM_LOG_DEBUG, _("sorting by dependencies")); -		lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_REMOVE); -		/* free the old alltargs */ -		FREELISTPTR(trans->packages); -		trans->packages = lp; +	/* re-order w.r.t. dependencies */ +	_alpm_log(PM_LOG_DEBUG, "sorting by dependencies\n"); +	lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_REMOVE); +	/* free the old alltargs */ +	alpm_list_free(trans->packages); +	trans->packages = lp; -		EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL); +	if(trans->flags & PM_TRANS_FLAG_RECURSE) { +		_alpm_log(PM_LOG_DEBUG, "finding removable dependencies\n"); +		_alpm_recursedeps(db, trans->packages, 0);  	} +	EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL); +  	return(0);  } @@ -169,10 +166,10 @@ static int can_remove_file(pmtrans_t *trans, const char *path)  	/* If we fail write permissions due to a read-only filesystem, abort.  	 * Assume all other possible failures are covered somewhere else */  	if(access(file, W_OK) == -1) { -		if(errno != EACCES && access(file, F_OK) == 0) { +		if(errno != EACCES && errno != ETXTBSY && access(file, F_OK) == 0) {  			/* only return failure if the file ACTUALLY exists and we can't write to  			 * it - ignore "chmod -w" simple permission failures */ -			_alpm_log(PM_LOG_ERROR, _("cannot remove file '%s': %s"), +			_alpm_log(PM_LOG_ERROR, _("cannot remove file '%s': %s\n"),  			          file, strerror(errno));  			return(0);  		} @@ -182,97 +179,86 @@ static int can_remove_file(pmtrans_t *trans, const char *path)  }  /* Helper function for iterating through a package's file and deleting them - * Used by _alpm_remove_commit - * - * TODO the parameters are a bit out of control here.  This function doesn't - * need to report PROGRESS, do it in the parent function. -*/ -static void unlink_file(pmpkg_t *info, alpm_list_t *lp, alpm_list_t *targ, -												pmtrans_t *trans, int filenum, int *position) + * Used by _alpm_remove_commit. */ +static void unlink_file(pmpkg_t *info, alpm_list_t *lp, pmtrans_t *trans)  {  	struct stat buf;  	int needbackup = 0; -	double percent = 0.0;  	char file[PATH_MAX+1];  	ALPM_LOG_FUNC; -	if(*position != 0) { -		percent = (double)*position / filenum; -	} -  	char *hash = _alpm_needbackup(lp->data, alpm_pkg_get_backup(info));  	if(hash) {  		needbackup = 1;  		FREE(hash);  	} -	 -	if(trans->type == PM_TRANS_TYPE_UPGRADE) { + +	snprintf(file, PATH_MAX, "%s%s", handle->root, (char *)lp->data); + +	if(trans->type == PM_TRANS_TYPE_REMOVEUPGRADE) {  		/* check noupgrade */  		if(alpm_list_find_str(handle->noupgrade, lp->data)) { -			_alpm_log(PM_LOG_DEBUG, _("Skipping removal of '%s' due to NoUpgrade"), file); +			_alpm_log(PM_LOG_DEBUG, "Skipping removal of '%s' due to NoUpgrade\n", +					file);  			return;  		}  	} -	snprintf(file, PATH_MAX, "%s%s", handle->root, (char *)lp->data); -	if(lstat(file, &buf)) { -		_alpm_log(PM_LOG_DEBUG, _("file %s does not exist"), file); +	if(_alpm_lstat(file, &buf)) { +		_alpm_log(PM_LOG_DEBUG, "file %s does not exist\n", file);  		return;  	} -	 +  	if(S_ISDIR(buf.st_mode)) {  		if(rmdir(file)) { -			/* this is okay, other pakcages are probably using it (like /usr) */ -			_alpm_log(PM_LOG_DEBUG, _("keeping directory %s"), file); +			/* this is okay, other packages are probably using it (like /usr) */ +			_alpm_log(PM_LOG_DEBUG, "keeping directory %s\n", file);  		} else { -			_alpm_log(PM_LOG_DEBUG, _("removing directory %s"), file); +			_alpm_log(PM_LOG_DEBUG, "removing directory %s\n", file);  		}  	} else {  		/* check the remove skip list before removing the file. -		 * see the big comment block in db_find_conflicts() for an +		 * see the big comment block in db_find_fileconflicts() for an  		 * explanation. */  		if(alpm_list_find_str(trans->skip_remove, file)) { -			_alpm_log(PM_LOG_DEBUG, _("%s is in trans->skip_remove, skipping removal"), file); +			_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_remove, skipping removal\n", +					file);  			return;  		} else if(needbackup) {  			/* if the file is flagged, back it up to .pacsave */ -			if(!(trans->type == PM_TRANS_TYPE_UPGRADE)) { -				/* if it was an upgrade, the file would be left alone because -				 * pacman_add() would handle it */ -				if(!(trans->flags & PM_TRANS_FLAG_NOSAVE)) { -					char newpath[PATH_MAX]; -					snprintf(newpath, PATH_MAX, "%s.pacsave", file); -					rename(file, newpath); -					_alpm_log(PM_LOG_WARNING, _("%s saved as %s"), file, newpath); -					return; -				} else { -					_alpm_log(PM_LOG_DEBUG, _("transaction is set to NOSAVE, not backing up '%s'"), file); -				} +			if(!(trans->flags & PM_TRANS_FLAG_NOSAVE)) { +				char newpath[PATH_MAX]; +				snprintf(newpath, PATH_MAX, "%s.pacsave", file); +				rename(file, newpath); +				_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), file, newpath); +				return; +			} else { +				_alpm_log(PM_LOG_DEBUG, "transaction is set to NOSAVE, not backing up '%s'\n", file);  			}  		} -		_alpm_log(PM_LOG_DEBUG, _("unlinking %s"), file); -		int list_count = alpm_list_count(trans->packages); /* this way we don't have to call alpm_list_count twice during PROGRESS */ - -		PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, info->name, (double)(percent * 100), list_count, (list_count - alpm_list_count(targ) + 1)); -		++(*position); +		_alpm_log(PM_LOG_DEBUG, "unlinking %s\n", file);  		if(unlink(file) == -1) { -			_alpm_log(PM_LOG_ERROR, _("cannot remove file %s: %s"), lp->data, strerror(errno)); +			_alpm_log(PM_LOG_ERROR, _("cannot remove file '%s': %s\n"), +								(char *)lp->data, strerror(errno));  		}  	}  }  int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db)  { -	pmpkg_t *info, *infodup; +	pmpkg_t *info;  	alpm_list_t *targ, *lp; +	int pkg_count;  	ALPM_LOG_FUNC;  	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));  	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	pkg_count = alpm_list_count(trans->packages); +  	for(targ = trans->packages; targ; targ = targ->next) {  		int position = 0;  		char scriptlet[PATH_MAX]; @@ -281,7 +267,7 @@ int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db)  		const char *pkgname = NULL;  		if(handle->trans->state == STATE_INTERRUPTED) { -			break; +			return(0);  		}  		/* get the name now so we can use it after package is removed */ @@ -289,9 +275,9 @@ int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db)  		snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", db->path,  						 pkgname, alpm_pkg_get_version(info)); -		if(trans->type != PM_TRANS_TYPE_UPGRADE) { +		if(trans->type != PM_TRANS_TYPE_REMOVEUPGRADE) {  			EVENT(trans, PM_TRANS_EVT_REMOVE_START, info, NULL); -			_alpm_log(PM_LOG_DEBUG, _("removing package %s-%s"), +			_alpm_log(PM_LOG_DEBUG, "removing package %s-%s\n",  								pkgname, alpm_pkg_get_version(info));  			/* run the pre-remove scriptlet if it exists  */ @@ -306,22 +292,37 @@ int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db)  		if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) {  			for(lp = files; lp; lp = lp->next) {  				if(!can_remove_file(trans, lp->data)) { -					_alpm_log(PM_LOG_DEBUG, _("not removing package '%s', can't remove all files"), +					_alpm_log(PM_LOG_DEBUG, "not removing package '%s', can't remove all files\n",  					          pkgname);  					RET_ERR(PM_ERR_PKG_CANT_REMOVE, -1);  				}  			}  			int filenum = alpm_list_count(files); -			_alpm_log(PM_LOG_DEBUG, _("removing %d files"), filenum); +			double percent = 0.0; +			alpm_list_t *newfiles; +			_alpm_log(PM_LOG_DEBUG, "removing %d files\n", filenum);  			/* iterate through the list backwards, unlinking files */ -			for(lp = alpm_list_last(files); lp; lp = lp->prev) { -				unlink_file(info, lp, targ, trans, filenum, &position); +			newfiles = alpm_list_reverse(files); +			for(lp = newfiles; lp; lp = alpm_list_next(lp)) { +				unlink_file(info, lp, trans); + +				/* update progress bar after each file */ +				percent = (double)position / (double)filenum; +				PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, info->name, +						(double)(percent * 100), pkg_count, +						(pkg_count - alpm_list_count(targ) + 1)); +				position++;  			} +			alpm_list_free(newfiles);  		} -		if(trans->type != PM_TRANS_TYPE_UPGRADE) { +		/* set progress to 100% after we finish unlinking files */ +		PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, pkgname, 100, +		         pkg_count, (pkg_count - alpm_list_count(targ) + 1)); + +		if(trans->type != PM_TRANS_TYPE_REMOVEUPGRADE) {  			/* run the post-remove script if it exists  */  			if(alpm_pkg_has_scriptlet(info) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {  				_alpm_runscriptlet(handle->root, scriptlet, "post_remove", @@ -329,38 +330,28 @@ int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db)  			}  		} -		/* duplicate the package so we can remove the requiredby fields later */ -		infodup = _alpm_pkg_dup(info); -  		/* remove the package from the database */ -		_alpm_log(PM_LOG_DEBUG, _("updating database")); -		_alpm_log(PM_LOG_DEBUG, _("removing database entry '%s'"), pkgname); +		_alpm_log(PM_LOG_DEBUG, "updating database\n"); +		_alpm_log(PM_LOG_DEBUG, "removing database entry '%s'\n", pkgname);  		if(_alpm_db_remove(db, info) == -1) { -			_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s-%s"), +			_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s-%s\n"),  			          pkgname, alpm_pkg_get_version(info));  		}  		/* remove the package from the cache */  		if(_alpm_db_remove_pkgfromcache(db, info) == -1) { -			_alpm_log(PM_LOG_ERROR, _("could not remove entry '%s' from cache"), +			_alpm_log(PM_LOG_ERROR, _("could not remove entry '%s' from cache\n"),  			          pkgname);  		} -		 -		/* update dependency packages' REQUIREDBY fields */ -		_alpm_trans_update_depends(trans, infodup); -		_alpm_pkg_free(infodup); - -		PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, pkgname, 100, -		         alpm_list_count(trans->packages), -		         (alpm_list_count(trans->packages) - alpm_list_count(targ) +1)); -		if(trans->type != PM_TRANS_TYPE_UPGRADE) { +		/* call a done event if this isn't an upgrade */ +		if(trans->type != PM_TRANS_TYPE_REMOVEUPGRADE) {  			EVENT(trans, PM_TRANS_EVT_REMOVE_DONE, info, NULL);  		}  	}  	/* run ldconfig if it exists */ -	if((trans->type != PM_TRANS_TYPE_UPGRADE) && (handle->trans->state != STATE_INTERRUPTED)) { -		_alpm_log(PM_LOG_DEBUG, _("running \"ldconfig -r %s\""), handle->root); +	if(trans->type != PM_TRANS_TYPE_REMOVEUPGRADE) { +		_alpm_log(PM_LOG_DEBUG, "running \"ldconfig -r %s\"\n", handle->root);  		_alpm_ldconfig(handle->root);  	} diff --git a/lib/libalpm/remove.h b/lib/libalpm/remove.h index 5ceba3b2..f1bc58eb 100644 --- a/lib/libalpm/remove.h +++ b/lib/libalpm/remove.h @@ -1,8 +1,8 @@  /*   *  remove.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_REMOVE_H diff --git a/lib/libalpm/server.c b/lib/libalpm/server.c index b8635629..8aa5a45b 100644 --- a/lib/libalpm/server.c +++ b/lib/libalpm/server.c @@ -1,8 +1,8 @@  /*   *  server.c - *  + *   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,21 +15,21 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #include "config.h"  #include <stdlib.h> +#include <errno.h> +#include <time.h>  #include <string.h> +#include <limits.h>  #include <stdio.h> -#include <libintl.h>  #include <sys/types.h>  #include <sys/stat.h>  #include <unistd.h> -#include <time.h> -#include <errno.h>  #include <download.h>  /* libalpm */ @@ -40,7 +40,6 @@  #include "alpm.h"  #include "util.h"  #include "handle.h" -#include "log.h"  #include "package.h"  pmserver_t *_alpm_server_new(const char *url) @@ -50,20 +49,15 @@ pmserver_t *_alpm_server_new(const char *url)  	ALPM_LOG_FUNC; -	server = (pmserver_t *)malloc(sizeof(pmserver_t)); -	if(server == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmserver_t)); -		RET_ERR(PM_ERR_MEMORY, NULL); -	} +	CALLOC(server, 1, sizeof(pmserver_t), RET_ERR(PM_ERR_MEMORY, NULL)); -	memset(server, 0, sizeof(pmserver_t));  	u = downloadParseURL(url);  	if(!u) { -		_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid, ignoring"), url); +		_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid, ignoring\n"), url);  		RET_ERR(PM_ERR_SERVER_BAD_URL, NULL);  	}  	if(strlen(u->scheme) == 0) { -		_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming http")); +		_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming http\n"));  		strcpy(u->scheme, "http");  	} @@ -81,10 +75,8 @@ pmserver_t *_alpm_server_new(const char *url)  	return server;  } -void _alpm_server_free(void *data) +void _alpm_server_free(pmserver_t *server)  { -	pmserver_t *server = data; -  	ALPM_LOG_FUNC;  	if(server == NULL) { @@ -107,7 +99,8 @@ static char *strip_filename(pmserver_t *server)  	p = strrchr(server->s_url->doc, '/');  	if(p && *(++p)) {  		fname = strdup(p); -		_alpm_log(PM_LOG_DEBUG, _("stripping '%s' from '%s'"), fname, server->s_url->doc); +		_alpm_log(PM_LOG_DEBUG, "stripping '%s' from '%s'\n", +				fname, server->s_url->doc);  		*p = 0;  	} @@ -124,52 +117,59 @@ static struct url *url_for_file(pmserver_t *server, const char *filename)  	int doclen = 0;  	doclen = strlen(server->s_url->doc) + strlen(filename) + 2; -	doc = calloc(doclen, sizeof(char)); -	if(!doc) { -		RET_ERR(PM_ERR_MEMORY, NULL); -	} +	CALLOC(doc, doclen, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));  	snprintf(doc, doclen, "%s/%s", server->s_url->doc, filename); -	_alpm_log(PM_LOG_DEBUG, "file path: '%s'", doc);  	ret = downloadMakeURL(server->s_url->scheme,  												server->s_url->host,  												server->s_url->port,  												doc,  												server->s_url->user,  												server->s_url->pwd); -	free(doc); +	FREE(doc);  	return(ret);  }  /*   * Download a list of files from a list of servers   *   - if one server fails, we try the next one in the list + *   - if *dl_total is non-NULL, then it will be used as the starting + *     download amount when TotalDownload is set. It will also be + *     set to the final download amount for the calling function to use. + *   - totalsize is the total download size for use when TotalDownload + *     is set. Use 0 if the total download size is not known.   *   * RETURN:  0 for successful download, 1 on error   */ -int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath, alpm_list_t *files) +int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath, +		alpm_list_t *files, int *dl_total, unsigned long totalsize)  { -	ALPM_LOG_FUNC; -	return(_alpm_downloadfiles_forreal(servers, localpath, files, NULL, NULL)); +	return(_alpm_downloadfiles_forreal(servers, localpath, files, 0, NULL, +				dl_total, totalsize));  }  /*   * This is the real downloadfiles, used directly by sync_synctree() to check   * modtimes on remote files. - *   - if *mtime1 is non-NULL, then only download files - *     if they are different than *mtime1.  String should be in the form - *     "YYYYMMDDHHMMSS" to match the form of ftplib's FtpModDate() function. - *   - if *mtime2 is non-NULL, then it will be filled with the mtime - *     of the remote file (from MDTM FTP cmd or Last-Modified HTTP header). - *  + *   - if mtime1 is non-NULL, then only download files if they are different + *     than mtime1. + *   - if *mtime2 is non-NULL, it will be filled with the mtime of the remote + *     file. + *   - if *dl_total is non-NULL, then it will be used as the starting + *     download amount when TotalDownload is set. It will also be + *     set to the final download amount for the calling function to use. + *   - totalsize is the total download size for use when TotalDownload + *     is set. Use 0 if the total download size is not known. + *   * RETURN:  0 for successful download   *          1 if the mtimes are identical   *         -1 on error   */  int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, -	alpm_list_t *files, const char *mtime1, char *mtime2) +	alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total, +	unsigned long totalsize)  { -	int dltotal_bytes = 0; +	int dl_thisfile = 0;  	alpm_list_t *lp;  	int done = 0;  	alpm_list_t *complete = NULL; @@ -191,23 +191,15 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  			char output[PATH_MAX];  			char *fn = (char *)lp->data;  			char pkgname[PKG_NAME_LEN]; -			char *p;  			fileurl = url_for_file(server, fn);  			if(!fileurl) {  				return(-1);  			} -			/* Try to get JUST the name of the package from the filename */ -			memset(pkgname, 0, PKG_NAME_LEN); -			if((p = strstr(fn, PM_EXT_PKG))) { -				_alpm_pkg_splitname(fn, pkgname, NULL, 1); -			} -			if(!strlen(pkgname)) { -				/* just use the raw filename if we can't find crap */ -				STRNCPY(pkgname, fn, PKG_NAME_LEN+1); -			} -			_alpm_log(PM_LOG_DEBUG, _("using '%s' for download progress"), pkgname); +			/* pass the raw filename for passing to the callback function */ +			strncpy(pkgname, fn, PKG_NAME_LEN); +			_alpm_log(PM_LOG_DEBUG, "using '%s' for download progress\n", pkgname);  			snprintf(realfile, PATH_MAX, "%s%s", localpath, fn);  			snprintf(output, PATH_MAX, "%s%s.part", localpath, fn); @@ -223,66 +215,64 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  				int chk_resume = 0;  				if(stat(output, &st) == 0 && st.st_size > 0) { -					_alpm_log(PM_LOG_DEBUG, _("existing file found, using it")); +					_alpm_log(PM_LOG_DEBUG, "existing file found, using it\n");  					fileurl->offset = (off_t)st.st_size; -					dltotal_bytes = st.st_size; +					dl_thisfile = st.st_size; +					if (dl_total != NULL) { +						*dl_total += st.st_size; +					}  					localf = fopen(output, "a");  					chk_resume = 1;  				} else {  					fileurl->offset = (off_t)0; -					dltotal_bytes = 0; +					dl_thisfile = 0;  				} -				 -				/* libdownload does not reset the error code, reset it in the case of previous errors */ + +				/* libdownload does not reset the error code, reset it in +				 * the case of previous errors */  				downloadLastErrCode = 0;  				/* 10s timeout - TODO make a config option */  				downloadTimeout = 10000; -			 	/* Make libdownload super verbose... worthwhile for testing */ -				if(alpm_option_get_logmask() & PM_LOG_DOWNLOAD) { -						downloadDebug = 1; -				} -				if(alpm_option_get_logmask() & PM_LOG_DEBUG) { -						dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "v" : "vp")); -				} else { -						dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p")); -				} +				dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));  				if(downloadLastErrCode != 0 || dlf == NULL) { -					_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s"), -										fn, fileurl->host, downloadLastErrString); +					const char *host = _("disk"); +					if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) { +						host = fileurl->host; +					} +					_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"), +										fn, host, downloadLastErrString);  					if(localf != NULL) {  						fclose(localf);  					}  					/* try the next server */ +					downloadFreeURL(fileurl);  					continue;  				} else { -						_alpm_log(PM_LOG_DEBUG, _("connected to %s successfully"), fileurl->host); +						_alpm_log(PM_LOG_DEBUG, "connected to %s successfully\n", fileurl->host);  				} -				 -				if(ust.mtime && mtime1) { -					char strtime[15]; -					_alpm_time2string(ust.mtime, strtime); -					if(strcmp(mtime1, strtime) == 0) { -						_alpm_log(PM_LOG_DEBUG, _("mtimes are identical, skipping %s"), fn); -						complete = alpm_list_add(complete, fn); -						if(localf != NULL) { -							fclose(localf); -						} -						if(dlf != NULL) { -							fclose(dlf); -						} -						return(1); + +				if(ust.mtime && mtime1 && ust.mtime == mtime1) { +					_alpm_log(PM_LOG_DEBUG, "mtimes are identical, skipping %s\n", fn); +					complete = alpm_list_add(complete, fn); +					if(localf != NULL) { +						fclose(localf);  					} +					if(dlf != NULL) { +						fclose(dlf); +					} +					downloadFreeURL(fileurl); +					return(1);  				} -				 +  				if(ust.mtime && mtime2) { -					_alpm_time2string(ust.mtime, mtime2); +					*mtime2 = ust.mtime;  				}  				if(chk_resume && fileurl->offset == 0) { -					_alpm_log(PM_LOG_WARNING, _("cannot resume download, starting over")); +					_alpm_log(PM_LOG_WARNING, _("cannot resume download, starting over\n"));  					if(localf != NULL) {  						fclose(localf);  						localf = NULL; @@ -292,51 +282,64 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  				if(localf == NULL) {  					_alpm_rmrf(output);  					fileurl->offset = (off_t)0; -					dltotal_bytes = 0; +					dl_thisfile = 0;  					localf = fopen(output, "w");  					if(localf == NULL) { /* still null? */ -						_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'"), output); +						_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'\n"), output);  						if(dlf != NULL) {  							fclose(dlf);  						} -						return -1; +						downloadFreeURL(fileurl); +						return(-1);  					}  				}  				/* Progress 0 - initialize */ -				if(handle->dlcb) handle->dlcb(pkgname, 0, ust.size); +				if(handle->dlcb) { +					handle->dlcb(pkgname, 0, ust.size, dl_total ? *dl_total : 0, +							totalsize); +				}  				int nread = 0;  				char buffer[PM_DLBUF_LEN];  				while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) {  					if(ferror(dlf)) { -						_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s"), +						_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"),  											fn, downloadLastErrString);  						fclose(localf);  						fclose(dlf); +						downloadFreeURL(fileurl);  						return(-1);  					} -					 +  					int nwritten = 0;  					while(nwritten < nread) {  						nwritten += fwrite(buffer, 1, (nread - nwritten), localf);  						if(ferror(localf)) { -							_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s"), +							_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),  												realfile, strerror(errno));  							fclose(localf);  							fclose(dlf); +							downloadFreeURL(fileurl);  							return(-1);  						}  					}  					if(nwritten != nread) { -						 + +					} +					dl_thisfile += nread; +					if (dl_total != NULL) { +						*dl_total += nread;  					} -					dltotal_bytes += nread; -					if(handle->dlcb) handle->dlcb(pkgname, dltotal_bytes, ust.size); +					if(handle->dlcb) { +						handle->dlcb(pkgname, dl_thisfile, ust.size, +								dl_total ? *dl_total : 0, totalsize); +					}  				} +				downloadFreeURL(fileurl);  				fclose(localf);  				fclose(dlf);  				rename(output, realfile); @@ -351,7 +354,10 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  				char cwd[PATH_MAX];  				/* build the full download url */ -				snprintf(url, PATH_MAX, "%s://%s%s", fileurl->scheme, fileurl->host, fileurl->doc); +				snprintf(url, PATH_MAX, "%s://%s%s", fileurl->scheme, +						fileurl->host, fileurl->doc); +				/* we don't need this anymore */ +				downloadFreeURL(fileurl);  				/* replace all occurrences of %o with fn.part */  				strncpy(origCmd, handle->xfercommand, sizeof(origCmd)); @@ -378,18 +384,18 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  				/* cwd to the download directory */  				getcwd(cwd, PATH_MAX);  				if(chdir(localpath)) { -					_alpm_log(PM_LOG_WARNING, _("could not chdir to %s"), localpath); +					_alpm_log(PM_LOG_WARNING, _("could not chdir to %s\n"), localpath);  					return(PM_ERR_CONNECT_FAILED);  				}  				/* execute the parsed command via /bin/sh -c */ -				_alpm_log(PM_LOG_DEBUG, _("running command: %s"), parsedCmd); +				_alpm_log(PM_LOG_DEBUG, "running command: %s\n", parsedCmd);  				ret = system(parsedCmd);  				if(ret == -1) { -					_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!")); +					_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!\n"));  					return(PM_ERR_FORK_FAILED);  				} else if(ret != 0) {  					/* download failed */ -					_alpm_log(PM_LOG_DEBUG, _("XferCommand command returned non-zero status code (%d)"), ret); +					_alpm_log(PM_LOG_DEBUG, "XferCommand command returned non-zero status code (%d)\n", ret);  				} else {  					/* download was successful */  					complete = alpm_list_add(complete, fn); @@ -399,26 +405,36 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,  				}  				chdir(cwd);  			} -			downloadFreeURL(fileurl);  		}  		if(alpm_list_count(complete) == alpm_list_count(files)) {  			done = 1;  		} +		alpm_list_free(complete);  	}  	return(done ? 0 : -1);  } -char *_alpm_fetch_pkgurl(char *target) +/** Fetch a remote pkg. + * @param url URL of the package to download + * @return the downloaded filepath on success, NULL on error + * @addtogroup alpm_misc + */ +char SYMEXPORT *alpm_fetch_pkgurl(const char *url)  {  	pmserver_t *server; -	char *filename; -	struct stat st; +	char *filename, *filepath; +	const char *cachedir;  	ALPM_LOG_FUNC; -	server = _alpm_server_new(target); +	if(strstr(url, "://") == NULL) { +		_alpm_log(PM_LOG_DEBUG, "Invalid URL passed to alpm_fetch_pkgurl\n"); +		return(NULL); +	} + +	server = _alpm_server_new(url);  	if(!server) {  		return(NULL);  	} @@ -426,30 +442,30 @@ char *_alpm_fetch_pkgurl(char *target)  	/* strip path information from the filename */  	filename = strip_filename(server);  	if(!filename) { -		_alpm_log(PM_LOG_ERROR, _("URL does not contain a file for download")); +		_alpm_log(PM_LOG_ERROR, _("URL does not contain a file for download\n"));  		return(NULL);  	} -	/* do not download the file if it exists in the current dir */ -	if(stat(filename, &st) == 0) { -		_alpm_log(PM_LOG_DEBUG, _("%s has already been downloaded"), filename); -	} else { -		alpm_list_t *servers = alpm_list_add(NULL, server); -		alpm_list_t *files = alpm_list_add(NULL, filename); +	/* find a valid cache dir to download to */ +	cachedir = _alpm_filecache_setup(); -		if(_alpm_downloadfiles(servers, "./", files)) { -			_alpm_log(PM_LOG_WARNING, _("failed to download %s"), target); -			return(NULL); -		} -		_alpm_log(PM_LOG_DEBUG, _("successfully downloaded %s"), filename); -		alpm_list_free(files); -		alpm_list_free(servers); -	} +	/* TODO this seems like needless complexity just to download one file */ +	alpm_list_t *servers = alpm_list_add(NULL, server); +	alpm_list_t *files = alpm_list_add(NULL, filename); +	/* download the file */ +	if(_alpm_downloadfiles(servers, cachedir, files, NULL, 0)) { +		_alpm_log(PM_LOG_WARNING, _("failed to download %s\n"), url); +		return(NULL); +	} +	_alpm_log(PM_LOG_DEBUG, "successfully downloaded %s\n", filename); +	alpm_list_free(files); +	alpm_list_free(servers);  	_alpm_server_free(server); -	/* return the target with the raw filename, no URL */ -	return(filename); +	/* we should be able to find the file the second time around */ +	filepath = _alpm_filecache_find(filename); +	return(filepath);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/server.h b/lib/libalpm/server.h index 8c357ab2..08194d58 100644 --- a/lib/libalpm/server.h +++ b/lib/libalpm/server.h @@ -1,8 +1,8 @@  /*   *  server.h - *  + *   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_SERVER_H @@ -27,8 +27,6 @@  #include <time.h>  #include <download.h> -#define FREESERVER(p) do { if(p){_alpm_server_free(p); p = NULL;}} while(0) -  /* Servers */  struct __pmserver_t {  	/* useless abstraction now? */ @@ -38,12 +36,12 @@ struct __pmserver_t {  #define PM_DLBUF_LEN (1024 * 10)  pmserver_t *_alpm_server_new(const char *url); -void _alpm_server_free(void *data); -int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath, alpm_list_t *files); +void _alpm_server_free(pmserver_t *server); +int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath, +		alpm_list_t *files, int *dl_total, unsigned long totalsize);  int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, -	alpm_list_t *files, const char *mtime1, char *mtime2); - -char *_alpm_fetch_pkgurl(char *target); +	alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total, +	unsigned long totalsize);  #endif /* _ALPM_SERVER_H */ diff --git a/lib/libalpm/sha1.c b/lib/libalpm/sha1.c deleted file mode 100644 index fd5f1e4a..00000000 --- a/lib/libalpm/sha1.c +++ /dev/null @@ -1,419 +0,0 @@ -/* sha.c - Functions to compute SHA1 message digest of files or -   memory blocks according to the NIST specification FIPS-180-1. - -   Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. - -   This program is free software; you can redistribute it and/or modify it -   under the terms of the GNU General Public License as published by the -   Free Software Foundation; either version 2, or (at your option) any -   later version. - -   This program is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. - -   You should have received a copy of the GNU General Public License -   along with this program; if not, write to the Free Software Foundation, -   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */ - -/* Written by Scott G. Miller -   Credits: -      Robert Klep <robert@ilse.nl>  -- Expansion function fix -*/ - -#include "config.h" - -#include <sys/types.h> -#include <stdlib.h> -#include <string.h> -#include <libintl.h> - -/* libalpm */ -#include "sha1.h" -#include "alpm.h" -#include "log.h" -#include "util.h" - -/* -  Not-swap is a macro that does an endian swap on architectures that are -  big-endian, as SHA needs some data in a little-endian format -*/ - -#ifdef WORDS_BIGENDIAN -# define NOTSWAP(n) (n) -# define SWAP(n)							\ -    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) -#else -# define NOTSWAP(n)                                                         \ -    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) -# define SWAP(n) (n) -#endif - -#define BLOCKSIZE 4096 -/* Ensure that BLOCKSIZE is a multiple of 64.  */ -#if BLOCKSIZE % 64 != 0 -/* FIXME-someday (soon?): use #error instead of this kludge.  */ -"invalid BLOCKSIZE" -#endif - -/* This array contains the bytes used to pad the buffer to the next -   64-byte boundary.  (RFC 1321, 3.1: Step 1)  */ -static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ }; - - -/* Starting with the result of former calls of this function (or the -   initialization function update the context for the next LEN bytes -   starting at BUFFER. -   It is necessary that LEN is a multiple of 64!!! */ -static void sha_process_block (const void *buffer, size_t len, -			       struct sha_ctx *ctx); - -/* Starting with the result of former calls of this function (or the -   initialization function update the context for the next LEN bytes -   starting at BUFFER. -   It is NOT required that LEN is a multiple of 64.  */ -static void sha_process_bytes (const void *buffer, size_t len, -			       struct sha_ctx *ctx); - -/* Put result from CTX in first 20 bytes following RESBUF.  The result is -   always in little endian byte order, so that a byte-wise output yields -   to the wanted ASCII representation of the message digest. - -   IMPORTANT: On some systems it is required that RESBUF is correctly -   aligned for a 32 bits value.  */ -static void *sha_read_ctx (const struct sha_ctx *ctx, void *resbuf); - -/* -  Takes a pointer to a 160 bit block of data (five 32 bit ints) and -  intializes it to the start constants of the SHA1 algorithm.  This -  must be called before using hash in the call to sha_hash -*/ -static void -sha_init_ctx (struct sha_ctx *ctx) -{ -  ctx->A = 0x67452301; -  ctx->B = 0xefcdab89; -  ctx->C = 0x98badcfe; -  ctx->D = 0x10325476; -  ctx->E = 0xc3d2e1f0; - -  ctx->total[0] = ctx->total[1] = 0; -  ctx->buflen = 0; -} - -/* Put result from CTX in first 20 bytes following RESBUF.  The result -   must be in little endian byte order. - -   IMPORTANT: On some systems it is required that RESBUF is correctly -   aligned for a 32 bits value.  */ -static void * -sha_read_ctx (const struct sha_ctx *ctx, void *resbuf) -{ -  ((sha_uint32 *) resbuf)[0] = NOTSWAP (ctx->A); -  ((sha_uint32 *) resbuf)[1] = NOTSWAP (ctx->B); -  ((sha_uint32 *) resbuf)[2] = NOTSWAP (ctx->C); -  ((sha_uint32 *) resbuf)[3] = NOTSWAP (ctx->D); -  ((sha_uint32 *) resbuf)[4] = NOTSWAP (ctx->E); - -  return resbuf; -} - -/* Process the remaining bytes in the internal buffer and the usual -   prolog according to the standard and write the result to RESBUF. - -   IMPORTANT: On some systems it is required that RESBUF is correctly -   aligned for a 32 bits value.  */ -static void * -sha_finish_ctx (struct sha_ctx *ctx, void *resbuf) -{ -  /* Take yet unprocessed bytes into account.  */ -  sha_uint32 bytes = ctx->buflen; -  size_t pad; - -  /* Now count remaining bytes.  */ -  ctx->total[0] += bytes; -  if (ctx->total[0] < bytes) -    ++ctx->total[1]; - -  pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; -  memcpy (&ctx->buffer[bytes], fillbuf, pad); - -  /* Put the 64-bit file length in *bits* at the end of the buffer.  */ -  *(sha_uint32 *) &ctx->buffer[bytes + pad + 4] = NOTSWAP (ctx->total[0] << 3); -  *(sha_uint32 *) &ctx->buffer[bytes + pad] = NOTSWAP ((ctx->total[1] << 3) | -						    (ctx->total[0] >> 29)); - -  /* Process last bytes.  */ -  sha_process_block (ctx->buffer, bytes + pad + 8, ctx); - -  return sha_read_ctx (ctx, resbuf); -} - -static void -sha_process_bytes (const void *buffer, size_t len, struct sha_ctx *ctx) -{ -  /* When we already have some bits in our internal buffer concatenate -     both inputs first.  */ -  if (ctx->buflen != 0) -    { -      size_t left_over = ctx->buflen; -      size_t add = 128 - left_over > len ? len : 128 - left_over; - -      memcpy (&ctx->buffer[left_over], buffer, add); -      ctx->buflen += add; - -      if (ctx->buflen > 64) -	{ -	  sha_process_block (ctx->buffer, ctx->buflen & ~63, ctx); - -	  ctx->buflen &= 63; -	  /* The regions in the following copy operation cannot overlap.  */ -	  memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], -		  ctx->buflen); -	} - -      buffer = (const char *) buffer + add; -      len -= add; -    } - -  /* Process available complete blocks.  */ -  if (len >= 64) -    { -#if !_STRING_ARCH_unaligned -/* To check alignment gcc has an appropriate operator.  Other -   compilers don't.  */ -# if __GNUC__ >= 2 -#  define UNALIGNED_P(p) (((sha_uintptr) p) % __alignof__ (sha_uint32) != 0) -# else -#  define UNALIGNED_P(p) (((sha_uintptr) p) % sizeof (sha_uint32) != 0) -# endif -      if (UNALIGNED_P (buffer)) -	while (len > 64) -	  { -	    sha_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); -	    buffer = (const char *) buffer + 64; -	    len -= 64; -	  } -      else -#endif -	{ -	  sha_process_block (buffer, len & ~63, ctx); -	  buffer = (const char *) buffer + (len & ~63); -	  len &= 63; -	} -    } - -  /* Move remaining bytes in internal buffer.  */ -  if (len > 0) -    { -      size_t left_over = ctx->buflen; - -      memcpy (&ctx->buffer[left_over], buffer, len); -      left_over += len; -      if (left_over >= 64) -	{ -	  sha_process_block (ctx->buffer, 64, ctx); -	  left_over -= 64; -	  memcpy (ctx->buffer, &ctx->buffer[64], left_over); -	} -      ctx->buflen = left_over; -    } -} - -/* --- Code below is the primary difference between md5.c and sha.c --- */ - -/* SHA1 round constants */ -#define K1 0x5a827999L -#define K2 0x6ed9eba1L -#define K3 0x8f1bbcdcL -#define K4 0xca62c1d6L - -/* Round functions.  Note that F2 is the same as F4.  */ -#define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) ) -#define F2(B,C,D) (B ^ C ^ D) -#define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) ) -#define F4(B,C,D) (B ^ C ^ D) - -/* Process LEN bytes of BUFFER, accumulating context into CTX. -   It is assumed that LEN % 64 == 0. -   Most of this code comes from GnuPG's cipher/sha1.c.  */ - -static void -sha_process_block (const void *buffer, size_t len, struct sha_ctx *ctx) -{ -  const sha_uint32 *words = buffer; -  size_t nwords = len / sizeof (sha_uint32); -  const sha_uint32 *endp = words + nwords; -  sha_uint32 x[16]; -  sha_uint32 a = ctx->A; -  sha_uint32 b = ctx->B; -  sha_uint32 c = ctx->C; -  sha_uint32 d = ctx->D; -  sha_uint32 e = ctx->E; - -  /* First increment the byte count.  RFC 1321 specifies the possible -     length of the file up to 2^64 bits.  Here we only compute the -     number of bytes.  Do a double word increment.  */ -  ctx->total[0] += len; -  if (ctx->total[0] < len) -    ++ctx->total[1]; - -#define M(I) ( tm =   x[I&0x0f] ^ x[(I-14)&0x0f] \ -		    ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \ -	       , (x[I&0x0f] = rol(tm, 1)) ) - -#define R(A,B,C,D,E,F,K,M)  do { E += rol( A, 5 )     \ -				      + F( B, C, D )  \ -				      + K	      \ -				      + M;	      \ -				 B = rol( B, 30 );    \ -			       } while(0) - -  while (words < endp) -    { -      sha_uint32 tm; -      int t; -      /* FIXME: see sha1.c for a better implementation.  */ -      for (t = 0; t < 16; t++) -	{ -	  x[t] = NOTSWAP (*words); -	  words++; -	} - -      R( a, b, c, d, e, F1, K1, x[ 0] ); -      R( e, a, b, c, d, F1, K1, x[ 1] ); -      R( d, e, a, b, c, F1, K1, x[ 2] ); -      R( c, d, e, a, b, F1, K1, x[ 3] ); -      R( b, c, d, e, a, F1, K1, x[ 4] ); -      R( a, b, c, d, e, F1, K1, x[ 5] ); -      R( e, a, b, c, d, F1, K1, x[ 6] ); -      R( d, e, a, b, c, F1, K1, x[ 7] ); -      R( c, d, e, a, b, F1, K1, x[ 8] ); -      R( b, c, d, e, a, F1, K1, x[ 9] ); -      R( a, b, c, d, e, F1, K1, x[10] ); -      R( e, a, b, c, d, F1, K1, x[11] ); -      R( d, e, a, b, c, F1, K1, x[12] ); -      R( c, d, e, a, b, F1, K1, x[13] ); -      R( b, c, d, e, a, F1, K1, x[14] ); -      R( a, b, c, d, e, F1, K1, x[15] ); -      R( e, a, b, c, d, F1, K1, M(16) ); -      R( d, e, a, b, c, F1, K1, M(17) ); -      R( c, d, e, a, b, F1, K1, M(18) ); -      R( b, c, d, e, a, F1, K1, M(19) ); -      R( a, b, c, d, e, F2, K2, M(20) ); -      R( e, a, b, c, d, F2, K2, M(21) ); -      R( d, e, a, b, c, F2, K2, M(22) ); -      R( c, d, e, a, b, F2, K2, M(23) ); -      R( b, c, d, e, a, F2, K2, M(24) ); -      R( a, b, c, d, e, F2, K2, M(25) ); -      R( e, a, b, c, d, F2, K2, M(26) ); -      R( d, e, a, b, c, F2, K2, M(27) ); -      R( c, d, e, a, b, F2, K2, M(28) ); -      R( b, c, d, e, a, F2, K2, M(29) ); -      R( a, b, c, d, e, F2, K2, M(30) ); -      R( e, a, b, c, d, F2, K2, M(31) ); -      R( d, e, a, b, c, F2, K2, M(32) ); -      R( c, d, e, a, b, F2, K2, M(33) ); -      R( b, c, d, e, a, F2, K2, M(34) ); -      R( a, b, c, d, e, F2, K2, M(35) ); -      R( e, a, b, c, d, F2, K2, M(36) ); -      R( d, e, a, b, c, F2, K2, M(37) ); -      R( c, d, e, a, b, F2, K2, M(38) ); -      R( b, c, d, e, a, F2, K2, M(39) ); -      R( a, b, c, d, e, F3, K3, M(40) ); -      R( e, a, b, c, d, F3, K3, M(41) ); -      R( d, e, a, b, c, F3, K3, M(42) ); -      R( c, d, e, a, b, F3, K3, M(43) ); -      R( b, c, d, e, a, F3, K3, M(44) ); -      R( a, b, c, d, e, F3, K3, M(45) ); -      R( e, a, b, c, d, F3, K3, M(46) ); -      R( d, e, a, b, c, F3, K3, M(47) ); -      R( c, d, e, a, b, F3, K3, M(48) ); -      R( b, c, d, e, a, F3, K3, M(49) ); -      R( a, b, c, d, e, F3, K3, M(50) ); -      R( e, a, b, c, d, F3, K3, M(51) ); -      R( d, e, a, b, c, F3, K3, M(52) ); -      R( c, d, e, a, b, F3, K3, M(53) ); -      R( b, c, d, e, a, F3, K3, M(54) ); -      R( a, b, c, d, e, F3, K3, M(55) ); -      R( e, a, b, c, d, F3, K3, M(56) ); -      R( d, e, a, b, c, F3, K3, M(57) ); -      R( c, d, e, a, b, F3, K3, M(58) ); -      R( b, c, d, e, a, F3, K3, M(59) ); -      R( a, b, c, d, e, F4, K4, M(60) ); -      R( e, a, b, c, d, F4, K4, M(61) ); -      R( d, e, a, b, c, F4, K4, M(62) ); -      R( c, d, e, a, b, F4, K4, M(63) ); -      R( b, c, d, e, a, F4, K4, M(64) ); -      R( a, b, c, d, e, F4, K4, M(65) ); -      R( e, a, b, c, d, F4, K4, M(66) ); -      R( d, e, a, b, c, F4, K4, M(67) ); -      R( c, d, e, a, b, F4, K4, M(68) ); -      R( b, c, d, e, a, F4, K4, M(69) ); -      R( a, b, c, d, e, F4, K4, M(70) ); -      R( e, a, b, c, d, F4, K4, M(71) ); -      R( d, e, a, b, c, F4, K4, M(72) ); -      R( c, d, e, a, b, F4, K4, M(73) ); -      R( b, c, d, e, a, F4, K4, M(74) ); -      R( a, b, c, d, e, F4, K4, M(75) ); -      R( e, a, b, c, d, F4, K4, M(76) ); -      R( d, e, a, b, c, F4, K4, M(77) ); -      R( c, d, e, a, b, F4, K4, M(78) ); -      R( b, c, d, e, a, F4, K4, M(79) ); - -      a = ctx->A += a; -      b = ctx->B += b; -      c = ctx->C += c; -      d = ctx->D += d; -      e = ctx->E += e; -    } -} - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - - -char* _alpm_SHAFile(char *filename) { -	FILE *file; -	struct sha_ctx context; -	int len, i; -	char hex[3]; -	unsigned char buffer[1024], digest[20]; -	char *ret; - -	ALPM_LOG_FUNC; - -	if((file = fopen(filename, "rb")) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("sha1: %s can't be opened\n"), filename); -	} else { -		sha_init_ctx(&context); -		while((len = fread(buffer, 1, 1024, file))) { -			sha_process_bytes(buffer, len, &context); -		} -		sha_finish_ctx(&context, digest); -		fclose(file); - -		ret = (char*)malloc(41); -		ret[0] = '\0'; -		for(i = 0; i < 20; i++) { -			snprintf(hex, 3, "%02x", digest[i]); -			strncat(ret, hex, 2); -		} -		_alpm_log(PM_LOG_DEBUG, _("sha1(%s) = %s"), filename, ret); -		return(ret); -	} - -	return(NULL); -} - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/sha1.h b/lib/libalpm/sha1.h deleted file mode 100644 index fc0aa230..00000000 --- a/lib/libalpm/sha1.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Declarations of functions and data types used for SHA1 sum -   library functions. -   Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. - -   This program is free software; you can redistribute it and/or modify it -   under the terms of the GNU General Public License as published by the -   Free Software Foundation; either version 2, or (at your option) any -   later version. - -   This program is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. - -   You should have received a copy of the GNU General Public License -   along with this program; if not, write to the Free Software Foundation, -   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */ -#ifndef _ALPM_SHA1_H -#define _ALPM_SHA1_H - -#include <stdio.h> -#include <limits.h> - -#define rol(x,n) ( ((x) << (n)) | ((x) >> (32 -(n))) ) -/* TODO check this comment */ -/* The code below is from md5.h (from coreutils), little modifications */ -#define UINT_MAX_32_BITS 4294967295U - -/* This new ifdef allows splint to not fail on its static code check */ -#ifdef S_SPLINT_S -		typedef unsigned int sha_uint32; -#else -#if UINT_MAX == UINT_MAX_32_BITS -    typedef unsigned int sha_uint32; -#else -#if USHRT_MAX == UINT_MAX_32_BITS -    typedef unsigned short sha_uint32; -#else -#if ULONG_MAX == UINT_MAX_32_BITS -    typedef unsigned long sha_uint32; -#else -    /* The following line is intended to evoke an error. Using #error is not portable enough.  */ -#error "Cannot determine unsigned 32-bit data type" -#endif /* ULONG_MAX */ -#endif /* USHRT_MAX */ -#endif /* UINT_MAX */ -#endif /* S_SPLINT_S */ -/* We have to make a guess about the integer type equivalent in size -   to pointers which should always be correct.  */ -typedef unsigned long int sha_uintptr; - -/* Structure to save state of computation between the single steps.  */ -struct sha_ctx -{ -  sha_uint32 A; -  sha_uint32 B; -  sha_uint32 C; -  sha_uint32 D; -  sha_uint32 E; - -  sha_uint32 total[2]; -  sha_uint32 buflen; -  char buffer[128]; -}; - - -/* Needed for pacman */ -char *_alpm_SHAFile (char *); - -#endif /* _ALPM_SHA1_H */ - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 8405bbfb..065340c9 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -1,11 +1,11 @@  /*   *  sync.c - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -28,12 +28,9 @@  #include <stdio.h>  #include <fcntl.h>  #include <string.h> +#include <unistd.h>  #include <time.h> -#ifdef CYGWIN -#include <limits.h> /* PATH_MAX */ -#endif  #include <dirent.h> -#include <libintl.h>  /* libalpm */  #include "sync.h" @@ -45,17 +42,12 @@  #include "cache.h"  #include "deps.h"  #include "conflict.h" -#include "provide.h"  #include "trans.h"  #include "util.h" -#include "versioncmp.h"  #include "handle.h" -#include "util.h"  #include "alpm.h" -#include "md5.h" -#include "sha1.h" -#include "handle.h"  #include "server.h" +#include "delta.h"  pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data)  { @@ -63,48 +55,64 @@ pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data)  	ALPM_LOG_FUNC; -	if((sync = (pmsyncpkg_t *)malloc(sizeof(pmsyncpkg_t))) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmsyncpkg_t)); -		return(NULL); -	} +	CALLOC(sync, 1, sizeof(pmsyncpkg_t), RET_ERR(PM_ERR_MEMORY, NULL));  	sync->type = type;  	sync->pkg = spkg;  	sync->data = data; -	 +  	return(sync);  } -void _alpm_sync_free(void *data) +void _alpm_sync_free(pmsyncpkg_t *sync)  { -	pmsyncpkg_t *sync = data; -  	ALPM_LOG_FUNC;  	if(sync == NULL) {  		return;  	} +	/* TODO wow this is ugly */  	if(sync->type == PM_SYNC_TYPE_REPLACE) { -		FREELISTPKGS(sync->data); +		alpm_list_free_inner(sync->data, (alpm_list_fn_free)_alpm_pkg_free); +		alpm_list_free(sync->data); +		sync->data = NULL;  	} else { -		FREEPKG(sync->data); +		_alpm_pkg_free(sync->data); +		sync->data = NULL;  	}  	FREE(sync);  } +static void synclist_free(alpm_list_t *syncpkgs) +{ +	if(syncpkgs) { +		alpm_list_t *tmp; +		for(tmp = syncpkgs; tmp; tmp = alpm_list_next(tmp)) { +			if(tmp->data) { +				_alpm_sync_free(tmp->data); +			} +		} +		alpm_list_free(syncpkgs); +	} + +} +  /* Find recommended replacements for packages during a sync. - * (refactored from _alpm_sync_prepare)   */  static int find_replacements(pmtrans_t *trans, pmdb_t *db_local, -														 alpm_list_t *dbs_sync) +		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs)  {  	alpm_list_t *i, *j, *k; /* wow */  	ALPM_LOG_FUNC; +	if(syncpkgs == NULL) { +		return(-1); +	} +  	/* check for "recommended" package replacements */ -	_alpm_log(PM_LOG_DEBUG, _("checking for package replacements")); +	_alpm_log(PM_LOG_DEBUG, "checking for package replacements\n");  	for(i = dbs_sync; i; i = i->next) {  		pmdb_t *db = i->data; @@ -114,136 +122,156 @@ static int find_replacements(pmtrans_t *trans, pmdb_t *db_local,  			for(k = alpm_pkg_get_replaces(spkg); k; k = k->next) {  				const char *replacement = k->data; -				 +  				pmpkg_t *lpkg = _alpm_db_get_pkgfromcache(db_local, replacement);  				if(!lpkg) {  					continue;  				} -				_alpm_log(PM_LOG_DEBUG, _("checking replacement '%s' for package '%s'"), replacement, spkg->name); -				if(alpm_list_find_str(handle->ignorepkg, lpkg->name)) { -					_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (to be replaced by %s-%s)"), +				_alpm_log(PM_LOG_DEBUG, "checking replacement '%s' for package '%s'\n", +						replacement, spkg->name); +				/* ignore if EITHER the local or replacement package are to be ignored */ +				if(_alpm_pkg_should_ignore(spkg) || _alpm_pkg_should_ignore(lpkg)) { +					_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"),  										alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg),  										alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));  				} else {  					/* get confirmation for the replacement */ -					int doreplace = 0; -					QUESTION(trans, PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, db->treename, &doreplace); +					if(trans) { +						int doreplace = 0; +						QUESTION(trans, PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, db->treename, &doreplace); +						if(!doreplace) { +							continue; +						} +					} -					if(doreplace) { -						/* if confirmed, add this to the 'final' list, designating 'lpkg' as -						 * the package to replace. -						 */ -						pmsyncpkg_t *sync; -						pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL); -						if(dummy == NULL) { +					/* if confirmed, add this to the 'final' list, designating 'lpkg' as +					 * the package to replace. +					 */ +					pmsyncpkg_t *sync; +					pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL); +					if(dummy == NULL) { +						pm_errno = PM_ERR_MEMORY; +						synclist_free(*syncpkgs); +						return(-1); +					} +					/* check if spkg->name is already in the packages list. */ +					sync = _alpm_sync_find(*syncpkgs, alpm_pkg_get_name(spkg)); +					if(sync) { +						/* found it -- just append to the replaces list */ +						sync->data = alpm_list_add(sync->data, dummy); +					} else { +						/* none found -- enter pkg into the final sync list */ +						sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL); +						if(sync == NULL) { +							_alpm_pkg_free(dummy);  							pm_errno = PM_ERR_MEMORY; -							goto error; +							synclist_free(*syncpkgs); +							return(-1);  						} -						dummy->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(lpkg)); -						/* check if spkg->name is already in the packages list. */ -						sync = _alpm_sync_find(trans->packages, alpm_pkg_get_name(spkg)); -						if(sync) { -							/* found it -- just append to the replaces list */ -							sync->data = alpm_list_add(sync->data, dummy); -						} else { -							/* none found -- enter pkg into the final sync list */ -							sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL); -							if(sync == NULL) { -								FREEPKG(dummy); -								pm_errno = PM_ERR_MEMORY; -								goto error; -							} -							sync->data = alpm_list_add(NULL, dummy); -							trans->packages = alpm_list_add(trans->packages, sync); -						} -						_alpm_log(PM_LOG_DEBUG, _("%s-%s elected for upgrade (to be replaced by %s-%s)"), -											alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg), -											alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg)); +						sync->data = alpm_list_add(NULL, dummy); +						*syncpkgs = alpm_list_add(*syncpkgs, sync);  					} +					_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (to be replaced by %s-%s)\n", +							alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg), +							alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));  				}  			}  		}  	}  	return(0); -error: -	return(-1);  } -/* TODO reimplement this in terms of alpm_get_upgrades */ -int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync) +/** Get a list of upgradable packages on the current system + * Adds out of date packages to *list. + * @arg list pointer to a list of pmsyncpkg_t. + */ +int SYMEXPORT alpm_sync_sysupgrade(pmdb_t *db_local, +		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs) +{ +	return(_alpm_sync_sysupgrade(NULL, db_local, dbs_sync, syncpkgs)); +} + +int _alpm_sync_sysupgrade(pmtrans_t *trans, +		pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **syncpkgs)  {  	alpm_list_t *i, *j;  	ALPM_LOG_FUNC; +	if(syncpkgs == NULL) { +		return(-1); +	}  	/* check for "recommended" package replacements */ -	if(find_replacements(trans, db_local, dbs_sync) == 0) { -		/* match installed packages with the sync dbs and compare versions */ -		_alpm_log(PM_LOG_DEBUG, _("checking for package upgrades")); -		for(i = _alpm_db_get_pkgcache(db_local); i; i = i->next) { -			int replace=0; -			pmpkg_t *local = i->data; -			pmpkg_t *spkg = NULL; -			pmsyncpkg_t *sync; - -			for(j = dbs_sync; !spkg && j; j = j->next) { -				spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local)); -			} -			if(spkg == NULL) { -				_alpm_log(PM_LOG_DEBUG, _("'%s' not found in sync db -- skipping"), alpm_pkg_get_name(local)); -				continue; -			} +	if(find_replacements(trans, db_local, dbs_sync, syncpkgs)) { +		return(-1); +	} -			/* we don't care about a to-be-replaced package's newer version */ -			for(j = trans->packages; j && !replace; j=j->next) { -				sync = j->data; -				if(sync->type == PM_SYNC_TYPE_REPLACE) { -					if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) { -						replace=1; -					} +	/* match installed packages with the sync dbs and compare versions */ +	_alpm_log(PM_LOG_DEBUG, "checking for package upgrades\n"); +	for(i = _alpm_db_get_pkgcache(db_local); i; i = i->next) { +		int replace = 0; +		pmpkg_t *local = i->data; +		pmpkg_t *spkg = NULL; +		pmsyncpkg_t *sync; + +		for(j = dbs_sync; !spkg && j; j = j->next) { +			spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local)); +		} +		if(spkg == NULL) { +			_alpm_log(PM_LOG_DEBUG, "'%s' not found in sync db -- skipping\n", +					alpm_pkg_get_name(local)); +			continue; +		} + +		/* we don't care about a to-be-replaced package's newer version */ +		for(j = *syncpkgs; j && !replace; j=j->next) { +			sync = j->data; +			if(sync->type == PM_SYNC_TYPE_REPLACE) { +				if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) { +					replace = 1;  				}  			} -			if(replace) { -				_alpm_log(PM_LOG_DEBUG, _("'%s' is already elected for removal -- skipping"), -									alpm_pkg_get_name(local)); -				continue; -			} +		} +		if(replace) { +			_alpm_log(PM_LOG_DEBUG, "'%s' is already elected for removal -- skipping\n", +					alpm_pkg_get_name(local)); +			continue; +		} -			/* compare versions and see if we need to upgrade */ -			if(alpm_pkg_compare_versions(local, spkg)) { -				_alpm_log(PM_LOG_DEBUG, _("%s-%s elected for upgrade (%s => %s)"), -									alpm_pkg_get_name(local), alpm_pkg_get_version(local), -									alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg)); -				if(!_alpm_sync_find(trans->packages, alpm_pkg_get_name(spkg))) { -					/* If package is in the ignorepkg list, ask before we add it to -					 * the transaction */ -					if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(local))) { -						int resp = 0; -						QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, local, NULL, NULL, &resp); -						if(!resp) { -							continue; -						} -					} -					pmpkg_t *tmp = _alpm_pkg_dup(local); -					if(tmp == NULL) { -						goto error; -					} -					sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, tmp); -					if(sync == NULL) { -						FREEPKG(tmp); -						goto error; -					} -					trans->packages = alpm_list_add(trans->packages, sync); +		/* compare versions and see if we need to upgrade */ +		if(alpm_pkg_compare_versions(local, spkg)) { +			_alpm_log(PM_LOG_DEBUG, "%s elected for upgrade (%s => %s)\n", +					alpm_pkg_get_name(local), alpm_pkg_get_version(local), +					alpm_pkg_get_version(spkg)); +			if(!_alpm_sync_find(*syncpkgs, alpm_pkg_get_name(spkg))) { +				/* If package is in the ignorepkg list, skip it */ +				if(_alpm_pkg_should_ignore(spkg)) { +					_alpm_log(PM_LOG_WARNING, _("%s: ignoring package upgrade (%s => %s)\n"), +							alpm_pkg_get_name(local), alpm_pkg_get_version(local), +							alpm_pkg_get_version(spkg)); +					continue; +				} + +				pmpkg_t *tmp = _alpm_pkg_dup(local); +				if(tmp == NULL) { +					pm_errno = PM_ERR_MEMORY; +					synclist_free(*syncpkgs); +					return(-1); +				} +				sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, tmp); +				if(sync == NULL) { +					_alpm_pkg_free(tmp); +					pm_errno = PM_ERR_MEMORY; +					synclist_free(*syncpkgs); +					return(-1);  				} +				*syncpkgs = alpm_list_add(*syncpkgs, sync);  			}  		} - -		return(0);  	} -error: -	/* if we're here, it's an error */ -	return(-1); + +	return(0);  }  int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, char *name) @@ -262,12 +290,13 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));  	ASSERT(name != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	STRNCPY(targline, name, PKG_FULLNAME_LEN); +	strncpy(targline, name, PKG_FULLNAME_LEN);  	targ = strchr(targline, '/');  	if(targ) { +		/* we are looking for a package in a specific database */  		*targ = '\0';  		targ++; -		_alpm_log(PM_LOG_DEBUG, _("searching for target in repo '%s'"), targ); +		_alpm_log(PM_LOG_DEBUG, "searching for target '%s' in repo\n", targ);  		for(j = dbs_sync; j && !spkg; j = j->next) {  			pmdb_t *db = j->data;  			if(strcmp(db->treename, targline) == 0) { @@ -275,19 +304,20 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  				spkg = _alpm_db_get_pkgfromcache(db, targ);  				if(spkg == NULL) {  					/* Search provides */ -					_alpm_log(PM_LOG_DEBUG, _("target '%s' not found -- looking for provisions"), targ); +					_alpm_log(PM_LOG_DEBUG, "target '%s' not found in db '%s' -- looking for provisions\n", targ, db->treename);  					alpm_list_t *p = _alpm_db_whatprovides(db, targ);  					if(!p) {  						RET_ERR(PM_ERR_PKG_NOT_FOUND, -1);  					} -					_alpm_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s'"), p->data, targ); -					spkg = _alpm_db_get_pkgfromcache(db, p->data); -					FREELISTPTR(p); +					spkg = (pmpkg_t *) p->data; +					_alpm_log(PM_LOG_DEBUG, "found '%s' as a provision for '%s'\n", +							alpm_pkg_get_name(spkg), targ); +					alpm_list_free(p);  				}  			}  		}  		if(!repo_found) { -			_alpm_log(PM_LOG_ERROR, _("repository '%s' not found"), targline); +			_alpm_log(PM_LOG_ERROR, _("repository '%s' not found\n"), targline);  			RET_ERR(PM_ERR_PKG_REPO_NOT_FOUND, -1);  		}  	} else { @@ -298,14 +328,15 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  		}  		if(spkg == NULL) {  			/* Search provides */ -			_alpm_log(PM_LOG_DEBUG, _("target '%s' not found -- looking for provisions"), targ); +			_alpm_log(PM_LOG_DEBUG, "target '%s' not found -- looking for provisions\n", targ);  			for(j = dbs_sync; j && !spkg; j = j->next) {  				pmdb_t *db = j->data;  				alpm_list_t *p = _alpm_db_whatprovides(db, targ);  				if(p) { -					_alpm_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s'"), p->data, targ); -					spkg = _alpm_db_get_pkgfromcache(db, p->data); -					FREELISTPTR(p); +					spkg = (pmpkg_t *) p->data; +					_alpm_log(PM_LOG_DEBUG, "found '%s' as a provision for '%s' in db '%s'\n", +							alpm_pkg_get_name(spkg), targ, db->treename); +					alpm_list_free(p);  				}  			}  		} @@ -318,20 +349,14 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  	local = _alpm_db_get_pkgfromcache(db_local, alpm_pkg_get_name(spkg));  	if(local) {  		if(alpm_pkg_compare_versions(local, spkg) == 0) { -			/* spkg is NOT an upgrade, get confirmation before adding */ -			int resp = 0; -			if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(local))) { -				QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, local, NULL, NULL, &resp); -				if(!resp) { -					return(0); -				} -			} else if(!(trans->flags & PM_TRANS_FLAG_PRINTURIS)) { -				QUESTION(trans, PM_TRANS_CONV_LOCAL_UPTODATE, local, NULL, NULL, &resp); -				if(!resp) { -					_alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- skipping"), -										alpm_pkg_get_name(local), alpm_pkg_get_version(local)); -					return(0); -				} +			/* spkg is NOT an upgrade */ +			if(trans->flags & PM_TRANS_FLAG_NEEDED) { +				_alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- skipping\n"), +						alpm_pkg_get_name(local), alpm_pkg_get_version(local)); +				return(0); +			} else { +				_alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- reinstalling\n"), +						alpm_pkg_get_name(local), alpm_pkg_get_version(local));  			}  		}  	} @@ -348,10 +373,10 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  		}  		sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, dummy);  		if(sync == NULL) { -			FREEPKG(dummy); +			_alpm_pkg_free(dummy);  			RET_ERR(PM_ERR_MEMORY, -1);  		} -		_alpm_log(PM_LOG_DEBUG, _("adding target '%s' to the transaction set"), +		_alpm_log(PM_LOG_DEBUG, "adding target '%s' to the transaction set\n",  							alpm_pkg_get_name(spkg));  		trans->packages = alpm_list_add(trans->packages, sync);  	} @@ -363,8 +388,8 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy   */  static int syncpkg_cmp(const void *s1, const void *s2)  { -	pmsyncpkg_t *sp1 = (pmsyncpkg_t *)s1; -	pmsyncpkg_t *sp2 = (pmsyncpkg_t *)s2; +	const pmsyncpkg_t *sp1 = s1; +	const pmsyncpkg_t *sp2 = s2;  	pmpkg_t *p1, *p2;    p1 = alpm_sync_get_pkg(sp1); @@ -376,10 +401,8 @@ static int syncpkg_cmp(const void *s1, const void *s2)  int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **data)  {  	alpm_list_t *deps = NULL; -	alpm_list_t *list = NULL; /* list allowing checkdeps usage with data from trans->packages */ -	alpm_list_t *trail = NULL; /* breadcrumb list to avoid running into circles */ -	alpm_list_t *asked = NULL;  -	alpm_list_t *i, *j, *k, *l; +	alpm_list_t *list = NULL, *remove = NULL; /* allow checkdeps usage with trans->packages */ +	alpm_list_t *i, *j;  	int ret = 0;  	ALPM_LOG_FUNC; @@ -391,24 +414,42 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  		*data = NULL;  	} -	for(i = trans->packages; i; i = i->next) { -		pmsyncpkg_t *sync = i->data; -		list = alpm_list_add(list, sync->pkg); +	if(!(trans->flags & PM_TRANS_FLAG_DEPENDSONLY)) { +		for(i = trans->packages; i; i = i->next) { +			pmsyncpkg_t *sync = i->data; +			list = alpm_list_add(list, sync->pkg); +		}  	}  	if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) {  		/* Resolve targets dependencies */  		EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_START, NULL, NULL); -		_alpm_log(PM_LOG_DEBUG, _("resolving target's dependencies")); +		_alpm_log(PM_LOG_DEBUG, "resolving target's dependencies\n"); + +		/* build remove list for resolvedeps */ +		for(i = trans->packages; i; i = i->next) { +			pmsyncpkg_t *sync = i->data; +			if(sync->type == PM_SYNC_TYPE_REPLACE) { +				for(j = sync->data; j; j = j->next) { +					remove = alpm_list_add(remove, j->data); +				} +			} +		} +  		for(i = trans->packages; i; i = i->next) {  			pmpkg_t *spkg = ((pmsyncpkg_t *)i->data)->pkg; -			if(_alpm_resolvedeps(db_local, dbs_sync, spkg, list, trail, trans, data) == -1) { +			if(_alpm_resolvedeps(db_local, dbs_sync, spkg, &list, +						remove, trans, data) == -1) {  				/* pm_errno is set by resolvedeps */  				ret = -1;  				goto cleanup;  			}  		} +		if((trans->flags & PM_TRANS_FLAG_DEPENDSONLY)) { +			FREELIST(trans->packages); +		} +  		for(i = list; i; i = i->next) {  			/* add the dependencies found by resolvedeps to the transaction set */  			pmpkg_t *spkg = i->data; @@ -419,60 +460,27 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  					goto cleanup;  				}  				trans->packages = alpm_list_add(trans->packages, sync); -				_alpm_log(PM_LOG_DEBUG, _("adding package %s-%s to the transaction targets"), +				_alpm_log(PM_LOG_DEBUG, "adding package %s-%s to the transaction targets\n",  									alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg)); -			} else { -				/* remove the original targets from the list if requested */ -				if((trans->flags & PM_TRANS_FLAG_DEPENDSONLY)) { -					void *vpkg; -					pmsyncpkg_t *sync; -					const char *pkgname; - -					pkgname = alpm_pkg_get_name(spkg); -					_alpm_log(PM_LOG_DEBUG, "removing package %s-%s from the transaction targets", -										pkgname, alpm_pkg_get_version(spkg)); - -					sync = _alpm_sync_find(trans->packages, pkgname); -					trans->packages = alpm_list_remove(trans->packages, sync, syncpkg_cmp, &vpkg); -					FREESYNC(vpkg); -				}  			}  		}  		/* re-order w.r.t. dependencies */ -		k = l = NULL; -		for(i=trans->packages; i; i=i->next) { -			pmsyncpkg_t *s = (pmsyncpkg_t*)i->data; -			k = alpm_list_add(k, s->pkg); -		} -		k = _alpm_sortbydeps(k, PM_TRANS_TYPE_ADD); -		for(i=k; i; i=i->next) { -			for(j=trans->packages; j; j=j->next) { -				pmsyncpkg_t *s = (pmsyncpkg_t*)j->data; -				if(s->pkg==i->data) { -					l = alpm_list_add(l, s); +		alpm_list_t *sortlist = _alpm_sortbydeps(list, PM_TRANS_TYPE_ADD); +		alpm_list_t *newpkgs = NULL; +		for(i = sortlist; i; i = i->next) { +			for(j = trans->packages; j; j = j->next) { +				pmsyncpkg_t *s = j->data; +				if(s->pkg == i->data) { +					newpkgs = alpm_list_add(newpkgs, s);  				}  			}  		} -		FREELISTPTR(k); -		FREELISTPTR(trans->packages); -		trans->packages = l; +		alpm_list_free(sortlist); +		alpm_list_free(trans->packages); +		trans->packages = newpkgs;  		EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_DONE, NULL, NULL); - -		_alpm_log(PM_LOG_DEBUG, _("looking for unresolvable dependencies")); -		deps = _alpm_checkdeps(trans, db_local, PM_TRANS_TYPE_UPGRADE, list); -		if(deps) { -			if(data) { -				*data = deps; -				deps = NULL; -			} -			pm_errno = PM_ERR_UNSATISFIED_DEPS; -			ret = -1; -			goto cleanup; -		} - -		FREELISTPTR(trail);  	}  	/* We don't care about conflicts if we're just printing uris */ @@ -480,58 +488,52 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  		/* check for inter-conflicts and whatnot */  		EVENT(trans, PM_TRANS_EVT_INTERCONFLICTS_START, NULL, NULL); -		_alpm_log(PM_LOG_DEBUG, _("looking for conflicts")); +		_alpm_log(PM_LOG_DEBUG, "looking for conflicts\n");  		deps = _alpm_checkconflicts(db_local, list);  		if(deps) {  			int errorout = 0; +			alpm_list_t *asked = NULL; +			pmconflict_t *conflict = NULL;  			for(i = deps; i && !errorout; i = i->next) { -				pmdepmissing_t *miss = i->data; -				int found = 0;  				pmsyncpkg_t *sync; -				pmpkg_t *local; +				pmpkg_t *found = NULL; -				_alpm_log(PM_LOG_DEBUG, _("package '%s' conflicts with '%s'"), -				          miss->target, miss->depend.name); - -				/* check if the conflicting package is one that's about to be removed/replaced. -				 * if so, then just ignore it -				 */ +				conflict = i->data; +				_alpm_log(PM_LOG_DEBUG, "package '%s' conflicts with '%s'\n", +						conflict->package1, conflict->package2); +				/* check if the conflicting package is about to be removed/replaced. +				 * if so, then just ignore it. */  				for(j = trans->packages; j && !found; j = j->next) {  					sync = j->data;  					if(sync->type == PM_SYNC_TYPE_REPLACE) { -						if(_alpm_pkg_find(miss->depend.name, sync->data)) { -							found = 1; -						} +						found = _alpm_pkg_find(conflict->package2, sync->data);  					}  				}  				if(found) { -					_alpm_log(PM_LOG_DEBUG, _("'%s' is already elected for removal -- skipping"), -							miss->depend.name); +					_alpm_log(PM_LOG_DEBUG, "'%s' is already elected for removal -- skipping\n", +							alpm_pkg_get_name(found));  					continue;  				} -				sync = _alpm_sync_find(trans->packages, miss->target); +				sync = _alpm_sync_find(trans->packages, conflict->package1);  				if(sync == NULL) { -					_alpm_log(PM_LOG_DEBUG, _("'%s' not found in transaction set -- skipping"), -					          miss->target); +					_alpm_log(PM_LOG_DEBUG, "'%s' not found in transaction set -- skipping\n", +					          conflict->package1);  					continue;  				} -				local = _alpm_db_get_pkgfromcache(db_local, miss->depend.name); -				/* check if this package also "provides" the package it's conflicting with -				 */ -				if(alpm_list_find_str(alpm_pkg_get_provides(sync->pkg), miss->depend.name)) { -					/* so just treat it like a "replaces" item so the REQUIREDBY -					 * fields are inherited properly. -					 */ -					_alpm_log(PM_LOG_DEBUG, _("package '%s' provides its own conflict"), miss->target); -					if(local) { -						/* nothing to do for now: it will be handled later -						 * (not the same behavior as in pacman 2.x) */ -					} else { +				pmpkg_t *local = _alpm_db_get_pkgfromcache(db_local, conflict->package2); +				/* check if this package provides the package it's conflicting with */ +				if(alpm_list_find(alpm_pkg_get_provides(sync->pkg), +							conflict->package2, _alpm_prov_cmp)) { +					/* treat like a replaces item so requiredby fields are +					 * inherited properly. */ +					_alpm_log(PM_LOG_DEBUG, "package '%s' provides its own conflict\n", +							conflict->package1); +					if(!local) {  						char *rmpkg = NULL; -						int target, depend; -						/* hmmm, depend.name isn't installed, so it must be conflicting +						void *target, *depend; +						/* hmmm, package2 isn't installed, so it must be conflicting  						 * with another package in our final list.  For example:  						 *  						 *     pacman -S blackbox xfree86 @@ -542,226 +544,422 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  						 * opting for xfree86 instead.  						 */ -						/* figure out which one was requested in targets.  If they both were, -						 * then it's still an unresolvable conflict. */ -						target = alpm_list_find_str(trans->targets, miss->target); -						depend = alpm_list_find_str(trans->targets, miss->depend.name); +						/* figure out which one was requested in targets. If they both +						 * were, then it's still an unresolvable conflict. */ +						target = alpm_list_find_str(trans->targets, conflict->package1); +						depend = alpm_list_find_str(trans->targets, conflict->package2);  						if(depend && !target) { -							_alpm_log(PM_LOG_DEBUG, _("'%s' is in the target list -- keeping it"), -								miss->depend.name); -							/* remove miss->target */ -							rmpkg = miss->target; +							_alpm_log(PM_LOG_DEBUG, "'%s' is in the target list -- keeping it\n", +								conflict->package2); +							/* remove conflict->package1 */ +							rmpkg = conflict->package1;  						} else if(target && !depend) { -							_alpm_log(PM_LOG_DEBUG, _("'%s' is in the target list -- keeping it"), -								miss->target); -							/* remove miss->depend.name */ -							rmpkg = miss->depend.name; +							_alpm_log(PM_LOG_DEBUG, "'%s' is in the target list -- keeping it\n", +								conflict->package1); +							/* remove conflict->package2 */ +							rmpkg = conflict->package2;  						} else { -							/* miss->depend.name is not needed, miss->target already provides +							/* miss->target2 is not needed, miss->target already provides  							 * it, let's resolve the conflict */ -							rmpkg = miss->depend.name; +							rmpkg = conflict->package2;  						}  						if(rmpkg) {  							pmsyncpkg_t *rsync = _alpm_sync_find(trans->packages, rmpkg);  							void *vpkg; -							_alpm_log(PM_LOG_DEBUG, _("removing '%s' from target list"), rsync->pkg->name); -							trans->packages = alpm_list_remove(trans->packages, rsync, syncpkg_cmp, &vpkg); -							FREESYNC(vpkg); +							_alpm_log(PM_LOG_DEBUG, "removing '%s' from target list\n", +									rsync->pkg->name); +							trans->packages = alpm_list_remove(trans->packages, rsync, +									syncpkg_cmp, &vpkg); +							_alpm_sync_free(vpkg);  							continue;  						}  					}  				} -				/* It's a conflict -- see if they want to remove it -				*/ -				_alpm_log(PM_LOG_DEBUG, _("resolving package '%s' conflict"), miss->target); +				/* It's a conflict -- see if they want to remove it */ +				_alpm_log(PM_LOG_DEBUG, "resolving package '%s' conflict\n", +						conflict->package1);  				if(local) {  					int doremove = 0; -					if(!alpm_list_find_str(asked, miss->depend.name)) { -						QUESTION(trans, PM_TRANS_CONV_CONFLICT_PKG, miss->target, miss->depend.name, NULL, &doremove); -						asked = alpm_list_add(asked, strdup(miss->depend.name)); +					if(!alpm_list_find_str(asked, conflict->package2)) { +						QUESTION(trans, PM_TRANS_CONV_CONFLICT_PKG, conflict->package1, +								conflict->package2, NULL, &doremove); +						asked = alpm_list_add(asked, strdup(conflict->package2));  						if(doremove) { -							pmsyncpkg_t *rsync = _alpm_sync_find(trans->packages, miss->depend.name); -							pmpkg_t *q = _alpm_pkg_new(miss->depend.name, NULL); -							if(q == NULL) { -								if(data) { -									FREELIST(*data); -								} -								ret = -1; -								goto cleanup; -							} -							q->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(local)); +							pmpkg_t *q = _alpm_pkg_dup(local);  							if(sync->type != PM_SYNC_TYPE_REPLACE) {  								/* switch this sync type to REPLACE */  								sync->type = PM_SYNC_TYPE_REPLACE; -								FREEPKG(sync->data); +								_alpm_pkg_free(sync->data); +								sync->data = NULL;  							}  							/* append to the replaces list */ -							_alpm_log(PM_LOG_DEBUG, _("electing '%s' for removal"), miss->depend.name); +							_alpm_log(PM_LOG_DEBUG, "electing '%s' for removal\n", +									conflict->package2);  							sync->data = alpm_list_add(sync->data, q); +							/* see if the package is in the current target list */ +							pmsyncpkg_t *rsync = _alpm_sync_find(trans->packages, +									conflict->package2);  							if(rsync) {  								/* remove it from the target list */  								void *vpkg; -								_alpm_log(PM_LOG_DEBUG, _("removing '%s' from target list"), miss->depend.name); -								trans->packages = alpm_list_remove(trans->packages, rsync, syncpkg_cmp, &vpkg); -								FREESYNC(vpkg); +								_alpm_log(PM_LOG_DEBUG, "removing '%s' from target list\n", +										conflict->package2); +								trans->packages = alpm_list_remove(trans->packages, rsync, +										syncpkg_cmp, &vpkg); +								_alpm_sync_free(vpkg);  							}  						} else {  							/* abort */ -							_alpm_log(PM_LOG_ERROR, _("unresolvable package conflicts detected")); +							_alpm_log(PM_LOG_ERROR, _("unresolvable package conflicts detected\n"));  							errorout = 1; -							if(data) { -								if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) { -									_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -									FREELIST(*data); -									pm_errno = PM_ERR_MEMORY; -									ret = -1; -									goto cleanup; -								} -								*miss = *(pmdepmissing_t *)i->data; -								*data = alpm_list_add(*data, miss); -							}  						}  					}  				} else { -					_alpm_log(PM_LOG_ERROR, _("unresolvable package conflicts detected")); +					_alpm_log(PM_LOG_ERROR, _("unresolvable package conflicts detected\n"));  					errorout = 1; -					if(data) { -						if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) { -							_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -							FREELIST(*data); -							pm_errno = PM_ERR_MEMORY; -							ret = -1; -							goto cleanup; -						} -						*miss = *(pmdepmissing_t *)i->data; -						*data = alpm_list_add(*data, miss); -					}  				}  			}  			if(errorout) { +				/* The last conflict was unresolvable, so we duplicate it and add it to *data */  				pm_errno = PM_ERR_CONFLICTING_DEPS; +				if(data) { +					pmconflict_t *lastconflict = conflict; +					if((conflict = malloc(sizeof(pmconflict_t))) == NULL) { +						_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %zd bytes\n"), +								sizeof(pmconflict_t)); +						FREELIST(*data); +						pm_errno = PM_ERR_MEMORY; +					} else { +						*conflict = *lastconflict; +						*data = alpm_list_add(*data, conflict); +					} +				} +				FREELIST(asked); +				FREELIST(deps);  				ret = -1;  				goto cleanup;  			} -			FREELIST(deps);  			FREELIST(asked); +			FREELIST(deps);  		}  		EVENT(trans, PM_TRANS_EVT_INTERCONFLICTS_DONE, NULL, NULL);  	} -	FREELISTPTR(list); - -	/* XXX: this fails for cases where a requested package wants -	 *      a dependency that conflicts with an older version of -	 *      the package.  It will be removed from final, and the user -	 *      has to re-request it to get it installed properly. -	 * -	 *      Not gonna happen very often, but should be dealt with... -	 */ -  	if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) { -		/* Check dependencies of packages in rmtargs and make sure -		 * we won't be breaking anything by removing them. -		 * If a broken dep is detected, make sure it's not from a -		 * package that's in our final (upgrade) list. -		 */ -		/*EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);*/ +		/* rebuild remove and list */ +		alpm_list_free(list); +		list = NULL; +		for(i = trans->packages; i; i = i->next) { +			pmsyncpkg_t *sync = i->data; +			list = alpm_list_add(list, sync->pkg); +		} +		alpm_list_free(remove); +		remove = NULL;  		for(i = trans->packages; i; i = i->next) {  			pmsyncpkg_t *sync = i->data;  			if(sync->type == PM_SYNC_TYPE_REPLACE) {  				for(j = sync->data; j; j = j->next) { -					list = alpm_list_add(list, j->data); +					remove = alpm_list_add(remove, j->data);  				}  			}  		} -		if(list) { -			_alpm_log(PM_LOG_DEBUG, _("checking dependencies of packages designated for removal")); -			deps = _alpm_checkdeps(trans, db_local, PM_TRANS_TYPE_REMOVE, list); -			if(deps) { -				int errorout = 0; -				for(i = deps; i; i = i->next) { -					pmdepmissing_t *miss = i->data; -					if(!_alpm_sync_find(trans->packages, miss->depend.name)) { -						int pfound = 0; -						alpm_list_t *k; -						/* If miss->depend.name depends on something that miss->target and a -						 * package in final both provide, then it's okay...  */ -						pmpkg_t *leavingp  = _alpm_db_get_pkgfromcache(db_local, miss->target); -						pmpkg_t *conflictp = _alpm_db_get_pkgfromcache(db_local, miss->depend.name); -						if(!leavingp || !conflictp) { -							_alpm_log(PM_LOG_ERROR, _("something has gone horribly wrong")); -							ret = -1; -							goto cleanup; -						} -						/* Look through the upset package's dependencies and try to match one up -						 * to a provisio from the package we want to remove */ -						for(k = alpm_pkg_get_depends(conflictp); k && !pfound; k = k->next) { -							alpm_list_t *m; -							for(m = alpm_pkg_get_provides(leavingp); m && !pfound; m = m->next) { -								if(!strcmp(k->data, m->data)) { -									/* Found a match -- now look through final for a package that -									 * provides the same thing.  If none are found, then it truly -									 * is an unresolvable conflict. */ -									alpm_list_t *n, *o; -									for(n = trans->packages; n && !pfound; n = n->next) { -										pmsyncpkg_t *sp = n->data; -										pmpkg_t *sppkg = sp->pkg; -										for(o = alpm_pkg_get_provides(sppkg); o && !pfound; o = o->next) { -											if(!strcmp(m->data, o->data)) { -												/* found matching provisio -- we're good to go */ -												_alpm_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s' -- conflict aborted"), -														alpm_pkg_get_name(sppkg), (char *)o->data); -												pfound = 1; -											} -										} -									} -								} -							} -						} -						if(!pfound) { -							if(!errorout) { -								errorout = 1; -							} -							if(data) { -								if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) { -									_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmdepmissing_t)); -									FREELIST(*data); -									pm_errno = PM_ERR_MEMORY; -									ret = -1; -									goto cleanup; -								} -								*miss = *(pmdepmissing_t *)i->data; -								*data = alpm_list_add(*data, miss); -							} -						} -					} -				} -				if(errorout) { -					pm_errno = PM_ERR_UNSATISFIED_DEPS; -					ret = -1; -					goto cleanup; + +		_alpm_log(PM_LOG_DEBUG, "checking dependencies\n"); +		deps = alpm_checkdeps(db_local, 1, remove, list); +		if(deps) { +			pm_errno = PM_ERR_UNSATISFIED_DEPS; +			ret = -1; +			*data = deps; +			goto cleanup; +		} +	} + +cleanup: +	alpm_list_free(list); +	alpm_list_free(remove); + +	return(ret); +} + +/** Returns a list of deltas that should be downloaded instead of the + * package. + * + * It first tests if a delta path exists between the currently installed + * version (if any) and the version to upgrade to. If so, the delta path + * is used if its size is below a set percentage (MAX_DELTA_RATIO) of + * the package size, Otherwise, an empty list is returned. + * + * @param newpkg the new package to upgrade to + * @param db_local the local database + * + * @return the list of pmdelta_t * objects. NULL (the empty list) is + * returned if the package should be downloaded instead of deltas. + */ +static alpm_list_t *pkg_upgrade_delta_path(pmpkg_t *newpkg, pmdb_t *db_local) +{ +	pmpkg_t *oldpkg = alpm_db_get_pkg(db_local, newpkg->name); +	alpm_list_t *ret = NULL; + +	if(oldpkg) { +		const char *oldname = alpm_pkg_get_filename(oldpkg); +		char *oldpath = _alpm_filecache_find(oldname); + +		if(oldpath) { +			alpm_list_t *deltas = _alpm_shortest_delta_path( +					alpm_pkg_get_deltas(newpkg), +					alpm_pkg_get_version(oldpkg), +					alpm_pkg_get_version(newpkg)); + +			if(deltas) { +				unsigned long dltsize = _alpm_delta_path_size(deltas); +				unsigned long pkgsize = alpm_pkg_get_size(newpkg); + +				if(dltsize < pkgsize * MAX_DELTA_RATIO) { +					ret = deltas; +				} else { +					ret = NULL; +					alpm_list_free(deltas);  				} -				FREELIST(deps);  			} + +			FREE(oldpath);  		} -		/*EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);*/  	} -#ifndef __sun__ -	/* check for free space only in case the packages will be extracted */ -	if(!(trans->flags & PM_TRANS_FLAG_NOCONFLICTS)) { -		if(_alpm_check_freespace(trans, data) == -1) { -				/* pm_errno is set by check_freespace */ -				ret = -1; -				goto cleanup; +	return(ret); +} + +/** Returns the size of the files that will be downloaded to install a + * package. + * + * @param newpkg the new package to upgrade to + * @param db_local the local database + * + * @return the size of the download + */ +unsigned long SYMEXPORT alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local) +{ +	char *fpath = _alpm_filecache_find(alpm_pkg_get_filename(newpkg)); +	unsigned long size = 0; + +	if(fpath) { +		size = 0; +	} else if(handle->usedelta) { +		alpm_list_t *deltas = pkg_upgrade_delta_path(newpkg, db_local); + +		if(deltas) { +			size = _alpm_delta_path_size_uncached(deltas); +		} else { +			size = alpm_pkg_get_size(newpkg);  		} + +		alpm_list_free(deltas); +	} else { +		size = alpm_pkg_get_size(newpkg);  	} -#endif -cleanup: -	FREELISTPTR(list); -	FREELISTPTR(trail); -	FREELIST(asked); +	FREE(fpath); + +	return(size); +} + +/** Applies delta files to create an upgraded package file. + * + * All intermediate files are deleted, leaving only the starting and + * ending package files. + * + * @param trans the transaction + * @param patches A list of alternating pmpkg_t * and pmdelta_t * + * objects. The patch command will be built using the pmpkg_t, pmdelta_t + * pair. + * + * @return 0 if all delta files were able to be applied, 1 otherwise. + */ +static int apply_deltas(pmtrans_t *trans, alpm_list_t *patches) +{ +	/* keep track of the previous package in the loop to decide if a +	 * package file should be deleted */ +	pmpkg_t *lastpkg = NULL; +	int lastpkg_failed = 0; +	int ret = 0; +	const char *cachedir = _alpm_filecache_setup(); + +	alpm_list_t *p = patches; +	while(p) { +		pmpkg_t *pkg; +		pmdelta_t *d; +		char command[PATH_MAX], fname[PATH_MAX]; +		char pkgfilename[PKG_FILENAME_LEN]; + +		pkg = alpm_list_getdata(p); +		p = alpm_list_next(p); + +		d = alpm_list_getdata(p); +		p = alpm_list_next(p); + +		/* if patching fails, ignore the rest of that package's deltas */ +		if(lastpkg_failed) { +			if(pkg == lastpkg) { +				continue; +			} else { +				lastpkg_failed = 0; +			} +		} + +		/* an example of the patch command: (using /cache for cachedir) +		 * xdelta patch /cache/pacman_3.0.0-1_to_3.0.1-1-i686.delta \ +		 *              /cache/pacman-3.0.0-1-i686.pkg.tar.gz       \ +		 *              /cache/pacman-3.0.1-1-i686.pkg.tar.gz +		 */ + +		/* build the patch command */ +		snprintf(command, PATH_MAX, +				"xdelta patch"         /* the command */ +				" %s/%s"               /* the delta */ +				" %s/%s-%s-%s" PKGEXT  /* the 'from' package */ +				" %s/%s-%s-%s" PKGEXT, /* the 'to' package */ +				cachedir, d->filename, +				cachedir, pkg->name, d->from, pkg->arch, +				cachedir, pkg->name, d->to, pkg->arch); + +		_alpm_log(PM_LOG_DEBUG, _("command: %s\n"), command); + +		snprintf(pkgfilename, PKG_FILENAME_LEN, "%s-%s-%s" PKGEXT, +				pkg->name, d->to, pkg->arch); + +		EVENT(trans, PM_TRANS_EVT_DELTA_PATCH_START, pkgfilename, d->filename); + +		if(system(command) == 0) { +			EVENT(trans, PM_TRANS_EVT_DELTA_PATCH_DONE, NULL, NULL); + +			/* delete the delta file */ +			snprintf(fname, PATH_MAX, "%s/%s", cachedir, d->filename); +			unlink(fname); + +			/* Delete the 'from' package but only if it is an intermediate +			 * package. The starting 'from' package should be kept, just +			 * as if deltas were not used. Delete the package file if the +			 * previous iteration of the loop used the same package. */ +			if(pkg == lastpkg) { +				snprintf(fname, PATH_MAX, "%s/%s-%s-%s" PKGEXT, +						cachedir, pkg->name, d->from, pkg->arch); +				unlink(fname); +			} else { +				lastpkg = pkg; +			} +		} else { +			EVENT(trans, PM_TRANS_EVT_DELTA_PATCH_FAILED, NULL, NULL); +			lastpkg_failed = 1; +			ret = 1; +		} +	} + +	return(ret); +} + +/** Compares the md5sum of a file to the expected value. + * + * If the md5sum does not match, the user is asked whether the file + * should be deleted. + * + * @param trans the transaction + * @param filename the filename of the file to test + * @param md5sum the expected md5sum of the file + * @param data data to write the error messages to + * + * @return 0 if the md5sum matched, 1 otherwise + */ +static int test_md5sum(pmtrans_t *trans, const char *filename, +		const char *md5sum, alpm_list_t **data) +{ +	char *filepath; +	char *md5sum2; +	char *errormsg = NULL; +	int ret = 0; + +	filepath = _alpm_filecache_find(filename); +	md5sum2 = alpm_get_md5sum(filepath); + +	if(md5sum == NULL) { +		/* TODO wtf is this? malloc'd strings for error messages? */ +		if((errormsg = calloc(512, sizeof(char))) == NULL) { +			RET_ERR(PM_ERR_MEMORY, -1); +		} +		snprintf(errormsg, 512, _("can't get md5 checksum for file %s\n"), +				filename); +		*data = alpm_list_add(*data, errormsg); +		ret = 1; +	} else if(md5sum2 == NULL) { +		if((errormsg = calloc(512, sizeof(char))) == NULL) { +			RET_ERR(PM_ERR_MEMORY, -1); +		} +		snprintf(errormsg, 512, _("can't get md5 checksum for file %s\n"), +				filename); +		*data = alpm_list_add(*data, errormsg); +		ret = 1; +	} else if(strcmp(md5sum, md5sum2) != 0) { +		int doremove = 0; +		if((errormsg = calloc(512, sizeof(char))) == NULL) { +			RET_ERR(PM_ERR_MEMORY, -1); +		} +		QUESTION(trans, PM_TRANS_CONV_CORRUPTED_PKG, (char *)filename, +				NULL, NULL, &doremove); +		if(doremove) { +			unlink(filepath); +		} +		snprintf(errormsg, 512, _("file %s was corrupted (bad MD5 checksum)\n"), +				filename); +		*data = alpm_list_add(*data, errormsg); +		ret = 1; +	} + +	FREE(filepath); +	FREE(md5sum2); + +	return(ret); +} + +/** Compares the md5sum of a delta to the expected value. + * + * @param trans the transaction + * @param delta the delta to test + * @param data data to write the error messages to + * + * @return 0 if the md5sum matched, 1 otherwise + */ +static int test_delta_md5sum(pmtrans_t *trans, pmdelta_t *delta, +		alpm_list_t **data) +{ +	const char *filename; +	const char *md5sum; +	int ret = 0; + +	filename = alpm_delta_get_filename(delta); +	md5sum = alpm_delta_get_md5sum(delta); + +	ret = test_md5sum(trans, filename, md5sum, data); + +	return(ret); +} + +/** Compares the md5sum of a package to the expected value. + * + * @param trans the transaction + * @param pkg the package to test + * @param data data to write the error messages to + * + * @return 0 if the md5sum matched, 1 otherwise + */ +static int test_pkg_md5sum(pmtrans_t *trans, pmpkg_t *pkg, alpm_list_t **data) +{ +	const char *filename; +	const char *md5sum; +	int ret = 0; + +	filename = alpm_pkg_get_filename(pkg); +	md5sum = alpm_pkg_get_md5sum(pkg); + +	ret = test_md5sum(trans, filename, md5sum, data);  	return(ret);  } @@ -769,68 +967,94 @@ cleanup:  int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  {  	alpm_list_t *i, *j, *files = NULL; +	alpm_list_t *patches = NULL, *deltas = NULL;  	pmtrans_t *tr = NULL;  	int replaces = 0, retval = 0; -	char ldir[PATH_MAX]; -	int varcache = 1; +	const char *cachedir = NULL; +	int dltotal = 0, dl = 0;  	ALPM_LOG_FUNC;  	ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));  	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	cachedir = _alpm_filecache_setup();  	trans->state = STATE_DOWNLOADING; -	/* group sync records by repository and download */ -	snprintf(ldir, PATH_MAX, "%s%s", handle->root, handle->cachedir); +	/* Sum up the download sizes. This has to be in its own loop because +	 * the download loop is grouped by db. */ +	for(j = trans->packages; j; j = j->next) { +		pmsyncpkg_t *sync = j->data; +		pmpkg_t *spkg = sync->pkg; +		dltotal += alpm_pkg_download_size(spkg, db_local); +	} + +	/* group sync records by repository and download */  	for(i = handle->dbs_sync; i; i = i->next) {  		pmdb_t *current = i->data;  		for(j = trans->packages; j; j = j->next) {  			pmsyncpkg_t *sync = j->data;  			pmpkg_t *spkg = sync->pkg; -			pmdb_t *dbs = spkg->data; +			pmdb_t *dbs = spkg->origin_data.db;  			if(current == dbs) {  				const char *fname = NULL; -				char path[PATH_MAX];  				fname = alpm_pkg_get_filename(spkg);  				if(trans->flags & PM_TRANS_FLAG_PRINTURIS) { -					EVENT(trans, PM_TRANS_EVT_PRINTURI, (char *)alpm_db_get_url(current), (char *)fname); +					EVENT(trans, PM_TRANS_EVT_PRINTURI, (char *)alpm_db_get_url(current), +							(char *)fname);  				} else { -					struct stat buf; -					snprintf(path, PATH_MAX, "%s/%s", ldir, fname); -					if(stat(path, &buf)) { -						/* file is not in the cache dir, so add it to the list */ -						files = alpm_list_add(files, strdup(fname)); -					} else { -						_alpm_log(PM_LOG_DEBUG, _("%s is already in the cache\n"), fname); +					char *fpath = _alpm_filecache_find(fname); +					if(!fpath) { +						if(handle->usedelta) { +							alpm_list_t *delta_path = pkg_upgrade_delta_path(spkg, db_local); + +							if(delta_path) { +								alpm_list_t *dlts = NULL; + +								for(dlts = delta_path; dlts; dlts = alpm_list_next(dlts)) { +									pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts); +									char *fpath2 = _alpm_filecache_find(d->filename); + +									if(!fpath2) { +										/* add the delta filename to the download list if +										 * it's not in the cache*/ +										files = alpm_list_add(files, strdup(d->filename)); +									} + +									/* save the package and delta so that the xdelta patch +									 * command can be run after the downloads finish */ +									patches = alpm_list_add(patches, spkg); +									patches = alpm_list_add(patches, d); + +									/* keep a list of the delta files for md5sums */ +									deltas = alpm_list_add(deltas, d); +								} + +								alpm_list_free(delta_path); +								delta_path = NULL; +							} else { +								/* no deltas to download, so add the file to the +								 * download list */ +								files = alpm_list_add(files, strdup(fname)); +							} +						} else { +							/* not using deltas, so add the file to the download list */ +							files = alpm_list_add(files, strdup(fname)); +						}  					} +					FREE(fpath);  				}  			}  		}  		if(files) { -			struct stat buf;  			EVENT(trans, PM_TRANS_EVT_RETRIEVE_START, current->treename, NULL); -			if(stat(ldir, &buf)) { -				/* no cache directory.... try creating it */ -				_alpm_log(PM_LOG_WARNING, _("no %s cache exists, creating...\n"), ldir); -				alpm_logaction(_("warning: no %s cache exists, creating..."), ldir); -				if(_alpm_makepath(ldir)) { -					/* couldn't mkdir the cache directory, so fall back to /tmp and unlink -					 * the package afterwards. -					 */ -					_alpm_log(PM_LOG_WARNING, _("couldn't create package cache, using /tmp instead\n")); -					alpm_logaction(_("warning: couldn't create package cache, using /tmp instead")); -					snprintf(ldir, PATH_MAX, "%stmp", alpm_option_get_root()); -					alpm_option_set_cachedir(ldir); -					varcache = 0; -				} -			} -			if(_alpm_downloadfiles(current->servers, ldir, files)) { -				_alpm_log(PM_LOG_WARNING, _("failed to retrieve some files from %s\n"), current->treename); +			if(_alpm_downloadfiles(current->servers, cachedir, files, &dl, dltotal)) { +				_alpm_log(PM_LOG_WARNING, _("failed to retrieve some files from %s\n"), +						current->treename);  				RET_ERR(PM_ERR_RETRIEVE, -1);  			}  			FREELIST(files); @@ -840,66 +1064,62 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  		return(0);  	} -	/* Check integrity of files */ +	if(handle->usedelta) { +		int ret = 0; + +		/* only output if there are deltas to work with */ +		if(deltas) { +			/* Check integrity of deltas */ +			EVENT(trans, PM_TRANS_EVT_DELTA_INTEGRITY_START, NULL, NULL); + +			for(i = deltas; i; i = i->next) { +				pmdelta_t *d = alpm_list_getdata(i); + +				ret = test_delta_md5sum(trans, d, data); + +				if(ret == 1) { +					retval = 1; +				} else if(ret == -1) { /* -1 is for serious errors */ +					RET_ERR(pm_errno, -1); +				} +			} +			if(retval) { +				pm_errno = PM_ERR_DLT_CORRUPTED; +				goto error; +			} +			EVENT(trans, PM_TRANS_EVT_DELTA_INTEGRITY_DONE, NULL, NULL); + +			/* Use the deltas to generate the packages */ +			EVENT(trans, PM_TRANS_EVT_DELTA_PATCHES_START, NULL, NULL); +			ret = apply_deltas(trans, patches); +			EVENT(trans, PM_TRANS_EVT_DELTA_PATCHES_DONE, NULL, NULL); + +			alpm_list_free(patches); +			patches = NULL; +			alpm_list_free(deltas); +			deltas = NULL; +		} +		if(ret) { +			pm_errno = PM_ERR_DLT_PATCHFAILED; +			goto error; +		} +	} + +	/* Check integrity of packages */  	EVENT(trans, PM_TRANS_EVT_INTEGRITY_START, NULL, NULL);  	for(i = trans->packages; i; i = i->next) {  		pmsyncpkg_t *sync = i->data;  		pmpkg_t *spkg = sync->pkg; -		char str[PATH_MAX]; -		const char *pkgname; -		char *md5sum1, *md5sum2, *sha1sum1, *sha1sum2; -		char *ptr=NULL; - -		pkgname = alpm_pkg_get_filename(spkg); -		md5sum1 = spkg->md5sum; -		sha1sum1 = spkg->sha1sum; - -		if((md5sum1 == NULL) && (sha1sum1 == NULL)) { -			/* TODO wtf is this? malloc'd strings for error messages? */ -			if((ptr = (char *)malloc(512)) == NULL) { -				RET_ERR(PM_ERR_MEMORY, -1); -			} -			snprintf(ptr, 512, _("can't get md5 or sha1 checksum for package %s\n"), pkgname); -			*data = alpm_list_add(*data, ptr); -			retval = 1; -			continue; -		} -		snprintf(str, PATH_MAX, "%s%s%s", handle->root, handle->cachedir, pkgname); -		md5sum2 = _alpm_MDFile(str); -		sha1sum2 = _alpm_SHAFile(str); -		if(md5sum2 == NULL && sha1sum2 == NULL) { -			if((ptr = (char *)malloc(512)) == NULL) { -				RET_ERR(PM_ERR_MEMORY, -1); -			} -			snprintf(ptr, 512, _("can't get md5 or sha1 checksum for package %s\n"), pkgname); -			*data = alpm_list_add(*data, ptr); -			retval = 1; -			continue; -		} -		if((strcmp(md5sum1, md5sum2) != 0) && (strcmp(sha1sum1, sha1sum2) != 0)) { -			int doremove=0; -			if((ptr = (char *)malloc(512)) == NULL) { -				RET_ERR(PM_ERR_MEMORY, -1); -			} -			if(trans->flags & PM_TRANS_FLAG_ALLDEPS) { -				doremove=1; -			} else { -				QUESTION(trans, PM_TRANS_CONV_CORRUPTED_PKG, (char *)pkgname, NULL, NULL, &doremove); -			} -			if(doremove) { -				char str[PATH_MAX]; -				snprintf(str, PATH_MAX, "%s%s%s", handle->root, handle->cachedir, pkgname); -				unlink(str); -				snprintf(ptr, 512, _("archive %s was corrupted (bad MD5 or SHA1 checksum)\n"), pkgname); -			} else { -				snprintf(ptr, 512, _("archive %s is corrupted (bad MD5 or SHA1 checksum)\n"), pkgname); -			} -			*data = alpm_list_add(*data, ptr); +		int ret = 0; + +		ret = test_pkg_md5sum(trans, spkg, data); + +		if(ret == 1) {  			retval = 1; +		} else if(ret == -1) { /* -1 is for serious errors */ +			RET_ERR(pm_errno, -1);  		} -		FREE(md5sum2); -		FREE(sha1sum2);  	}  	if(retval) {  		pm_errno = PM_ERR_PKG_CORRUPTED; @@ -914,13 +1134,13 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  	trans->state = STATE_COMMITING;  	tr = _alpm_trans_new();  	if(tr == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not create removal transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not create removal transaction\n"));  		pm_errno = PM_ERR_MEMORY;  		goto error;  	}  	if(_alpm_trans_init(tr, PM_TRANS_TYPE_REMOVE, PM_TRANS_FLAG_NODEPS, NULL, NULL, NULL) == -1) { -		_alpm_log(PM_LOG_ERROR, _("could not initialize the removal transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not initialize the removal transaction\n"));  		goto error;  	} @@ -940,44 +1160,49 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  		}  	}  	if(replaces) { -		_alpm_log(PM_LOG_DEBUG, _("removing conflicting and to-be-replaced packages")); +		_alpm_log(PM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n");  		if(_alpm_trans_prepare(tr, data) == -1) { -			_alpm_log(PM_LOG_ERROR, _("could not prepare removal transaction")); +			_alpm_log(PM_LOG_ERROR, _("could not prepare removal transaction\n"));  			goto error;  		}  		/* we want the frontend to be aware of commit details */  		tr->cb_event = trans->cb_event;  		if(_alpm_trans_commit(tr, NULL) == -1) { -			_alpm_log(PM_LOG_ERROR, _("could not commit removal transaction")); +			_alpm_log(PM_LOG_ERROR, _("could not commit removal transaction\n"));  			goto error;  		}  	} -	FREETRANS(tr); +	_alpm_trans_free(tr); +	tr = NULL;  	/* install targets */ -	_alpm_log(PM_LOG_DEBUG, _("installing packages")); +	_alpm_log(PM_LOG_DEBUG, "installing packages\n");  	tr = _alpm_trans_new();  	if(tr == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not create transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not create transaction\n"));  		pm_errno = PM_ERR_MEMORY;  		goto error;  	}  	if(_alpm_trans_init(tr, PM_TRANS_TYPE_UPGRADE, trans->flags | PM_TRANS_FLAG_NODEPS, trans->cb_event, trans->cb_conv, trans->cb_progress) == -1) { -		_alpm_log(PM_LOG_ERROR, _("could not initialize transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not initialize transaction\n"));  		goto error;  	}  	for(i = trans->packages; i; i = i->next) {  		pmsyncpkg_t *sync = i->data;  		pmpkg_t *spkg = sync->pkg; - -		const char *fname = NULL; -		char str[PATH_MAX]; +		const char *fname; +		char *fpath;  		fname = alpm_pkg_get_filename(spkg); -		snprintf(str, PATH_MAX, "%s%s%s", handle->root, handle->cachedir, fname); -		if(_alpm_trans_addtarget(tr, str) == -1) { +		/* Loop through the cache dirs until we find a matching file */ +		fpath = _alpm_filecache_find(fname); + +		if(_alpm_trans_addtarget(tr, fpath) == -1) { +			FREE(fpath);  			goto error;  		} +		FREE(fpath); +  		/* using alpm_list_last() is ok because addtarget() adds the new target at the  		 * end of the tr->packages list */  		spkg = alpm_list_last(tr->packages)->data; @@ -986,82 +1211,22 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  		}  	}  	if(_alpm_trans_prepare(tr, data) == -1) { -		_alpm_log(PM_LOG_ERROR, _("could not prepare transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not prepare transaction\n"));  		/* pm_errno is set by trans_prepare */  		goto error;  	}  	if(_alpm_trans_commit(tr, NULL) == -1) { -		_alpm_log(PM_LOG_ERROR, _("could not commit transaction")); +		_alpm_log(PM_LOG_ERROR, _("could not commit transaction\n"));  		goto error;  	} -	FREETRANS(tr); - -	/* propagate replaced packages' requiredby fields to their new owners */ -	if(replaces) { -		_alpm_log(PM_LOG_DEBUG, _("updating database for replaced packages' dependencies")); -		for(i = trans->packages; i; i = i->next) { -			pmsyncpkg_t *sync = i->data; -			if(sync->type == PM_SYNC_TYPE_REPLACE) { -				alpm_list_t *j; -				pmpkg_t *new = _alpm_db_get_pkgfromcache(db_local, alpm_pkg_get_name(sync->pkg)); -				for(j = sync->data; j; j = j->next) { -					alpm_list_t *k; -					pmpkg_t *old = j->data; -					/* merge lists */ -					for(k = alpm_pkg_get_requiredby(old); k; k = k->next) { -						if(!alpm_list_find_str(alpm_pkg_get_requiredby(new), k->data)) { -							/* replace old's name with new's name in the requiredby's dependency list */ -							alpm_list_t *m; -							pmpkg_t *depender = _alpm_db_get_pkgfromcache(db_local, k->data); -							if(depender == NULL) { -								/* If the depending package no longer exists in the local db, -								 * then it must have ALSO conflicted with sync->pkg.  If -								 * that's the case, then we don't have anything to propagate -								 * here. */ -								continue; -							} -							for(m = alpm_pkg_get_depends(depender); m; m = m->next) { -								if(!strcmp(m->data, alpm_pkg_get_name(old))) { -									FREE(m->data); -									m->data = strdup(alpm_pkg_get_name(new)); -								} -							} -							if(_alpm_db_write(db_local, depender, INFRQ_DEPENDS) == -1) { -								_alpm_log(PM_LOG_ERROR, _("could not update requiredby for database entry %s-%s"), -													alpm_pkg_get_name(new), alpm_pkg_get_version(new)); -							} -							/* add the new requiredby */ -							new->requiredby = alpm_list_add(alpm_pkg_get_requiredby(new), strdup(k->data)); -						} -					} -				} -				if(_alpm_db_write(db_local, new, INFRQ_DEPENDS) == -1) { -					_alpm_log(PM_LOG_ERROR, _("could not update new database entry %s-%s"), -										alpm_pkg_get_name(new), alpm_pkg_get_version(new)); -				} -			} -		} -	} - -	if(!varcache && !(trans->flags & PM_TRANS_FLAG_DOWNLOADONLY)) { -		/* delete packages */ -		for(i = files; i; i = i->next) { -			unlink(i->data); -		} -	} - -	/* run ldconfig if it exists */ -	if(handle->trans->state != STATE_INTERRUPTED) { -		_alpm_log(PM_LOG_DEBUG, _("running \"ldconfig -r %s\""), handle->root); -		_alpm_ldconfig(handle->root); -	} +	_alpm_trans_free(tr); +	tr = NULL;  	return(0);  error: -	FREETRANS(tr); -	/* commiting failed, so this is still just a prepared transaction */ -	trans->state = STATE_PREPARED; +	_alpm_trans_free(tr); +	tr = NULL;  	return(-1);  } @@ -1076,17 +1241,17 @@ pmsyncpkg_t *_alpm_sync_find(alpm_list_t *syncpkgs, const char* pkgname)  		pmpkg_t *pkg = alpm_sync_get_pkg(syncpkg);  		if(strcmp(alpm_pkg_get_name(pkg), pkgname) == 0) { -			_alpm_log(PM_LOG_DEBUG, _("found package '%s-%s' in sync"), +			_alpm_log(PM_LOG_DEBUG, "found package '%s-%s' in sync\n",  								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));  			return(syncpkg);  		}  	} -	_alpm_log(PM_LOG_DEBUG, _("package '%s' not found in sync"), pkgname); +	_alpm_log(PM_LOG_DEBUG, "package '%s' not found in sync\n", pkgname);  	return(NULL); /* not found */  } -pmsynctype_t SYMEXPORT alpm_sync_get_type(pmsyncpkg_t *sync) +pmsynctype_t SYMEXPORT alpm_sync_get_type(const pmsyncpkg_t *sync)  {  	/* Sanity checks */  	ASSERT(sync != NULL, return(-1)); @@ -1094,7 +1259,7 @@ pmsynctype_t SYMEXPORT alpm_sync_get_type(pmsyncpkg_t *sync)  	return sync->type;  } -pmpkg_t SYMEXPORT *alpm_sync_get_pkg(pmsyncpkg_t *sync) +pmpkg_t SYMEXPORT *alpm_sync_get_pkg(const pmsyncpkg_t *sync)  {  	/* Sanity checks */  	ASSERT(sync != NULL, return(NULL)); @@ -1102,7 +1267,7 @@ pmpkg_t SYMEXPORT *alpm_sync_get_pkg(pmsyncpkg_t *sync)  	return sync->pkg;  } -void SYMEXPORT *alpm_sync_get_data(pmsyncpkg_t *sync) +void SYMEXPORT *alpm_sync_get_data(const pmsyncpkg_t *sync)  {  	/* Sanity checks */  	ASSERT(sync != NULL, return(NULL)); diff --git a/lib/libalpm/sync.h b/lib/libalpm/sync.h index 3ba7e009..0ef42627 100644 --- a/lib/libalpm/sync.h +++ b/lib/libalpm/sync.h @@ -1,10 +1,10 @@  /*   *  sync.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_SYNC_H @@ -32,12 +32,12 @@ struct __pmsyncpkg_t {  	void *data;  }; -#define FREESYNC(p) do { if(p) { _alpm_sync_free(p); p = NULL; } } while(0) -  pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data); -void _alpm_sync_free(void *data); +void _alpm_sync_free(pmsyncpkg_t *data); + +int _alpm_sync_sysupgrade(pmtrans_t *trans, +		pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **syncpkgs); -int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync);  int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, char *name);  int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **data);  int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data); diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 009ec7f1..d9988265 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -5,7 +5,7 @@   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -27,7 +27,12 @@  #include <stdlib.h>  #include <stdio.h>  #include <string.h> -#include <libintl.h> +#include <sys/wait.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/statvfs.h> +#include <unistd.h> +#include <errno.h>  /* libalpm */  #include "trans.h" @@ -43,19 +48,188 @@  #include "alpm.h"  #include "deps.h"  #include "cache.h" -#include "provide.h" -pmtrans_t *_alpm_trans_new() +/** \addtogroup alpm_trans Transaction Functions + * @brief Functions to manipulate libalpm transactions + * @{ + */ + +/** Initialize the transaction. + * @param type type of the transaction + * @param flags flags of the transaction (like nodeps, etc) + * @param event event callback function pointer + * @param conv question callback function pointer + * @param progress progress callback function pointer + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_init(pmtranstype_t type, pmtransflag_t flags, +                              alpm_trans_cb_event event, alpm_trans_cb_conv conv, +                              alpm_trans_cb_progress progress) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1)); + +	/* lock db */ +	handle->lckfd = _alpm_lckmk(); +	if(handle->lckfd == -1) { +		RET_ERR(PM_ERR_HANDLE_LOCK, -1); +	} + +	handle->trans = _alpm_trans_new(); +	if(handle->trans == NULL) { +		RET_ERR(PM_ERR_MEMORY, -1); +	} + +	return(_alpm_trans_init(handle->trans, type, flags, event, conv, progress)); +} + +/** Search for packages to upgrade and add them to the transaction. + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_sysupgrade() +{ +	pmtrans_t *trans; + +	ALPM_LOG_FUNC; + +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	trans = handle->trans; +	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); +	ASSERT(trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1)); + +	return(_alpm_trans_sysupgrade(trans)); +} + +/** Add a target to the transaction. + * @param target the name of the target to add + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_addtarget(char *target) +{ +	pmtrans_t *trans; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	ASSERT(target != NULL && strlen(target) != 0, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + +	trans = handle->trans; +	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); + +	return(_alpm_trans_addtarget(trans, target)); +} + +/** Prepare a transaction. + * @param data the address of an alpm_list where detailed description + * of an error can be dumped (ie. list of conflicting files) + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_prepare(alpm_list_t **data) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	ASSERT(data != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + +	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); + +	return(_alpm_trans_prepare(handle->trans, data)); +} + +/** Commit a transaction. + * @param data the address of an alpm_list where detailed description + * of an error can be dumped (ie. list of conflicting files) + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_commit(alpm_list_t **data) +{ +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(handle->trans->state == STATE_PREPARED, RET_ERR(PM_ERR_TRANS_NOT_PREPARED, -1)); + +	return(_alpm_trans_commit(handle->trans, data)); +} + +/** Interrupt a transaction. + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_interrupt() +{ +	pmtrans_t *trans; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	trans = handle->trans; +	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(trans->state == STATE_COMMITING || trans->state == STATE_INTERRUPTED, +			RET_ERR(PM_ERR_TRANS_TYPE, -1)); + +	trans->state = STATE_INTERRUPTED; + +	return(0); +} + +/** Release a transaction. + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_trans_release()  {  	pmtrans_t *trans;  	ALPM_LOG_FUNC; -	if((trans = (pmtrans_t *)malloc(sizeof(pmtrans_t))) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmtrans_t)); -		return(NULL); +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + +	trans = handle->trans; +	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); +	ASSERT(trans->state != STATE_IDLE, RET_ERR(PM_ERR_TRANS_NULL, -1)); + +	_alpm_trans_free(trans); +	handle->trans = NULL; + +	/* unlock db */ +	if(handle->lckfd != -1) { +		close(handle->lckfd); +		handle->lckfd = -1; +	} +	if(_alpm_lckrm()) { +		_alpm_log(PM_LOG_WARNING, _("could not remove lock file %s\n"), +				alpm_option_get_lockfile()); +		alpm_logaction("warning: could not remove lock file %s\n", +				alpm_option_get_lockfile());  	} +	return(0); +} + +/** @} */ + +pmtrans_t *_alpm_trans_new() +{ +	pmtrans_t *trans; + +	ALPM_LOG_FUNC; + +	CALLOC(trans, 1, sizeof(pmtrans_t), RET_ERR(PM_ERR_MEMORY, NULL)); +  	trans->targets = NULL;  	trans->packages = NULL;  	trans->skip_add = NULL; @@ -70,10 +244,8 @@ pmtrans_t *_alpm_trans_new()  	return(trans);  } -void _alpm_trans_free(void *data) +void _alpm_trans_free(pmtrans_t *trans)  { -	pmtrans_t *trans = data; -  	ALPM_LOG_FUNC;  	if(trans == NULL) { @@ -82,14 +254,11 @@ void _alpm_trans_free(void *data)  	FREELIST(trans->targets);  	if(trans->type == PM_TRANS_TYPE_SYNC) { -		alpm_list_t *i; -		for(i = trans->packages; i; i = i->next) { -			FREESYNC(i->data); -		} -		FREELIST(trans->packages); +		alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_sync_free);  	} else { -		FREELISTPKGS(trans->packages); +		alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_pkg_free);  	} +	alpm_list_free(trans->packages);  	FREELIST(trans->skip_add);  	FREELIST(trans->skip_remove); @@ -123,9 +292,15 @@ int _alpm_trans_sysupgrade(pmtrans_t *trans)  	/* Sanity checks */  	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync)); +	return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync, +				&(trans->packages)));  } +/** Add a target to the transaction. + * @param trans the current transaction + * @param target the name of the target to add + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */  int _alpm_trans_addtarget(pmtrans_t *trans, char *target)  {  	ALPM_LOG_FUNC; @@ -148,14 +323,15 @@ int _alpm_trans_addtarget(pmtrans_t *trans, char *target)  			}  		break;  		case PM_TRANS_TYPE_REMOVE: +		case PM_TRANS_TYPE_REMOVEUPGRADE:  			if(_alpm_remove_loadtarget(trans, handle->db_local, target) == -1) { -				/* pm_errno is set by remove_loadtarget() */ +				/* pm_errno is set by _alpm_remove_loadtarget() */  				return(-1);  			}  		break;  		case PM_TRANS_TYPE_SYNC:  			if(_alpm_sync_addtarget(trans, handle->db_local, handle->dbs_sync, target) == -1) { -				/* pm_errno is set by sync_loadtarget() */ +				/* pm_errno is set by _alpm_sync_loadtarget() */  				return(-1);  			}  		break; @@ -189,6 +365,7 @@ int _alpm_trans_prepare(pmtrans_t *trans, alpm_list_t **data)  			}  		break;  		case PM_TRANS_TYPE_REMOVE: +		case PM_TRANS_TYPE_REMOVEUPGRADE:  			if(_alpm_remove_prepare(trans, handle->db_local, data) == -1) {  				/* pm_errno is set by _alpm_remove_prepare() */  				return(-1); @@ -228,13 +405,14 @@ int _alpm_trans_commit(pmtrans_t *trans, alpm_list_t **data)  		case PM_TRANS_TYPE_ADD:  		case PM_TRANS_TYPE_UPGRADE:  			if(_alpm_add_commit(trans, handle->db_local) == -1) { -				/* pm_errno is set by _alpm_add_prepare() */ +				/* pm_errno is set by _alpm_add_commit() */  				return(-1);  			}  		break;  		case PM_TRANS_TYPE_REMOVE: +		case PM_TRANS_TYPE_REMOVEUPGRADE:  			if(_alpm_remove_commit(trans, handle->db_local) == -1) { -				/* pm_errno is set by _alpm_remove_prepare() */ +				/* pm_errno is set by _alpm_remove_commit() */  				return(-1);  			}  		break; @@ -251,118 +429,199 @@ int _alpm_trans_commit(pmtrans_t *trans, alpm_list_t **data)  	return(0);  } -int _alpm_trans_update_depends(pmtrans_t *trans, pmpkg_t *pkg) +/* A cheap grep for text files, returns 1 if a substring + * was found in the text file fn, 0 if it wasn't + */ +static int grep(const char *fn, const char *needle) +{ +	FILE *fp; + +	if((fp = fopen(fn, "r")) == NULL) { +		return(0); +	} +	while(!feof(fp)) { +		char line[1024]; +		fgets(line, 1024, fp); +		if(feof(fp)) { +			continue; +		} +		if(strstr(line, needle)) { +			fclose(fp); +			return(1); +		} +	} +	fclose(fp); +	return(0); +} + +int _alpm_runscriptlet(const char *root, const char *installfn, +											 const char *script, const char *ver, +											 const char *oldver, pmtrans_t *trans)  { -	alpm_list_t *i, *j; -	alpm_list_t *depends = NULL; -	const char *pkgname; -	pmdb_t *localdb; +	char scriptfn[PATH_MAX]; +	char cmdline[PATH_MAX]; +	char tmpdir[PATH_MAX]; +	char cwd[PATH_MAX]; +	char *scriptpath; +	struct stat buf; +	pid_t pid; +	int clean_tmpdir = 0; +	int restore_cwd = 0; +	int retval = 0;  	ALPM_LOG_FUNC; -		 -	/* Sanity checks */ -	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1)); -	pkgname = alpm_pkg_get_name(pkg); -	depends = alpm_pkg_get_depends(pkg); +	if(stat(installfn, &buf)) { +		/* not found */ +		_alpm_log(PM_LOG_DEBUG, "scriptlet '%s' not found\n", installfn); +		return(0); +	} -	if(depends) { -		_alpm_log(PM_LOG_DEBUG, _("updating dependency packages 'requiredby' fields for %s-%s"), -		          pkgname, pkg->version); +	snprintf(tmpdir, PATH_MAX, "%sbin/sh", root); +	if(stat(tmpdir, &buf)) { +		/* not found */ +		_alpm_log(PM_LOG_ERROR, _("No /bin/sh in root dir (%s), aborting scriptlet\n"), root); +		return(0); +	} + +	/* creates a directory in $root/tmp/ for copying/extracting the scriptlet */ +	snprintf(tmpdir, PATH_MAX, "%stmp/", root); +	if(stat(tmpdir, &buf)) { +		_alpm_makepath(tmpdir); +	} +	snprintf(tmpdir, PATH_MAX, "%stmp/alpm_XXXXXX", root); +	if(mkdtemp(tmpdir) == NULL) { +		_alpm_log(PM_LOG_ERROR, _("could not create temp directory\n")); +		return(1);  	} else { -		_alpm_log(PM_LOG_DEBUG, _("package has no dependencies, no other packages to update")); +		clean_tmpdir = 1;  	} -	localdb = alpm_option_get_localdb(); -	for(i = depends; i; i = i->next) { -		pmdepend_t* dep = alpm_splitdep(i->data); -		if(dep == NULL) { -			continue; +	/* either extract or copy the scriptlet */ +	snprintf(scriptfn, PATH_MAX, "%s/.INSTALL", tmpdir); +	if(!strcmp(script, "pre_upgrade") || !strcmp(script, "pre_install")) { +		if(_alpm_unpack(installfn, tmpdir, ".INSTALL")) { +			retval = 1;  		} -	 -		if(trans->packages && trans->type == PM_TRANS_TYPE_REMOVE) { -			if(_alpm_pkg_find(dep->name, handle->trans->packages)) { -				continue; -			} +	} else { +		if(_alpm_copyfile(installfn, scriptfn)) { +			_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), scriptfn, strerror(errno)); +			retval = 1;  		} +	} +	if(retval == 1) { +		goto cleanup; +	} -		pmpkg_t *deppkg = _alpm_db_get_pkgfromcache(localdb, dep->name); -		if(!deppkg) { -			int found_provides = 0; -			/* look for a provides package */ -			alpm_list_t *provides = _alpm_db_whatprovides(localdb, dep->name); -			for(j = provides; j; j = j->next) { -				if(!j->data) { -					continue; -				} -				pmpkg_t *provpkg = j->data; -				deppkg = _alpm_db_get_pkgfromcache(localdb, alpm_pkg_get_name(provpkg)); +	/* mark the scriptlet as executable */ +	chmod(scriptfn, 0755); -				if(!deppkg) { -					continue; -				} +	/* chop off the root so we can find the tmpdir in the chroot */ +	scriptpath = scriptfn + strlen(root) - 1; -				found_provides = 1; - -				/* this is cheating... we call this function to populate the package */ -				alpm_list_t *rqdby = alpm_pkg_get_requiredby(deppkg); - -				_alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"), -				          alpm_pkg_get_name(deppkg)); -				if(trans->type == PM_TRANS_TYPE_REMOVE) { -					void *data = NULL; -					rqdby = alpm_list_remove(rqdby,	pkgname, _alpm_str_cmp, &data); -					FREE(data); -					deppkg->requiredby = rqdby; -				} else { -					if(!alpm_list_find_str(rqdby, pkgname)) { -						rqdby = alpm_list_add(rqdby, strdup(pkgname)); -						deppkg->requiredby = rqdby; -					} -				} +	if(!grep(scriptfn, script)) { +		/* script not found in scriptlet file */ +		goto cleanup; +	} -				if(_alpm_db_write(localdb, deppkg, INFRQ_DEPENDS)) { -					_alpm_log(PM_LOG_ERROR, _("could not update 'requiredby' database entry %s-%s"), -										alpm_pkg_get_name(deppkg), alpm_pkg_get_version(deppkg)); -				} -			} -			FREELISTPTR(provides); +	/* save the cwd so we can restore it later */ +	if(getcwd(cwd, PATH_MAX) == NULL) { +		_alpm_log(PM_LOG_ERROR, _("could not get current working directory\n")); +	} else { +		restore_cwd = 1; +	} -			if(!found_provides) { -				_alpm_log(PM_LOG_DEBUG, _("could not find dependency '%s'"), dep->name); -				continue; -			} -		} +	/* just in case our cwd was removed in the upgrade operation */ +	if(chdir(root) != 0) { +		_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), root, strerror(errno)); +		goto cleanup; +	} -		/* this is cheating... we call this function to populate the package */ -		alpm_list_t *rqdby = alpm_pkg_get_requiredby(deppkg); +	_alpm_log(PM_LOG_DEBUG, "executing %s script...\n", script); -		_alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"), -		          alpm_pkg_get_name(deppkg)); -		if(trans->type == PM_TRANS_TYPE_REMOVE) { -			void *data = NULL; -			rqdby = alpm_list_remove(rqdby, pkgname, _alpm_str_cmp, &data); -			FREE(data); -			deppkg->requiredby = rqdby; +	if(oldver) { +		snprintf(cmdline, PATH_MAX, "%s %s %s %s", +				scriptpath, script, ver, oldver); +	} else { +		snprintf(cmdline, PATH_MAX, "%s %s %s", +				scriptpath, script, ver); +	} +	_alpm_log(PM_LOG_DEBUG, "%s\n", cmdline); + +	/* fork- parent and child each have seperate code blocks below */ +	pid = fork(); +	if(pid == -1) { +		_alpm_log(PM_LOG_ERROR, _("could not fork a new process (%s)\n"), strerror(errno)); +		retval = 1; +		goto cleanup; +	} + +	if(pid == 0) { +		FILE *pipe; +		/* this code runs for the child only (the actual chroot/exec) */ +		_alpm_log(PM_LOG_DEBUG, "chrooting in %s\n", root); +		if(chroot(root) != 0) { +			_alpm_log(PM_LOG_ERROR, _("could not change the root directory (%s)\n"), +					strerror(errno)); +			exit(1); +		} +		if(chdir("/") != 0) { +			_alpm_log(PM_LOG_ERROR, _("could not change directory to / (%s)\n"), +					strerror(errno)); +			exit(1); +		} +		umask(0022); +		_alpm_log(PM_LOG_DEBUG, "executing \"%s\"\n", cmdline); +		/* execl("/bin/sh", "sh", "-c", cmdline, (char *)NULL); */ +		pipe = popen(cmdline, "r"); +		if(!pipe) { +			_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"), +					strerror(errno)); +			retval = 1; +			goto cleanup; +		} +		while(!feof(pipe)) { +			char line[PATH_MAX]; +			if(fgets(line, PATH_MAX, pipe) == NULL) +				break; +			alpm_logaction("%s", line); +			EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL); +		} +		exit(0); +	} else { +		/* this code runs for the parent only (wait on the child) */ +		pid_t retpid; +		int status; +		retpid = waitpid(pid, &status, 0); +		if(retpid == -1) { +			_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)\n"), +			          strerror(errno)); +			retval = 1; +			goto cleanup;  		} else { -			if(!alpm_list_find_str(rqdby, pkgname)) { -				rqdby = alpm_list_add(rqdby, strdup(pkgname)); -				deppkg->requiredby = rqdby; +			/* check the return status, make sure it is 0 (success) */ +			if(WIFEXITED(status)) { +				_alpm_log(PM_LOG_DEBUG, "call to waitpid succeeded\n"); +				if(WEXITSTATUS(status) != 0) { +					_alpm_log(PM_LOG_ERROR, _("scriptlet failed to execute correctly\n")); +					retval = 1; +				}  			}  		} +	} -		if(_alpm_db_write(localdb, deppkg, INFRQ_DEPENDS)) { -			_alpm_log(PM_LOG_ERROR, _("could not update 'requiredby' database entry %s-%s"), -								alpm_pkg_get_name(deppkg), alpm_pkg_get_version(deppkg)); -		} -		free(dep); +cleanup: +	if(clean_tmpdir && _alpm_rmrf(tmpdir)) { +		_alpm_log(PM_LOG_WARNING, _("could not remove tmpdir %s\n"), tmpdir); +	} +	if(restore_cwd) { +		chdir(cwd);  	} -	return(0); -} +	return(retval); +} -pmtranstype_t alpm_trans_get_type() +pmtranstype_t SYMEXPORT alpm_trans_get_type()  {  	/* Sanity checks */  	ASSERT(handle != NULL, return(-1)); @@ -380,7 +639,7 @@ unsigned int SYMEXPORT alpm_trans_get_flags()  	return handle->trans->flags;  } -alpm_list_t * alpm_trans_get_targets() +alpm_list_t SYMEXPORT * alpm_trans_get_targets()  {  	/* Sanity checks */  	ASSERT(handle != NULL, return(NULL)); diff --git a/lib/libalpm/trans.h b/lib/libalpm/trans.h index 34a060ad..e96a7c1f 100644 --- a/lib/libalpm/trans.h +++ b/lib/libalpm/trans.h @@ -1,11 +1,11 @@  /*   *  trans.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -18,7 +18,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_TRANS_H @@ -50,13 +50,6 @@ struct __pmtrans_t {  	alpm_trans_cb_progress cb_progress;  }; -#define FREETRANS(p) \ -do { \ -	if(p) { \ -		_alpm_trans_free(p); \ -		p = NULL; \ -	} \ -} while (0)  #define EVENT(t, e, d1, d2) \  do { \  	if((t) && (t)->cb_event) { \ @@ -77,7 +70,7 @@ do { \  } while(0)  pmtrans_t *_alpm_trans_new(void); -void _alpm_trans_free(void *data); +void _alpm_trans_free(pmtrans_t *trans);  int _alpm_trans_init(pmtrans_t *trans, pmtranstype_t type, pmtransflag_t flags,                       alpm_trans_cb_event event, alpm_trans_cb_conv conv,                       alpm_trans_cb_progress progress); @@ -85,7 +78,9 @@ int _alpm_trans_sysupgrade(pmtrans_t *trans);  int _alpm_trans_addtarget(pmtrans_t *trans, char *target);  int _alpm_trans_prepare(pmtrans_t *trans, alpm_list_t **data);  int _alpm_trans_commit(pmtrans_t *trans, alpm_list_t **data); -int _alpm_trans_update_depends(pmtrans_t *trans, pmpkg_t *pkg); +int _alpm_runscriptlet(const char *root, const char *installfn, +                       const char *script, const char *ver, +                       const char *oldver, pmtrans_t *trans);  #endif /* _ALPM_TRANS_H */ diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index decb5959..2a429488 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -6,7 +6,7 @@   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,7 +19,7 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */ @@ -27,44 +27,133 @@  #include <stdio.h>  #include <stdlib.h> -#ifdef __sun__ -#include <alloca.h> -#endif  #include <string.h> -#include <unistd.h> -#include <errno.h>  #include <fcntl.h> +#include <unistd.h>  #include <ctype.h>  #include <dirent.h>  #include <time.h>  #include <syslog.h> -#include <sys/wait.h> -#if defined(__APPLE__) || defined(__OpenBSD__) -#include <sys/syslimits.h> -#endif -#if defined(__APPLE__) || defined(__OpenBSD__) || defined(__sun__) +#include <errno.h> +#include <sys/types.h>  #include <sys/stat.h> -#endif -#include <libintl.h> -#ifdef CYGWIN -#include <limits.h> /* PATH_MAX */ -#endif -#include <sys/statvfs.h> -#ifndef __sun__ -#include <mntent.h> -#endif + +/* libarchive */ +#include <archive.h> +#include <archive_entry.h>  /* libalpm */  #include "util.h" -#include "alpm_list.h"  #include "log.h" -#include "trans.h" -#include "sync.h"  #include "error.h"  #include "package.h"  #include "alpm.h" +#include "alpm_list.h" +#include "md5.h" + +#ifndef HAVE_STRVERSCMP +/* GNU's strverscmp() function, taken from glibc 2.3.2 sources + */ + +/* Compare strings while treating digits characters numerically. +   Copyright (C) 1997, 2002 Free Software Foundation, Inc. +   Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. +*/ + +/* states: S_N: normal, S_I: comparing integral part, S_F: comparing +           fractionnal parts, S_Z: idem but with leading Zeroes only */ +#define  S_N    0x0 +#define  S_I    0x4 +#define  S_F    0x8 +#define  S_Z    0xC + +/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ +#define  CMP    2 +#define  LEN    3 + +/* Compare S1 and S2 as strings holding indices/version numbers, +   returning less than, equal to or greater than zero if S1 is less than, +   equal to or greater than S2 (for more info, see the texinfo doc). +*/ + +int strverscmp (s1, s2) +     const char *s1; +     const char *s2; +{ +  const unsigned char *p1 = (const unsigned char *) s1; +  const unsigned char *p2 = (const unsigned char *) s2; +  unsigned char c1, c2; +  int state; +  int diff; + +  /* Symbol(s)    0       [1-9]   others  (padding) +     Transition   (10) 0  (01) d  (00) x  (11) -   */ +  static const unsigned int next_state[] = +  { +      /* state    x    d    0    - */ +      /* S_N */  S_N, S_I, S_Z, S_N, +      /* S_I */  S_N, S_I, S_I, S_I, +      /* S_F */  S_N, S_F, S_F, S_F, +      /* S_Z */  S_N, S_F, S_Z, S_Z +  }; + +  static const int result_type[] = +  { +      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/- +                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */ + +      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, +                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, +      /* S_I */  CMP, -1,  -1,  CMP, +1,  LEN, LEN, CMP, +                 +1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP, +      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, +                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, +      /* S_Z */  CMP, +1,  +1,  CMP, -1,  CMP, CMP, CMP, +                 -1,  CMP, CMP, CMP +  }; + +  if (p1 == p2) +    return 0; + +  c1 = *p1++; +  c2 = *p2++; +  /* Hint: '0' is a digit too.  */ +  state = S_N | ((c1 == '0') + (isdigit (c1) != 0)); + +  while ((diff = c1 - c2) == 0 && c1 != '\0') +    { +      state = next_state[state]; +      c1 = *p1++; +      c2 = *p2++; +      state |= (c1 == '0') + (isdigit (c1) != 0); +    } + +  state = result_type[state << 2 | (((c2 == '0') + (isdigit (c2) != 0)))]; + +  switch (state) +  { +    case CMP: +      return diff; + +    case LEN: +      while (isdigit (*p1++)) +	if (!isdigit (*p2++)) +	  return 1; + +      return isdigit (*p2) ? -1 : diff; + +    default: +      return state; +  } +} +#endif -#ifdef __sun__ +#ifndef HAVE_STRSEP  /* This is a replacement for strsep which is not portable (missing on Solaris).   * Copyright (c) 2001 by François Gouget <fgouget_at_codeweavers.com> */  char* strsep(char** str, const char* delims) @@ -89,33 +178,6 @@ char* strsep(char** str, const char* delims)  	*str=NULL;  	return token;  } - -/* Backported from Solaris Express 4/06 - * Copyright (c) 2006 Sun Microsystems, Inc. */ -char *mkdtemp(char *template) -{ -	char *t = alloca(strlen(template) + 1); -	char *r; - -	/* Save template */ -	(void) strcpy(t, template); -	for (; ; ) { -		r = mktemp(template); - -		if (*r == '\0') -			return (NULL); - -		if (mkdir(template, 0700) == 0) -			return (r); - -		/* Other errors indicate persistent conditions. */ -		if (errno != EEXIST) -			return (NULL); - -		/* Reset template */ -		(void) strcpy(template, t); -	} -}  #endif  /* does the same thing as 'mkdir -p' */ @@ -139,7 +201,7 @@ int _alpm_makepath(const char *path)  				if(mkdir(full, 0755)) {  					FREE(orig);  					umask(oldmask); -					_alpm_log(PM_LOG_ERROR, _("failed to make path '%s' : %s"), +					_alpm_log(PM_LOG_ERROR, _("failed to make path '%s' : %s\n"),  										path, strerror(errno));  					return(1);  				} @@ -167,30 +229,30 @@ int _alpm_copyfile(const char *src, const char *dest)  		return(1);  	} +	/* do the actual file copy */  	while((len = fread(buf, 1, 4096, in))) {  		fwrite(buf, 1, len, out);  	} -  	fclose(in); -	fclose(out); -	return(0); -} -/* Convert a string to uppercase - */ -char *_alpm_strtoupper(char *str) -{ -	char *ptr = str; - -	while(*ptr) { -		(*ptr) = toupper(*ptr); -		ptr++; +	/* chmod dest to permissions of src, as long as it is not a symlink */ +	struct stat statbuf; +	if(!stat(src, &statbuf)) { +		if(! S_ISLNK(statbuf.st_mode)) { +			fchmod(fileno(out), statbuf.st_mode); +		} +	} else { +		/* stat was unsuccessful */ +		fclose(out); +		return(1);  	} -	return(str); + +	fclose(out); +	return(0);  }  /* Trim whitespace and newlines from a string - */ +*/  char *_alpm_strtrim(char *str)  {  	char *pch = str; @@ -212,7 +274,7 @@ char *_alpm_strtrim(char *str)  		return(str);  	} -	pch = (char *)(str + (strlen(str) - 1)); +	pch = (str + (strlen(str) - 1));  	while(isspace((int)*pch)) {  		pch--;  	} @@ -221,12 +283,57 @@ char *_alpm_strtrim(char *str)  	return(str);  } -/* Create a lock file - */ -int _alpm_lckmk(const char *file) +/* Helper function for _alpm_strreplace */ +static void _strnadd(char **str, const char *append, unsigned int count) +{ +	if(*str) { +		*str = realloc(*str, strlen(*str) + count + 1); +	} else { +		*str = calloc(count + 1, sizeof(char)); +	} + +	strncat(*str, append, count); +} + +/* Replace all occurances of 'needle' with 'replace' in 'str', returning + * a new string (must be free'd) */ +char *_alpm_strreplace(const char *str, const char *needle, const char *replace) +{ +	const char *p, *q; +	p = q = str; + +	char *newstr = NULL; +	unsigned int needlesz = strlen(needle), +							 replacesz = strlen(replace); + +	while (1) { +		q = strstr(p, needle); +		if(!q) { /* not found */ +			if(*p) { +				/* add the rest of 'p' */ +				_strnadd(&newstr, p, strlen(p)); +			} +			break; +		} else { /* found match */ +			if(q > p){ +				/* add chars between this occurance and last occurance, if any */ +				_strnadd(&newstr, p, q - p); +			} +			_strnadd(&newstr, replace, replacesz); +			p = q + needlesz; +		} +	} + +	return newstr; +} + + +/* Create a lock file */ +int _alpm_lckmk()  {  	int fd, count = 0;  	char *dir, *ptr; +	const char *file = alpm_option_get_lockfile();  	/* create the dir of the lockfile first */  	dir = strdup(file); @@ -236,7 +343,7 @@ int _alpm_lckmk(const char *file)  	}  	_alpm_makepath(dir); -	while((fd = open(file, O_WRONLY | O_CREAT | O_EXCL, 0000)) == -1 && errno == EACCES) {  +	while((fd = open(file, O_WRONLY | O_CREAT | O_EXCL, 0000)) == -1 && errno == EACCES) {  		if(++count < 1) {  			sleep(1);  		}	else { @@ -244,27 +351,28 @@ int _alpm_lckmk(const char *file)  		}  	} -	free(dir); +	FREE(dir);  	return(fd > 0 ? fd : -1);  } -/* Remove a lock file - */ -int _alpm_lckrm(const char *file) +/* Remove a lock file */ +int _alpm_lckrm()  { +	const char *file = alpm_option_get_lockfile();  	if(unlink(file) == -1 && errno != ENOENT) {  		return(-1);  	}  	return(0);  } -/* Compression functions - */ +/* Compression functions */  int _alpm_unpack(const char *archive, const char *prefix, const char *fn)  { -	register struct archive *_archive; +	int ret = 0; +	mode_t oldmask; +	struct archive *_archive;  	struct archive_entry *entry;  	char expath[PATH_MAX]; @@ -276,31 +384,56 @@ int _alpm_unpack(const char *archive, const char *prefix, const char *fn)  	archive_read_support_compression_all(_archive);  	archive_read_support_format_all(_archive); -	if(archive_read_open_file(_archive, archive, ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { -		_alpm_log(PM_LOG_ERROR, _("could not open %s: %s\n"), archive, archive_error_string(_archive)); +	if(archive_read_open_filename(_archive, archive, +				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +		_alpm_log(PM_LOG_ERROR, _("could not open %s: %s\n"), archive, +				archive_error_string(_archive));  		RET_ERR(PM_ERR_PKG_OPEN, -1);  	} +	oldmask = umask(0022);  	while(archive_read_next_header(_archive, &entry) == ARCHIVE_OK) { -		if (fn && strcmp(fn, archive_entry_pathname(entry))) { -			if (archive_read_data_skip(_archive) != ARCHIVE_OK) -				return(1); +		const struct stat *st; +		const char *entryname; /* the name of the file in the archive */ + +		st = archive_entry_stat(entry); +		entryname = archive_entry_pathname(entry); +		 +		if(S_ISREG(st->st_mode)) { +			archive_entry_set_mode(entry, 0644); +		} + +		if (fn && strcmp(fn, entryname)) { +			if (archive_read_data_skip(_archive) != ARCHIVE_OK) { +				ret = 1; +				goto cleanup; +			}  			continue;  		} -		snprintf(expath, PATH_MAX, "%s/%s", prefix, archive_entry_pathname(entry)); +		snprintf(expath, PATH_MAX, "%s/%s", prefix, entryname);  		archive_entry_set_pathname(entry, expath); -		if(archive_read_extract(_archive, entry, ARCHIVE_EXTRACT_FLAGS) != ARCHIVE_OK) { -			_alpm_log(PM_LOG_ERROR, _("could not extract %s: %s\n"), archive_entry_pathname(entry), archive_error_string(_archive)); -			 return(1); + +		int readret = archive_read_extract(_archive, entry, 0); +		if(readret == ARCHIVE_WARN) { +			/* operation succeeded but a non-critical error was encountered */ +			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", +					entryname, archive_error_string(_archive)); +		} else if(readret != ARCHIVE_OK) { +			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), +					entryname, archive_error_string(_archive)); +			ret = 1; +			goto cleanup;  		}  		if(fn) {  			break;  		}  	} -	 + +cleanup: +	umask(oldmask);  	archive_read_finish(_archive); -	return(0); +	return(ret);  }  /* does the same thing as 'rm -rf' */ @@ -312,7 +445,7 @@ int _alpm_rmrf(const char *path)  	char name[PATH_MAX];  	struct stat st; -	if(lstat(path, &st) == 0) { +	if(_alpm_lstat(path, &st) == 0) {  		if(!S_ISDIR(st.st_mode)) {  			if(!unlink(path)) {  				return(0); @@ -345,12 +478,12 @@ int _alpm_rmrf(const char *path)  	return(0);  } -int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *str) +int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *fmt, va_list args)  { -	_alpm_log(PM_LOG_DEBUG, _("logaction called: %s"), str); +	int ret = 0;  	if(usesyslog) { -		syslog(LOG_WARNING, "%s", str); +		vsyslog(LOG_WARNING, fmt, args);  	}  	if(f) { @@ -361,14 +494,14 @@ int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *str)  		tm = localtime(&t);  		/* Use ISO-8601 date format */ -		fprintf(f, "[%04d-%02d-%02d %02d:%02d] %s\n", -		        tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, -		        tm->tm_hour, tm->tm_min, str); - +		fprintf(f, "[%04d-%02d-%02d %02d:%02d] ", +						tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, +						tm->tm_hour, tm->tm_min); +		ret = vfprintf(f, fmt, args);  		fflush(f);  	} -	return(0); +	return(ret);  }  int _alpm_ldconfig(const char *root) @@ -389,272 +522,141 @@ int _alpm_ldconfig(const char *root)  	return(0);  } -/* A cheap grep for text files, returns 1 if a substring - * was found in the text file fn, 0 if it wasn't - */ -static int grep(const char *fn, const char *needle) +/* Helper function for comparing strings using the + * alpm "compare func" signature */ +int _alpm_str_cmp(const void *s1, const void *s2)  { -	FILE *fp; - -	if((fp = fopen(fn, "r")) == NULL) { -		return(0); -	} -	while(!feof(fp)) { -		char line[1024]; -		fgets(line, 1024, fp); -		if(feof(fp)) { -			continue; -		} -		if(strstr(line, needle)) { -			fclose(fp); -			return(1); -		} -	} -	fclose(fp); -	return(0); +	return(strcmp(s1, s2));  } -int _alpm_runscriptlet(const char *root, const char *installfn, -											 const char *script, const char *ver, -											 const char *oldver, pmtrans_t *trans) +/** Find a package file in an alpm cachedir. + * @param filename name of package file to find + * @return malloced path of file, NULL if not found + */ +char *_alpm_filecache_find(const char* filename)  { -	char scriptfn[PATH_MAX]; -	char cmdline[PATH_MAX]; -	char tmpdir[PATH_MAX] = ""; -	char *scriptpath;  	struct stat buf; -	char cwd[PATH_MAX] = ""; -	pid_t pid; -	int retval = 0; - -	ALPM_LOG_FUNC; - -	if(stat(installfn, &buf)) { -		/* not found */ -		_alpm_log(PM_LOG_DEBUG, "scriptlet '%s' not found", installfn); -		return(0); -	} +	char path[PATH_MAX]; +	char *retpath; +	alpm_list_t *i; -	if(!strcmp(script, "pre_upgrade") || !strcmp(script, "pre_install")) { -		snprintf(tmpdir, PATH_MAX, "%stmp/", root); -		if(stat(tmpdir, &buf)) { -			_alpm_makepath(tmpdir); +	/* Loop through the cache dirs until we find a matching file */ +	for(i = alpm_option_get_cachedirs(); i; i = alpm_list_next(i)) { +		snprintf(path, PATH_MAX, "%s%s", (char*)alpm_list_getdata(i), +				filename); +		if(stat(path, &buf) == 0) { +			/* TODO maybe check to make sure it is readable? */ +			retpath = strdup(path); +			_alpm_log(PM_LOG_DEBUG, "found cached pkg: %s\n", retpath); +			return(retpath);  		} -		snprintf(tmpdir, PATH_MAX, "%stmp/alpm_XXXXXX", root); -		if(mkdtemp(tmpdir) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not create temp directory")); -			return(1); -		} -		_alpm_unpack(installfn, tmpdir, ".INSTALL"); -		snprintf(scriptfn, PATH_MAX, "%s/.INSTALL", tmpdir); -		/* chop off the root so we can find the tmpdir in the chroot */ -		scriptpath = scriptfn + strlen(root) - 1; -	} else { -		STRNCPY(scriptfn, installfn, PATH_MAX); -		/* chop off the root so we can find the tmpdir in the chroot */ -		scriptpath = scriptfn + strlen(root) - 1; -	} - -	if(!grep(scriptfn, script)) { -		/* script not found in scriptlet file */ -		goto cleanup; -	} - -	/* save the cwd so we can restore it later */ -	if(getcwd(cwd, PATH_MAX) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("could not get current working directory")); -		/* in case of error, cwd content is undefined: so we set it to something */ -		cwd[0] = 0; -	} - -	/* just in case our cwd was removed in the upgrade operation */ -	if(chdir(root) != 0) { -		_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)"), root, strerror(errno)); -		goto cleanup; -	} - -	_alpm_log(PM_LOG_DEBUG, _("executing %s script..."), script); - -	if(oldver) { -		snprintf(cmdline, PATH_MAX, "source %s %s %s %s", -				scriptpath, script, ver, oldver); -	} else { -		snprintf(cmdline, PATH_MAX, "source %s %s %s", -				scriptpath, script, ver); -	} -	_alpm_log(PM_LOG_DEBUG, "%s", cmdline); - -	pid = fork(); -	if(pid == -1) { -		_alpm_log(PM_LOG_ERROR, _("could not fork a new process (%s)"), strerror(errno)); -		retval = 1; -		goto cleanup;  	} +	/* package wasn't found in any cachedir */ +	return(NULL); +} -	if(pid == 0) { -		FILE *pp; -		_alpm_log(PM_LOG_DEBUG, _("chrooting in %s"), root); -		if(chroot(root) != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not change the root directory (%s)"), strerror(errno)); -			return(1); -		} -		if(chdir("/") != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not change directory to / (%s)"), strerror(errno)); -			return(1); -		} -		umask(0022); -		_alpm_log(PM_LOG_DEBUG, _("executing \"%s\""), cmdline); -		pp = popen(cmdline, "r"); -		if(!pp) { -			_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"), strerror(errno)); -			retval = 1; -			goto cleanup; -		} -		while(!feof(pp)) { -			char line[1024]; -			if(fgets(line, 1024, pp) == NULL) -				break; -			/*TODO clean this code up, remove weird SCRIPTLET_START/DONE, -			 * (void*)atol call, etc. */ -			/* "START <event desc>" */ -			if((strlen(line) > strlen(SCRIPTLET_START)) -			   && !strncmp(line, SCRIPTLET_START, strlen(SCRIPTLET_START))) { -				EVENT(trans, PM_TRANS_EVT_SCRIPTLET_START, -				      _alpm_strtrim(line + strlen(SCRIPTLET_START)), NULL); -			/* "DONE <ret code>" */ -			} else if((strlen(line) > strlen(SCRIPTLET_DONE)) -			          && !strncmp(line, SCRIPTLET_DONE, strlen(SCRIPTLET_DONE))) { -				EVENT(trans, PM_TRANS_EVT_SCRIPTLET_DONE, -				      (void*)atol(_alpm_strtrim(line + strlen(SCRIPTLET_DONE))), -				      NULL); -			} else { -				_alpm_strtrim(line); -				/* log our script output */ -				alpm_logaction(line); -				EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL); +/** Check the alpm cachedirs for existance and find a writable one. + * If no valid cache directory can be found, use /tmp. + * @return pointer to a writable cache directory. + */ +const char *_alpm_filecache_setup(void) +{ +	struct stat buf; +	alpm_list_t *i, *tmp; +	char *cachedir; + +	/* Loop through the cache dirs until we find a writeable dir */ +	for(i = alpm_option_get_cachedirs(); i; i = alpm_list_next(i)) { +		cachedir = alpm_list_getdata(i); +		if(stat(cachedir, &buf) != 0) { +			/* cache directory does not exist.... try creating it */ +			_alpm_log(PM_LOG_WARNING, _("no %s cache exists, creating...\n"), +					cachedir); +			alpm_logaction("warning: no %s cache exists, creating...\n", +					cachedir); +			if(_alpm_makepath(cachedir) == 0) { +				_alpm_log(PM_LOG_DEBUG, "using cachedir: %s\n", cachedir); +				return(cachedir);  			} -		} -		pclose(pp); -		exit(0); -	} else { -		if(waitpid(pid, 0, 0) == -1) { -			_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)"), -			          strerror(errno)); -			retval = 1; -			goto cleanup; +		} else if(S_ISDIR(buf.st_mode) && (buf.st_mode & S_IWUSR)) { +			_alpm_log(PM_LOG_DEBUG, "using cachedir: %s\n", cachedir); +			return(cachedir);  		}  	} -cleanup: -	if(strlen(tmpdir) && _alpm_rmrf(tmpdir)) { -		_alpm_log(PM_LOG_WARNING, _("could not remove tmpdir %s"), tmpdir); -	} -	if(strlen(cwd)) { -		chdir(cwd); -	} - -	return(retval); +	/* we didn't find a valid cache directory. use /tmp. */ +	i = alpm_option_get_cachedirs(); +	tmp = alpm_list_add(NULL, strdup("/tmp/")); +	FREELIST(i); +	alpm_option_set_cachedirs(tmp); +	_alpm_log(PM_LOG_DEBUG, "using cachedir: %s", "/tmp/\n"); +	_alpm_log(PM_LOG_WARNING, _("couldn't create package cache, using /tmp instead\n")); +	alpm_logaction("warning: couldn't create package cache, using /tmp instead\n"); +	return(alpm_list_getdata(tmp));  } -#ifndef __sun__ -static long long get_freespace() +/** lstat wrapper that treats /path/dirsymlink/ the same as /path/dirsymlink. + * Linux lstat follows POSIX semantics and still performs a dereference on + * the first, and for uses of lstat in libalpm this is not what we want. + * @param path path to file to lstat + * @param buf structure to fill with stat information + * @return the return code from lstat + */ +int _alpm_lstat(const char *path, struct stat *buf)  { -	struct mntent *mnt; -	const char *table = MOUNTED; -	FILE *fp; -	long long ret=0; - -	if((fp = setmntent(table, "r")) == NULL) { -		_alpm_log(PM_LOG_ERROR, _("cannot read disk space information from %s: %s"), -							table, strerror(errno)); -		return(-1); -	} - -	while ((mnt = getmntent(fp))) -	{ -		struct statvfs64 buf; +	int ret; +	char *newpath = strdup(path); +	int len = strlen(newpath); -		statvfs64(mnt->mnt_dir, &buf); -		ret += buf.f_bavail * buf.f_bsize; +	/* strip the trailing slash if one exists */ +	if(len != 0 && newpath[len - 1] == '/') { +			newpath[len - 1] = '\0';  	} -	endmntent(fp); +	ret = lstat(newpath, buf); +	FREE(newpath);  	return(ret);  } -int _alpm_check_freespace(pmtrans_t *trans, alpm_list_t **data) +/** Get the md5 sum of file. + * @param filename name of the file + * @return the checksum on success, NULL on error + * @addtogroup alpm_misc + */ +char SYMEXPORT *alpm_get_md5sum(const char *filename)  { -	alpm_list_t *i; -	long long pkgsize=0, freespace; +	unsigned char output[16]; +	char *md5sum; +	int ret, i;  	ALPM_LOG_FUNC; -	for(i = trans->packages; i; i = i->next) { -		if(trans->type == PM_TRANS_TYPE_SYNC) -		{ -			pmsyncpkg_t *sync = i->data; -			if(sync->type != PM_SYNC_TYPE_REPLACE) { -				pmpkg_t *pkg = sync->pkg; -				pkgsize += alpm_pkg_get_isize(pkg); -			} -		} -		else -		{ -			pmpkg_t *pkg = i->data; -			pkgsize += alpm_pkg_get_size(pkg); -		} -	} -	freespace = get_freespace(); -	_alpm_log(PM_LOG_DEBUG, _("check_freespace: total pkg size: %lld, disk space: %lld"), pkgsize, freespace); -	if(pkgsize > freespace) { -		if(data) { -			long long *ptr; -			if((ptr = (long long*)malloc(sizeof(long long)))==NULL) { -				_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(long long)); -				pm_errno = PM_ERR_MEMORY; -				return(-1); -			} -			*ptr = pkgsize; -			*data = alpm_list_add(*data, ptr); -			if((ptr = (long long*)malloc(sizeof(long long)))==NULL) { -				_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(long long)); -				FREELIST(*data); -				pm_errno = PM_ERR_MEMORY; -				return(-1); -			} -			*ptr = freespace; -			*data = alpm_list_add(*data, ptr); +	ASSERT(filename != NULL, return(NULL)); + +	/* allocate 32 chars plus 1 for null */ +	md5sum = calloc(33, sizeof(char)); +	ret = md5_file(filename, output); + +	if (ret > 0) { +		if (ret == 1) { +			_alpm_log(PM_LOG_ERROR, _("md5: %s can't be opened\n"), filename); +		} else if (ret == 2) { +			_alpm_log(PM_LOG_ERROR, _("md5: %s can't be read\n"), filename);  		} -		pm_errno = PM_ERR_DISK_FULL; -		return(-1); -	} -	else { -		return(0); + +		return(NULL);  	} -} -#endif -/* convert a time_t to a string - buffer MUST be large enough for - * YYYYMMDDHHMMSS - 15 chars */ -void _alpm_time2string(time_t t, char *buffer) -{ -	if(buffer) { -		struct tm *lt; -		lt = localtime(&t); -		sprintf(buffer, "%4d%02d%02d%02d%02d%02d", -						lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, -						lt->tm_hour, lt->tm_min, lt->tm_sec); -		buffer[14] = '\0'; +	/* Convert the result to something readable */ +	for (i = 0; i < 16; i++) { +		/* sprintf is acceptable here because we know our output */ +		sprintf(md5sum +(i * 2), "%02x", output[i]);  	} -} +	md5sum[32] = '\0'; -/* Helper function for comparing strings using the - * alpm "compare func" signature */ -int _alpm_str_cmp(const void *s1, const void *s2) -{ -	return(strcmp(s1, s2)); +	_alpm_log(PM_LOG_DEBUG, "md5(%s) = %s\n", filename, md5sum); +	return(md5sum);  } -  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h index 9f028e8a..89ac3204 100644 --- a/lib/libalpm/util.h +++ b/lib/libalpm/util.h @@ -1,12 +1,12 @@  /*   *  util.h - *  + *   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>   *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>   *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>   *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  + *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by   *  the Free Software Foundation; either version 2 of the License, or @@ -19,71 +19,66 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  + *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   *  USA.   */  #ifndef _ALPM_UTIL_H  #define _ALPM_UTIL_H -#include <stdio.h> -#if defined(__OpenBSD__) -#include "/usr/local/include/archive.h" -#include "/usr/local/include/archive_entry.h" -#else -#include <archive.h> -#include <archive_entry.h> -#endif - -#define FREE(p) do { if (p) { free(p); p = NULL; } } while(0) - -#define ASSERT(cond, action) do { if(!(cond)) { action; } } while(0) - -#define STRNCPY(s1, s2, len) do { \ -	strncpy(s1, s2, (len)-1); \ -	s1[(len)-1] = 0; \ -} while(0) +#include "config.h" -#define ARCHIVE_EXTRACT_FLAGS ARCHIVE_EXTRACT_OWNER | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_TIME +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <time.h> +#include <sys/stat.h> /* struct stat */  #ifdef ENABLE_NLS +#include <libintl.h> /* here so it doesn't need to be included elsewhere */ +/* define _() as shortcut for gettext() */  #define _(str) dgettext ("libalpm", str)  #else  #define _(s) s  #endif -/*TODO wtf? why is this done like this? */ -#define SCRIPTLET_START "START " -#define SCRIPTLET_DONE "DONE " +#define ALLOC_FAIL(s) do { _alpm_log(PM_LOG_ERROR, _("alloc failure: could not allocate %zd bytes\n"), s); } while(0) + +#define MALLOC(p, s, action) do { p = calloc(1, s); if(p == NULL) { ALLOC_FAIL(s); action; } } while(0) +#define CALLOC(p, l, s, action) do { p = calloc(l, s); if(p == NULL) { ALLOC_FAIL(s); action; } } while(0) +#define STRDUP(r, s, action) do { r = strdup(s); if(r == NULL) { ALLOC_FAIL(strlen(s)); action; } } while(0) + +#define FREE(p) do { if(p) { free(p); p = NULL; } } while(0) + +#define ASSERT(cond, action) do { if(!(cond)) { action; } } while(0)  int _alpm_makepath(const char *path);  int _alpm_copyfile(const char *src, const char *dest); -char *_alpm_strtoupper(char *str);  char *_alpm_strtrim(char *str); -int _alpm_lckmk(const char *file); -int _alpm_lckrm(const char *file); +char *_alpm_strreplace(const char *str, const char *needle, const char *replace); +int _alpm_lckmk(); +int _alpm_lckrm();  int _alpm_unpack(const char *archive, const char *prefix, const char *fn);  int _alpm_rmrf(const char *path); -int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *str); +int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *fmt, va_list args);  int _alpm_ldconfig(const char *root); -#ifdef _ALPM_TRANS_H -int _alpm_runscriptlet(const char *root, const char *installfn, -											 const char *script, const char *ver, -											 const char *oldver, pmtrans_t *trans); -#ifndef __sun__ -int _alpm_check_freespace(pmtrans_t *trans, alpm_list_t **data); -#endif -#endif -void _alpm_time2string(time_t t, char *buffer);  int _alpm_str_cmp(const void *s1, const void *s2); +char *_alpm_filecache_find(const char *filename); +const char *_alpm_filecache_setup(void); +int _alpm_lstat(const char *path, struct stat *buf); -#ifdef __sun__ -char* strsep(char** str, const char* delims); -char* mkdtemp(char *template); +#ifndef HAVE_STRVERSCMP +int strverscmp(const char *, const char *); +#endif +#ifndef HAVE_STRSEP +char *strsep(char **, const char *);  #endif  /* check exported library symbols with: nm -C -D <lib> */  #define SYMEXPORT __attribute__((visibility("default"))) -#define SYMHIDDEN __attribute__((visibility("hidden"))) +#define SYMHIDDEN __attribute__((visibility("internal"))) + +/* max percent of package size to download deltas */ +#define MAX_DELTA_RATIO 0.7  #endif /* _ALPM_UTIL_H */ diff --git a/lib/libalpm/versioncmp.c b/lib/libalpm/versioncmp.c deleted file mode 100644 index 7e22ec9c..00000000 --- a/lib/libalpm/versioncmp.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - *  versioncmp.c - * - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com> - *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org> - *  - *  This program is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,  - *  USA. - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> -#include <string.h> -#include <libintl.h> - -/* libalpm */ -#include "versioncmp.h" -#include "alpm_list.h" -#include "alpm.h" -#include "log.h" -#include "util.h" - -#ifndef HAVE_STRVERSCMP -/* GNU's strverscmp() function, taken from glibc 2.3.2 sources - */ - -/* Compare strings while treating digits characters numerically. -   Copyright (C) 1997, 2002 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, write to the Free -   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -   02111-1307 USA.  */ - -/* states: S_N: normal, S_I: comparing integral part, S_F: comparing -           fractionnal parts, S_Z: idem but with leading Zeroes only */ -#define  S_N    0x0 -#define  S_I    0x4 -#define  S_F    0x8 -#define  S_Z    0xC - -/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ -#define  CMP    2 -#define  LEN    3 - -/* Compare S1 and S2 as strings holding indices/version numbers, -   returning less than, equal to or greater than zero if S1 is less than, -   equal to or greater than S2 (for more info, see the texinfo doc). -*/ - -static int strverscmp (s1, s2) -     const char *s1; -     const char *s2; -{ -  const unsigned char *p1 = (const unsigned char *) s1; -  const unsigned char *p2 = (const unsigned char *) s2; -  unsigned char c1, c2; -  int state; -  int diff; - -  /* Symbol(s)    0       [1-9]   others  (padding) -     Transition   (10) 0  (01) d  (00) x  (11) -   */ -  static const unsigned int next_state[] = -  { -      /* state    x    d    0    - */ -      /* S_N */  S_N, S_I, S_Z, S_N, -      /* S_I */  S_N, S_I, S_I, S_I, -      /* S_F */  S_N, S_F, S_F, S_F, -      /* S_Z */  S_N, S_F, S_Z, S_Z -  }; - -  static const int result_type[] = -  { -      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/- -                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */ - -      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, -                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, -      /* S_I */  CMP, -1,  -1,  CMP, +1,  LEN, LEN, CMP, -                 +1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP, -      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, -                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, -      /* S_Z */  CMP, +1,  +1,  CMP, -1,  CMP, CMP, CMP, -                 -1,  CMP, CMP, CMP -  }; - -  if (p1 == p2) -    return 0; - -  c1 = *p1++; -  c2 = *p2++; -  /* Hint: '0' is a digit too.  */ -  state = S_N | ((c1 == '0') + (isdigit (c1) != 0)); - -  while ((diff = c1 - c2) == 0 && c1 != '\0') -    { -      state = next_state[state]; -      c1 = *p1++; -      c2 = *p2++; -      state |= (c1 == '0') + (isdigit (c1) != 0); -    } - -  state = result_type[state << 2 | (((c2 == '0') + (isdigit (c2) != 0)))]; - -  switch (state) -  { -    case CMP: -      return diff; - -    case LEN: -      while (isdigit (*p1++)) -	if (!isdigit (*p2++)) -	  return 1; - -      return isdigit (*p2) ? -1 : diff; - -    default: -      return state; -  } -} - -#endif - -/* this function was taken from rpm 4.0.4 and rewritten */ -int _alpm_versioncmp(const char *a, const char *b) -{ -	char str1[64], str2[64]; -	char *ptr1, *ptr2; -	char *one, *two; -	char *rel1 = NULL, *rel2 = NULL; -	char oldch1, oldch2; -	int is1num, is2num; -	int rc; - -	ALPM_LOG_FUNC; - -	if(!strcmp(a,b)) { -		return(0); -	} - -	strncpy(str1, a, 64); -	str1[63] = 0; -	strncpy(str2, b, 64); -	str2[63] = 0; - -	/* lose the release number */ -	for(one = str1; *one && *one != '-'; one++); -	if(one) { -		*one = '\0'; -		rel1 = ++one; -	} -	for(two = str2; *two && *two != '-'; two++); -	if(two) { -		*two = '\0'; -		rel2 = ++two; -	} - -	one = str1; -	two = str2; - -	while(*one || *two) { -		while(*one && !isalnum((int)*one)) one++; -		while(*two && !isalnum((int)*two)) two++; - -		ptr1 = one; -		ptr2 = two; - -		/* find the next segment for each string */ -		if(isdigit((int)*ptr1)) { -			is1num = 1; -			while(*ptr1 && isdigit((int)*ptr1)) ptr1++; -		} else { -			is1num = 0; -			while(*ptr1 && isalpha((int)*ptr1)) ptr1++; -		} -		if(isdigit((int)*ptr2)) { -			is2num = 1; -			while(*ptr2 && isdigit((int)*ptr2)) ptr2++; -		} else { -			is2num = 0; -			while(*ptr2 && isalpha((int)*ptr2)) ptr2++; -		} - -		oldch1 = *ptr1; -		*ptr1 = '\0'; -		oldch2 = *ptr2; -		*ptr2 = '\0'; - -		/* see if we ran out of segments on one string */ -		if(one == ptr1 && two != ptr2) { -			return(is2num ? -1 : 1); -		} -		if(one != ptr1 && two == ptr2) { -			return(is1num ? 1 : -1); -		} - -		/* see if we have a type mismatch (ie, one is alpha and one is digits) */ -		if(is1num && !is2num) return(1); -		if(!is1num && is2num) return(-1); - -		if(is1num) while(*one == '0') one++; -		if(is2num) while(*two == '0') two++; - -		rc = strverscmp(one, two); -		if(rc) return(rc); - -		*ptr1 = oldch1; -		*ptr2 = oldch2; -		one = ptr1; -		two = ptr2; -	} - -	if((!*one) && (!*two)) { -		/* compare release numbers */ -		if(rel1 && rel2 && strlen(rel1) && strlen(rel2)) return(_alpm_versioncmp(rel1, rel2)); -		return(0); -	} - -	return(*one ? 1 : -1); -} - -int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep) -{ -	int equal = 0; - -	ALPM_LOG_FUNC; - -  if(strcmp(pkg->name, dep->name) == 0 -	    || alpm_list_find_str(alpm_pkg_get_provides(pkg), dep->name)) { -		if(dep->mod == PM_DEP_MOD_ANY) { -			equal = 1; -		} else { -			int cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), dep->version); -			switch(dep->mod) { -				case PM_DEP_MOD_EQ: equal = (cmp == 0); break; -				case PM_DEP_MOD_GE: equal = (cmp >= 0); break; -				case PM_DEP_MOD_LE: equal = (cmp <= 0); break; -				default: equal = 1; break; -			} -		} - -		char *mod = "~="; -		switch(dep->mod) { -			case PM_DEP_MOD_EQ: mod = "=="; break; -			case PM_DEP_MOD_GE: mod = ">="; break; -			case PM_DEP_MOD_LE: mod = "<="; break; -			default: break; -		} - -		if(strlen(dep->version) > 0) { -			_alpm_log(PM_LOG_DEBUG, _("depcmp: %s-%s %s %s-%s => %s"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg), -								mod, dep->name, dep->version, -								(equal ? "match" : "no match")); -		} else { -			_alpm_log(PM_LOG_DEBUG, _("depcmp: %s-%s %s %s => %s"), -								alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg), -								mod, dep->name,  -								(equal ? "match" : "no match")); -		} -	} - -	return equal; -} - - -/* vim: set ts=2 sw=2 noet: */  | 
