Как включить текущий коммит в рабочий процесс snakemake для дальнейшего использования? - PullRequest
0 голосов
/ 11 апреля 2019

Мой рабочий процесс snakemake живет под контролем версий в репозитории git.Я имею возможность включить что-то вроде вывода git describe --always для отслеживания git-тега / коммита, репозиторий рабочего процесса в настоящее время извлекается в во время времени выполнения рабочего процесса.

Я добавил универсальную функцию в рабочий процесс, которая просто вызывает git через subprocess:

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 Ответ

1 голос
/ 11 апреля 2019

Предполагая, что ваш Snakefile находится в той же папке, что и папка .git, вы можете получить путь к Snakefile (непосредственно в Snakefile) с помощью:

wfbasedir = workflow.basedir

Затем вы можете вызвать git с параметром--git-dir:

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)
...