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