From 824da2e784719c13cd3c66bd6ea0622bd4e7adb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Wed, 6 Nov 2013 18:13:10 +0100 Subject: [PATCH] master: Support some joinnodes in the Encoder. Dirnodes are often wrapped in joinnodes with a single member. Make sure that the Encoder knows about it. Fixes some module dumping issues. --- lib/master.pike.in | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/master.pike.in b/lib/master.pike.in index a2bf00fa22..f05c9cc7e0 100644 --- a/lib/master.pike.in +++ b/lib/master.pike.in @@ -5236,7 +5236,13 @@ class Encoder break compare; } - if (resolved->is_resolv_dirnode) + if ((resolved->is_resolv_joinnode) && + (sizeof(resolved->joined_modules) == 1)) { + ENC_MSG(" compare_resolved: %O is a single element joinnode.\n", + resolved); + resolved = resolved->joined_modules[0]; + } + if (resolved->is_resolv_dirnode) { if (resolved->module == what) { ENC_MSG (" compare_resolved: %O is dirnode module of %O\n", what, resolved); append = ({'m'}); @@ -5252,7 +5258,7 @@ class Encoder else ENC_MSG (" compare_resolved: %O is different from dirnode module %O\n", what, resolved->module); - + } #if 0 // This is only safe if the joinnode modules don't conflict, // and we don't know that. @@ -5267,6 +5273,8 @@ class Encoder } } #endif + } else { + ENC_MSG(" compare_resolved: %O is not an object.\n", resolved); } ENC_MSG (" compare_resolved: %O is different from %O\n", what, resolved); -- GitLab