2011-02-04 32 views
2

背景:我正在編寫一個Java服務器應用程序,該應用程序需要與http服務的遠程SCM系統進行基本交互。與遠程Mercurial和Git http存儲庫交互

是否有可能使用某種預定義的API(或者如果通過http提供這些存儲庫時如何規定這些存儲庫的約定)從服務器與Mercurial和Git存儲庫進行交互,而無需克隆?唯一需要的交互是列出當前處於版本控制下的文件以及下載版本控制文件的特定版本的能力。

編輯:對於Mercurial,我使用Ry4an的解決方案。對於Git,我颳了使用gitweb服務的倉庫屏幕。

回答

4

Mercurial不適用於遠程存儲庫,除了克隆,推送和拉取。也就是說,有很多人可以根據服務方式來做。如果通過hgweb提供服務,則內置的網頁界面可用作hg serve,其中有許多詳細信息的​​視圖,可以通過編程方式輕鬆處理。一些例子:

有了這些,你可以瀏覽文件,修訂,標籤和分支。

但是,如果要編寫代碼,最好在Java應用程序的Jython中運行Mercurial並直接調用這些命令。

+0

感謝您的支持。你碰巧知道gitweb是否有類似的原始輸出格式? – dteoh 2011-02-06 22:39:27

2

Mercurial有兩個Web API。一個你可能不應該使用。它專爲Mercurial的其他實例用於發送和接收變更集而設計。

另一個可以通過普通的網絡瀏覽器輕鬆訪問。您看到的網址設計得清晰易懂,且易於解析或以編程方式放在一起。正如@ Ry4an指出的那樣,文件瀏覽器還能夠爲您提供任何版本的任何文件的原始(也就是逐字,沒有HTML標籤)副本。

雖然,您提出了一個有趣的觀點。我認爲Mercurial可以使用一個XML模板,在該模板中,它向您發送與Mercurial特定XML格式的頁面相同的信息,該格式旨在供程序使用。