我的snakemake工作流程位于git存储库中的版本控制下。我有可能加入类似git describe --always
的输出来跟踪git标签/提交工作流存储库,当前已在工作流运行时期间签出。
我在工作流程中添加了一个通用函数,该函数仅通过subprocess
调用git:
def get_git_commit(wildcards):
label = subprocess.check_output(["git", "describe", "--always"]).strip().decode("utf-8")
return(label)
输出可以在规则 params 中使用,例如
params:
git_commit = get_git_commit
但是,在工作流运行期间,命令在工作目录中执行,而不是在Snakefile的源目录中执行。建议cd
来回(进入源目录)?还是有更清洁的策略?
答案 0 :(得分:1)
假设您的Snakefile与.git文件夹位于同一文件夹中,则可以使用以下命令获取Snakefile的路径(直接在Snakefile中):
wfbasedir = workflow.basedir
然后可以使用参数--git-dir
调用git:
git --git-dir={wfbasedir}/.git
或您的方式:
def get_git_commit(wildcards):
label = subprocess.check_output(["git","--git-dir="+wfbasedir+"/.git", "describe", "--always"]).strip().decode("utf-8")
return(label)