86 """ Searches through the requested directory looking at 87 'classes_def.xml' files looking for duplicate Reflex definitions.""" 89 classNameRE = re.compile (
r'class\s+name\s*=\s*"([^"]*)"')
90 spacesRE = re.compile (
r'\s+')
91 stdRE = re.compile (
r'std::')
92 srcClassNameRE = re.compile (
r'(\w+)/src/classes_def.*[.]xml')
93 ignoreSrcRE = re.compile (
r'.*/FWCore/Skeletons/scripts/mkTemplates/.+')
94 braketRE = re.compile (
r'<.+>')
95 print "Searching for 'classes_def.xml' in '%s'." % os.path.join(os.environ.get(
'CMSSW_BASE'),
'src')
97 for srcDir
in [os.environ.get(
'CMSSW_BASE'),os.environ.get(
'CMSSW_RELEASE_BASE')]:
98 if not len(srcDir):
continue 99 for xml
in commands.getoutput (
'cd '+os.path.join(srcDir,
'src')+
'; find . -name "*classes_def*.xml" -follow -print').split (
'\n'):
100 if xml
and (
not xml
in xmlFiles):
103 pprint.pprint (xmlFiles)
109 for item
in equivDict:
111 for equiv
in item[pack]:
112 explicitREs.append( (re.compile(
r'\b' + equiv +
r'\b'),pack))
114 for filename
in xmlFiles:
115 if (
not filename)
or (ignoreSrcRE.match(filename)):
continue 116 match = srcClassNameRE.search (filename)
117 if not match:
continue 118 packageName = match.group(1)
119 xmlPackages.append (packageName)
120 matchString =
r'\b' + packageName +
r'\b' 121 packagesREs[packageName] = re.compile (matchString)
122 equivList = equivREs.setdefault (packageName, [])
123 for item
in equivDict:
124 for equiv
in item.get (packageName, []):
125 matchString = re.compile(
r'\b' + equiv +
r'\b')
126 equivList.append( (matchString, equiv) )
127 equivList.append( (packagesREs[packageName], packageName) )
129 ncdict = {
'class' :
'className',
'function' :
'functionName'}
130 for filename
in xmlFiles:
131 if (
not filename)
or (ignoreSrcRE.match(filename)):
continue 138 lostMatch = srcClassNameRE.search (filename)
140 exceptName = lostMatch.group (1)
141 regexList = equivREs[exceptName]
142 xcount = len(regexList)-1
143 if not regexList[xcount][0].search (exceptName):
144 print '%s not found in' % exceptName,
145 print regexList[xcount][0]
149 print "filename", filename
151 filepath = os.path.join(os.environ.get(
'CMSSW_BASE'),
'src',filename)
152 if not os.path.exists(filepath):
153 filepath = os.path.join(os.environ.get(
'CMSSW_RELEASE_BASE'),
'src',filename)
154 xmlObj = xml2obj (filename = filepath,
156 nameChangeDict = ncdict)
157 except Exception
as detail:
158 print "File %s is malformed XML. Please fix." % filename
162 classList = xmlObj.selection.className
165 classList = xmlObj.className
168 print "**** SKIPPING '%s' - Doesn't seem to have proper information." % filename
171 classList = xmlObj.functionName
173 print "**** SKIPPING '%s' - Dosen't seem to have proper information(not class/function)." % filename
175 for piece
in classList:
177 className = spacesRE.sub (
'', piece.name)
182 className = stdRE.sub (
'', className)
185 for typedef, tdList
in six.iteritems(typedefsDict):
187 className = re.sub (alias, typedef, className)
188 classDict.setdefault (className, set()).add (filename)
190 if not options.lostDefs:
192 localObjects.append (className)
193 if options.lazyLostDefs
and not braketRE.search (className):
195 matchString =
r'\b' + className +
r'\b' 196 simpleObjectREs.append( (re.compile (matchString), className ) )
197 for className
in localObjects:
201 for equivRE
in regexList:
203 if equivRE[0].search (className):
206 for simpleRE
in simpleObjectREs:
207 if simpleRE[0].search (className):
209 if options.verbose
and simpleRE[1] != className:
210 print " Using %s to ignore %s" \
211 % (simpleRE[1], className)
213 if foundEquiv:
continue 214 for exRes
in explicitREs:
215 if exRes[0].
search(className):
216 dupProblems +=
" %s : %s\n" % (exRes[1], className)
219 if foundEquiv:
continue 220 for packageName
in xmlPackages:
223 if packagesREs[packageName].search (className):
224 dupProblems +=
" %s : %s\n" % (packageName, className)
228 print '\n%s\n%s\n' % (filename, dupProblems)
231 for name, fileSet
in sorted( six.iteritems(classDict) ):
232 if len (fileSet) < 2:
235 fileList = sorted (fileSet)
236 for filename
in fileList:
std::vector< T >::const_iterator search(const cond::Time_t &val, const std::vector< T > &container)