Perl查询svn分支版本、修改时间等信息

之前在SCM经常需要查询分支的版本,最后修改时间,最新tag等信息,把里面函数整理下,不知道是否有人需要

函数以类的私有函数的方式定义,可以改为正常函数使用

先定义下全局的svn参数

1
my $svn_args = "--username xxx --password yyy --no-auth-cache --non-interactive"

查询svn分支最新版本

入参:分支URL
返回值:查询成功返回版本号,失败返回undef

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
my $get_svnVer = sub {
my ($branch, $fail_num) = @_;
chomp $branch;
if (!$fail_num) {
$fail_num = 1;
}
else {
$fail_num += 1;
}
if ($fail_num > 2) {
return undef;
}
my $result = `svn info $svn_args --xml $branch 2>/dev/null`;
if ($? == 0) {
my $xml = XML::Simple->new();
my $data = $xml->XMLin($result);
return $data->{'entry'}->{'commit'}->{'revision'};
}
else {
return $get_svnVer->($branch, $fail_num);
}
};

阅读全文

使用GA事件跟踪Baidu分享效果

更换Hexo后,试用了下Baidu分享,感觉加载速度比jiathis快,抛弃了jiathis,新版的Baidu分享也提供了自定义函数,可以加上事件监控,把分享数据统计到Google Analytics中

Baidu分享代码中,在_bd_share_config配置信息里,common配置中onAfterClick可以定义一个点击分享后触发执行的函数

因此先定义一个soctrack函数,入参是baidu分享的cmd,就是分享按钮的名字,函数功能是向Google analytics发送一个事件消息,如果你使用Baidu统计,也可以向百度发送一个事件

函数定义好以后,在Baidu分享config的common.onAfterClick中引用这个函数即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function soctrack(cmd){ga('send', 'social', cmd, 'BaiduShare', _bd_share_config.common.bdUrl);};
window._bd_share_config={
"common": {
"bdMini": "3",
"bdSnsKey": {},
"bdText": "",
"bdMiniList": [],
"bdPic": "",
"onAfterClick": soctrack
},
"share": {},
"image": {
"viewList": [],
},
"selectShare": {
"bdContainerClass": "article-entry",
"bdSelectMiniList": []
}
};
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];

阅读全文

sublimetext格式化bash插件

SublimeBashTidy

一直很喜欢Sublime Text,也有非常多的插件,对于Coder来说,代码规范看着就会觉得赏心悦目,所以很喜欢那些tidy的插件,可以自动将代码格式化,但是没有找到bash的tidy插件

做运维的bash绝对不会少写,一些简单的脚本可以直接在一行命令里搞定,但是比较复杂的,还是喜欢在编辑器里写,没有tidy插件让我很不爽,最后忍不住自己去写一个插件

自己完整的写一套bash的格式化逻辑还是有点折腾的,于是在github上搜有没有类似的project,找到了beautify_bash,也是Python的project,这就简单了

Sublime text也是Python开发的,提供了Python的API,找了下其他tidy插件的写法,格式化代码只需要调用API获取文件内容或者选中区域内容,然后将获取到字符串处理完,再次调用API把处理完的内容替换掉原来的内容

Dev

简单的文本处理插件只需要创建一个sublime_plugin.TextCommand类,类名叫XXCommand就行

阅读全文

更换博客到Hexo

由于买的vps快到期了,不是很想续费,一年多基本就没登录过vps,博客也基本荒废了

所以准备留一个15刀一年的buyvm来做shadowsock服务器就好

而博客现在很流行静态博客,可以托管在github上,主机也省了,于是我也把原来的wordpress转换到hexo,部署到github

中间也了解其他静态博客生成工具,对Ruby没太多好感,而且hexo生成页面速度很快,最后选择了hexo

阅读全文

大版本SVN库备份快速重建方法

svn仓库一般都是会配置svnsync的实时备份仓库,备库会从主库一个版本一个版本拷贝,但是如果主库已经有几十万版本后,想通过简单的svnsync init一个新的备份仓库,然后从0版本开始sync,所需的时间无法估计

为了快速重建备份,可以使用下面的方法来处理

1. 首先将主库hotcopy一份

1
svnadmin hotcopy reponame reponame-bak

2. 将热备的备份同步到备机

1
rsync -avz reponame-bak username@bakserver:/svnroot-path

3. 在备机增加改备库的svn权限

阅读全文

Awk求最大值正解

这是一个很简单的功能,今天有同事问AWK如何实现,为什么最后结果是按字符串排序获取到的最大值,同事还在网上搜了下,给出的答案是清一色的,这些人压根不负责,难道你都没自己执行下命令看看返回的结果是否正确吗?只知道复制粘贴

例如下面一段文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
858
569
1858
1526
256
382
112
1145
921
556
228
215
1356
158

大部分的网上文章都给出了清一色的答案,如下:

1
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1} END {print "Max=", max}'

负责任的说,获取到的最大值一定是921,而不是1858,因为第一位是9最大,按字符串比较的,而且为啥还要cat后在管道给awk。。。。

阅读全文