Как получить доступ к информации, связанной с объектом, из плагина Mercurial? - PullRequest
1 голос
/ 29 августа 2011

Я пытаюсь написать небольшое расширение Mercurial, которое, учитывая путь к объекту, хранящемуся в хранилище, сообщит вам ревизию, в которой оно находится. Пока что я работаю над кодом из статьи WritingExtensions , и у меня есть что-то вроде этого:

cmdtable = {
    # cmd name        function call
    "whichrev": (whichrev,[],"hg whichrev FILE")
}

и функция whichrev почти не имеет кода:

def whichrev(ui, repo, node, **opts):
    # node will be the file chosen at the command line
    pass

Так, например:

hg whichrev text_file.txt

Будет вызывать функцию whichrev с установленным узлом text_file.txt. С помощью отладчика я обнаружил, что могу получить доступ к объекту filelog, используя это:

repo.file("text_file.txt")

Но я не знаю, к чему мне обратиться, чтобы попасть в файл sha1. У меня такое ощущение, что я не могу работать с нужной функцией.

Учитывая путь к отслеживаемому файлу (файл может отображаться или не отображаться как измененный в hg status), как я могу получить его sha1 из моего расширения?

1 Ответ

1 голос
/ 29 августа 2011

Объект filelog находится на довольно низком уровне, вероятно, вам нужен filectx:

Объект filecontext делает доступ к данным, относящимся к определенному файлу, удобным для просмотра.

Youможно получить через changectx:

ctx = repo['.']
fooctx = ctx['foo']
print fooctx.filenode()

или напрямую через репо:

fooctx = repo.filectx('foo', '.')

Передать None вместо . для получения рабочих копий.

...