Bash 智能Mercurial捆绑包,带USB钥匙,从工作到家庭,反之亦然
这是一个我知道的常见问题,但我想把它带到下一个层次,我知道如何使用捆绑包,但要通过“hg日志”查看我最后的更改有点无聊,所以我想让它自动化,通过bash/awk检查日志,通过日期和邮件识别工作/家庭更改,(我在.hgrc中有不同的邮件,me@work及me@home) 我已经有了这个bash函数,但我必须手动通过基本修订:Bash 智能Mercurial捆绑包,带USB钥匙,从工作到家庭,反之亦然,bash,mercurial,sed,awk,Bash,Mercurial,Sed,Awk,这是一个我知道的常见问题,但我想把它带到下一个层次,我知道如何使用捆绑包,但要通过“hg日志”查看我最后的更改有点无聊,所以我想让它自动化,通过bash/awk检查日志,通过日期和邮件识别工作/家庭更改,(我在.hgrc中有不同的邮件,me@work及me@home) 我已经有了这个bash函数,但我必须手动通过基本修订: hgb () { hg bundle --base $1 ~/changes-`date +%Y-%m-%d-%H-%M`.hg } 所以我想说: mkwbundl
hgb () {
hg bundle --base $1 ~/changes-`date +%Y-%m-%d-%H-%M`.hg
}
所以我想说:
mkwbundle #make work bundle for home
以及:
我刚刚开始学习awk/sed,但我已经看到了奇迹,在使用Python之前我会问,Python是我几乎所有东西的goto工具
更新:
对于反复无常的不可知论者来说,hg日志是这样的:
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
我想在工作中得到基本修订版来制作一个捆绑包,比如说我在家里开始使用rev 24,做了4个更改,然后我在28,我想得到24作为基本修订版并制作一个捆绑包,然后在工作中也一样
编辑:根据下面的@dhunter注释,脚本的预期输出为:
24
我的理解是你想得到你的hgb()1美元的版本号 让我们举个例子。如果您在工作中运行
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->@工作
或me@work -> me@home
在上面的示例中,它是变更集xxx边框xxx
。然后从中获取上一个变更集版本雷夫,你想做一个捆绑,并导入到你的家庭/工作回购。我希望我理解你的权利。但是你真的应该把你的问题说清楚
无论如何……当然可以由awk完成,以上面的例子为例(省略了分支机构、日期、摘要)
如果使用上述示例:
输出为:
777:234asdf2342
25:0c9365b200a8
如果尝试您问题中的示例,我们必须更改电子邮件地址,那么awk oneliner是:
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}'
输出为:
777:234asdf2342
25:0c9365b200a8
我经常使用hg,但不使用捆绑。如果您真的想为您的--base获得24 rev.,那么请看以下内容:
awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";}NR>1{if($0!~p){print $2;exit}}'
这将为您提供:
24:a1abfcfcefed
注意
如果自上次拆分后根本没有变更集ci,则不要使用awk行生成捆绑包。它将重复生成上次捆绑包。您应该知道它是否更改正确?我的理解是,您希望获得hgb()$1的版本号 让我们举个例子。如果您在工作中运行
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->@工作
或me@work -> me@home
在上面的示例中,它是变更集xxx边框xxx
。然后从中获取上一个变更集版本雷夫,你想做一个捆绑,并导入到你的家庭/工作回购。我希望我理解你的权利。但是你真的应该把你的问题说清楚
无论如何……当然可以由awk完成,以上面的例子为例(省略了分支机构、日期、摘要)
如果使用上述示例:
输出为:
777:234asdf2342
25:0c9365b200a8
如果尝试您问题中的示例,我们必须更改电子邮件地址,那么awk oneliner是:
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}'
输出为:
777:234asdf2342
25:0c9365b200a8
我经常使用hg,但不使用捆绑。如果您真的想为您的--base获得24 rev.,那么请看以下内容:
awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";}NR>1{if($0!~p){print $2;exit}}'
这将为您提供:
24:a1abfcfcefed
注意
如果自上次解包后根本没有变更集ci,则不使用awk行生成捆绑包。它将重复生成上次捆绑包。您应该知道它是否更改正确?hg捆绑包的Revset版本--base REV命令类型
已使用:revset、revset别名
口头形式的任务:查找最新的变更集,然后提示其他作者连续创建的变更集,而不是查找变更集
解决方案:
迭代1
max(用户('work'))
用于带有变更集的捆绑包,打算转移到工作中(最新的“工作”之后是家庭作业)
max(user('home'))
用于带有变更集的捆绑包,打算转移到home(最新“home”之后的所有内容都是workplacework)
迭代2
压缩和美化:我太懒了,不能输入太多的内容。Bundleable()函数名缩短为ba(),并添加到Mercurial家庭和工作repos配置文件的“revsetalias”部分
[revsetalias]
ba('$1') = max(user('$1'))
(使用“$1”而不是$1,以避免手动在参数-信号字符串周围写入“”)
结果
hg bundle--base“ba(home)”
或hg bundle--base“ba(work)”
主页|工作定义目的地,必须为其准备捆绑包hg捆绑包的Revset版本--base REV命令类型
已使用:revset、revset别名
口头形式的任务:查找最新的变更集,然后提示其他作者连续创建的变更集,而不是查找变更集
解决方案:
迭代1
max(用户('work'))
用于带有变更集的捆绑包,打算转移到工作中(最新的“工作”之后是家庭作业)
max(user('home'))
用于带有变更集的捆绑包,打算转移到home(最新“home”之后的所有内容都是workplacework)
迭代2
压缩和美化:我太懒了,不能输入太多的内容。Bundleable()函数名缩短为ba(),并添加到Mercurial家庭和工作repos配置文件的“revsetalias”部分
[revsetalias]
ba('$1') = max(user('$1'))
(使用“$1”而不是$1,以避免手动在参数-信号字符串周围写入“”)
结果
hg bund——基本“ba(home)”
或hg bun