| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import sys |
| import os |
| |
| tracing_path = os.path.abspath(os.path.join(os.path.dirname(__file__), |
| '..', '..')) |
| if tracing_path not in sys.path: |
| sys.path.append(tracing_path) |
| |
| from tracing import tracing_project |
| |
| |
| FILE_GROUPS = ["tracing_css_files", |
| "tracing_js_html_files", |
| "tracing_img_files"] |
| |
| |
| def GetFileGroupFromFileName(filename): |
| extension = os.path.splitext(filename)[1] |
| return { |
| '.css': 'tracing_css_files', |
| '.html': 'tracing_js_html_files', |
| '.js': 'tracing_js_html_files', |
| '.png': 'tracing_img_files' |
| }[extension] |
| |
| |
| def CheckListedFilesSorted(src_file, group_name, listed_files): |
| sorted_files = sorted(listed_files) |
| if sorted_files != listed_files: |
| mismatch = '' |
| for i in range(len(listed_files)): |
| if listed_files[i] != sorted_files[i]: |
| mismatch = listed_files[i] |
| break |
| what_is = ' ' + '\n '.join(listed_files) |
| what_should_be = ' ' + '\n '.join(sorted_files) |
| return '''In group {0} from file {1}, filenames aren't sorted. |
| |
| First mismatch: |
| {2} |
| |
| Current listing: |
| {3} |
| |
| Correct listing: |
| {4}\n\n'''.format(group_name, src_file, mismatch, what_is, what_should_be) |
| else: |
| return '' |
| |
| |
| def GetKnownFiles(): |
| p = tracing_project.TracingProject() |
| m = p.loader.LoadModule(module_name='ui.extras.about_tracing.about_tracing') |
| absolute_filenames = m.GetAllDependentFilenamesRecursive( |
| include_raw_scripts=False) |
| |
| return list(set([os.path.relpath(f, p.tracing_root_path) |
| for f in absolute_filenames])) |
| |
| |
| def CheckCommon(file_name, listed_files): |
| tracing_project.TracingProject() |
| |
| known_files = GetKnownFiles() |
| u = set(listed_files).union(set(known_files)) |
| i = set(listed_files).intersection(set(known_files)) |
| diff = list(u - i) |
| |
| if len(diff) == 0: |
| return '' |
| |
| error = 'Entries in ' + file_name + ' do not match files on disk:\n' |
| in_file_only = list(set(listed_files) - set(known_files)) |
| in_known_only = list(set(known_files) - set(listed_files)) |
| |
| if len(in_file_only) > 0: |
| error += ' In file only:\n ' + '\n '.join(sorted(in_file_only)) |
| if len(in_known_only) > 0: |
| if len(in_file_only) > 0: |
| error += '\n\n' |
| error += ' On disk only:\n ' + '\n '.join(sorted(in_known_only)) |
| |
| if in_file_only: |
| error += ( |
| '\n\n' |
| ' Note: only files actually used in about:tracing should\n' |
| ' be listed in the build files. Try running build/update_gyp_and_gn\n' |
| ' to update the files automatically.') |
| |
| return error |