|
@@ -18,10 +18,6 @@
|
|
|
#
|
|
|
|
|
|
|
|
|
-
|
|
|
-import logging
|
|
|
-import re
|
|
|
-
|
|
|
import core.log
|
|
|
import core.db.loader
|
|
|
import core.db.post
|
|
@@ -29,6 +25,8 @@ import core.db.utils
|
|
|
import core.cmdparser
|
|
|
import core.export.convert
|
|
|
|
|
|
+import tools.utils
|
|
|
+
|
|
|
import core.api
|
|
|
class Tool(core.api.ITool):
|
|
|
def run(self, tool_args):
|
|
@@ -44,10 +42,6 @@ def main(tool_args):
|
|
|
db_plugin.declare_configuration(parser)
|
|
|
parser.add_option("--format", "--ft", default='xml', choices=['txt', 'xml', 'python'], help="Format of the output data. "
|
|
|
"Possible values are 'xml', 'txt' or 'python' [default: %default]")
|
|
|
- parser.add_option("--namespaces", "--ns", default=None, help="Allows to enumerate namespaces of interest."
|
|
|
- " If not defined all namespaces available in database file will be processed."
|
|
|
- " Separate several namespaces by comma, for example 'general,std.code.complexity'"
|
|
|
- " [default: %default]")
|
|
|
parser.add_option("--nest-regions", "--nr", action="store_true", default=False,
|
|
|
help="If the option is set (True), data for regions is exported in the form of a tree. "
|
|
|
"Otherwise, all regions are exported in plain list. [default: %default]")
|
|
@@ -57,9 +51,6 @@ def main(tool_args):
|
|
|
db_plugin.configure(options)
|
|
|
out_format = options.__dict__['format']
|
|
|
nest_regions = options.__dict__['nest_regions']
|
|
|
- namespaces = None
|
|
|
- if options.__dict__['namespaces'] != None:
|
|
|
- namespaces = re.split(',', options.__dict__['namespaces'])
|
|
|
|
|
|
loader_prev = core.db.loader.Loader()
|
|
|
if db_plugin.dbfile_prev != None:
|
|
@@ -69,26 +60,20 @@ def main(tool_args):
|
|
|
loader.open_database(db_plugin.dbfile)
|
|
|
|
|
|
# Check for versions consistency
|
|
|
- for each in loader.iterate_properties():
|
|
|
- if db_plugin.dbfile_prev != None:
|
|
|
- prev = loader_prev.get_property(each.name)
|
|
|
- if prev != each.value:
|
|
|
- logging.warn("Previous data has got different metadata:")
|
|
|
- logging.warn(" - identification of change trends can be not reliable")
|
|
|
- logging.warn(" - use 'info' tool to get more details")
|
|
|
- break
|
|
|
+ if db_plugin.dbfile_prev != None:
|
|
|
+ tools.utils.check_db_metadata(loader, loader_prev)
|
|
|
|
|
|
paths = None
|
|
|
if len(args) == 0:
|
|
|
paths = [""]
|
|
|
else:
|
|
|
paths = args
|
|
|
-
|
|
|
- (result, exit_code) = export_to_str(out_format, paths, loader, loader_prev, namespaces, nest_regions)
|
|
|
+
|
|
|
+ (result, exit_code) = export_to_str(out_format, paths, loader, loader_prev, nest_regions)
|
|
|
print result
|
|
|
return exit_code
|
|
|
|
|
|
-def export_to_str(out_format, paths, loader, loader_prev, namespaces, nest_regions):
|
|
|
+def export_to_str(out_format, paths, loader, loader_prev, nest_regions):
|
|
|
exit_code = 0
|
|
|
result = ""
|
|
|
if out_format == 'txt':
|
|
@@ -99,30 +84,30 @@ def export_to_str(out_format, paths, loader, loader_prev, namespaces, nest_regio
|
|
|
result += "{'export': ["
|
|
|
|
|
|
for (ind, path) in enumerate(paths):
|
|
|
- logging.info("Processing: " + re.sub(r'''[\\]''', "/", path))
|
|
|
+ path = tools.utils.preprocess_path(path)
|
|
|
|
|
|
- aggregated_data = loader.load_aggregated_data(path, namespaces=namespaces)
|
|
|
+ aggregated_data = loader.load_aggregated_data(path)
|
|
|
aggregated_data_tree = {}
|
|
|
subdirs = []
|
|
|
subfiles = []
|
|
|
if aggregated_data != None:
|
|
|
- aggregated_data_tree = aggregated_data.get_data_tree(namespaces=namespaces)
|
|
|
+ aggregated_data_tree = aggregated_data.get_data_tree()
|
|
|
subdirs = aggregated_data.get_subdirs()
|
|
|
subfiles = aggregated_data.get_subfiles()
|
|
|
else:
|
|
|
- logging.error("Specified path '" + path + "' is invalid (not found in the database records)")
|
|
|
+ tools.utils.report_bad_path(path)
|
|
|
exit_code += 1
|
|
|
- aggregated_data_prev = loader_prev.load_aggregated_data(path, namespaces=namespaces)
|
|
|
+ aggregated_data_prev = loader_prev.load_aggregated_data(path)
|
|
|
if aggregated_data_prev != None:
|
|
|
aggregated_data_tree = append_diff(aggregated_data_tree,
|
|
|
- aggregated_data_prev.get_data_tree(namespaces=namespaces))
|
|
|
+ aggregated_data_prev.get_data_tree())
|
|
|
|
|
|
file_data = loader.load_file_data(path)
|
|
|
file_data_tree = {}
|
|
|
if file_data != None:
|
|
|
- file_data_tree = file_data.get_data_tree(namespaces=namespaces)
|
|
|
+ file_data_tree = file_data.get_data_tree()
|
|
|
file_data_prev = loader_prev.load_file_data(path)
|
|
|
- append_regions(file_data_tree, file_data, file_data_prev, namespaces, nest_regions)
|
|
|
+ append_regions(file_data_tree, file_data, file_data_prev, nest_regions)
|
|
|
|
|
|
data = {"info": {"path": path, "id": ind + 1},
|
|
|
"aggregated-data": aggregated_data_tree,
|
|
@@ -149,21 +134,21 @@ def export_to_str(out_format, paths, loader, loader_prev, namespaces, nest_regio
|
|
|
|
|
|
return (result, exit_code)
|
|
|
|
|
|
-def append_regions(file_data_tree, file_data, file_data_prev, namespaces, nest_regions):
|
|
|
+def append_regions(file_data_tree, file_data, file_data_prev, nest_regions):
|
|
|
regions_matcher = None
|
|
|
if file_data_prev != None:
|
|
|
file_data_tree = append_diff(file_data_tree,
|
|
|
- file_data_prev.get_data_tree(namespaces=namespaces))
|
|
|
+ file_data_prev.get_data_tree())
|
|
|
regions_matcher = core.db.utils.FileRegionsMatcher(file_data, file_data_prev)
|
|
|
|
|
|
if nest_regions == False:
|
|
|
regions = []
|
|
|
for region in file_data.iterate_regions():
|
|
|
- region_data_tree = region.get_data_tree(namespaces=namespaces)
|
|
|
+ region_data_tree = region.get_data_tree()
|
|
|
if regions_matcher != None and regions_matcher.is_matched(region.get_id()):
|
|
|
region_data_prev = file_data_prev.get_region(regions_matcher.get_prev_id(region.get_id()))
|
|
|
region_data_tree = append_diff(region_data_tree,
|
|
|
- region_data_prev.get_data_tree(namespaces=namespaces))
|
|
|
+ region_data_prev.get_data_tree())
|
|
|
regions.append({"info": {"name" : region.name,
|
|
|
'type' : file_data.get_region_types()().to_str(region.get_type()),
|
|
|
"cursor" : region.cursor,
|
|
@@ -174,13 +159,13 @@ def append_regions(file_data_tree, file_data, file_data_prev, namespaces, nest_r
|
|
|
"data": region_data_tree})
|
|
|
file_data_tree['regions'] = regions
|
|
|
else:
|
|
|
- def append_rec(region_id, file_data_tree, file_data, file_data_prev, namespaces):
|
|
|
+ def append_rec(region_id, file_data_tree, file_data, file_data_prev):
|
|
|
region = file_data.get_region(region_id)
|
|
|
- region_data_tree = region.get_data_tree(namespaces=namespaces)
|
|
|
+ region_data_tree = region.get_data_tree()
|
|
|
if regions_matcher != None and regions_matcher.is_matched(region.get_id()):
|
|
|
region_data_prev = file_data_prev.get_region(regions_matcher.get_prev_id(region.get_id()))
|
|
|
region_data_tree = append_diff(region_data_tree,
|
|
|
- region_data_prev.get_data_tree(namespaces=namespaces))
|
|
|
+ region_data_prev.get_data_tree())
|
|
|
result = {"info": {"name" : region.name,
|
|
|
'type' : file_data.get_region_types()().to_str(region.get_type()),
|
|
|
"cursor" : region.cursor,
|
|
@@ -191,10 +176,10 @@ def append_regions(file_data_tree, file_data, file_data_prev, namespaces, nest_r
|
|
|
"data": region_data_tree,
|
|
|
"subregions": []}
|
|
|
for sub_id in file_data.get_region(region_id).iterate_subregion_ids():
|
|
|
- result['subregions'].append(append_rec(sub_id, file_data_tree, file_data, file_data_prev, namespaces))
|
|
|
+ result['subregions'].append(append_rec(sub_id, file_data_tree, file_data, file_data_prev))
|
|
|
return result
|
|
|
file_data_tree['regions'] = []
|
|
|
- file_data_tree['regions'].append(append_rec(1, file_data_tree, file_data, file_data_prev, namespaces))
|
|
|
+ file_data_tree['regions'].append(append_rec(1, file_data_tree, file_data, file_data_prev))
|
|
|
|
|
|
def append_diff(main_tree, prev_tree):
|
|
|
assert(main_tree != None)
|