mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Bug 1374348 - Rewrite paths from JAR files. r=chmanchester
--HG-- extra : rebase_source : cf94efafe34b2d72b21c839bd7422225de758173
This commit is contained in:
parent
4773d84ed5
commit
98273422c7
@ -591,7 +591,36 @@ class UrlFinder(object):
|
||||
url = url.split(' -> ')[1].rstrip()
|
||||
|
||||
url_obj = urlparse.urlparse(url)
|
||||
if url_obj.scheme == 'file' and os.path.isabs(url_obj.path):
|
||||
if url_obj.scheme == 'jar':
|
||||
app_name = buildconfig.substs.get('MOZ_APP_NAME')
|
||||
omnijar_name = buildconfig.substs.get('OMNIJAR_NAME')
|
||||
|
||||
if app_name in url:
|
||||
if omnijar_name in url:
|
||||
# e.g. file:///home/worker/workspace/build/application/firefox/omni.ja!/components/MainProcessSingleton.js
|
||||
parts = url_obj.path.split(omnijar_name + '!', 1)
|
||||
elif '.xpi!' in url:
|
||||
# e.g. file:///home/worker/workspace/build/application/firefox/browser/features/e10srollout@mozilla.org.xpi!/bootstrap.js
|
||||
parts = url_obj.path.split('.xpi!', 1)
|
||||
else:
|
||||
# We don't know how to handle this jar: path, so return it to the
|
||||
# caller to make it print a warning.
|
||||
return url_obj.path, None, False
|
||||
|
||||
dir_parts = parts[0].rsplit(app_name + '/', 1)
|
||||
url = os.path.join(self.topobjdir, 'dist', 'bin', dir_parts[1].lstrip('/'), parts[1].lstrip('/'))
|
||||
elif '.xpi!' in url:
|
||||
# e.g. file:///tmp/tmpMdo5gV.mozrunner/extensions/workerbootstrap-test@mozilla.org.xpi!/bootstrap.js
|
||||
# This matching mechanism is quite brittle and based on examples seen in the wild.
|
||||
# There's no rule to match the XPI name to the path in dist/xpi-stage.
|
||||
parts = url_obj.path.split('.xpi!', 1)
|
||||
addon_name = os.path.basename(parts[0])
|
||||
if '-test@mozilla.org' in addon_name:
|
||||
addon_name = addon_name[:-len('-test@mozilla.org')]
|
||||
elif addon_name.endswith('@mozilla.org'):
|
||||
addon_name = addon_name[:-len('@mozilla.org')]
|
||||
url = os.path.join(self.topobjdir, 'dist', 'xpi-stage', addon_name, parts[1].lstrip('/'))
|
||||
elif url_obj.scheme == 'file' and os.path.isabs(url_obj.path):
|
||||
path = url_obj.path
|
||||
if not os.path.isfile(path):
|
||||
# This may have been in a profile directory that no
|
||||
@ -600,7 +629,7 @@ class UrlFinder(object):
|
||||
if not path.startswith(self.topobjdir):
|
||||
return path, None, False
|
||||
url = url_obj.path
|
||||
if url_obj.scheme in ('http', 'https', 'javascript', 'data', 'about'):
|
||||
elif url_obj.scheme in ('http', 'https', 'javascript', 'data', 'about'):
|
||||
return None
|
||||
|
||||
result = self.find_files(url)
|
||||
|
@ -244,5 +244,64 @@ class TestLineRemapping(unittest.TestCase):
|
||||
self.assertEqual(original_covered_function_count,
|
||||
sum(r.covered_function_count for r in lcov_file.records))
|
||||
|
||||
class TestUrlFinder(unittest.TestCase):
|
||||
def setUp(self):
|
||||
chrome_map_file = os.path.join(buildconfig.topobjdir, 'chrome-map.json')
|
||||
self._old_chrome_info_file = None
|
||||
if os.path.isfile(chrome_map_file):
|
||||
backup_file = os.path.join(buildconfig.topobjdir, 'chrome-map-backup.json')
|
||||
self._old_chrome_info_file = backup_file
|
||||
self._chrome_map_file = chrome_map_file
|
||||
shutil.move(chrome_map_file, backup_file)
|
||||
|
||||
empty_chrome_info = [
|
||||
{},
|
||||
{},
|
||||
{
|
||||
'dist/bin/components/MainProcessSingleton.js': [
|
||||
'path1',
|
||||
False
|
||||
],
|
||||
'dist/bin/browser/components/nsSessionStartup.js': [
|
||||
'path2',
|
||||
False
|
||||
],
|
||||
'dist/bin/browser/features/e10srollout@mozilla.org/bootstrap.js': [
|
||||
'path3',
|
||||
False
|
||||
],
|
||||
'dist/bin/browser/features/firefox@getpocket.com/bootstrap.js': [
|
||||
'path4',
|
||||
False
|
||||
],
|
||||
'dist/xpi-stage/workerbootstrap/bootstrap.js': [
|
||||
'path5',
|
||||
False
|
||||
]
|
||||
},
|
||||
]
|
||||
with open(chrome_map_file, 'w') as fh:
|
||||
json.dump(empty_chrome_info, fh)
|
||||
|
||||
def tearDown(self):
|
||||
if self._old_chrome_info_file:
|
||||
shutil.move(self._old_chrome_info_file, self._chrome_map_file)
|
||||
|
||||
def test_jar_paths(self):
|
||||
app_name = buildconfig.substs.get('MOZ_APP_NAME')
|
||||
omnijar_name = buildconfig.substs.get('OMNIJAR_NAME')
|
||||
|
||||
paths = [
|
||||
('jar:file:///home/worker/workspace/build/application/' + app_name + '/' + omnijar_name + '!/components/MainProcessSingleton.js', 'path1'),
|
||||
('jar:file:///home/worker/workspace/build/application/' + app_name + '/browser/' + omnijar_name + '!/components/nsSessionStartup.js', 'path2'),
|
||||
('jar:file:///home/worker/workspace/build/application/' + app_name + '/browser/features/e10srollout@mozilla.org.xpi!/bootstrap.js', 'path3'),
|
||||
('jar:file:///home/worker/workspace/build/application/' + app_name + '/browser/features/firefox@getpocket.com.xpi!/bootstrap.js', 'path4'),
|
||||
('jar:file:///tmp/tmpMdo5gV.mozrunner/extensions/workerbootstrap-test@mozilla.org.xpi!/bootstrap.js', 'path5'),
|
||||
]
|
||||
|
||||
url_finder = lcov_rewriter.UrlFinder('', '', [])
|
||||
for path, expected in paths:
|
||||
self.assertEqual(url_finder.rewrite_url(path)[0], expected)
|
||||
|
||||
if __name__ == '__main__':
|
||||
mozunit.main()
|
||||
|
Loading…
Reference in New Issue
Block a user