commit: 5e5cba1176c8bfa39405b5cf29dcf50c08f8fc66
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 27 17:25:28 2019 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Dec 27 17:25:28 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=5e5cba11
main: use cannonical repo paths for repos.conf and PORTDIR
Make sure we compare the same locations by using realpath()
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
main.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/main.c b/main.c
index b5404cb..f0a8841 100644
--- a/main.c
+++ b/main.c
@@ -639,7 +639,10 @@ read_one_repos_conf(const char *repos_conf, char **primary)
{
int nsec;
char *conf;
- const char *main_repo, *repo, *path;
+ char rrepo[_Q_PATH_MAX];
+ const char *main_repo;
+ const char *repo;
+ const char *path;
dictionary *dict;
if (getenv("DEBUG"))
@@ -662,6 +665,10 @@ read_one_repos_conf(const char *repos_conf, char **primary)
size_t n;
char *overlay;
+ /* try not to get confused by symlinks etc. */
+ if (realpath(path, rrepo) != NULL)
+ path = rrepo;
+
array_for_each(overlay_names, n, overlay) {
if (strcmp(overlay, repo) == 0)
break;
@@ -906,12 +913,18 @@ initialize_portage_env(void)
var = &vars_to_read[11]; /* PORTDIR */
if (strcmp(var->src, STR_DEFAULT) != 0 || array_cnt(overlays)
== 0) {
+ char roverlay[_Q_PATH_MAX];
+ /* get cannonical path, we do so for repos.conf too */
+ if (realpath(main_overlay, roverlay) == NULL)
+ snprintf(roverlay, sizeof(roverlay), "%s",
main_overlay);
array_for_each(overlays, i, overlay) {
- if (strcmp(overlay, main_overlay) == 0)
+ if (strcmp(overlay, roverlay) == 0)
break;
overlay = NULL;
}
if (overlay == NULL) { /* add PORTDIR to overlays */
+ free(main_overlay);
+ main_overlay = xstrdup(roverlay);
xarraypush_ptr(overlays, main_overlay);
xarraypush_str(overlay_names, "<PORTDIR>");
xarraypush_str(overlay_src, var->src);