Move rewriting of path earlier in the argument handling as other things depend on the path

pull/40348/head
Toshio Kuratomi 6 years ago
parent 021f33e063
commit 0442efd33a

@ -159,6 +159,27 @@ def _ansible_excepthook(exc_type, exc_value, tb):
def additional_parameter_handling(params): def additional_parameter_handling(params):
"""Additional parameter validation and reformatting""" """Additional parameter validation and reformatting"""
# When path is a directory, rewrite the pathname to be the file inside of the directory
# TODO: Why do we exclude link? Why don't we exclude directory? Should we exclude touch?
# I think this is where we want to be in the future:
# when isdir(path):
# if state == absent: Remove the directory
# if state == touch: Touch the directory
# if state == directory: Assert the directory is the same as the one specified
# if state == file: place inside of the directory (use _original_basename)
# if state == link: place inside of the directory (use _original_basename. Fallback to src?)
# if state == hard: place inside of the directory (use _original_basename. Fallback to src?)
if (params['state'] not in ("link", "absent") and os.path.isdir(to_bytes(params['path'], errors='surrogate_or_strict'))):
basename = None
if params['_original_basename']:
basename = params['_original_basename']
elif params['src']:
basename = os.path.basename(params['src'])
if basename:
params['path'] = os.path.join(params['path'], basename)
# state should default to file, but since that creates many conflicts, # state should default to file, but since that creates many conflicts,
# default state to 'current' when it exists. # default state to 'current' when it exists.
prev_state = get_state(to_bytes(params['path'], errors='surrogate_or_strict')) prev_state = get_state(to_bytes(params['path'], errors='surrogate_or_strict'))
@ -186,19 +207,6 @@ def additional_parameter_handling(params):
# raise ParameterError(results={"msg": "src option requires state to be 'link' or 'hard'", # raise ParameterError(results={"msg": "src option requires state to be 'link' or 'hard'",
# "path": params["path"]}) # "path": params["path"]})
# When path is a directory, rewrite the pathname to be the file inside of the directory
# TODO: Why do we exclude link? Why don't we exclude directory? Should we exclude touch?
if (params['state'] not in ("link", "absent") and os.path.isdir(to_bytes(params['path'], errors='surrogate_or_strict'))):
basename = None
# _original_basename is used by other modules that depend on file to construct a correct
# destination path when the destination path was a directory
if params['_original_basename']:
basename = params['_original_basename']
if basename:
params['path'] = params['path'] = os.path.join(params['path'], basename)
def get_state(path): def get_state(path):
''' Find out current state ''' ''' Find out current state '''

Loading…
Cancel
Save