如何将当前提交包含在snakemake工作流程中以供以后参考?

时间:2019-04-11 13:10:32

标签: git snakemake

我的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来回(进入源目录)?还是有更清洁的策略?

1 个答案:

答案 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)