c455adb0f72bacc70a675cbd0e54db9ed2ee31a1
tdreszer
  Mon Jan 31 11:55:27 2011 -0800
In mdb validate, vars that are not defined in cv should be considered invalid if and only if -validateFull requested.  On the otherhand, mdbUpdate -test will consider those vars as invalid.
diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c
index 0e3c418..f1f30a9 100644
--- src/hg/lib/mdb.c
+++ src/hg/lib/mdb.c
@@ -2687,48 +2687,52 @@
 const char *cvLabel(char *term)
 // returns cv label if term found or else just term
 {
 // Get the list of term types from thew cv
 struct hash *termTypeHash = mdbCvTermTypeHash();
 struct hash *termHash = hashFindVal(termTypeHash,term);
 if (termHash != NULL)
     {
     char *label = hashFindVal(termHash,"label");
     if (label != NULL)
         return label;
     }
 return term;
 }
 
-int mdbObjsValidate(struct mdbObj *mdbObjs)
-// Validates vars and vals against cv.ra.  Returns count of errors found
+int mdbObjsValidate(struct mdbObj *mdbObjs, boolean full)
+// Validates vars and vals against cv.ra.  Returns count of errors found.
+// Full considers vars not defined in cv as invalids
 {
 struct hash *termTypeHash = mdbCvTermTypeHash();
 struct mdbObj *mdbObj = NULL;
 int invalids = 0;
 for( mdbObj=mdbObjs; mdbObj!=NULL; mdbObj=mdbObj->next )
     {
     struct mdbVar *mdbVar = NULL;
     for(mdbVar = mdbObj->vars;mdbVar != NULL;mdbVar=mdbVar->next)
         {
         struct hash *termHash = hashFindVal(termTypeHash,mdbVar->var);
         if (termHash == NULL) // No cv definition for term so no validation can be done
             {
+            if (!full)
+                continue;
             if (sameString(mdbVar->var,"objType")
-            && (sameString(mdbVar->val,"table") || sameString(mdbVar->val,"file")))
+            && (sameString(mdbVar->val,"table") || sameString(mdbVar->val,"file") || sameString(mdbVar->val,"composite")))
                 continue;
-            verbose(2,"Variable '%s' not defined in cv.ra: %s -> %s = %s\n",mdbVar->var,mdbObj->obj,mdbVar->var,mdbVar->val);
+            printf("INVALID '%s' not defined in cv.ra: %s -> %s = %s\n",mdbVar->var,mdbObj->obj,mdbVar->var,mdbVar->val);
+            invalids++;
             continue;
             }
         char *validationRule = hashFindVal(termHash,"validate");
         if (validationRule == NULL)
             {
             verbose(1,"ERROR in cv.ra: Term %s in typeOfTerms but has no 'validate' setting.\n",mdbVar->var);
             continue;  // Should we errAbort?
             }
 
         // NOTE: Working on memory in hash but we are throwing away a comment and removing trailing spaces so that is okay
         strSwapChar(validationRule,'#','\0'); // Chop off any comment in the setting
         validationRule = trimSpaces(validationRule);
 
         // Validate should be or start with known word
         if (startsWithWord("cv",validationRule))