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

Я пытаюсь написать небольшое расширение 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 ответ

Решение

Объект filelog довольно низкого уровня, вы, вероятно, хотите filectx:

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

Вы можете получить его через changectx:

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

Или прямо через репо:

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

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

Другие вопросы по тегам