summaryrefslogtreecommitdiffstats
path: root/Tools/Scripts/webkitpy/common/config/contributionareas.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/webkitpy/common/config/contributionareas.py')
-rw-r--r--Tools/Scripts/webkitpy/common/config/contributionareas.py212
1 files changed, 0 insertions, 212 deletions
diff --git a/Tools/Scripts/webkitpy/common/config/contributionareas.py b/Tools/Scripts/webkitpy/common/config/contributionareas.py
deleted file mode 100644
index effcd22a0..000000000
--- a/Tools/Scripts/webkitpy/common/config/contributionareas.py
+++ /dev/null
@@ -1,212 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re
-
-
-class _Intersection(object):
- def __init__(self, *tokens):
- self._tokens = tokens
-
- def matches(self, tokens):
- for token in self._tokens:
- if token not in tokens and (token + 's') not in tokens:
- return False
- return True
-
-
-class _Area(object):
- def __init__(self, name, tokens=None):
- self._name = name
- self._tokens = tokens if tokens else [self._name_to_token(name)]
-
- def _name_to_token(self, word):
- token = word.lower()
- return token[:-1] if word[-1] == 's' else token
-
- def matches(self, tokens):
- # FIXME: Support pluraization properly
- for token in self._tokens:
- if isinstance(token, _Intersection):
- if token.matches(tokens):
- return True
- elif token in tokens or (token + 's') in tokens:
- return True
- return False
-
- def name(self):
- return self._name
-
- def tokens(self):
- return self._tokens
-
-contribution_areas = [
- _Area('ARM JIT', ['arm']),
-# FIXME: 'Accelerated compositing / GPU acceleration'
- _Area('Accessibility'),
- _Area('Android port', ['android']),
- _Area('Animation', ['animation', 'animator']),
- _Area('Apple\'s Windows port', ['win', 'windows']), # FIXME: need to exclude chromium...
- _Area('Autotools Build', ['autotools']),
- _Area('Basic types and data structures (WTF)', ['wtf']),
-# FIXME: 'Bidirectional text'
-# FIXME: 'Build/test infrastructure (stuff under Tools/Scripts)'
- _Area('CMake Build', ['cmakelist']),
- _Area('CSS (Cascading Style Sheets)', ['css']),
- _Area('CSS Transforms', [_Intersection('css', 'transforms')]),
- _Area('CSS/SVG Filters', [_Intersection('css', 'filters'), _Intersection('svg', 'filters')]),
- _Area('CURL HTTP Backend', ['CURL']),
- _Area('Resource Cache', [_Intersection('loader', 'cache')]),
- _Area('Memory Cache', [_Intersection('graphics', 'cache')]),
- _Area('Cairo'),
- _Area('Canvas'),
- _Area('Chromium Linux', [_Intersection('chromium', 'linux')]),
-# FIXME: 'Commit Queue'
- _Area('Core DOM', ['dom']),
- _Area('Core Graphics', ['cg']),
- _Area('Bindings'),
- _Area('DOM Storage', ['storage']),
- _Area('Drag and Drop', ['drag']),
- _Area('DumpRenderTree'),
- _Area('EFL', ['efl']),
- _Area('Editing / Selection', ['editing']),
- _Area('Event Handling', ['event']),
- _Area('FastMalloc'),
- _Area('File API', ['fileapi']),
- _Area('Fonts'),
- _Area('Forms'),
-# FIXME: 'Frame Flattening'
- _Area('Frame Loader'),
-# FIXME: 'General' Maybe auto-detect people contributing to all subdirectories?
- _Area('Geolocation API', ['geolocation']),
- _Area('Graphics', ['graphics']),
- _Area('HTML', ['html']),
- _Area('HTML Parser', [_Intersection('html', 'parser')]), # FIXME: matches html/track/WebVTTParser.cpp
- _Area('HTML5 Media Support', ['media']),
- _Area('History', ['history']),
-# FIXME: 'Hit testing'
- _Area('Image Decoder', ['imagedecoder']),
-# FIXME: 'Input methods'
- _Area('JSC Bindings', [_Intersection('bindings', 'js')]),
- _Area('JavaScriptCore'),
- _Area('JavaScriptCore Regular Expressions', [_Intersection('JavaScriptCore', 'regexp')]),
-# FIXME: 'Layout tests' but what does it mean to say you're an expert on layout tests? Maybe worked on tools?
- _Area('Loader', ['loader']),
- _Area('MathML'),
- _Area('Memory Use / Leaks', ['leaks']), # Probably need more tokens
- _Area('MessagePorts'),
- _Area('Network', [_Intersection('platform', 'network')]),
- _Area('new-run-webkit-tests', ['layout_tests']),
- _Area('OpenVG graphics backend', ['openvg']),
-# FIXME: 'Performance'
- _Area('Plug-ins', ['plugins']),
- _Area('Printing', ['printing', 'print']),
- _Area('Rendering'),
- _Area('SVG (Scalable Vector Graphics)', ['svg']),
- _Area('Scrollbars', ['scroll']),
- _Area('Security'), # Probably need more tokens
-# FIXME: 'Shadow DOM'
- _Area('Soup Network Backend', ['soup']),
-# FIXME: 'Spell Checking' just need tokens
- _Area('Tables', ['htmltable', 'rendertable']),
-# FIXME: 'Text Encoding'
-# FIXME: 'Text Layout'
- _Area('The Chromium Port', ['chromium']),
- _Area('The EFLWebKit Port', ['efl']),
- _Area('The WebKitGTK+ Port', ['gtk']),
- _Area('The Haiku Port', ['haiku']),
- _Area('The QtWebKit Port', ['qt']),
- _Area('The WinCE Port', ['wince']),
- _Area('The WinCairo Port', ['cairo']),
- _Area('Threading', ['thread']),
- _Area('Tools'),
- _Area('Touch Support', ['touch']),
- _Area('Transforms', ['transforms']), # There's also CSS transforms
- _Area('Transitions', ['transitions']), # This only matches transition events at the moment
- _Area('URL Parsing', ['KURL']), # Probably need more tokens
- _Area('V8', ['v8']),
- _Area('V8 Bindings', [_Intersection('bindings', 'v8')]),
- _Area('Web Inspector / Developer Tools', ['inspector']),
- _Area('Web Timing', ['PerformanceNavigation', 'PerformanceTiming']), # more tokens?
- _Area('WebArchive'),
- _Area('WebCore Icon Database', ['icon']),
- _Area('WebGL', ['webgl']),
- _Area('WebKit Websites', ['websites']),
- _Area('WebKit2'),
- _Area('WebSQL Databases', [_Intersection('storage', 'database')]),
- _Area('WebSockets'),
- _Area('Workers'),
- _Area('XML'),
- _Area('XMLHttpRequest'),
- _Area('XSLT'),
- _Area('XSSAuditor'),
- _Area('WebKit API Tests', ['TestWebKitAPI']),
- _Area('webkit-patch', [_Intersection('webkitpy', 'commands')]),
-]
-
-
-class ContributionAreas(object):
- def __init__(self, filesystem, table=contribution_areas):
- self._filesystem = filesystem
- self._contribution_areas = table
-
- def names(self):
- return [area.name() for area in self._contribution_areas]
-
- def _split_path(self, path):
- result = []
- while path and len(path):
- next_path, tail = self._filesystem.split(path)
- if path == next_path:
- break
- if tail and len(tail):
- result.append(tail)
- path = next_path
- return result
-
- def _split_camelcase(self, name, transform=lambda x: x):
- result = []
- while name and len(name):
- m = re.match('^([A-Z][a-z0-9]+)|([A-Z0-9]+(?=([A-Z][a-z0-9]|\.|$)))', name)
- if m:
- result.append(transform(m.group(0)))
- name = name[m.end():]
- else:
- return result
- return result
-
- def areas_for_touched_files(self, touched_files):
- areas = set()
- for file_path in touched_files:
- split_file_path = self._split_path(file_path)
- tokenized_file_path = None
- tokenized_file_path = sum([self._split_camelcase(token, lambda x: x.lower()) for token in split_file_path], [])
- for area in self._contribution_areas:
- if area.matches(split_file_path) or area.matches(tokenized_file_path):
- areas.add(area.name())
- return areas