这是我所知道的一个常见问题,但我想把它提升到一个新的水平,我知道如何使用捆绑包,但是有点无聊,不得不通过“hg log”来查看我的上一次更改,所以我想让它自动化,通过bash / awk检查我的日志,并通过日期和邮件识别工作/家庭变化,(我在.hgrc,me @ work和me @ home中有不同的邮件)。
我已经有了这个bash功能,但我必须手动传递基本修订版:
hgb () {
hg bundle --base $1 ~/changes-`date +%Y-%m-%d-%H-%M`.hg
}
所以我想要像:
mkwbundle #make work bundle for home
和
mkhbundle #make home bundle for work
我刚刚开始使用awk / sed,但是我看到了奇迹,我在使用Python之前就已经问过了,这几乎是我的goto工具。
更新
对于mercurial不可知的人来说,这就是hg log的样子:
changeset: 28:f5200232460e
tag: tip
user: Manuel@home
date: Tue Jan 15 23:39:57 2013 -0500
summary: Adding DevTodo
changeset: 27:828dbba6830a
user: Manuel@home
date: Tue Jan 15 23:24:57 2013 -0500
summary: login twig
changeset: 26:781477f86f6f
user: Manuel@home
date: Tue Jan 15 00:18:54 2013 -0500
summary: UI mockup
changeset: 25:0c9365b200a8
user: Manuel@home
date: Mon Jan 14 23:50:22 2013 -0500
summary: using twig blocks, remember reuse parent
changeset: 24:a1abfcfcefed
user: Manuel@work
date: Mon Jan 14 23:49:44 2013 -0500
summary: smaller footer
changeset: 23:3cd12b7fb684
user: Manuel@work
date: Mon Jan 14 23:20:18 2013 -0500
summary: test content width
我想在工作中获得基本修订版本,让我说我开始在家里工作24并进行了4次更改,然后我在28岁,我希望得到24作为基础版本和制作捆绑,然后在工作中相同。
编辑:根据下面的@dhunter评论,脚本的预期输出为:
24
答案 0 :(得分:3)
我的理解是你希望获得你的hgb()$ 1的rev##。
让我们举个例子吧。如果您在工作中运行hg log
:
**(some information were omitted)**
changeset: xxx
user:me@work
changeset: xxx
user:someoneelse@work.com
changeset: xxx
user:me@work
changeset: 777:234asdf2342
user:me@work
changeset: xxx-border-xxx
user:me@home
changeset: xxxx
user:me@home
然后你可能想要777
。这意味着从提示,您检查用户,并在上面的示例中找到了用户更改的变更集me@home->@work
或me@work -> me@home
,它是{{1} }。然后你采取之前的变更集转速。从那个版本开始,你想制作一个包,并导入你的家/工作回购。我希望我理解你。但是你真的应该明白你的问题。
无论如何....当然可以通过awk完成,以上面的例子(分支,日期,摘要被省略)
changeset xxx-border-xxx
如果使用上面的示例:
输出是:
hg log| awk -vRS="" 'NR==1{p=$0~/me@work/?"me@work":"me@home";l=$2}NR>1 {if($0!~p){print l;exit}else l=$2}'
如果尝试使用您问题中的示例,我们必须更改电子邮件地址,然后awk-oneliner就是:
777:234asdf2342
输出是:
hg log| awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";l=$2}NR>1 {if($0!~p){print l;exit}else l=$2}'
我使用hg很多,但不捆绑。如果你真的想要获得24转。对于你的--base,请看看:
25:0c9365b200a8
这会给你:
awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";}NR>1{if($0!~p){print $2;exit}}'
注意强>
如果自上次解包以来根本没有变更集ci,请不要使用awk行生成包。它将重复生成最后一个包。你应该知道它是否被改变了?
答案 1 :(得分:2)
hg bundle --base REV
类型命令的Revset版本已使用:revsets,revsets别名
口头形式的任务:找到最新的变更集,然后提交由另一位作者连续创建的变更集,而非寻求的变更集
<强>解决方案强>:
迭代1
max(user('work'))
适用于包含变更集的捆绑包,旨在将转移到工作(所有在最新“工作”之后都是作业)
max(user('home'))
包含变更集的捆绑包,打算将转移到主页(所有在最新的“主页”之后都是工作单位)
迭代2
压缩和美化:我太懒了打字太多了。 Bundleable()函数名缩短为ba()并添加到Mercurial配置文件的“revsetalias”部分,用于home和work repos
[revsetalias]
ba('$1') = max(user('$1'))
('$ 1'而不是$ 1用于不写''围绕参数 - 信号字符串 - 手工制作)
<强>结果
hg bundle --base "ba(home)"
或hg bundle --base "ba(work)"
home | work define 目的地,必须为其准备包