2011-05-26 116 views
1

我們的項目最近從SVN切換到Mercurial。在SVN中,爲了版本我們的css/js文件,我們從它們所在的目錄中獲得最新的修改版本,並將它用作打包文件名的前綴。獲取分支中給定目錄的所有更改文件

我們想在Mercurial中使用相同的方法。不幸的是,說起來似乎比做起來容易,儘管它可能是由我們的分支方法引起的。

簡而言之,我們有一個主分支(trunk)。每兩週我們都會從樹幹分支創建一個生產測試版,最終將合併到我們的直播分支中。

現在,此刻,我們基本上是用

hg log -b live some_folder/js 
hg log -b live some_folder/css 

得到那個最近在這些目錄中改變文件的變更。

我們遇到的問題是我們的合併變更集沒有被使用這種方法檢測到。因此,如果我們在修改some_folder/css中的文件的變更集中合併,hg不會將其視爲已更改,因爲該文件並未在合併變更集中進行實際修改,而是在正在合併的其中一個變更集中進行修改。

我們也試着嘗試解析日誌,但它似乎有同樣的問題。只有這樣,才能得到汞日誌列出這些文件的改變似乎是使用--stat選項,但

hg log -b live --stat some_folder/css 

沒有任何顯示的變更。

我點在哪裏,我只考慮使用

hg log -b live --stat 

獲取該日誌的整個分支,然後解析它找到最近修改的文件目錄中的變更,但我寧願不去,因爲它似乎會隨着分支變大而變得越來越慢。

任何想法,以更好的方式來解決我的問題?

+0

但爲什麼這是一個問題?如果文件已經更改,它肯定會顯示在該文件的日誌中。然後,更改集編號將與之前的版本不同。那麼爲什麼變化發生在哪個分支上呢? – Ringding 2011-05-26 07:53:03

+0

我們只希望在我們的直播分支中更改文件的版本號。有時候,我們推出了根本不修改css/js的修補程序,而且我們希望我們的用戶無需再次無故下載文件。 – 2011-05-26 08:27:26

回答

0

最後沒有一個簡單的方法來做到這一點,所以我採取了以下方法: 在最後x天內抓取分支的所有日誌。使用stat命令遍歷所有這些日誌,並停止影響給定分支的第一個修訂版本。如果沒有在該日期範圍內影響給定的路徑,請抓住接下來x天的日誌。所以:

hg log -b live -r "reverse(date('2011-05-12 to 2011-05-26'))" --template "{node} " 

然後對於每個變更

hg st --change <the_changeset> -I "some_folder/css" 

當它返回任何沒有空值,我停止循環並返回變更ID。希望在某些時候,revsets將支持迭代合併的更改。

2

我會告訴你這個答案,說我目前沒有在這臺PC上安裝Mercurial,所以無法驗證這些命令,但它至少可以將你指向一個有用的(?)方向。

您可以使用hg status指定--rev選項來獲得兩個版本的變化的列表,所以使用修改符號,你可以做到以下幾點:

hg status -b live --rev -2:-1 some_folder/css 

理論上(在這裏就是我得到的東西很錯誤:)),選項的意思是:

--rev -2:-1選擇工作目錄的父(我假設你仍然會在合併後),並將其與其父母(-2)進行比較。指定-b live會希望選擇該分支中的父項,但正如我所說的,我現在無法對此進行測試。

相關問題