2013-07-05 95 views
2

是否有任何Mercurial命令或Python API可以生成回購名稱?這將有助於開發交叉回購腳本。mercurial:任何獲取存儲庫名稱的命令或python api

我發現的唯一相關解決方案是解析.hg/hgrc [paths]部分的「默認」配置選項。

[paths] 
default = ssh://server//path/tools 

我認爲必須有一個更優雅的解決方案。

回答

4

Mercurial中沒有「存儲庫名稱」的真正概念(存儲庫不知道或關心其自己的名稱)。我認爲你的意思是「默認拉回路徑的最後一部分」?

如果是這樣,那麼解析hg path default的輸出將是獲取該信息的最直接方式。

然而,你應該注意的是,默認的路徑可以(而且經常是)改變:想克隆一個本地副本的時間進行測試的:

$ hg clone http://server/lib-foo 
$ hg clone lib-foo lib-foo-test 
$ hg clone lib-foo-test lib-foo-more-testing 

lib-foo-more-testing克隆具有默認的普通路徑回lib-foo-test

這意味着解析hg paths default不會比使用basename $(hg root)更可靠 - 兩者可能與最初克隆的存儲庫的(基本)名稱完全不同。

如果你真的想要的是得到一個庫中的「身份」,那麼你就應該使用

$ hg log -r 0 --template "{node}" 

在資源庫中的第一個變更散列通常會唯一識別庫,這將是穩定的即使克隆更改名稱也是如此。 (如果存儲庫有兩個或更多的根,那麼第零個變更集原則上可以在不同克隆之間有所不同,但人們將不得不主動嘗試使其不同。)

+0

這解釋了爲什麼它看起來如此基本,但我找不到明顯的解決方案。謝謝!超級回答! – frankc

1

如果你想獲得遠程default別名路徑的最後一段,處理hg path default輸出將是更好的選擇

如果你想獲得本地目錄名的你 Mercurial庫,我也沒有好解決方案,除了檢查通知擴展的代碼(其中,一些技巧之後,you can get project-name

+1

您可以使用'hg root'命令返回本地目錄名稱,並使用'basename'來提取最後一個組件。所以如果你的項目在'/ Users/jrh/code/halo7'中,這會產生'halo7'。 – gavinb

+0

hg root返回本地路徑/目錄,這可能與回購名稱完全不同。 – frankc

+0

@gavinb - Winboys在主板上沒有基名? –