29 Stimmen

Mercurial API für Java?

Gibt es eine einfache API, um von Java aus auf Mercurial-Repositories zuzugreifen?

Es gibt Plugins für Netbeans und Eclipse, aber im Gegensatz zu ihren Subversion-Pendants verwenden sie keine gemeinsame Bibliothek auf niedrigerer Ebene, sondern bringen ihre eigenen Wrapper mit, um die Mercurial-Binärdatei aufzurufen. Der Aufruf der Binärdatei wäre (vorerst) in Ordnung, aber es scheint sehr schwierig zu sein, diese Plugins in eigenständigen Anwendungen (außerhalb der IDE, für die sie entwickelt wurden) zu verwenden.

Es gibt auch HgKit, aber das ist sehr pre-alpha.

19voto

Martin Geisler Punkte 71257

Eine neue Option ist JavaHg , die Ihnen eine Java-API auf hohem Niveau bietet. Die Einheitstests geben ein gutes Beispiel dafür, wie man damit programmiert (ab 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());
}

Es interagiert mit dem Mercurial-Befehlsserver in der Version 1.9 und höher vorhanden. Das bedeutet, dass es einen dauerhaften Mercurial-Prozess geben wird, der mehrere Befehle akzeptiert, so dass Sie den Aufwand für die Inbetriebnahme zu vermeiden die normalerweise mit dem Start von Mercurial verbunden sind. Wir erwarten, dass es in einer kommenden Version von MercurialEclipse verwendet wird. (Ich bin einer der Autoren von JavaHg.)

0 Stimmen

Hm, es sieht so aus, als wäre es keine reine Implementierung, sondern eher ein Wrapper über Binary - oder liege ich da falsch?

2 Stimmen

@shabunc: Sie haben recht. JavaHg verwendet die einzige stabile API, die es für Mercurial gibt: die Kommandozeile. Das bedeutet, dass es auch dann noch funktioniert, wenn sich die zugrunde liegenden Datenstrukturen ändern. Sie haben jedoch Recht, dass es sich im Gegensatz zu, sagen wir, JGit, nicht um eine reine Java-Bibliothek handelt, da Sie auch Mercurial installieren müssen.

8voto

Mykel Alvis Punkte 1029

hg4j hat jetzt mehr (d.h. Klon-) Funktionalität und scheint in der Entwicklung zu sein

0 Stimmen

Sie ist veraltet und wird anscheinend nicht mehr weiterentwickelt.

5voto

Keltia Punkte 14251

Haben Sie sich Jython angesehen? So weit ich sehen kann aquí sollte es helfen, die Python-Mercurial-Module aus einer Java-Umgebung heraus zu verwenden, genau wie JRuby für Ruby tut.

0 Stimmen

Anscheinend kann Jython Mercurial noch nicht ausführen, teilweise wegen der in C geschriebenen Teile von Mercurial.

0 Stimmen

Mercurial hat die meisten C-Module nach Python rückportiert. Ich denke, dass sie damit fast, wenn auch nicht vollständig, fertig sind.

5 Stimmen

Das war's. Sie können nun die Flagge --pure in setup.py verwenden, um die Module unter mercurial/pure zu nutzen. Beachten Sie aber, dass dies mit einem großen Geschwindigkeitsverlust einhergeht (ich weiß nicht, wie es bei Jython aussieht).

3voto

andri Punkte 11065

Le site Maven SCM-Plugin scheint eine Mercurial-Anbieter verfügbar . Ich weiß jedoch nicht, wie anwendbar dieser Anbieter in Ihrem Fall ist (d.h. wie tief er mit der Maven-Architektur verbunden ist und/oder wie er mit hg zusammenarbeitet).

0 Stimmen

Das sieht wirklich vielversprechend aus. Es verwendet natürlich Maven-Schnittstellen, aber ich vermute/hoffe, dass diese auch außerhalb von Maven verwendet werden können, zumindest einfacher als die grafischen Plugins, die ich in der Frage erwähnt habe. Was die Schnittstelle zu hg angeht, so ruft es das Kommandozeilenprogramm auf (was in Ordnung ist).

3voto

MKP Punkte 190

Außerdem gibt es eine hg4j aber im Moment erlaubt es nur das Lesen des Repositorys.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X