8a575379eee18e0d94bd4fa4a8330eca6ca043d5
angie
  Wed Mar 20 10:34:14 2019 -0700
Initialize udcDir (provide command line option) and call knetUdcInstall to use udc instead of htslib network lib. refs #23127

diff --git src/hg/utils/vcfToHgvs/vcfToHgvs.c src/hg/utils/vcfToHgvs/vcfToHgvs.c
index ddd8a19..d6d6524 100644
--- src/hg/utils/vcfToHgvs/vcfToHgvs.c
+++ src/hg/utils/vcfToHgvs/vcfToHgvs.c
@@ -1,44 +1,49 @@
 /* vcfToHgvs - Transform VCF variant calls into HGVS terms. */
 
 /* Copyright (C) 2017 The Regents of the University of California
  * See README in this or parent directory for licensing information. */
 #include "common.h"
 #include "genbank.h"
 #include "hdb.h"
 #include "hgHgvs.h"
+#include "hui.h"
+#include "knetUdc.h"
 #include "options.h"
+#include "udc.h"
 #include "variantProjector.h"
 #include "vcf.h"
 
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "vcfToHgvs - Transform VCF variant calls into HGVS terms\n"
   "usage:\n"
   "   vcfToHgvs db in.vcf out.tab\n"
-//  "options:\n"
-//  "   -xxx=XXX\n"
+  "options:\n"
+  "   -udcDir=/dir/to/cache - place to put cache for remote VCF files.\n"
+  "                           Will create this directory if it does not exist\n"
   );
 }
 
 static boolean breakDelIns = FALSE;
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
+   {"udcDir", OPTION_STRING},
    {NULL, 0},
 };
 
 struct dnaSeq *hGetNmAccAndSeq(char *db, char *nmAccIn)
 /* Return a cached sequence with ->name set to the versioned NM accession,
  * given a possibly unversioned NM accession, or NULL if not found.
  * db must never change.  Do not modify or free the returned sequence. */
 {
 static struct hash *hash = NULL;
 static char *firstDb = NULL;
 static boolean useNcbi = FALSE;
 if (hash == NULL)
     {
     hash = hashNew(0);
     firstDb = cloneString(db);
@@ -262,30 +267,34 @@
 char *getChrom(char *db, char *vcfChrom)
 {
 char *chrom = hgOfficialChromName(db, vcfChrom);
 if (chrom == NULL && !startsWith("chr", vcfChrom))
     {
     char chrChrom[2048];
     safef(chrChrom, sizeof(chrChrom), "chr%s", vcfChrom);
     chrom = hgOfficialChromName(db, chrChrom);
     }
 return chrom;
 }
 
 void vcfToHgvs(char *db, char *vcfIn, char *hgvsOut)
 /* vcfToHgvs - Transform VCF variant calls into HGVS terms. */
 {
+// UDC cache dir: first check for hg.conf setting, then override with command line option if given.
+setUdcCacheDir();
+udcSetDefaultDir(optionVal("udcDir", udcDefaultDir()));
+knetUdcInstall();
 struct vcfFile *vcff = vcfFileMayOpen(vcfIn, NULL, 0, 0, -1, -1, TRUE);
 if (! vcff)
     errAbort("Sorry, can't open VCF file %s", vcfIn);
 FILE *f = mustOpen(hgvsOut, "w");
 initGenbankTableNames(db);
 boolean hasNcbiRefSeq = hDbHasNcbiRefSeq(db);
 char *pslTable = hasNcbiRefSeq ? "ncbiRefSeqPsl" : "refSeqAli";
 struct vcfRecord *rec;
 struct hash *txCdsHash = hashNew(0);
 struct seqWindow *gSeqWin = chromSeqWindowNew(db, NULL, 0, 0);
 for (rec = vcff->records;  rec != NULL;  rec = rec->next)
     {
     // If repetitive SQL queries are too slow then rewrite this to use annoGrator.
     char *chrom = getChrom(db, rec->chrom);
     if (isEmpty(chrom))