I can believe fly.

Tuesday, January 20, 2009

StatSVN统计工具使用指南

= StatSVN统计工具使用指南 = == 概述 == * StatSVN是Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表。 == 目的 == * 本文目的是介绍statSVN的使用。 == 步骤 == 1. '''准备工作''' a. Java环境: StatSVN需要Java的运行环境支持,请确保java文件可以运行. a. 安装SVN客户端命令: Statsvn需要用到SVN命令,请确保可用 a. 下载StatSVN: http://www.statsvn.org/index.html下载 1. '''统计工作''' a. co工作拷贝: 从你要统计的SVN仓库获取一份数据到本地,请确保是最新版本。 a. 日志文件生成: 在工作拷贝的本地目录下执行 svn log --verbose --non-interactive --no-auth-cache --xml>statsvn.log ,生成该仓库的日志文件statsvn.log,该文件是给StatSVN分析用的,名称可自定义。 a. 统计: 执行java -jar statsvn.jar -output-dir "E:\SCM\starsvn\rel\" E:\WorkDir\svn.rdev\ACLrepos\statsvn.log E:\WorkDir\svn.rdev\ACLrepos ,其中后面三个参数分别是:统计文件生成路径 统计对象的日志文件 工作拷贝的本地目录 命令格式: java -jar statsvn.jar [options] ,其中[options]为可选参数,该参数格式及用法如下: {{{ -version print the version information and exitvyqye -output-dir directory where HTML suite will be savedvyqye -include include only files matching pattern, e.g. **/*.c;**/*.hvyqye -exclude exclude matching files, e.g. tests/**;docs/**vyqye -tags show matching tags in lines of code chart, e.g. version-.*vyqye -title vyqye -viewvc integrate with ViewVC installation at vyqye -bugzilla integrate with Bugzilla installation at vyqye -username username to pass to svnvyqye -password password to pass to svnvyqye -verbose print extra progress informationvyqye -xdoc optional switch output to xdocvyqye -threads how many threads for svn diff (default: 25)vyqye -concurrencyThreshold switch to concurrent svn diff if 1st call>thrvyqye eshold (default: 4000)vyqye -dump dump the Repository content on consolevyqye }}} 1. '''统计结果''' * 生成一批静态文件 * 利用浏览器打开index.html,查看: * 代码行数的时间线; * 针对每个开发者的代码行数 * 开发者的活跃程度 * 开发者最近的提交;这里new代表新增的文件,del代表删除文件,+int代表该文件新增代码行数,-int代表该文件删除代码行数vyqye * 文件数量 * 平均文件大小 * 最大文件 * 哪个文件是修改最多次数的 * 目录大小 * 带有文件数量和代码行数的Repository tree 1. '''相关资讯''' * statsvn用户手册: http://wiki.statsvn.org/User%20Manual.ashx

Svnmanager工具配置报告


0. 安装apache2.x+mysql5.x+php5.2.5+svn1.5.4  其中,php还需要安装VersionControl_SVN-0.3.1.tgz.tar
1. 将svnmanager工具解压到我的apache发布目录下/usr/local/www/apache22/data
如果你在发布目录下增加一个子目录即svnmanager,则在url访问时必带上即
http://192.168.0.1/svnmanager/index.php
2. 配置,在svnmanager的根目录下找到config.php.linux(这是针对linux)改名为config.php且修改以下信息:
$htpassword_cmd = "htpasswda工具的路径";
$svn_cmd = "svn工具路径";
$svnadmin_cmd = "svnadmin工具路径";

//Subversion locations
$svn_repos_loc = "仓库的父目录";
$svn_passwd_file = "账号文件";
$svn_access_file = "权限文件";
$admin_name = "svnmanager页面登陆账号";
$admin_temp_password = "svnmanager页面登陆账号的密码";
3. 问题
(1) 用admin登陆,只看到用户管理跟退出,奇怪,其它功能?
后面才发现,原来后台设置的账号是临时账号,你必须自己创建一个管理员的账号,重新登陆.
(2)操作:Repository administration->User/Gropu Privileges->任意一个select
错误信息:
[2] UserPrivilegesEditPage::require_once(VersionControl/SVN.php) [userprivilegeseditpage.require-once]: 
failed to open stream: No such file or directory (@line 201 in file C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\svnmanager\svnmanager\RepositoryModule\UserPrivilegesEditPage.php).
Debug Backtrace
#1 UserPrivilegesEditPage.php:201 -- pradoErrorHandler(...)
#2 UserPrivilegesEditPage.php:201 -- UserPrivilegesEditPage::onLoad()
#3 TControl.php:419 -- UserPrivilegesEditPage->onLoad(...)
#4 TPage.php:1079 -- TControl->onLoadRecursive(...)
#5 TPage.php:955 -- TPage->onLoadRecursive(...)
#6 TApplication.php:483 -- TPage->execute()
#7 index.php:5 -- TApplication->run() 
解决:
a. 查找查UserPrivilegesEditPage.php中的require_once("VersionControl/SVN.php"),确认下位置
b. 到相关pear下查找SVN.php文件的位置,本人自己找到是以下两个位置
/usr/ports/devel/pear-VersionControl_SVN/work/VersionControl_SVN-0.3.1
/usr/local/share/pear/VersionControl_SVN
c. 经过自己分析,将require_once("VersionControl/SVN.php")改为require_once("VersionControl_SVN/SVN.php")
d. 测试通过.
ps: 本人分析出一个规律是,这里的路径是pear的相对路径.所以这里解决方法只作参考不是所有人都受用,请根据实际情况调整.
同时,解决了用户管理,别忘组的管理也要调整即GroupPrivilegesEditPage.php 文件.
(3)解决中文乱码问题~参考别人,未实验
修改 svnmanager\global\header.tpl  将页面的字符集设置为 gbk 或者 gb2312

因为这里使用的是 mysql 数据库,因此修改 
svnmanager\prado-2.0.3\framework\Data\adodb\drivers\adodb-mysql.inc.php
在 function _connect 倒数第三行前加入 mysql_query("set names 'gbk'"); 
设定操作mysql的字符集为GBK

                        mysql_query("set names 'gbk'");                
                  if ($this->_connectionID === false) return false;
                if ($argDatabasename) return $this->SelectDB($argDatabasename);
                return true;        
        }
(4)用户管理中的邀请操作,邮件发送失败~参考别人,未实验
错误信息:
Something went wrong sending email, please contact server administrator!
说明: 没找到解决方法
(5)不能自动过滤不属于仓库
错误信息:
{svn: URL 'file:///storage/yslProR/conf' non-existent in that revision (cmd: svn list --non-interactive file:///storage/yslProR/conf)
Command used: svn list --non-interactive file:///storage/yslProR/conf}
说明:由于不支持过涉仓库,所以在获取不是svn仓库时,就会报如上错误了.


通用性考虑不全:
1.不支持ldap的账号,只能管理传统的账号文件
2.不支持导入原有的权限分配,需要重新建立
3.导入现有库不支持自动过滤不属于库的信息即会把指定父目录下的子目录都当作是库
4.不支持多库配不同的权限文件
5.权限文件的格式只能基于[库名:相对路径],不支持[相对路径]

改进建议:
1. 用admin登陆,应该提醒用户创建一个新的管理账号
2. 用新的管理账号登陆,进行数据初始化
a. 导入仓库:指定仓库的目录获取且支持自动过滤不相关的库
b. 用户初始化:
(a)支持一对一即一个仓库对应一份账号文件
(b) 支持多对一即多个仓库对应一份账号文件
(c) 支持ldap账号,获取数据库的账号信息
c. 权限初始化:
(a)支持一对一即一个仓库对应一份权限文件
(b) 支持多对一即多个仓库对应一份权限文件

Tuesday, January 13, 2009

redhat8装SVN工具

[root@DB-RH8-x86 root]# rpm -q apr
apr-0.9.5-0.2
[root@DB-RH8-x86 root]# rpm -q apr-util
apr-util-0.9.12-2
[root@DB-RH8-x86 root]# rpm -q neon
neon-0.24.7-1
[root@DB-RH8-x86 root]# rpm -q subversion
subversion-1.3.2-1
不要装apr-0.9.12-2.i386.rpm. 装apr-0.9.5-0.2.i386.rpm就可以了.

 * 以上是同事在redhat8装SVN工具 正常的版本组合,参考了

Tuesday, January 6, 2009

linux定时启动

资料上说执行 crontab -e ,编辑完会自动保存到/var/spool/cron/username.
可是linux的编辑模式太痛苦了,后面还是叫sa处理一下,
结果,他直接在etc/crontab上加,有点奈闷,这又是啥原理嘛
 算了, 这不是很重点, 还是具体了解下它的文件格式:
句式: 
1 0 * * * elian /home/elian/build/build.sh 1>/dev/null 2>&1
说明:
  1. 前五位分别是: 分/时/日/月/周
  2. 第六位是执行的用户
  3. 第七位是执行的命令
后记:
 呵呵,在etc/crontab添加,没有自动跑起来,最后还是用起了 crontab -e 的方式

Monday, January 5, 2009

sh,不得不说

   sh,即shell啦..鉴于对win的熟悉,在它的环境下从不用刻意的说要学下bat,想要什么就拿什么的感觉. 但在linux下用sh,还是挺陌生的,决定将用过的信息记载下

username=$(svnlook author "$REPOS" -t "$TXN")
## 将执行svnlook命令获得的值赋给username变量

if [ "$username" = "yusulian" ];
then
 exit 0;
fi
## 比较username账号的值是不是等于yusulian,如果是就退出去(exit 0)
## 这里要注意的是比较的格式一定不要漏掉中括号[条件]

linux下玩lftp

基本常识
whereis lftp ## 查看lftp的路径
/usr/bin/lftp ## 执行lftp命令
lftp :~> open ftp地址 ## 在ftp环境下连接远程服务器
lftp :~> help ## 查看在ftp环境下的命令
lftp 192.168.1.1:~> user 账号名称 ## 登录账号,回车,你也可以空格明文写上密码
Password: 账号密码 ## 输入登录账号密码
lftp 192.168.1.1:~> ls ## 登录成功后输入显示所有目录

详说mirror 
说明: 上传/下载文件夹,包含子文件夹
格式: mirror [OPTS] [remote [local]]
上传: 
mirror -R /data0/Linux/src/Product/Release/ /Public/YuSuLian_SCM/linux/
mirror -R /data0/Linux/src/Product/Release/ /Public/YuSuLian_SCM/linux
最后/有没有的区别,第一句会在ftp中创建一个Release目录,而第二句不会,直接将Product/Release/下的数据放到linux目录下
下载: mirror /DubaPublic/YuSuLian_SCM/linux/ /data0/DAE_ScanEngine_Linux/src/Product/Release/
要注意上传下载本地路径与远程路径是不一样的

例子:PutFileToFtp.sh
#!/bin/sh
#

workdir=/data0/build/build_src/Linux
filedir=/data0/build/build_files
numfile=$filedir/build.number
buildnum=$(cat "$numfile")
reslutdir=$(date +%Y%m%d).$buildnum
localdir=$workdir/src/Product/Release/
remotedir=/DubaPublic/SCM/linux/$reslutdir

echo open 192.168.1.5>"$filedir/ftpcfg.txt"
echo user ysl 123123>>"$filedir/ftpcfg.txt"
echo mirror -R "$localdir" "$remotedir" >>"$filedir/ftpcfg.txt"
echo quit>>"$filedir/ftpcfg.txt"

lftp -f "$filedir/ftpcfg.txt"

例子错误
[elian@localhost build]$ sudo sh PutFileToFtp.sh
错误信息: PutFileToFtp.sh: PutFileToFtp.sh: cannot execute binary file
处理方法: 存储格式的问题,PutFileToFtp.sh文件是我在win下创建的,转为utf-8格式要将"添加Unicode签名"选项去掉

Sunday, January 4, 2009

linux常用命令

linux下的命令,可以用man 命令查看帮助

拥用管理员操作权  sudo

查找安装软件
rpm -qa|grep sub
rpm -e  subversion-1.1.4-2

卸载rpm格式软件  rpm -ivh *.rpm

升级某rpm文件  rpm -Uvh *.rpm  

删除subversion-1.4.5目录  rm subversion-1.4.5 -rf

退出  logout

打开profile文件编辑  vi /etc/profile

改变kice目录的拥用者  chown -R www kice

改变kice目录的权限为777   chmod -R 777 kice

查看子目录的大小   for item in $(ls);do echo ${item};du -hs ${item};done

查看当前目录的大小  du -hs

查看svn进程  ps auxwww|grep svn

杀掉41424进程  sudo kill -9 41424. 

目录映射  ln -s /data1/ksmatrix/wps/wpspublic /data1/wpspublic

添加账号  adduser joe

设置密码  passwd joe (键入joe的口令) 

获取日期 date 

获取文本信息 cat

数值计算 expr

查看linux系统版本
1)uname -a 
2)cat /proc/version 
3)cat /etc/issue
4) ls /boot

移动目录 mv svnmanager-1.04 /usr/local/www/apache22/data/svnmanager

解压文件 tar -xvzf svnmanager-1.04.tar.gz