2011-05-26 118 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会希望选择该分支中的父项,但正如我所说的,我现在无法对此进行测试。

相关问题