libxbps: make relative cachedir set via xbps.d(5) work again.
Close #117
This commit is contained in:
parent
21be2318cf
commit
d8fc08eb50
3
NEWS
3
NEWS
@ -1,5 +1,8 @@
|
|||||||
xbps-0.48 (???):
|
xbps-0.48 (???):
|
||||||
|
|
||||||
|
* libxbps: relative cachedir set via xbps.d(5) now work correctly.
|
||||||
|
Fixes #117 (https://github.com/voidlinux/xbps/issues/117)
|
||||||
|
|
||||||
* xbps-create(1): --compression now accepts "none" to not use any
|
* xbps-create(1): --compression now accepts "none" to not use any
|
||||||
compression format.
|
compression format.
|
||||||
|
|
||||||
|
@ -55,38 +55,34 @@ static int parse_file(struct xbps_handle *, const char *, const char *, bool);
|
|||||||
* Use these functions to initialize some parameters before start
|
* Use these functions to initialize some parameters before start
|
||||||
* using libxbps and finalize usage to release resources at the end.
|
* using libxbps and finalize usage to release resources at the end.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
store_vpkg(struct xbps_handle *xhp, const char *path, size_t line, char *vpkg_s)
|
store_vars(struct xbps_handle *xhp, xbps_dictionary_t *d,
|
||||||
|
const char *key, const char *path, size_t line, char *buf)
|
||||||
{
|
{
|
||||||
|
char *lp, *rp, *tc;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (*d == NULL)
|
||||||
|
*d = xbps_dictionary_create();
|
||||||
/*
|
/*
|
||||||
* Append virtual package overrides to our vpkgd dictionary:
|
* Parse strings delimited by ':' i.e
|
||||||
*
|
* <left>:<right>
|
||||||
* <key>vpkgver</key>
|
|
||||||
* <string>realpkgname</string>
|
|
||||||
*/
|
*/
|
||||||
char *vpkg, *rpkg, *tc;
|
lp = buf;
|
||||||
size_t vpkglen;
|
rp = strchr(buf, ':');
|
||||||
|
if (rp == NULL || *rp == '\0') {
|
||||||
if (xhp->vpkgd == NULL)
|
|
||||||
xhp->vpkgd = xbps_dictionary_create();
|
|
||||||
|
|
||||||
/* real pkg after ':' */
|
|
||||||
vpkg = vpkg_s;
|
|
||||||
rpkg = strchr(vpkg_s, ':');
|
|
||||||
if (rpkg == NULL || *rpkg == '\0') {
|
|
||||||
xbps_dbg_printf(xhp, "%s: ignoring invalid "
|
xbps_dbg_printf(xhp, "%s: ignoring invalid "
|
||||||
"virtualpkg option at line %zu\n", path, line);
|
"%s option at line %zu\n", path, key, line);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* vpkg until ':' */
|
tc = strchr(buf, ':');
|
||||||
tc = strchr(vpkg_s, ':');
|
len = strlen(buf) - strlen(tc);
|
||||||
vpkglen = strlen(vpkg_s) - strlen(tc);
|
lp[len] = '\0';
|
||||||
vpkg[vpkglen] = '\0';
|
|
||||||
|
|
||||||
/* skip ':' */
|
rp++;
|
||||||
rpkg++;
|
xbps_dictionary_set_cstring(*d, lp, rp);
|
||||||
xbps_dictionary_set_cstring(xhp->vpkgd, vpkg, rpkg);
|
xbps_dbg_printf(xhp, "%s: added %s %s for %s\n", path, key, lp, rp);
|
||||||
xbps_dbg_printf(xhp, "%s: added vpkg %s for %s\n", path, vpkg, rpkg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -262,7 +258,7 @@ parse_file(struct xbps_handle *xhp, const char *cwd, const char *path, bool nest
|
|||||||
if (store_repo(xhp, v))
|
if (store_repo(xhp, v))
|
||||||
xbps_dbg_printf(xhp, "%s: added repository %s\n", path, v);
|
xbps_dbg_printf(xhp, "%s: added repository %s\n", path, v);
|
||||||
} else if (strcmp(k, "virtualpkg") == 0) {
|
} else if (strcmp(k, "virtualpkg") == 0) {
|
||||||
store_vpkg(xhp, path, nlines, v);
|
store_vars(xhp, &xhp->vpkgd, k, path, nlines, v);
|
||||||
} else if (strcmp(k, "preserve") == 0) {
|
} else if (strcmp(k, "preserve") == 0) {
|
||||||
store_preserved_file(xhp, v);
|
store_preserved_file(xhp, v);
|
||||||
} else if (strcmp(k, "bestmatching") == 0) {
|
} else if (strcmp(k, "bestmatching") == 0) {
|
||||||
@ -416,30 +412,6 @@ xbps_init(struct xbps_handle *xhp)
|
|||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
xbps_dbg_printf(xhp, "%s\n", XBPS_RELVER);
|
xbps_dbg_printf(xhp, "%s\n", XBPS_RELVER);
|
||||||
/* Set cachedir */
|
|
||||||
if (xhp->cachedir[0] == '\0') {
|
|
||||||
snprintf(xhp->cachedir, sizeof(xhp->cachedir),
|
|
||||||
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "",
|
|
||||||
XBPS_CACHE_PATH);
|
|
||||||
} else if (xhp->cachedir[0] != '/') {
|
|
||||||
/* relative path */
|
|
||||||
buf = strdup(xhp->cachedir);
|
|
||||||
snprintf(xhp->cachedir, sizeof(xhp->cachedir),
|
|
||||||
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "", buf);
|
|
||||||
free(buf);
|
|
||||||
}
|
|
||||||
/* Set metadir */
|
|
||||||
if (xhp->metadir[0] == '\0') {
|
|
||||||
snprintf(xhp->metadir, sizeof(xhp->metadir),
|
|
||||||
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "",
|
|
||||||
XBPS_META_PATH);
|
|
||||||
} else if (xhp->metadir[0] != '/') {
|
|
||||||
/* relative path */
|
|
||||||
buf = strdup(xhp->metadir);
|
|
||||||
snprintf(xhp->metadir, sizeof(xhp->metadir),
|
|
||||||
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "", buf);
|
|
||||||
free(buf);
|
|
||||||
}
|
|
||||||
/* set confdir */
|
/* set confdir */
|
||||||
if (xhp->confdir[0] == '\0') {
|
if (xhp->confdir[0] == '\0') {
|
||||||
snprintf(xhp->confdir, sizeof(xhp->confdir),
|
snprintf(xhp->confdir, sizeof(xhp->confdir),
|
||||||
@ -472,6 +444,31 @@ xbps_init(struct xbps_handle *xhp)
|
|||||||
if ((rv = parse_dir(xhp, cwd, xhp->confdir, sysconfdir)) != 0)
|
if ((rv = parse_dir(xhp, cwd, xhp->confdir, sysconfdir)) != 0)
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
|
/* Set cachedir */
|
||||||
|
if (xhp->cachedir[0] == '\0') {
|
||||||
|
snprintf(xhp->cachedir, sizeof(xhp->cachedir),
|
||||||
|
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "",
|
||||||
|
XBPS_CACHE_PATH);
|
||||||
|
} else if (xhp->cachedir[0] != '/') {
|
||||||
|
/* relative path */
|
||||||
|
buf = strdup(xhp->cachedir);
|
||||||
|
snprintf(xhp->cachedir, sizeof(xhp->cachedir),
|
||||||
|
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "", buf);
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
/* Set metadir */
|
||||||
|
if (xhp->metadir[0] == '\0') {
|
||||||
|
snprintf(xhp->metadir, sizeof(xhp->metadir),
|
||||||
|
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "",
|
||||||
|
XBPS_META_PATH);
|
||||||
|
} else if (xhp->metadir[0] != '/') {
|
||||||
|
/* relative path */
|
||||||
|
buf = strdup(xhp->metadir);
|
||||||
|
snprintf(xhp->metadir, sizeof(xhp->metadir),
|
||||||
|
"%s/%s", strcmp(xhp->rootdir, "/") ? xhp->rootdir : "", buf);
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
xbps_dbg_printf(xhp, "rootdir=%s\n", xhp->rootdir);
|
xbps_dbg_printf(xhp, "rootdir=%s\n", xhp->rootdir);
|
||||||
xbps_dbg_printf(xhp, "metadir=%s\n", xhp->metadir);
|
xbps_dbg_printf(xhp, "metadir=%s\n", xhp->metadir);
|
||||||
xbps_dbg_printf(xhp, "cachedir=%s\n", xhp->cachedir);
|
xbps_dbg_printf(xhp, "cachedir=%s\n", xhp->cachedir);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user