如果想要在git push后自动通知团队中的其他成员,可以利用git的hook脚本,git源代码里 contrib/hooks/post-receive-email 就可以直接用来发送邮件通知。
如果觉得邮件还不够即时,可以试试利用gae发送通知到gtalk上,google提供了很方便的api,可以通过部署在gae上的程序发送xmpp协议的即时消息。
我无聊写了个这样的小程序,放在github上了,用的是Python版的GAE SDK。
使用方法:
下载后,先把gae目录中的程序部署到gae上,然后可以访问 domain/sendim/invite 向所需通知的用户发一个邀请,然后可以访问 domain/sendim/demo 测试下消息是否能够正常发送。
接着将scripts目录中的post-receive-im链接到git服务器里指定仓库的hooks目录中,名为post-receive,post-receive-im这个是我直接在post-receive-email里改的 – -
最后修改git服务器仓库目录里的config文件加入下面的内容
[hooks]
# 要通知到的用户的gmail,如果有多个用空格分开
jids = xxx1@gmail.com xxx2@gmail.com
# 就是刚才部署的那个gae的地址
imurl = http://xxxx.appspot.com/sendim
这样弄完,push后应该就会收到消息了, svn hg等应该都可以用类似的方法实现一个通知,利用gae真的是可以玩出很多花样阿,哈哈。
目前只弄了一点点,如果谁有兴趣,欢迎加入一起改进阿
。
更新 2010/3/14:
推荐使用原生vim脚本写的Zen coding插件,无须调用外部程序。
Zen Coding? 其实我看下来有点类似snippet的代码模板,用来提高编码效率,但是 Zen Coding 是针对html编写的,可以用一系列快捷的方式生成html代码,从而提高编码的效率,并且感觉还挺有乐趣的。
比如可以用类似css选择器的语法来快速生成html,输入 div#header.content > ul > li*3 > a 就可以生成下面的html代码
<div class="content" id="header">
<ul>
<li>
<a href=""></a>
</li>
<li>
<a href=""></a>
</li>
<li>
<a href=""></a>
</li>
</ul>
</div>
介绍:
Zen Coding: A Speedy Way To Write HTML/CSS Code
里面有个 vimeo上的视频,需要翻墙看。。。
googlecode上有个zen-coding的项目,为一些编辑器开发了相关插件,不过似乎暂时没有Vim相关的插件。
我找到了另一个项目 Sparkup。
这是一个类似zen-coding的项目,主程序也是用Python开发,提供了一个vim的脚本。
使用方式也是很简单,下载后把sparkup这个文件放到用户目录下的bin目录里,然后按照里面vim/sparkup.vim里的注释来就行了。
也有视频演示,Youtube上的,所以也要翻墙 – -
如果是要在Windows下使用,我用py2exe将sparkup转换成exe了,然后把这个exe的所在目录加到环境变量里就能用了。
这个项目提供的那个vim脚本用起来要改vimrc,而且使用source方式,要考虑脚本的路径,我改了下,改成插件方式了,把下面的代码保存成 sparkup.vim 放到vim的plugin目录中就行。
还有我把快捷键改成 Ctrl + k 了,输入snippet后按下快捷键就能生成代码。
" Sparkup
" Installation:
" Put it in ~/.vim/plugin
"
autocmd FileType html,php call KeyMapping()
function! KeyMapping()
map <C-k> <Esc>:.!sparkup<Cr>:call SparkupNext()<Cr>
imap <C-k> <Esc>:.!sparkup<Cr>:call SparkupNext()<Cr>
"map <C-n> <Esc>:call SparkupNext()<Cr>
"imap <C-n> <Esc>:call SparkupNext()<Cr>
endfunction
function! SparkupNext()
" 1: empty tag, 2: empty attribute, 3: empty line
let n = search('><\/\|\(""\)\|^\s*$', 'Wp')
if n == 3
startinsert!
else
execute 'normal l'
startinsert
endif
endfunction
只要在 PYTHONPATH 中的程序,用Vim的时候就能够使用omni智能提示功能。
最近新学django,所以把用django-admin 生成的项目目录加入到PYTHONPATH,这样就能使用Vim的omni对这个项目里的模块实现代码提示功能了。
但是用了不久后,发现对某些模块操作时omni功能失效了- -,研究了一下发现是只要导入了django.db.models的模块,智能提示就会失效。
然后我在终端的python中单独导入django 的 models 模块,发现会有异常,原因是那个 django.db 里面会导入 django.conf.settings 对象,然后还会去设置他的属性,这一下就玩完了,因为那里面会检查系统的 DJANGO_SETTINGS_MODULE 值,可以在django/conf/__init__.py中的LazySettings这个类里看到,如果没的话就有异常了。
这个系统值应该是启动server的时候设置的,可以在manager.py里面看到。
这样一来肯定是由于Vim的python omni程序导入模块时一旦碰到异常就不继续了,所以智能提示失效了。
为此我在导入django的models时做了下处理
try:
from django.db import models
except ImportError:
from django.core import management
management.setup_environ(settings)
from django.db import models
哈哈,这样就好了,那个settings是当前项目中的settings模块。
要是有更好的办法欢迎提示阿。
有点不是很习惯Python的官方文档,虽然有Python Sidebar,但是似乎挺久没更新了,所以自己用AS弄了一个,直接读取官方的页面。
可以加入到Firefox的侧边栏使用
,如果你不是使用Firefox的话,可以将这个页面加入到你的浏览器书签或侧栏中
update 4.29: 或者,你也可以用这个页面 http://harryxu.cn/pydoc.html
加入到Firefox侧栏
SVN Repository