Pārlūkot izejas kodu

export tool implemented

avkonst 11 gadi atpakaļ
vecāks
revīzija
0f18ad61bc
19 mainītis faili ar 122 papildinājumiem un 120 dzēšanām
  1. 1 1
      mainline/ext/std/tools/export.ini
  2. 47 48
      mainline/ext/std/tools/export.py
  3. 3 3
      mainline/ext/std/tools/view.py
  4. 12 0
      mainline/tests/general/test_basic.py
  5. 1 0
      mainline/tests/general/test_basic/test_help_--help_default_stdout.gold.txt
  6. 2 2
      mainline/tests/general/test_basic/test_view_format_view_nest_per_file_stdout.gold.txt
  7. 2 2
      mainline/tests/general/test_basic/test_view_format_view_nest_stdout.gold.txt
  8. 1 1
      mainline/tests/general/test_basic/test_view_format_view_python_stdout.gold.txt
  9. 2 2
      mainline/tests/general/test_basic/test_view_format_view_xml_stdout.gold.txt
  10. 1 1
      mainline/tests/general/test_basic/test_workflow_export_default_stderr.gold.txt
  11. 19 22
      mainline/tests/general/test_basic/test_workflow_export_default_stdout.gold.txt
  12. 1 1
      mainline/tests/general/test_basic/test_workflow_export_second_stderr.gold.txt
  13. 18 25
      mainline/tests/general/test_basic/test_workflow_export_second_stdout.gold.txt
  14. 2 2
      mainline/tests/general/test_basic/test_workflow_view_default_stdout.gold.txt
  15. 2 2
      mainline/tests/general/test_basic/test_workflow_view_second_per_file_stdout.gold.txt
  16. 2 2
      mainline/tests/general/test_basic/test_workflow_view_second_stdout.gold.txt
  17. 2 2
      mainline/tests/general/test_std_code_cpp/test_parser_view_default_stdout.gold.txt
  18. 2 2
      mainline/tests/general/test_std_code_cs/test_parser_view_default_stdout.gold.txt
  19. 2 2
      mainline/tests/general/test_std_code_java/test_parser_view_default_stdout.gold.txt

+ 1 - 1
mainline/ext/std/tools/export.ini

@@ -24,4 +24,4 @@ module:  export
 class:   Plugin
 depends: mpp.dbf
 actions: export
-enabled: False
+enabled: True

+ 47 - 48
mainline/ext/std/tools/export.py

@@ -23,18 +23,11 @@ import mpp.utils
 
 import csv
 
-class Plugin(mpp.api.Plugin, mpp.api.IConfigurable, mpp.api.IRunable):
-    
-    def declare_configuration(self, parser):
-        parser.add_option("--format", "--ft", default='csv', choices=['csv', 'xml'], help="Format of the output data. "
-                          "Possible values are 'xml' and 'csv' [default: %default]")
-    
-    def configure(self, options):
-        self.out_format = options.__dict__['format']
+class Plugin(mpp.api.Plugin, mpp.api.IRunable):
 
     def run(self, args):
-        loader_prev = self.get_plugin_loader().get_plugin('mpp.dbf').get_loader_prev()
-        loader = self.get_plugin_loader().get_plugin('mpp.dbf').get_loader()
+        self.loader_prev = self.get_plugin_loader().get_plugin('mpp.dbf').get_loader_prev()
+        self.loader = self.get_plugin_loader().get_plugin('mpp.dbf').get_loader()
     
         paths = None
         if len(args) == 0:
@@ -42,55 +35,61 @@ class Plugin(mpp.api.Plugin, mpp.api.IConfigurable, mpp.api.IRunable):
         else:
             paths = args
             
-        exit_code = export_to_stdout(self.out_format, paths, loader, loader_prev)
-        return exit_code
+        return self._export_to_stdout(paths)
 
-def export_to_stdout(out_format, paths, loader, loader_prev):
-    class StdoutWriter(object):
-        def write(self, *args, **kwargs):
-            print args[0],
+    def _export_to_stdout(self, paths):
+        class StdoutWriter(object):
+            def write(self, *args, **kwargs):
+                print args[0].strip()
+        
+        exit_code = 0
     
-    exit_code = 0
-
-
-    columnNames = ["file", "region", ]
-    columns = []
-    for name in loader.iterate_namespace_names():
-        namespace = loader.get_namespace(name)
-        for field in namespace.iterate_field_names():
-            columns.append((name, field, namespace.are_regions_supported()))
-            columnNames.append(name + ":" + field)
-
-    writer = StdoutWriter()
-    csvWriter = csv.writer(writer)
-    csvWriter.writerow(columnNames)
+        columns = []
+        columnNames = ["file", "region", "modified", "line start", "line end"]
+        for name in self.loader.iterate_namespace_names():
+            namespace = self.loader.get_namespace(name)
+            for field in namespace.iterate_field_names():
+                columns.append((name, field))
+                columnNames.append(name + ":" + field)
     
-    if out_format == 'xml':
-        print "<export>\n"
-    elif out_format == 'csv':
-        print "CSV"
-    else:
-        assert False, "Unknown output format " + out_format
-
-    for path in paths:
-        path = mpp.utils.preprocess_path(path)
+        writer = StdoutWriter()
+        csvWriter = csv.writer(writer)
+        csvWriter.writerow(columnNames)
         
-        files = loader.iterate_file_data(path)
-        if files != None:
+        for path in paths:
+            path = mpp.utils.preprocess_path(path)
+            
+            files = self.loader.iterate_file_data(path)
+            if files == None:
+                mpp.utils.report_bad_path(path)
+                exit_code += 1
+                continue
+                
             for file_data in files:
+                matcher = None
+                file_data_prev = self.loader_prev.load_file_data(file_data.get_path())
+                if file_data_prev != None:
+                    matcher = mpp.utils.FileRegionsMatcher(file_data, file_data_prev)
                 for reg in file_data.iterate_regions():
                     per_reg_data = []
+                    if matcher != None and matcher.is_matched(reg.get_id()):
+                        per_reg_data.append(matcher.is_modified(reg.get_id()))
+                    else:
+                        per_reg_data.append(None)
+                    per_reg_data.append(reg.get_line_begin())
+                    per_reg_data.append(reg.get_line_end())
                     for column in columns:
                         per_reg_data.append(reg.get_data(column[0], column[1]))
                     csvWriter.writerow([file_data.get_path(), reg.get_name()] + per_reg_data)
                 per_file_data = []
+                if file_data_prev != None:
+                    per_file_data.append(file_data.get_checksum() != file_data_prev.get_checksum()) 
+                else:
+                    per_file_data.append(None)
+                per_file_data.append(file_data.get_region(1).get_line_begin())
+                per_file_data.append(file_data.get_region(1).get_line_end())
                 for column in columns:
                     per_file_data.append(file_data.get_data(column[0], column[1]))
                 csvWriter.writerow([file_data.get_path(), None] + per_file_data)
-        else:
-            mpp.utils.report_bad_path(path)
-            exit_code += 1
-
-    if out_format == 'xml':
-        print "XML"
-    return 0
+    
+        return exit_code

+ 3 - 3
mainline/ext/std/tools/view.py

@@ -87,9 +87,9 @@ def export_to_str(out_format, paths, loader, loader_prev, nest_regions, dist_col
     exit_code = 0
     result = ""
     if out_format == 'xml':
-        result += "<export>\n"
+        result += "<view>\n"
     elif out_format == 'python':
-        result += "{'export': ["
+        result += "{'view': ["
 
     for (ind, path) in enumerate(paths):
         path = mpp.utils.preprocess_path(path)
@@ -140,7 +140,7 @@ def export_to_str(out_format, paths, loader, loader_prev, nest_regions, dist_col
             result += mpp.utils.serialize_to_python(data, root_name = "data") + postfix
 
     if out_format == 'xml':
-        result += "</export>"
+        result += "</view>"
     elif out_format == 'python':
         result += "]}"
         

+ 12 - 0
mainline/tests/general/test_basic.py

@@ -57,6 +57,11 @@ class Test(tests.common.TestCase):
                                          exit_code=0)
         self.assertExec(runner.run())
 
+        runner = tests.common.ToolRunner('export',
+                                         ['--log-level=INFO'],
+                                         check_stderr=[(0, -1)])
+        self.assertExec(runner.run())
+
         # second collection
         runner = tests.common.ToolRunner('collect',
                                          ['--std.code.complexity.cyclomatic',
@@ -189,6 +194,13 @@ class Test(tests.common.TestCase):
                                          use_prev=True)
         self.assertExec(runner.run())
 
+        runner = tests.common.ToolRunner('export',
+                                         ['--log-level=INFO'],
+                                         check_stderr=[(0, -1)],
+                                         prefix='second',
+                                         use_prev=True)
+        self.assertExec(runner.run())
+
     def test_help(self):
         
         runner = tests.common.ToolRunner('--help')

+ 1 - 0
mainline/tests/general/test_basic/test_help_--help_default_stdout.gold.txt

@@ -5,6 +5,7 @@ Usage: python metrix++.py --help
 Actions: 
   collect
   debug
+  export
   info
   limit
   test

+ 2 - 2
mainline/tests/general/test_basic/test_view_format_view_nest_per_file_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="./simple.cpp" id="1" />
@@ -112,4 +112,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_basic/test_view_format_view_nest_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -22,4 +22,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 1 - 1
mainline/tests/general/test_basic/test_view_format_view_python_stdout.gold.txt

@@ -1 +1 @@
-{'export': [{'data: {'info': {'path': '', 'id': 1}, 'file-data': {}, 'subfiles': [], 'subdirs': [u'.'], 'aggregated-data': {'std.code.complexity': {'cyclomatic': {'nonzero': False, 'count': 8, 'avg': 1.375, 'min': 1, 'max': 3, 'distribution-bars': [{'count': 6, 'ratio': 0.75, 'metric': '1'}, {'count': 1, 'ratio': 0.125, 'metric': '2'}, {'count': 1, 'ratio': 0.125, 'metric': '3'}], 'sup': 0, 'total': 11.0}}}}}]}
+{'view': [{'data: {'info': {'path': '', 'id': 1}, 'file-data': {}, 'subfiles': [], 'subdirs': [u'.'], 'aggregated-data': {'std.code.complexity': {'cyclomatic': {'nonzero': False, 'count': 8, 'avg': 1.375, 'min': 1, 'max': 3, 'distribution-bars': [{'count': 6, 'ratio': 0.75, 'metric': '1'}, {'count': 1, 'ratio': 0.125, 'metric': '2'}, {'count': 1, 'ratio': 0.125, 'metric': '3'}], 'sup': 0, 'total': 11.0}}}}}]}

+ 2 - 2
mainline/tests/general/test_basic/test_view_format_view_xml_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -20,4 +20,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 1 - 1
mainline/tests/general/test_basic/test_workflow_export_default_stderr.gold.txt

@@ -1,3 +1,3 @@
 [LOG]: WARNING:	Logging enabled with INFO level
 [LOG]: INFO:	Processing: 
-[LOG]: WARNING:	Exit code: 0. Time spent: 1 seconds. Done
+[LOG]: WARNING:	Done (1 seconds). Exit code: 0

+ 19 - 22
mainline/tests/general/test_basic/test_workflow_export_default_stdout.gold.txt

@@ -1,22 +1,19 @@
-<export>
-
-    <data>
-        <info path="" id="1" />
-        <file-data />
-        <subfiles>
-        </subfiles>
-        <subdirs>
-            <subdir>.</subdir>
-        </subdirs>
-        <aggregated-data>
-            <std.code.complexity>
-                <cyclomatic count="4" max="3" avg="1.5" total="6.0" min="1">
-                    <distribution-bars>
-                        <distribution-bar count="3" metric="1" ratio="0.75" />
-                        <distribution-bar count="1" metric="3" ratio="0.25" />
-                    </distribution-bars>
-                </cyclomatic>
-            </std.code.complexity>
-        </aggregated-data>
-    </data>
-</export>
+file,region,modified,line start,line end,std.code.complexity:cyclomatic,std.suppress.file:count,std.suppress.file:list,std.suppress:count,std.suppress:list,std.code.lines:code,std.code.lines:total,std.code.lines:preprocessor,std.code.lines:comments
+./file_deleted_in_new_sources.cpp,__global__,,1,34,,,,,,0,0,0,0
+./file_deleted_in_new_sources.cpp,hmm,,3,24,,,,,,4,7,0,3
+./file_deleted_in_new_sources.cpp,B,,9,22,,,,,,3,3,0,0
+./file_deleted_in_new_sources.cpp,B,,12,20,1,,,,,8,9,0,2
+./file_deleted_in_new_sources.cpp,never_old,,26,33,1,,,,,7,7,0,0
+./file_deleted_in_new_sources.cpp,,,1,34,,,,,,,,,
+./simple.cpp,__global__,,1,71,,,,,,0,0,0,0
+./simple.cpp,hmm,,3,70,,,,,,4,6,1,1
+./simple.cpp,A,,9,68,,,,,,4,4,0,0
+./simple.cpp,A,,12,23,3,,,,,11,12,0,2
+./simple.cpp,func,,26,40,1,,,,,5,5,0,0
+./simple.cpp,embeded,,28,38,,,,,,3,3,0,0
+./simple.cpp,embeded,,30,37,1,,,,,7,8,0,1
+./simple.cpp,func_to_be_removed_in_new_sources,,42,56,2,,,,,5,5,0,0
+./simple.cpp,embeded,,44,54,,,,,,3,3,0,0
+./simple.cpp,embeded,,46,53,1,,,,,7,8,0,1
+./simple.cpp,never,,58,65,1,,,,,7,7,0,0
+./simple.cpp,,,1,71,,,,,,,,,

+ 1 - 1
mainline/tests/general/test_basic/test_workflow_export_second_stderr.gold.txt

@@ -1,3 +1,3 @@
 [LOG]: WARNING:	Logging enabled with INFO level
 [LOG]: INFO:	Processing: 
-[LOG]: WARNING:	Exit code: 0. Time spent: 1 seconds. Done
+[LOG]: WARNING:	Done (1 seconds). Exit code: 0

+ 18 - 25
mainline/tests/general/test_basic/test_workflow_export_second_stdout.gold.txt

@@ -1,25 +1,18 @@
-<export>
-
-    <data>
-        <info path="" id="1" />
-        <file-data />
-        <subfiles>
-        </subfiles>
-        <subdirs>
-            <subdir>.</subdir>
-        </subdirs>
-        <aggregated-data>
-            <std.code.complexity>
-                <cyclomatic count="7" max="3" avg="1.57142857143" total="11.0" min="0">
-                    <distribution-bars>
-                        <distribution-bar count="1" __diff__="0" metric="0" />
-                        <distribution-bar count="3" __diff__="0" metric="1" />
-                        <distribution-bar count="1" __diff__="0" metric="2" />
-                        <distribution-bar count="2" __diff__="1" metric="3" />
-                    </distribution-bars>
-                    <__diff__ count="3" max="0" avg="0.0714285714286" total="5.0" min="-1" />
-                </cyclomatic>
-            </std.code.complexity>
-        </aggregated-data>
-    </data>
-</export>
+file,region,modified,line start,line end,std.code.complexity:cyclomatic,std.suppress.file:count,std.suppress.file:list,std.suppress:count,std.suppress:list,std.code.lines:code,std.code.lines:total,std.code.lines:preprocessor,std.code.lines:comments
+./simple.cpp,__global__,False,1,78,,,,,,0,0,0,0
+./simple.cpp,hmm,True,3,77,,,,,,4,7,2,1
+./simple.cpp,A,True,10,75,,,,,,4,4,0,0
+./simple.cpp,A,False,13,24,3,,,,,11,12,0,2
+./simple.cpp,func,False,26,42,1,,,,,5,5,0,0
+./simple.cpp,embeded,False,28,40,,,,,,3,3,0,0
+./simple.cpp,embeded,True,30,39,2,,,,,8,9,0,2
+./simple.cpp,never,True,44,51,1,,,,,7,7,0,1
+./simple.cpp,new_func,,53,56,0,,,,,3,4,0,1
+./simple.cpp,new_func_complex,,58,62,1,,,,,5,5,0,0
+./simple.cpp,new_func_complex_but_suppressed,,64,72,2,,,1,[std.code.complexity:cyclomatic],8,9,0,1
+./simple.cpp,,True,1,78,,,,,,,,,
+./simple2.cpp,__global__,,1,26,,,,,,0,0,0,0
+./simple2.cpp,hmm,,3,25,,,,,,4,5,0,1
+./simple2.cpp,New_A,,7,23,,,,,,3,3,0,0
+./simple2.cpp,New_A,,10,21,3,,,,,10,12,0,2
+./simple2.cpp,,,1,26,,,,,,,,,

+ 2 - 2
mainline/tests/general/test_basic/test_workflow_view_default_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -72,4 +72,4 @@
             </std.code.lines>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_basic/test_workflow_view_second_per_file_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="./simple.cpp" id="1" />
@@ -181,4 +181,4 @@
             </std.code.lines>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_basic/test_workflow_view_second_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -82,4 +82,4 @@
             </std.code.lines>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_std_code_cpp/test_parser_view_default_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -20,4 +20,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_std_code_cs/test_parser_view_default_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -24,4 +24,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>

+ 2 - 2
mainline/tests/general/test_std_code_java/test_parser_view_default_stdout.gold.txt

@@ -1,4 +1,4 @@
-<export>
+<view>
 
     <data>
         <info path="" id="1" />
@@ -23,4 +23,4 @@
             </std.code.complexity>
         </aggregated-data>
     </data>
-</export>
+</view>