驯服Subversion命令行
总有些时候,没有别的什么工具或是开源项目能恰好满足你的需要,这时就该你自己动手制造“填木”和“夹铁”了。这一章介绍了很多种制造工具的方式,下面就是一些在真实项目中用这些工具来解决问题的例子。
我是开源版本控制系统Subversion的忠实粉丝,在我看来它就是强大、简单和易用的完美结合。归根到底Subversion是一个基于命令行的版本控制系统,不过有很多开发者为它开发了前端工具(我的最爱是与Windows资源管理器集成的Tortoise)。尽管如此,Subversion最大的威力还是在命令行,我们来看一个例子。
我经常会一次往Subversion里添加一批文件。在使用命令行做这件事时,你必须指定所有想要添加的文件名。如果文件不多的话这还不算太糟糕,但如果你要添加20个文件,那就费事了。当然你也可以用通配符,但这样一来就可能匹配到已经在版本控制之下的文件(这不会有什么损害,只不过会输出一堆错误信息,可能会跟别的错误信息混淆)。为了解决这个问题,我写了一行简单的bash命令:
svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add
表4.3详细解释了这一行命令。
我大概花了15分钟写出这条命令,然后用了它成百上千次。
用Ruby编写SQL拆分工具
在从前的一个项目中,我和一个同事需要解析一个巨大(38,000行)的遗留SQL文件。为了让解析的工作变得容易一点,我们想把这个铁板一块的文件分成每块1,000行左右的小块。我们稍微考虑了一下手工做这件事,不过很快就明白将其自动化会是更好的办法。我们也考虑用sed来实现,不过似乎会很复杂。最终,我们选定了Ruby。大约一个小时以后,我们得到了这个:
这个Ruby小程序从源文件中逐行读取,直到读满1,000行为止,然后从中寻找包含GO或者END的行,如果找到就结束当前文件的查找,开始下一个文件。