Fixed installing exact pkg versions on pkgs with hyphens, we use equal sign as delimiter now.
This commit is contained in:
3
NEWS
3
NEWS
@ -3,9 +3,10 @@ xbps-0.16 (???):
|
|||||||
* xbps-bin(8): the 'install' target now can (re)install an exact package
|
* xbps-bin(8): the 'install' target now can (re)install an exact package
|
||||||
version as specified on its arguments, i.e:
|
version as specified on its arguments, i.e:
|
||||||
|
|
||||||
$ xbps-bin install foo-1.0
|
$ xbps-bin install foo=1.0
|
||||||
|
|
||||||
If that version is not available no other version will be installed.
|
If that version is not available no other version will be installed.
|
||||||
|
The equal sign must be used to specify exact versions.
|
||||||
|
|
||||||
* xbps-repo(8): 'genindex' target is now able to remove binary packages
|
* xbps-repo(8): 'genindex' target is now able to remove binary packages
|
||||||
when a greater version exists on the index.
|
when a greater version exists on the index.
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
*/
|
*/
|
||||||
#define XBPS_PKGINDEX_VERSION "1.5"
|
#define XBPS_PKGINDEX_VERSION "1.5"
|
||||||
|
|
||||||
#define XBPS_API_VERSION "20120602"
|
#define XBPS_API_VERSION "20120603"
|
||||||
#define XBPS_VERSION "0.16"
|
#define XBPS_VERSION "0.16"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -243,14 +243,16 @@ xbps_transaction_install_pkg(const char *pkg, bool reinstall)
|
|||||||
{
|
{
|
||||||
prop_dictionary_t pkgd;
|
prop_dictionary_t pkgd;
|
||||||
pkg_state_t state;
|
pkg_state_t state;
|
||||||
char *pkgname;
|
size_t len, i;
|
||||||
|
char *pkgname, *pkgstr = NULL;
|
||||||
bool bypattern, best, exact;
|
bool bypattern, best, exact;
|
||||||
|
int rv;
|
||||||
|
|
||||||
if (xbps_pkgpattern_version(pkg)) {
|
if (xbps_pkgpattern_version(pkg)) {
|
||||||
bypattern = true;
|
bypattern = true;
|
||||||
best = false;
|
best = false;
|
||||||
exact = false;
|
exact = false;
|
||||||
} else if (xbps_pkg_version(pkg)) {
|
} else if (strchr(pkg, '=')) {
|
||||||
exact = true;
|
exact = true;
|
||||||
bypattern = false;
|
bypattern = false;
|
||||||
best = false;
|
best = false;
|
||||||
@ -261,10 +263,23 @@ xbps_transaction_install_pkg(const char *pkg, bool reinstall)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (exact) {
|
if (exact) {
|
||||||
pkgname = xbps_pkg_name(pkg);
|
/* find out pkgname */
|
||||||
|
pkgname = strdup(pkg);
|
||||||
assert(pkgname != NULL);
|
assert(pkgname != NULL);
|
||||||
|
len = strcspn(pkg, "=");
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
pkgname[i] = pkg[i];
|
||||||
|
pkgname[i] = '\0';
|
||||||
pkgd = xbps_pkgdb_get_pkgd(pkgname, false);
|
pkgd = xbps_pkgdb_get_pkgd(pkgname, false);
|
||||||
free(pkgname);
|
free(pkgname);
|
||||||
|
/* replace equal with an hyphen */
|
||||||
|
pkgstr = strdup(pkg);
|
||||||
|
for (i = 0; i < strlen(pkgstr); i++) {
|
||||||
|
if (pkgstr[i] == '=') {
|
||||||
|
pkgstr[i] = '-';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pkgd = xbps_pkgdb_get_pkgd(pkg, bypattern);
|
pkgd = xbps_pkgdb_get_pkgd(pkg, bypattern);
|
||||||
}
|
}
|
||||||
@ -280,7 +295,12 @@ xbps_transaction_install_pkg(const char *pkg, bool reinstall)
|
|||||||
return EEXIST;
|
return EEXIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return transaction_find_pkg(pkg, bypattern, best, exact, TRANS_INSTALL);
|
rv = transaction_find_pkg(pkgstr ? pkgstr : pkg, bypattern,
|
||||||
|
best, exact, TRANS_INSTALL);
|
||||||
|
if (pkgstr != NULL)
|
||||||
|
free(pkgstr);
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
Reference in New Issue
Block a user