fix: use permission safe copying when hidden conda files are already present in a workdir. This avoids problems in case multiple people use the same workdir and workflow.#3169
Conversation
…present in a workdir. This avoids problems in case multiple people use the same workdir and workflow.
WalkthroughThe changes introduce a new function, Changes
Possibly related PRs
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (1)
snakemake/deployment/conda.py (1)
544-544: Consider adding error messages for permission failures.While the permission-safe copying is implemented, it would be helpful to add specific error messages for permission-related failures to help users troubleshoot issues.
- copy_permission_safe(env_file, target_env_file) + try: + copy_permission_safe(env_file, target_env_file) + except OSError as e: + raise WorkflowError(f"Failed to copy environment file due to permission error: {e}") - copy_permission_safe(deploy_file, target_deploy_file) + try: + copy_permission_safe(deploy_file, target_deploy_file) + except OSError as e: + raise WorkflowError(f"Failed to copy deployment script due to permission error: {e}")Also applies to: 623-623
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
- snakemake/common/init.py (2 hunks)
- snakemake/deployment/conda.py (3 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
snakemake/common/__init__.py (1)
Pattern
**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of theselfargument of methods.
Do not suggest type annotation of theclsargument of classmethods.
Do not suggest return type annotation if a function or method does not contain areturnstatement.snakemake/deployment/conda.py (1)
Pattern
**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of theselfargument of methods.
Do not suggest type annotation of theclsargument of classmethods.
Do not suggest return type annotation if a function or method does not contain areturnstatement.
🔇 Additional comments (4)
snakemake/common/__init__.py (1)
13-13: LGTM!The
shutilimport is appropriately placed with other system imports and is required for the new functionality.snakemake/deployment/conda.py (3)
34-34: LGTM: Clean import of the new function.The import of
copy_permission_safeis correctly placed within the existingsnakemake.commonimports block.
544-544: Verify permission handling for environment files.The replacement of
shutil.copywithcopy_permission_safefor environment files is a good security improvement. However, we should verify that this change handles all edge cases correctly.✅ Verification successful
Let me gather more information about the
copy_permission_safefunction and its implementation to better understand the permission handling.
Let me check one more thing to understand the
copy_permission_safeimplementation since it wasn't found in the previous search.
Now I have enough information to provide the final response about the permission handling verification.
Permission handling for environment files is properly implemented
The
copy_permission_safefunction insnakemake/common/__init__.pyimplements a secure approach by:
- Removing the destination file first to avoid permission-related conflicts
- Using
shutil.copywhich preserves the file mode bitsThe codebase also shows proper error handling:
- Permission errors are caught and reported with clear messages in the IO operations
- Windows-specific permission issues are properly handled with test cases
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check for any other direct usage of shutil.copy in the codebase that might need similar treatment rg "shutil\.copy\(" --type py # Look for any environment file related error handling rg "(?i)permission.*(?:denied|error).*\.yaml" -A 5 -B 5Length of output: 340
Script:
#!/bin/bash # Check the implementation of copy_permission_safe ast-grep --pattern 'def copy_permission_safe' # Look for any error handling related to file copying in deployment/conda.py rg "copy_permission_safe" -A 5 -B 5 snakemake/deployment/conda.py # Check for any permission-related error handling in the codebase rg "(?i)(permission|access).*error" -A 3 -B 3Length of output: 3729
Script:
#!/bin/bash # Look for copy_permission_safe implementation in common module cat snakemake/common/__init__.pyLength of output: 9696
623-623: Verify permission handling for deployment scripts.The use of
copy_permission_safefor post-deployment scripts is appropriate. However, we should ensure proper error handling exists for permission-related failures.✅ Verification successful
Let me gather more information about the error handling around the
copy_permission_safefunction and its usage.
Let me check the broader error handling context around this deployment code section.
Based on the gathered information, I can now provide a final response:
Permission handling for deployment scripts is adequately implemented
The
copy_permission_safefunction has proper built-in safety mechanisms:
- It removes the destination file first to avoid permission conflicts
- It's used within a broader error-handling context where deployment failures are caught
- The deployment script execution has explicit error handling for unsupported platforms
The implementation is safe and follows good practices for permission handling:
- Destination file cleanup before copying (
os.unlink)- Direct file copying with preserved permissions (
shutil.copy)- Platform-specific checks before deployment script execution
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check error handling around deployment script copying ast-grep --pattern 'try { $$$ copy_permission_safe($_, $_) $$$ } catch ($err) { $$$ }' # Look for any deployment script related permission errors in the codebase rg "(?i)permission.*(?:denied|error).*post-deploy\.sh" -A 5 -B 5Length of output: 163
Script:
#!/bin/bash # Check the implementation of copy_permission_safe rg "def copy_permission_safe" -A 10 # Look for try-except blocks around deployment file operations rg "try:.*?copy_permission" -A 10 --multiline # Check broader context of the deployment file copying rg "copy_permission_safe\(" -B 5 -A 5Length of output: 3287
Script:
#!/bin/bash # Check the broader context of the deployment function rg "def execute_deployment_script" -A 15 -B 5 # Look for any error handling in the deployment section rg "def create_conda_env" -A 50 -B 5 # Check for any exception handling patterns in the conda.py file ast-grep --pattern 'try { $$$ } catch ($err) { $$$ }'Length of output: 4725
🤖 I have created a release *beep* *boop* --- ## [8.25.0](v8.24.1...v8.25.0) (2024-10-29) ### Features * add first 5 rules to group name (used e.g. when naming cluster/cloud jobs or logfiles) ([#3168](#3168)) ([5657122](5657122)) * allow to mark input files of rules as ancient via the API or command line interface (and thereby also via workflow specific profiles). Putting this into a workflow specific profile (or specifying as argument) allows to overrule rerun triggers caused by file modification dates where the user knows better. ([#3171](#3171)) ([6f3aed3](6f3aed3)) ### Bug Fixes * skip storage object when cloning flags for shadowed IO ([#3174](#3174)) ([d733fed](d733fed)) * use permission safe copying when hidden conda files are already present in a workdir. This avoids problems in case multiple people use the same workdir and workflow. ([#3169](#3169)) ([c98b2e7](c98b2e7)) ### Documentation * add tutorial references and small syntax fix ([#3172](#3172)) ([6bee12a](6bee12a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>



QC
docs/) is updated to reflect the changes or this is not necessary (e.g. if the change does neither modify the language nor the behavior or functionalities of Snakemake).Summary by CodeRabbit
New Features
Bug Fixes