Skip to content

Commit

Permalink
Merge pull request #1878 from mirpedrol/patch
Browse files Browse the repository at this point in the history
add a function to check if patch files contain outdated paths
  • Loading branch information
mirpedrol authored Oct 12, 2022
2 parents 5be0720 + 2bfed71 commit d0901f7
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 2 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,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 @@ -176,11 +176,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()
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
3 changes: 3 additions & 0 deletions nf_core/modules/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,9 @@ 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
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

0 comments on commit d0901f7

Please sign in to comment.