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))