aboutsummaryrefslogtreecommitdiff
path: root/snakemake.el
AgeCommit message (Collapse)Author
2023-12-10snakemake.el: Tweak docstring quoting to pacify byte-compilerKyle Meyer
2023-04-17transient: Specify arglistKyle Meyer
As of 5337e5e (transient-define-{*}: Error if ARGLIST is missing, 2023-01-20), Transient throws an error.
2022-02-22Delete snakemake-compile compatibility aliasKyle Meyer
2022-02-21transient: Use --cores=all by defaultKyle Meyer
--cores has been a mandatory argument since v5.11. Set the default to something that can actually build targets. Message-Id: <20220222030207.204401-4-kyle@kyleam.com>
2022-02-21transient: Replace --jobs with --coresKyle Meyer
--cores was added as a synonym for --jobs in v3.10.0 (2012), and, as of v6.5.0, --cores and --jobs are distinct things for cloud/cluster jobs. Wait to add --jobs until it's requested. Message-Id: <20220222030207.204401-3-kyle@kyleam.com>
2022-02-21Rewrite snakemake-popup as a transientKyle Meyer
Magit switched to Transient for its popups a while go. Magit Popup is still around for third-party libraries that may use it, but it's not actively developed. At the moment, this switch is trading one external library for another (improved) one. However, Transient will ship with Emacs starting with the upcoming 28.1 release. Message-Id: <20220222030207.204401-2-kyle@kyleam.com>
2022-02-21Rework copyright linesKyle Meyer
public-inbox has started to drop dates from its copyright lines, pointing to the recommendation at https://www.linuxfoundation.org/blog/copyright-notices-in-open-source-software-projects/ I regularly fail to keep copyright lines up to date, so I'll gladly follow suit. Drop the dates and change the copyright holder to (almost match) the variants recommended in the above article.
2020-11-01docs: Update stale Snakemake linksKyle Meyer
2020-04-13Update links for repo's new homeKyle Meyer
2020-02-21Update copyright yearsKyle Meyer
2018-09-22snakemake-popup: Add --use-condaKyle Meyer
2018-09-01Prefer https linksKyle Meyer
2018-09-01Change 'guix environment' snippet to use --manifestKyle Meyer
'guix environment' accepts a manifest as of 267379f85 (environment: Add --manifest option., 2018-02-15). Declaring a set of dependencies via --manifest is more straightforward than doing so with --load, so suggest --manifest instead.
2018-09-01snakemake-term-start: Reorder arguments in docstring's guix commandKyle Meyer
Match the order given in guix-snakemake-environment.
2018-01-20Update copyright yearsKyle Meyer
2017-04-30graphs: Display file if Emacs lacks ImageMagick supportKyle Meyer
To display the graph, snakemake-graph and snakemake-graph-this-file call image-mode in a buffer with the snakemake graph output. This is convenient because it works without using an output file, but displaying the graph fails if Emacs was compiled without ImageMagick support. When Emacs doesn't have ImageMagick support, fall back to saving the file and then displaying it.
2017-04-30snakemake-graph-save: Return the name of the output fileKyle Meyer
This will allow the graphing commands to save and display the graph when the user is running an Emacs that was not built with ImageMagick support. When the user provides all-blank input or does not confirm an overwrite, raise a user error so that the caller doesn't have to check for a nil return value.
2017-04-01Add a user option to always send commands to a terminalKyle Meyer
The primary motivation behind having a terminal interface is that it works better with tools like Guix because the environment persists across calls. And the primary reason one would want to use Guix with Snakemake is so that the dependencies to a workflow/analysis can be specified and tightly controlled. However, the user can accidentally step outside of this controlled environment by running a build command before running snakemake-term-start. The changes from this mistake can be hard to confidently reverse and may require a wide removal of output files. If a user wanted to make sure to only use the Guix-controlled environment, one approach would be to remove the Snakemake executable from the environment in which Emacs is started (most likely the default environment), exposing it only in the workflow environments. The problem with this is that snakemake.el requires the Snakemake executable for things like generating lists of targets. Also, it would be a global change, but a user could reasonably want to control dependencies with Guix for one project but go through the compile interface for another. Add a user option that allows the user to avoid the compile interface at a global or per-project level.
2017-03-31Include an example of a snakemake-shell-file-name scriptKyle Meyer
2017-03-31snakemake-term-start: s/manifest.scm/guix.scm/ in script exampleKyle Meyer
The "-l" flag of "guix environment" doesn't take a manifest; it takes a file that evaluates to a package or a list of packages.
2017-03-31snakemake-term-start: autoloadKyle Meyer
2017-03-31snakemake-build-targets: set directoryKyle Meyer
snakemake-build-targets needs to set default-directory to the Snakefile directory so that snakemake-term-process correctly reports whether there is an active terminal when the user initiates the call from a subdirectory. Conceptually, it also makes sense to handle the directory change in snakemake-build-targets. The docstrings for the lower-level snakemake-compile-targets and snakemake-term-build-targets specify that they correspond to a "snakemake ..." call, which implies that their caller is responsible for making sure they are called from the Snakefile directory.
2017-03-26snakemake-snakefile-directory: Abbreviate directory in error messageKyle Meyer
2017-03-26Add a terminal interface for running SnakemakeKyle Meyer
Snakemake commands are currently executed through compile. In general, this works fine, but it doesn't work well when Snakemake should be executed in a different environment than the one in which the current Emacs session was started. For example, Guix commands like 'guix environment ...' manipulate environmental variables to expose particular software. With the current setup, snakemake-program could be set to a wrapper script that creates the environment and then calls Snakemake: guix environment -l manifest.scm --ad-hoc snakemake --pure \ -- snakemake $@ But the disadvantage of this approach is that it adds the environmental setup time to _each_ Snakemake call. To work better with tools like Guix, let's add an alternative interface that allows commands to be executed in a terminal session. Instead of the above script, snakemake-shell-file-name can be set to a script with guix environment -l manifest.scm --ad-hoc snakemake --pure Now the environmental setup cost is limited to starting the terminal.
2017-03-26Rename snakemake-compileKyle Meyer
Make the name and popup description more general so that they still apply when the terminal interface is added.
2017-03-26Modify sections in preparation for a terminal interfaceKyle Meyer
2017-03-26Move snakemake--make-commandKyle Meyer
This is in preparation for the addition of a terminal interface. No code change is intended.
2017-03-26Rename snakemake--define-compile-commandKyle Meyer
This is in preparation for the addition of a terminal interface, at which point this function will be used beyond the compilation interface.
2017-03-26snakemake-root-dir-function: Add custom function fieldKyle Meyer
2017-03-26snakemake-root-dir-function: Define defcustom type as radioKyle Meyer
2017-03-26snakemake-build-targets-at-point: Don't set directoryKyle Meyer
snakemake-compile-targets already takes care of setting default-directory to the Snakefile directory.
2017-03-26snakemake-build-targets-at-point: Remove unnecessary variableKyle Meyer
2017-03-26snakemake-compile-targets: Remove an unnecessary let*Kyle Meyer
2017-03-26snakemake-read-file-target: Fix a docstring typoKyle Meyer
2017-03-26Update copyright yearsKyle Meyer
2016-11-24Fix doc-string typoKyle Meyer
2016-11-01Change approach for detecting invalid targetsKyle Meyer
Initially (7374840), snakemake-check-target only used regular expressions to detect invalid targets based on the presence of a MissingRuleException or RuleException in Snakemake's output. The target was assumed to be valid if these exceptions weren't found. If there was a non-zero exit status for another reason, it bubbled up to the compile call where it was visible to the user. 33a7c90 (snakemake-check-target: Adjust for upstream output, 2016-09-01) restricted the invalid target check to calls with an exit status of zero. This makes the regular expression check useless because snakemake should always exit with a non-zero status if a MissingRuleException or RuleException is thrown. Due to this change, snakemake-check-target classified all non-zero exits as invalid and all zero exits as valid. While this often gives the right answer, it doesn't in cases where the non-zero exit is unrelated to an invalid target. 2bceb7f (snakemake-check-target: Recognize protected items, 2016-09-05) addressed one case. To deal with other cases (such as an ambiguous rule error or a syntax error in the Snakefile), use the following approach. * An exit status of zero indicates a valid target. * A non-zero exit status indicates an invalid target if snakemake-all-rules has an exit status of zero. Otherwise, snakemake-all-rules will signal an error and display the Snakemake output. The main downside of this approach is the need to call snakemake twice. The output of snakmake-all-rules is cached, so this is only the case on the first call to snakemake-check-target for a given version of a Snakefile.
2016-11-01Display unexpected errors from snakemake callsKyle Meyer
2016-10-26cosmetics: Use zerop instead of (= 0 ...)Kyle Meyer
2016-09-13snakemake-check-target: Recognize protected itemsKyle Meyer
With 33a7c90 (snakemake-check-target: Adjust for upstream output, 2016-09-01), write-protected targets were no longer considered valid targets.
2016-09-01snakemake-check-target: Adjust for upstream outputKyle Meyer
As of Snakemake v3.8.0, using a wildcard rule name signals a key error: Traceback (most recent call last): File "/usr/lib/python3.5/site-packages/snakemake/io.py", line 401, in format_match value = wildcards[name] KeyError: 'name'
2016-09-01Change approach to handling errorsKyle Meyer
The approach from 7b210fc (Ignore standard error stream when digesting output, 2016-09-01) does not work well because, depending on the snakemake subcommand, the text of interest may be in the stderr stream. Instead, use lines with spaces as a way to detect non-target lines.
2016-09-01snakemake-check-target: Relax output order assumptionKyle Meyer
2016-09-01snakemake-check-target: Pull out regexpKyle Meyer
2016-09-01Ignore standard error stream when digesting outputKyle Meyer
Avoid including warnings as targets.
2016-06-13snakemake-compile-targets: Update compile-historyKyle Meyer
2016-05-11Extend snakemake-block-bounds functionKyle Meyer
Include name and block type.
2016-05-11Add snakemake-block-bounds functionKyle Meyer
2016-04-19Rename snakemake-graph-rule to snakemake-graph-idKyle Meyer
With introduction of snakemake-graph-this-file, this variable isn't restricted to rule names.
2016-04-19Add snakemake-graph-this-file commandKyle Meyer