Mercurial API for Java?

时间:2008-12-19 08:00:18

标签: java api mercurial javahg

是否有一个普通的API可以从Java访问Mercurial存储库?

有Netbeans和Eclipse的插件,但与Subversion对应的插件不同,它们不使用通用的低级库,而是使用自己的包装器来调用Mercurial二进制文件。调用二进制文件是可以的(现在),但在独立应用程序中使用这些插件似乎非常困难(在它们构建的IDE之外)。

还有HgKit,但这是非常pre-alpha。

5 个答案:

答案 0 :(得分:18)

一个新选项是JavaHg,它为您提供了一个高级Java API。 unit tests给出了一个很好的例子,说明如何用它编程(从JavaHg 0.1开始):

public void commitTest() throws IOException {
    Repository repo = getTestRepository();
    writeFile("x", "abc");

    CommitCommand commit = CommitCommand.on(repo);
    StatusCommand status = StatusCommand.on(repo);

    List<StatusLine> statusLines = status.lines();
    Assert.assertEquals(1, statusLines.size());
    Assert.assertEquals(StatusLine.Type.UNKNOWN, statusLines.get(0).getType());

    AddCommand.on(repo).execute();
    statusLines = status.lines();
    Assert.assertEquals(1, statusLines.size());
    Assert.assertEquals(StatusLine.Type.ADDED, statusLines.get(0).getType());

    commit.message("Add a file").user("Martin Geisler");
    Changeset cset = commit.execute();
    Assert.assertEquals("Martin Geisler", cset.getUser());
    statusLines = status.lines();
    Assert.assertEquals(0, statusLines.size());
}

它与版本1.9及更高版本中的Mercurial command server进行交互。这意味着将会有一个持久的Mercurial流程接受多个命令,因此您避免通常与启动Mercurial相关的启动开销。我们希望它将在即将到来的MercurialEclipse版本中使用。 (我是JavaHg的作者之一。)

答案 1 :(得分:8)

hg4j现在有更多(即克隆)功能,似乎正在实际开发中

答案 2 :(得分:4)

你看过Jython了吗?据我所知here,它应该有助于在Java环境中使用python mercurial模块,就像JRuby对Ruby一样。

答案 3 :(得分:3)

Maven SCM plugin似乎有一个Mercurial provider available。但是,我不知道该提供程序在您的情况下有多适用(即它与Maven体系结构的关联程度和/或它与hg的接口程度)。

答案 4 :(得分:3)

还有一个hg4j,但现在它只允许读取存储库。