/[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 395 by torsten, Thu Aug 12 10:03:17 2010 UTC
# Line 11  Usage: diff_formed.py old new Line 11  Usage: diff_formed.py old new
11  Options:  Options:
12      -h / --help         Print this message and exit.      -h / --help         Print this message and exit.
13      -e / --elements     comma-seperated list of elements to check      -e / --elements     comma-seperated list of elements to check
14        -s / --subtree      Define subtree as root for checks
15        -f / --fields       comma-seperated list of element-name to check
16      --check-attributes  Check changes in attributes (changed descriptions, target...)      --check-attributes  Check changes in attributes (changed descriptions, target...)
17    
18  """  """
# Line 72  class Inspector(): Line 74  class Inspector():
74              if f2 is not None:              if f2 is not None:
75                  f2.close()                  f2.close()
76    
77      def perform(self, elements=None, check_attributes=False):      def perform(self, elements=None, subtree=None, fields=None, check_attributes=False):
78          log.info('Only checking %s elements' % ",".join(elements))          log.info('Only checking %s elements' % ",".join(elements or ['all']))
79          for element in self.elements:          for element in self.elements:
80              if elements is not None:              if elements is not None:
81                  if element not in elements: continue                  if element not in elements: continue
82              self.elements_old[element] = []              self.elements_old[element] = []
83              self.elements_new[element] = []              self.elements_new[element] = []
84              for e in self.old_xml_doc.findall("//%s" % element):              if subtree:
85                    needle = '//*[@name="%s"]//%s' % (subtree, element)
86                else:
87                    needle = '//%s' % (element)
88                log.debug("Searching for %s" % needle)
89                for e in self.old_xml_doc.findall(needle):
90                    if fields is not None:
91                        name = e.attrib.get('name')
92                        if str(name ) not in fields:
93                            log.debug('Old: Not found %s in %s' % (name, fields))
94                            continue
95                  self.elements_old[element].append(e)                  self.elements_old[element].append(e)
96              for e in self.new_xml_doc.findall("//%s" % element):              for e in self.new_xml_doc.findall(needle):
97                    if fields is not None:
98                        name = e.attrib.get('name')
99                        if str(name )not in fields:
100                            log.debug('New: Not found %s in %s' % (name, fields))
101                            continue
102                  self.elements_new[element].append(e)                  self.elements_new[element].append(e)
103              self.diff_element(element, check_attributes)              self.diff_element(element, check_attributes)
104    
# Line 128  class Inspector(): Line 145  class Inspector():
145                      break                      break
146              if not found:              if not found:
147                      error.append("New")                      error.append("New")
148                        if element == 'choice':
149                            error.extend(self.diff_choicelist(None, o, check_attributes))
150    
151              if error:              if error:
152                  out.append("Field: %s (%s)" % (name, element))                  out.append("Field: %s (%s)" % (name, element))
# Line 144  class Inspector(): Line 163  class Inspector():
163          old = {}          old = {}
164          new = {}          new = {}
165          errors = []          errors = []
166          for c in o.getchildren():          if o is not None:
167              old[c.attrib.get('value')] = c              for c in o.findall('.//bool'):
168          for c in n.getchildren():                  old[c.attrib.get('value')] = c
169              new[c.attrib.get('value')] = c          if n is not None:
170                for c in n.findall('.//bool'):
171                    new[c.attrib.get('value')] = c
172    
173          for key in old.keys():          for key in old.keys():
174              if new.has_key(key):              if new.has_key(key):
# Line 192  def usage(code, msg=''): Line 213  def usage(code, msg=''):
213    
214  def main():  def main():
215      try:      try:
216          opts, args = getopt.getopt(sys.argv[1:], 'hvVe:',          opts, args = getopt.getopt(sys.argv[1:], 'hvVe:s:f:',
217          ['elements=', 'check-attributes'])          ['elements=', 'check-attributes', 'subtree=', 'fields='])
218        
219      except getopt.error, msg:      except getopt.error, msg:
220          usage(1, msg)          usage(1, msg)
221            
222      elements = None      elements = None
223        subtree = None
224        fields = None
225      check_attributes = False      check_attributes = False
226      for opt, arg in opts:      for opt, arg in opts:
227          if opt in ('-v'):          if opt in ('-v'):
# Line 210  def main(): Line 233  def main():
233          if opt in ('-e', '--elements'):          if opt in ('-e', '--elements'):
234              elements = arg.split(',')              elements = arg.split(',')
235              log.debug('Elements: %s' % elements)              log.debug('Elements: %s' % elements)
236            if opt in ('-s', '--subtree'):
237                subtree = arg
238                log.debug('Subtree: %s' % subtree)
239            if opt in ('-f', '--fields'):
240                fields = arg.split(',')
241                log.debug('Fields: %s' % fields)
242          if opt in ('--check-attributes'):          if opt in ('--check-attributes'):
243              check_attributes = True              check_attributes = True
244      if len(args) < 2:      if len(args) < 2:
245          usage(1)          usage(1)
246    
247      ins = Inspector(args[0], args[1])      ins = Inspector(args[0], args[1])
248      ins.perform(elements, check_attributes)      ins.perform(elements, subtree, fields, check_attributes)
249    
250  if __name__ == '__main__':  if __name__ == '__main__':
251      main()      main()

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26