Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add a function to check if patch files contain outdated paths #1878

Merged
merged 7 commits into from
Oct 12, 2022
Merged
Show file tree
Hide file tree
Changes from 3 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
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

### Modules

- Update patch file paths if the modules directory has the old structure ([#1878](https://github.com/nf-core/tools/pull/1878))

## [v2.6 - Tin Octopus](https://github.com/nf-core/tools/releases/tag/2.6) - [2022-10-04]

### Template
Expand Down
37 changes: 36 additions & 1 deletion nf_core/modules/modules_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,11 +177,46 @@ def check_modules_structure(self):
# Move wrong modules to the right directory
for module in wrong_location_modules:
modules_dir = Path("modules").resolve()
correct_dir = Path(modules_dir, self.modules_repo.repo_path, Path(*module.parts[2:]))
module_name = str(Path(*module.parts[2:]))
correct_dir = Path(modules_dir, self.modules_repo.repo_path, Path(module_name))
wrong_dir = Path(modules_dir, module)
shutil.move(wrong_dir, correct_dir)
log.info(f"Moved {wrong_dir} to {correct_dir}.")
# Check if a path file exists
patch_path = correct_dir / Path(module_name + ".diff")
self.check_patch_paths(patch_path, module_name)
shutil.rmtree(Path(self.dir, "modules", self.modules_repo.repo_path, "modules"))
# Regenerate modules.json file
modules_json = ModulesJson(self.dir)
modules_json.check_up_to_date()

def check_patch_paths(self, patch_path, module_name):
"""
Check that paths in patch files are updated to the new modules path
"""
if patch_path.exists():
log.info(f"Modules {module_name} contains a patch file.")
rewrite = False
with open(patch_path, "r") as fh:
lines = fh.readlines()
for index, line in enumerate(lines):
# Check if there are old paths in the patch file and replace
if f"modules/{self.modules_repo.repo_path}/modules/{module_name}/" in line:
rewrite = True
lines[index] = line.replace(
f"modules/{self.modules_repo.repo_path}/modules/{module_name}/",
f"modules/{self.modules_repo.repo_path}/{module_name}/",
)
if rewrite:
log.info(f"Updating paths in {patch_path}")
with open(patch_path, "w") as fh:
for line in lines:
fh.write(line)
# Update path in modules.json if the file is in the correct format
modules_json = ModulesJson(self.dir)
modules_json.load()
if modules_json.has_git_url_and_modules():
modules_json.modules_json["repos"][self.modules_repo.remote_url]["modules"][
self.modules_repo.repo_path
][module_name]["patch"] = str(patch_path.relative_to(Path(self.dir).resolve()))
modules_json.dump()
Comment on lines +192 to +221
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

2 changes: 1 addition & 1 deletion nf_core/modules/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def patch(self, module=None):
module_dir = [dir for dir, m in modules if m == module][0]
module_fullname = str(Path("modules", module_dir, module))

# Verify that the module has an entry is the modules.json file
# Verify that the module has an entry in the modules.json file
if not self.modules_json.module_present(module, self.modules_repo.remote_url, module_dir):
raise UserWarning(
f"The '{module_fullname}' module does not have an entry in the 'modules.json' file. Cannot compute patch"
Expand Down
4 changes: 4 additions & 0 deletions nf_core/modules/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,10 @@ def try_apply_patch(self, module, repo_path, patch_relpath, module_dir, module_i
patch_path = Path(self.dir / patch_relpath)
module_relpath = Path("modules", repo_path, module)

# Check that paths in patch file are updated
print(patch_path, module)
mirpedrol marked this conversation as resolved.
Show resolved Hide resolved
self.check_patch_paths(patch_path, module)

# Copy the installed files to a new temporary directory to save them for later use
temp_dir = Path(tempfile.mkdtemp())
temp_module_dir = temp_dir / module
Expand Down