/[formed]/trunk/contrib/diff_formed.py
ViewVC logotype

Diff of /trunk/contrib/diff_formed.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 393 by torsten, Tue Aug 10 15:53:42 2010 UTC revision 394 by torsten, Thu Aug 12 10:00:47 2010 UTC
# Line 72  class Inspector(): Line 72  class Inspector():
72              if f2 is not None:              if f2 is not None:
73                  f2.close()                  f2.close()
74    
75      def perform(self, elements=None, check_attributes=False):      def perform(self, elements=None, subtree=None, fields=None, check_attributes=False):
76          log.info('Only checking %s elements' % ",".join(elements))          log.info('Only checking %s elements' % ",".join(elements or ['all']))
77          for element in self.elements:          for element in self.elements:
78              if elements is not None:              if elements is not None:
79                  if element not in elements: continue                  if element not in elements: continue
80              self.elements_old[element] = []              self.elements_old[element] = []
81              self.elements_new[element] = []              self.elements_new[element] = []
82              for e in self.old_xml_doc.findall("//%s" % element):              if subtree:
83                    needle = '//*[@name="%s"]//%s' % (subtree, element)
84                else:
85                    needle = '//%s' % (element)
86                log.debug("Searching for %s" % needle)
87                for e in self.old_xml_doc.findall(needle):
88                    if fields is not None:
89                        name = e.attrib.get('name')
90                        if str(name ) not in fields:
91                            log.debug('Old: Not found %s in %s' % (name, fields))
92                            continue
93                  self.elements_old[element].append(e)                  self.elements_old[element].append(e)
94              for e in self.new_xml_doc.findall("//%s" % element):              for e in self.new_xml_doc.findall(needle):
95                    if fields is not None:
96                        name = e.attrib.get('name')
97                        if str(name )not in fields:
98                            log.debug('New: Not found %s in %s' % (name, fields))
99                            continue
100                  self.elements_new[element].append(e)                  self.elements_new[element].append(e)
101              self.diff_element(element, check_attributes)              self.diff_element(element, check_attributes)
102    
# Line 128  class Inspector(): Line 143  class Inspector():
143                      break                      break
144              if not found:              if not found:
145                      error.append("New")                      error.append("New")
146                        if element == 'choice':
147                            error.extend(self.diff_choicelist(None, o, check_attributes))
148    
149              if error:              if error:
150                  out.append("Field: %s (%s)" % (name, element))                  out.append("Field: %s (%s)" % (name, element))
# Line 144  class Inspector(): Line 161  class Inspector():
161          old = {}          old = {}
162          new = {}          new = {}
163          errors = []          errors = []
164          for c in o.getchildren():          if o is not None:
165              old[c.attrib.get('value')] = c              for c in o.findall('.//bool'):
166          for c in n.getchildren():                  old[c.attrib.get('value')] = c
167              new[c.attrib.get('value')] = c          if n is not None:
168                for c in n.findall('.//bool'):
169                    new[c.attrib.get('value')] = c
170    
171          for key in old.keys():          for key in old.keys():
172              if new.has_key(key):              if new.has_key(key):
# Line 192  def usage(code, msg=''): Line 211  def usage(code, msg=''):
211    
212  def main():  def main():
213      try:      try:
214          opts, args = getopt.getopt(sys.argv[1:], 'hvVe:',          opts, args = getopt.getopt(sys.argv[1:], 'hvVe:s:f:',
215          ['elements=', 'check-attributes'])          ['elements=', 'check-attributes', 'subtree=', 'fields='])
216        
217      except getopt.error, msg:      except getopt.error, msg:
218          usage(1, msg)          usage(1, msg)
219            
220      elements = None      elements = None
221        subtree = None
222        fields = None
223      check_attributes = False      check_attributes = False
224      for opt, arg in opts:      for opt, arg in opts:
225          if opt in ('-v'):          if opt in ('-v'):
# Line 210  def main(): Line 231  def main():
231          if opt in ('-e', '--elements'):          if opt in ('-e', '--elements'):
232              elements = arg.split(',')              elements = arg.split(',')
233              log.debug('Elements: %s' % elements)              log.debug('Elements: %s' % elements)
234            if opt in ('-s', '--subtree'):
235                subtree = arg
236                log.debug('Subtree: %s' % subtree)
237            if opt in ('-f', '--fields'):
238                fields = arg.split(',')
239                log.debug('Fields: %s' % fields)
240          if opt in ('--check-attributes'):          if opt in ('--check-attributes'):
241              check_attributes = True              check_attributes = True
242      if len(args) < 2:      if len(args) < 2:
243          usage(1)          usage(1)
244    
245      ins = Inspector(args[0], args[1])      ins = Inspector(args[0], args[1])
246      ins.perform(elements, check_attributes)      ins.perform(elements, subtree, fields, check_attributes)
247    
248  if __name__ == '__main__':  if __name__ == '__main__':
249      main()      main()

Legend:
Removed from v.393  
changed lines
  Added in v.394

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26