質問

I am trying to write a small Mercurial extension, which, given the path to an object stored within the repository, it will tell you the revision it's at. So far, I'm working on the code from the WritingExtensions article, and I have something like this:

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

and the whichrev function has almost no code:

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

So , for example:

hg whichrev text_file.txt

Will call the whichrev function with node being set to text_file.txt. With the use of the debugger, I found that I can access a filelog object, by using this:

repo.file("text_file.txt")

But I don't know what I should access in order to get to the sha1 of the file.I have a feeling I may not be working with the right function.

Given a path to a tracked file ( the file may or may not appear as modified under hg status ), how can I get it's sha1 from my extension?

役に立ちましたか?

解決

A filelog object is pretty low level, you probably want a filectx:

A filecontext object makes access to data related to a particular filerevision convenient.

You can get one through a changectx:

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

Or directly through the repo:

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

Pass None instead of . to get the working copy ones.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top