8f399a09d7b39a87eadc3cc0a89c33598ddc5d2a
chmalee
  Wed Apr 5 11:16:22 2023 -0700
First attempt at surfacing up hub errors when the requested hub database doesn't exist, refs #30832

diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c
index 8019f5e..4cad5a0 100644
--- src/hg/lib/hubConnect.c
+++ src/hg/lib/hubConnect.c
@@ -1128,49 +1128,59 @@
         safef(hubName, sizeof(hubName), "%s%u", hgHubConnectHubVarPrefix, localHubId);
         cartSetString(cart, hubName, "1");
 
         // remove the old hub connection
         safef(hubName, sizeof(hubName), "%s%u", hgHubConnectHubVarPrefix, sessionHubId);
         cartRemove(cart, hubName);
         }
     }
 
 cartRemove(cart, "assumesHub");
 }
 
 char *hubConnectLoadHubs(struct cart *cart)
 /* load the track data hubs.  Set a static global to remember them */
 {
+pushWarnHandler(cartHubWarn);
 char *dbSpec = asmAliasFind(cartOptionalString(cart, "db"));
 char *curatedHubPrefix = getCuratedHubPrefix();
 if (dbSpec != NULL)
     lookForCuratedHubs(cart, trackHubSkipHubName(dbSpec), curatedHubPrefix);
 
 char *newDatabase = checkForNew( cart);
 newDatabase = asmAliasFind(newDatabase);
 cartSetString(cart, hgHubConnectRemakeTrackHub, "on");
 
 portHubStatus(cart);
 
 struct hubConnectStatus  *hubList =  hubConnectStatusListFromCart(cart);
 
 char *genarkPrefix = cfgOption("genarkHubPrefix");
 if (genarkPrefix && lookForLonelyHubs(cart, hubList, &newDatabase, genarkPrefix))
     hubList = hubConnectStatusListFromCart(cart);
 
 globalHubList = hubList;
+struct hubConnectStatus *list;
+for (list = hubList; list != NULL; list = list->next)
+    {
+    if (list->errorMessage)
+        {
+        warn("There is an error with hub '%s': %s", list->shortLabel, list->errorMessage);
+        }
+    }
 
+popWarnHandler();
 return newDatabase;
 }
 
 char *hubNameFromUrl(char *hubUrl)
 /* Given the URL for a hub, return its hub_# name. */
 {
 char query[PATH_LEN*4];
 sqlSafef(query, sizeof(query), "select concat('hub_', id) from %s where hubUrl = '%s'",
          getHubStatusTableName(), hubUrl);
 struct sqlConnection *conn = hConnectCentral();
 char *name = sqlQuickString(conn, query);
 hDisconnectCentral(&conn);
 return name;
 }