最近开发团队发布的版本质量很成问题,追究起来有很多原因,其中之一是CVS的使用不合理,
于是想做个一小工具,分析CVS上每天的活动,以便掌握团队成员对CVS的使用情况。
也许有现成的开源项目可以完成这项任务,但懒得去找了,自己写一个吧。

声明:由于只是一个内部使用的工具,没有掺杂太多的设计理念在其中,
不过我写的代码,总体来讲质量还是过得去的,新手参考一下也无不可。

1、确定需求
希望掌握每天CVS上,谁、在什么时间、对什么文件、做了什么。

2、可行性研究
需要研究CVS的什么指令可以获取CVS的活动情况
在阅读CVS的手册后,基本确定:
history 和 log 两个指令可以满足要求。
具体指令说明请参见:
history:http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs_16.html#SEC144
log:    http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs_16.html#SEC150

3、技术预演
参照手册上的说明,试验history和log两个指令的输出,以及参数对输出的影响,
最终确定使用如下两条指令格式:
cvs log -d '>YYYY-MM-DD' -N -S 模块名
    -d  表示限制时间,>YYYY-MM-DD  表示大于该指定时间,该参数在实际运行时被替换为当天日期
    -N  表示不输出文件的tag(因为我们的代码会经常用tag做标记,所以输出tag会很乱)
    -S  指定模块名,实际上就是CVS Repository下的一个目录名

cvs history -xAMRT -D'YYYY-MM-DD' -a -p 模块名
    -x  限定输出包含的活动类型,AMRT代表增加、修改、删除和远程标记文件(rtag)。
    -D  限定只输出YYYY-MM-DD之后的活动
    -a  输出所有用户的活动
    -p  指定模块名,等同与log的 -S(注意,-x的T参数不受此参数影响)

4、分析指令结果,提取有效信息
history指令输出结果:
增删改:
A 2009-06-05 00:46 +0000 wub  1.1  IActiveAlmService.java  ITIMSROOT/svr/src/itims/svr/asa/alm    == <remote>
修改类型 修改发生的时间  谁  版本 涉及的文件              文件所在路径                            其它信息

TAG:
T        2009-06-11 01:39 +0000 jinxfei research                      [new-tag-on-new-tag:HEAD]
rtag    标记发生的时间          谁    标记的文件或者目录              标记名:分支

log指令的输出结果:
RCS file: /cvsroot/itimsDev/ITIMSROOT/svr/src/itims/svr/asa/AbsAsaService.java,v
Working file: ITIMSROOT/svr/src/itims/svr/asa/AbsAsaService.java
head: 1.10
branch:
locks: strict
access list:
keyword substitution: kv
total revisions: 10; selected revisions: 2
description:
----------------------------
revision 1.10
date: 2009/06/11 01:40:40;  author: yyj;  state: Exp;  lines: +0 -2
测试提交1
----------------------------
revision 1.9
date: 2009/06/11 01:40:19;  author: yyj;  state: Exp;  lines: +2 -2
测试提交
=============================================================================

其中,有价值的信息包括:
文件名,每次revision的时间、用户、文件状态、提交时的说明

5、确定方案
由于CVS指令输出的结果比较技术,我们需要将其进行规整,最好能够以HTML方式进行展示。
log和history的输出内容看问题角度不同,
log的输出结果可以整理成以文件为主的一张表格,反映每天有多少文件被谁修改过。
history的输出结果可以整理成以用户为主的一张表格,反映每天谁修改了多少文件。

首先,需要定时执行cvs的两条指令,结果导出到文本文件中,作为后续分析的基础,
这可以通过Crontab来进行调度(Window上可以用计划任务)。
然后,需要针对两种指令结果,实现信息抽取和格式化的业务逻辑,生成用于展示的JavaBean。
最后,编写界面,做信息展示。包含一个导航界面和两个分析结果展示界面。

6、实现:shell脚本抽取信息
shell文件内容如下:
#####################
#先确保cron执行环境和当前用户一致,/home/itims请换成自己用户的home目录,.bash_profile在各个平台上可能也有差异
. /home/itims/.bash_profile
#计算当前的年月日
todayStr=`date +%Y-%m-%d`
#日志输出的目录
cvsLogPath=/home/itims/trail/cvs_236_expr/cvslog
#CVS模块名
cvsModule=ITIMSROOT

cvs log -d '>'$todayStr -N -S $cvsModule >$cvsLogPath/cvs_log_$todayStr.log 2>&1
cvs history -xAMRT -D$todayStr -a -p $cvsModule >$cvsLogPath/cvs_history_$todayStr.log 2>&1
#####################

安排在每日23:30执行
在unix命令行输入:
crontab -e
然后增加如下行:
30 23 * * * /home/itims/trail/cvs_236_expr/dailyLog.sh
以上脚本路径请自己替换。

7、实现:java编写业务逻辑
    7.1 编写分析History指令日志片段(每一行)的类
    7.2 编写JUNIT单元测试(输入字符串,输出JavaBean)
    7.3 编写分析Log指令日志片段(见前面的样本)的类,使用正则表达式定位相关信息
    7.4 编写JUNIT单元测试
    7.5 编写业务逻辑主类,接收文件名参数,读取文件,并从发送给分析类进行解析

8、实现:jsp编写展示界面
由于页面比较简单,且为内部使用,不用Action,直接在JSP中调用业务逻辑主类,
分析文件后,循环展示。

7、8两部分的实现源代码,包含在我的资源中可以下载。

9、后续工作

可以作出一些统计信息,包括每天最活跃用户、最活跃文件的排名。
还可以记录用户、文件的活跃历史,形成曲线。

另外,在使用正则表达式匹配log内容的时候,如果用户提交的message中出现=或者-,将会导致此后的信息丢失。
这需要微调正则表达式来作出更精确的匹配。

对界面进行美化。

麻雀虽小,五脏俱全:分析CVS活动情况的小工具(有源码供学习)相关推荐

  1. 活动报名发布小程序源码 聚会活动报名小程序完整版前端+后台管理Think

    活动报名发布小程序源码 聚会活动报名小程序完整版前端+后台管理Think下载链接:https://pan.baidu.com/s/16e3egizS_bjuJTv2YcA6Xg 提取码:6n11

  2. MFC自用小工具源码

    效果:快速打开计算机内常用的软件,功能,设置 // 自用小工具Dlg.cpp : 实现文件 // #include "stdafx.h" #include "自用小工具. ...

  3. 视频批量去片头片尾小工具源码分享

    视频批量去片头片尾小工具源码分享(基于FFmpeg视频流复制切割,快速无损) 开发环境Delphi2010,框架VGScene(新版本用FMX) 特点:直观的预览界面,秒级的微调定位,批量预设.单个微 ...

  4. 2023 易语言 查看系统信息小工具源码

    使用精易模块,调用电脑自带的系统信息,一次性查询,做电脑店的可以拿去用,看配件很方便 2023 易语言 查看系统信息小工具源码

  5. 【小程序源码合集】云开发前后端完整代码,大学生校园社团体管理活动预约微信小程序源码

    介绍 这是一款完整的小程序,带有详细教程,使用云开发技术,完整的管理后台,唯一缺点就是没看到流量主,不过代码清晰,大家自行二开即可 功能介绍 校园社团小程序,前后端完整代码包括社团通知,社团简介,社团 ...

  6. 【Python】【Tkinter】png转ico小工具源码以及打包exe

    我最近初学Python,学习到了Thinker部分,心血来潮做了一个图片小工具,我感觉我自己好像是码了一座屎山.下面我分几个部分来讲解一下我的思路,以及具体的步骤. 第一步,先看源码: 部分地方我作了 ...

  7. 小程序 祝福小工具源码分享

    2019.小程序的市场依旧是那么火爆...... 所在我在这里,想给大家分享一套关于送祝福的工具类的小程序源码.这不马上元旦.除夕夜等等一系列节日了,我们大家送给亲朋好友的祝福肯定是不能少的,那么我们 ...

  8. java 录屏_java 录屏 小工具源码(idea)

    [实例简介]录制的视频保存在 java.io.tmpdir 目录,windows通常为 C:\Users\Administrator\AppData\Local\Temp [实例截图] 点击播放后,效 ...

  9. 每日分享-sql注入简单检测小工具(仅供参考学习)

    python版本:3.9.6 代码如下: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import requests url = 'http://localho ...

最新文章

  1. 【经验】配置Anaconda源
  2. Silverlight实用窍门系列:35.细解Silverlight冒泡路由事件和注册冒泡路由事件【附带实例源码】...
  3. http协议的完整组成
  4. 【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)
  5. ruby mysql dbi_Ruby MySQL DBI实例
  6. iOS开发触摸事件的传递
  7. HDU 1827:Summer Holiday(强连通)
  8. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.62%
  9. pip 安装速度慢解决办法
  10. SPR:SUPERVISED PERSONALIZED RANKING BASED ON PRIOR KNOWLEDGE FOR RECOMMENDATION
  11. 移动端adaptive设置
  12. 【论文解读】关于基于视觉无人机自主降落平台的论文梳理
  13. 自然语言表达处理笔记01—— 1.正则表达式 2.文本标记化 3.词干提取和词形还原 4.中文分词
  14. 基本的Dos命令(命令行盘符切换)
  15. 认识1M带宽、1Mbps、1Mb/s 区分
  16. 「人物特写」清华大学邓志东:“特征提取+推理”的小数据学习才是AI崛起的关键...
  17. 爱剪辑怎么制作淘宝视频?详细的制作技巧,教你快速搞定淘宝主图视频
  18. TIA西门子博途V18安装教程及注意事项
  19. AI技术再升级:2022年最流行的10大人工智能技术
  20. 解密中国互联网构成与发展

热门文章

  1. 【转】c# 操作webservice(经典入门教程+MSDN必胜)(有自己修改的部分)
  2. 【转】如何写出让同事无法维护的代码
  3. vscode生成vue模板快捷键_vs code 快速生成vue 模板
  4. 解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
  5. 【Python CheckiO 题解】Xs and Os Referee
  6. 【牛客 - 302哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(低年级)】小乐乐切割方块(思维,水题)
  7. 【HDU - 2012】素数判定(水题,数论,打表)
  8. 【CodeForces - 660C】Hard Process (尺取 或 二分+滑窗,前缀和预处理)
  9. 【nyoj - 890】 分东西 (水题 二进制)
  10. 【POJ - 1028】 Web Navigation( 栈 or 模拟队列 )