Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 20 additions & 21 deletions colcon_core/shell/template/prefix_util.py.em
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,13 @@ def process_dsv_file(
):
commands = []
if _include_comments():
commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path}))
commands.append(FORMAT_STR_COMMENT_LINE.format_map({
'comment': dsv_path}))
with open(dsv_path, 'r') as h:
content = h.read()
lines = content.splitlines()

basenames = OrderedDict()
basename_map = OrderedDict()
for i, line in enumerate(lines):
# skip over empty or whitespace-only lines
if not line.strip():
Expand All @@ -227,21 +228,21 @@ def process_dsv_file(
else:
# group remaining source lines by basename
path_without_ext, ext = os.path.splitext(remainder)
if path_without_ext not in basenames:
basenames[path_without_ext] = set()
if path_without_ext not in basename_map:
basename_map[path_without_ext] = set()
assert ext.startswith('.')
ext = ext[1:]
if ext in (primary_extension, additional_extension):
basenames[path_without_ext].add(ext)
basename_map[path_without_ext].add(ext)

# add the dsv extension to each basename if the file exists
for basename, extensions in basenames.items():
for basename, extensions in basename_map.items():
if not os.path.isabs(basename):
basename = os.path.join(prefix, basename)
if os.path.exists(basename + '.dsv'):
extensions.add('dsv')

for basename, extensions in basenames.items():
for basename, extensions in basename_map.items():
if not os.path.isabs(basename):
basename = os.path.join(prefix, basename)
if 'dsv' in extensions:
Expand Down Expand Up @@ -308,8 +309,8 @@ def handle_dsv_types_except_source(type_, remainder, prefix):
comment = f'skip extending {env_name} with not existing ' \
f'path: {value}'
if _include_comments():
commands.append(
FORMAT_STR_COMMENT_LINE.format_map({'comment': comment}))
commands.append(FORMAT_STR_COMMENT_LINE.format_map({
'comment': comment}))
elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE:
commands += _append_unique_value(env_name, value)
else:
Expand All @@ -324,15 +325,15 @@ env_state = {}


def _append_unique_value(name, value):
global env_state
if name not in env_state:
if os.environ.get(name):
env_state[name] = set(os.environ[name].split(os.pathsep))
else:
env_state[name] = set()
# append even if the variable has not been set yet, in case a shell script sets the
# same variable without the knowledge of this Python script.
# later _remove_ending_separators() will cleanup any unintentional leading separator
# Append even if the variable has not been set yet, in case a shell script
# sets the same variable without the knowledge of this Python script.
# Later, _remove_ending_separators() will cleanup any unintentional
# leading separator.
extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep
line = FORMAT_STR_SET_ENV_VAR.format_map(
{'name': name, 'value': extend + value})
Expand All @@ -346,15 +347,15 @@ def _append_unique_value(name, value):


def _prepend_unique_value(name, value):
global env_state
if name not in env_state:
if os.environ.get(name):
env_state[name] = set(os.environ[name].split(os.pathsep))
else:
env_state[name] = set()
# prepend even if the variable has not been set yet, in case a shell script sets the
# same variable without the knowledge of this Python script.
# later _remove_ending_separators() will cleanup any unintentional trailing separator
# Prepend even if the variable has not been set yet, in case a shell script
# sets the same variable without the knowledge of this Python script.
# Later, _remove_ending_separators() will cleanup any unintentional
# trailing separator.
extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name})
line = FORMAT_STR_SET_ENV_VAR.format_map(
{'name': name, 'value': value + extend})
Expand All @@ -373,10 +374,10 @@ def _remove_ending_separators():
if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None:
return []

global env_state
commands = []
for name in env_state:
# skip variables that already had values before this script started prepending
# skip variables that already had values before this script started
# appending/prepending
if name in os.environ:
continue
commands += [
Expand All @@ -386,15 +387,13 @@ def _remove_ending_separators():


def _set(name, value):
global env_state
env_state[name] = value
line = FORMAT_STR_SET_ENV_VAR.format_map(
{'name': name, 'value': value})
return [line]


def _set_if_unset(name, value):
global env_state
line = FORMAT_STR_SET_ENV_VAR.format_map(
{'name': name, 'value': value})
if env_state.get(name, os.environ.get(name)):
Expand Down
Loading