36d3c6cb9ba952bad9d56d2e2b093d11b8aa1c84
galt
  Fri Nov 21 14:57:08 2014 -0800
Fixes #12687. Changed to show only the first 10 missing identifiers, AND it provides a link that the user can click to get a complete list of all missing identifiers.
diff --git src/hg/hgTables/identifiers.c src/hg/hgTables/identifiers.c
index d29cf5e..e2dd451 100644
--- src/hg/hgTables/identifiers.c
+++ src/hg/hgTables/identifiers.c
@@ -461,53 +461,62 @@
     slReverse(&missingTerms);
     carefulClose(&f);
     cartSetString(cart, hgtaIdentifierDb, database);
     cartSetString(cart, hgtaIdentifierTable, curTable);
     cartSetString(cart, hgtaIdentifierFile, tn.forCgi);
     if (saveIdText)
 	freez(&idTextForLf);
     else
 	cartRemove(cart, hgtaPastedIdentifiers);
     int missingCount = totalTerms - foundTerms;
     if (missingCount > 0)
 	{
 	char *xrefTable, *aliasField;
 	getXrefInfo(conn, &xrefTable, NULL, &aliasField);
 	boolean xrefIsSame = xrefTable && sameString(curTable, xrefTable);
+	struct tempName tn;
+	trashDirFile(&tn, "hgt/missingIds", cartSessionId(cart), ".tmp");
+	FILE *f = mustOpen(tn.forCgi, "w");
 	int exampleCount = 0;
 	for (term = missingTerms;  term != NULL;  term = term->next)
 	    {
-	    dyStringPrintf(exampleMissingIds, "%s\n", term->name);
+	    if (exampleCount < 10)
+		{
 		++exampleCount;
-	    if (exampleCount >= 20)
-		break;
+		dyStringPrintf(exampleMissingIds, "%s\n", term->name);
 		}
+	    fprintf(f, "%s\n", term->name);
+	    }
+	carefulClose(&f);
+
+	dyStringPrintf(exampleMissingIds, "\n<a href=%s>Complete list of missing identifiers<a>\n", tn.forHtml);
+
 	warn("Note: %d of the %d given identifiers have no match in "
 	     "table %s, field %s%s%s%s%s.  "
 	     "Try the \"describe table schema\" button for more "
 	     "information about the table and field.\n"
 	     "%d %smissing identifier(s):\n"
 	     "%s\n",
 	     (totalTerms - foundTerms), totalTerms,
 	     curTable, idField,
 	     (xrefTable ? (xrefIsSame ? "" : " or in alias table ") : ""),
 	     (xrefTable ? (xrefIsSame ? "" : xrefTable) : ""),
 	     (xrefTable ? (xrefIsSame ? " or in field " : ", field ") : ""),
 	     (xrefTable ? aliasField : ""),
 	     exampleCount,
 	     exampleCount < missingCount ? "example " : "",
-	     dyStringCannibalize(&exampleMissingIds)
+	     exampleMissingIds->string
 	    );
 	webNewSection("Table Browser");
 	}
     lmCleanup(&lm);
     hashFree(&matchHash);
     }
 else
     {
     cartRemove(cart, hgtaIdentifierFile);
     }
 mainPageAfterOpen(conn);
 htmlClose();
 }
 
 char *identifierFileName()