Example #1
0
def handleFile(phase, dirname, basename, suffix):
    filename = os.path.join(dirname, basename)
    #if the target file is older than the file this rule should be applied to, do nothing
    #Also check the rules dump - if this one is newer, then we have to execute this stuff, otherwise do nothing
    tFilename = os.path.join(const101.tRoot, dirname, basename + suffix)
    if not tools101.build(filename, tFilename) or not tools101.build(const101.rulesDump, tFilename):
        entry = {'units' : json.load(open(tFilename, 'r')), 'filename': filename}
        if not entry['units'] == []:
            matches.append(entry)
        return
    units = list() # metadata units for the file at hand
    id = 0 # current rule number
    for r in rules:
        rule = r["rule"]
        result = matchFile(phase, dirname, basename, rule)
        if not result is None:
            if "metadata" in rule:
                metadata = rule["metadata"]
                if isinstance(metadata, list):
                    for m in metadata:
                        buildUnit(units, id, m, result)
                else:
                    buildUnit(units, id, metadata, result)
        id += 1

    # Contract units to pay attention to dominators
    keys = list()
    removals = list()
    for unit in units:
        metadata = unit["metadata"]
        if "dominator" in metadata:
            keys.append(metadata["dominator"])
    for key in keys:
        for unit in units:
            metadata = unit["metadata"]
            if key in metadata \
            and (not "dominator" in metadata
                 or not metadata["dominator"] == key):
                removals.append(unit)
    survivals = list()
    for unit in units:
        if not unit in removals:
            survivals.append(unit)
    units = survivals

    # Add entry to matches if any matches for file at hand
    tools101.makedirs(os.path.join(const101.tRoot, dirname))

    matchesFile = open(tFilename, 'w')
    matchesFile.write(json.dumps(units))
    if len(units) > 0:
        global noUnits
        global noFilesAffected
        noUnits += len(units)
        noFilesAffected += 1
        entry = dict()
        entry["filename"] = filename
        entry["units"] = units
        matches.append(entry)
        tools101.tick()
Example #2
0
sys.path.append('../../libraries/101meta')

import tools101
import const101

blacklist = json.load(open('blacklist.json', 'r'))

#features = json.load(open('debugOutput/features.json', 'r'))
features = features.deriveFeaturesForContributions(blacklist)
#metrics = json.load(open('debugOutput/contributionMetrics.json', 'r'))
metrics = metrics.calculateMetricsForContributions(blacklist)

idx = 0

for featureMapping in features:
    if len(featureMapping['contributions']) > 1:
        contributions = featureMapping['contributions']

        path = os.path.join(const101.views, 'features', str(idx))
        tools101.makedirs(path)

        json.dump(featureMapping['features'],
                  open(os.path.join(path, 'features.json'), 'w'),
                  indent=4)
        visualization.visualize(contributions, metrics,
                                os.path.join(path,
                                             str(idx) + '.png'))

        idx += 1

print '\n\nFinished'