diff --git a/modules/openstack_project/files/slave_scripts/zuul_swift_upload.py b/modules/openstack_project/files/slave_scripts/zuul_swift_upload.py index b802c8894f..5c535f67fc 100755 --- a/modules/openstack_project/files/slave_scripts/zuul_swift_upload.py +++ b/modules/openstack_project/files/slave_scripts/zuul_swift_upload.py @@ -34,11 +34,16 @@ def generate_log_index(file_list, logserver_prefix, swift_destination_prefix): output = '<html><head><title>Index of results</title></head><body>' output += '<ul>' for f in file_list: - file_url = os.path.join(logserver_prefix, swift_destination_prefix, - f['filename']) - + file_url = os.path.join(logserver_prefix, swift_destination_prefix, f) + # Because file_list is simply a list to create an index for and it + # isn't necessarily on disk we can't check if a file is a folder or + # not. As such we normalise the name to get the folder/filename but + # then need to check if the last character was a trailing slash so to + # re-append it to make it obvious that it links to a folder + filename_postfix = '/' if f[-1] == '/' else '' + filename = os.path.basename(os.path.normpath(f)) + filename_postfix output += '<li>' - output += '<a href="%s">%s</a>' % (file_url, f['filename']) + output += '<a href="%s">%s</a>' % (file_url, filename) output += '</li>' output += '</ul>' @@ -107,13 +112,13 @@ def swift_form_post_submit(file_list, url, hmac_body, signature): files['file%d' % (i + 1)] = (filename_prefix + f['filename'], open(f['path'], 'rb'), get_file_mime(f['path'])) - requests.post(url, data=payload, files=files) def build_file_list(file_path, logserver_prefix, swift_destination_prefix, create_dir_indexes=True): - """Upload to swift using instructions from zuul""" + """Generate a list of files to upload to zuul. Recurses through directories + and generates index.html files if requested.""" # file_list: a list of dicts with {path=..., filename=...} where filename # is appended to the end of the object (paths can be used) @@ -132,14 +137,13 @@ def build_file_list(file_path, logserver_prefix, swift_destination_prefix, relative_name = os.path.relpath(full_path, parent_dir) push_file = {'filename': relative_name, 'path': full_path} - folder_contents.append(push_file) file_list.append(push_file) + folder_contents.append(relative_name) for f in folders: - full_path = os.path.join(path, f) + '/' + full_path = os.path.join(path, f) relative_name = os.path.relpath(full_path, parent_dir) - folder_contents.append({'filename': relative_name, - 'path': full_path}) + folder_contents.append(relative_name + '/') if create_dir_indexes: index_file = make_index_file(folder_contents, logserver_prefix, @@ -187,12 +191,11 @@ if __name__ == '__main__': quit() for file_path in args.files: + file_path = os.path.normpath(file_path) if os.path.isfile(file_path): - root_list.append({'filename': os.path.basename(file_path), - 'path': file_path}) + root_list.append(os.path.basename(file_path)) else: - root_list.append({'filename': os.path.basename(file_path) + '/', - 'path': file_path}) + root_list.append(os.path.basename(file_path) + '/') file_list += build_file_list( file_path, logserver_prefix, swift_destination_prefix,