Skip to content

Commit

Permalink
Scripts and tools: Fix devtools/copyright_header.py to always honor e…
Browse files Browse the repository at this point in the history
…xclusions

This script compared paths relative to the report directory to test for exclusion,
meaning the directory exclusions did not work properly, as they were relative to
the project root.

Fix this by creating absolute paths through the combination of:
'git ls-files --full-name' and 'git rev-parse --show-toplevel'
  • Loading branch information
Empact committed Jan 25, 2019
1 parent 72bd4ab commit 2434ab5
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions contrib/devtools/copyright_header.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,22 @@ def applies_to_file(filename):
# obtain list of files in repo according to INCLUDE and EXCLUDE
################################################################################

GIT_LS_CMD = 'git ls-files'
GIT_LS_CMD = 'git ls-files --full-name'.split(' ')
GIT_TOPLEVEL_CMD = 'git rev-parse --show-toplevel'.split(' ')

def call_git_ls():
out = subprocess.check_output(GIT_LS_CMD.split(' '))
def call_git_ls(base_directory):
out = subprocess.check_output([*GIT_LS_CMD, base_directory])
return [f for f in out.decode("utf-8").split('\n') if f != '']

def get_filenames_to_examine():
filenames = call_git_ls()
return sorted([filename for filename in filenames if
def call_git_toplevel():
"Returns the absolute path to the project root"
return subprocess.check_output(GIT_TOPLEVEL_CMD).strip().decode("utf-8")

def get_filenames_to_examine(base_directory):
"Returns an array of absolute paths to any project files in the base_directory that pass the include/exclude filters"
root = call_git_toplevel()
filenames = call_git_ls(base_directory)
return sorted([os.path.join(root, filename) for filename in filenames if
applies_to_file(filename)])

################################################################################
Expand Down Expand Up @@ -146,7 +153,7 @@ def file_has_without_c_style_copyright_for_holder(contents, holder_name):
################################################################################

def read_file(filename):
return open(os.path.abspath(filename), 'r', encoding="utf8").read()
return open(filename, 'r', encoding="utf8").read()

def gather_file_info(filename):
info = {}
Expand Down Expand Up @@ -260,12 +267,9 @@ def print_report(file_infos, verbose):
print(SEPARATOR)

def exec_report(base_directory, verbose):
original_cwd = os.getcwd()
os.chdir(base_directory)
filenames = get_filenames_to_examine()
filenames = get_filenames_to_examine(base_directory)
file_infos = [gather_file_info(f) for f in filenames]
print_report(file_infos, verbose)
os.chdir(original_cwd)

################################################################################
# report cmd
Expand Down Expand Up @@ -325,13 +329,13 @@ def get_most_recent_git_change_year(filename):
################################################################################

def read_file_lines(filename):
f = open(os.path.abspath(filename), 'r', encoding="utf8")
f = open(filename, 'r', encoding="utf8")
file_lines = f.readlines()
f.close()
return file_lines

def write_file_lines(filename, file_lines):
f = open(os.path.abspath(filename), 'w', encoding="utf8")
f = open(filename, 'w', encoding="utf8")
f.write(''.join(file_lines))
f.close()

Expand Down Expand Up @@ -399,11 +403,8 @@ def update_updatable_copyright(filename):
"Copyright updated! -> %s" % last_git_change_year)

def exec_update_header_year(base_directory):
original_cwd = os.getcwd()
os.chdir(base_directory)
for filename in get_filenames_to_examine():
for filename in get_filenames_to_examine(base_directory):
update_updatable_copyright(filename)
os.chdir(original_cwd)

################################################################################
# update cmd
Expand Down

0 comments on commit 2434ab5

Please sign in to comment.