svn查看log扩展

在项目工作中经常需要审核代码,如此则需要从众多的提交者中筛选出指定的几个提交者,然后查看修改了哪些代码。但是svn log工具的搜索功能并没有提供(eric或neil的提交)的功能。倒是提供了(neil提交的并且log含有UI)的功能

--search ARG : use ARG as search pattern (glob syntax, case- and accent-insensitive, may require quotation marks to prevent shell expansion)

--search-and ARG : combine ARG with the previous search pattern

我自己利用shell扩展出一个svn功能。它本身是一个svn.sh文件。如下这种方式调用(两种方式的差异是管道符号|的转义)

./svn.sh log -r{2020-1-1}:{2020-1-3} --search neil\|eric

./svn.sh log -r{2020-1-1}:{2020-1-3} --search "neil|eric"

实现的诀窍是最大量使用原来的svn log参数。而在--search参数上做文章。如果是搜索一个提交者,用svn的--search就可以;如果搜索的提交者不止一位,则不使用--search功能而由awk工具完成筛选。源代码如下:


# 全部参数是$@

# 找到查找的字符串

search=`echo $@|grep -o '\-\-search \+\([^ ]*\)'|grep -o '[^ ]*$'`

#echo $search

# 拆分成数组

array=(${search//|/ })

if [ ${#array[@]} -gt 1 ]

then

# 参数不止一个。先不筛选log,然后在log中多次匹配

# search先擦除掉

param=`echo $@|sed 's/--search \+[^ \t]*//g'`

# 再由awk来筛选

`echo "svn $param"` | awk 'BEGIN{valid=0;split("'"$search"'",names,"|");}{if(match($1,"^r[0-9]+")!=0){one=0;for(i in names){if(match($0,names[i])!=0){one=1;}}valid=one} if(valid!=0)print $0}'

else

# 只有一个search参数就用原来的方式

`echo 'svn '`$@

fi


执行的效果如图

svn查看log扩展_第1张图片
能够筛选两位开发者的提交记录

ps:如果使用的是cygwin需要先执行

export LANG=zh_CN.GBK

设置好编码,否则windows是乱码

你可能感兴趣的:(svn查看log扩展)