f2a08138a81d43b03a6fd6bd805b4a2ceb609139
braney
  Mon Mar 20 13:51:11 2017 -0700
fail silently if a bigBed is missing and there is a search rule for it.

diff --git src/hg/lib/bigBedFind.c src/hg/lib/bigBedFind.c
index ebaaf30..a56db26 100644
--- src/hg/lib/bigBedFind.c
+++ src/hg/lib/bigBedFind.c
@@ -1,24 +1,25 @@
 #include "common.h"
 #include "bPlusTree.h"
 #include "bbiFile.h"
 #include "bigBed.h"
 #include "hgFind.h"
 #include "trix.h"
 #include "trackHub.h"
 #include "hubConnect.h"
 #include "hdb.h"
+#include "errCatch.h"
 
 static struct hgPos *bigBedIntervalListToHgPositions(struct bbiFile *bbi, char *term, struct bigBedInterval *intervalList, char *description)
 /* Given an open bigBed file, and an interval list, return a pointer to a list of hgPos structures. */
 {
 struct hgPos *posList = NULL;
 char chromName[bbi->chromBpt->keySize+1];
 int lastChromId = -1;
 struct bigBedInterval *interval;
 
 for (interval = intervalList; interval != NULL; interval = interval->next)
     {
     struct hgPos *hgPos;
     AllocVar(hgPos);
     slAddHead(&posList, hgPos);
 
@@ -27,40 +28,50 @@
 
     hgPos->chrom = cloneString(chromName);
     hgPos->chromStart = interval->start;
     hgPos->chromEnd = interval->end;
     hgPos->name = cloneString(term);
     hgPos->browserName = cloneString(term);
     hgPos->description = cloneString(description);
     }
 
 return posList;
 }
 
 static struct hgPos *getPosFromBigBed(char *bigDataUrl, char *indexField, char *term, char *description)
 /* Given a bigBed file with a search index, check for term. */
 {
+struct errCatch *errCatch = errCatchNew();
+struct hgPos *posList = NULL;
+if (errCatchStart(errCatch))
+    {
     struct bbiFile *bbi = bigBedFileOpen(bigDataUrl);
     int fieldIx;
     struct bptFile *bpt = bigBedOpenExtraIndex(bbi, indexField, &fieldIx);
     struct lm *lm = lmInit(0);
     struct bigBedInterval *intervalList;
     intervalList = bigBedNameQuery(bbi, bpt, fieldIx, term, lm);
 
-struct hgPos *posList = bigBedIntervalListToHgPositions(bbi, term, 
+    posList = bigBedIntervalListToHgPositions(bbi, term, 
         intervalList, description);
     bbiFileClose(&bbi);
+    }
+errCatchEnd(errCatch);
+if (errCatch->gotError) 
+    // we fail silently if bigBed is missing
+    return NULL;
+
 return posList;
 }
 
 static struct hgPos *doTrixSearch(char *trixFile, struct slName  *indices, char *bigDataUrl, char *term, char *description)
 /* search a trix file in the "searchTrix" field of a bigBed trackDb */
 {
 struct trix *trix = trixOpen(trixFile);
 int trixWordCount = 0;
 char *tmp = cloneString(term);
 char *val = nextWord(&tmp);
 char *trixWords[128];
 
 while (val != NULL)
     {
     trixWords[trixWordCount] = strLower(val);