I can believe fly.

Wednesday, October 28, 2009

perl温习

1.捕捉外部命令输出结果:反引号``
   即用反引号括起来的任何命令均有perl作为外部命令来运行,就行通过system运行的一样,其输出被捕获,并且作为反引号的返回值返回。如:
   my $svnbakversion = `svnlook youngest $bkrepos1`
   print $svnbakversion;
   如果输出结果不是单字符串,反之是列表,则可将其赋值给数组@dirdata
2. 代码
  if ($svnbakversion =~ /\d+/)
 {
 push (@baksucces, $myrepos);
 }
 else
 {
 push (@bakfailed, $myrepos);
 }
说明: 
a. 检测svnbakversion 是否全为数字
b. push 添加数组元素,即将$myrepos值加入到数组@baksucces/@bakfailed
3. 邮件发送
如果你使用的邮件发送地址,需要验证即使用$smtp->auth('user','pwd');
那么你需要安装Perl模块Authen::SASL (optional Perl module for SVN::Notify)
安装步骤如下:

# wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.12.tar.gz
# chmod a+x Authen-SASL-2.10.tar.gz
# tar zxvf Authen-SASL-2.10.tar.gz
# cd Authen-SASL-2.10
# perl Makefile.pl
==> Auto-install the 1 optional module(s) from CPAN? [n] y   // 首次执行的时候,需要CPAN 初始化设置。
==> Auto-install the 1 optional module(s) from CPAN? [n] y   //之后一路按回车
# make test
# make install   //安装完成


参考文献: http://opensource.csdn.net/discuss/thread/702

secureCRT显示编码设置

secureCRT编码设置

终于受不了在secureCRT操作linux时乱码的问题,作了一下调整,步骤如下:
1. options->session options->Appearance
2. Fonts为Fixedsys 10pt
3. Character为UTF-8
结果看下去好多了:


Friday, October 9, 2009

Vista下安装配置 iis 7.0



1. 如果你要配置的网站程序有asp类型,请根据以下选中的节点安装













2. 相关附加信息安装,如下选中结点(所有子节点都必须选中)







3. FAQ问题


错误信息:












解决方法: 按照安装的第2步,.安装相关的附加信息.










错误信息:




















解决方法: 添加应用程序时,选择对应的应用程序池













错误信息:



错误摘要HTTP 错误 500.19 - Internal Server Error

无法访问请求的页面,因为该页的相关配置数据无效。

详细错误信息模块 DefaultDocumentModule

通知 ExecuteRequestHandler

处理程序 StaticFile

错误代码 0x800700b7

配置错误 在唯一密钥属性“value”设置为“default.aspx”时,无法添加类型为“add”的重复集合项 

配置文件 \\*******\web\web.config



   <defaultDocument>

  <files>

    <add value="default.aspx" />

  </files>

  </defaultDocument>



错误原因是IIS中已经设置了默认document为default.aspx,这时候asp.net得到了另外一个相同value的add引发异常,处理方案是在<add />之前加入<clear />



解决方法:  选中Default Web Site, 双击打开"默认文档",删除default.aspx













ps: 注意信息



1. mime无需手动添加,一般*.config里已配置



2. vista默认是没有装iis7.0,为了避免冲突,如果要安装vs2008前,请先装好IIS.
















Wednesday, September 16, 2009

SVN故障回顾

一场台风,一阵暴雨 SVN服务器中招 
经SA确认是系统盘坏了 这问题大条 影响大家的工作

回顾
主机与备机,理论上说,主机一挂,即可切换到备机,当初说起来多理想/想起来多美好
结果,百闻不如一见,数据是备份了,但环境的配置文件都是缺少的,这不说,还有几个隐患:
 1. 系统环境不同,这万一不兼容就麻烦了
 2. 仓库的存储位置不一致,这一切换还要等着改配置文件,这不是多事嘛
 3. 所有配置文件都存储在SVN仓库,无法拿到最新版本的数据
(虽然个人工作机上有,但必竟不可靠;想想:这类配置文件是不是应该在哪台服务器同步一份最新版本,以ftp供备用)

SVN仓库切换常见问题
 1. UUID问题:每个新建仓库在服务器上都会生成自个的UUID,即db\uuid
  该号必须保持与客户端.svn\entries文件里面的UUID号一致.否则,客户端上就要重新CO数据.
 2. SVN仓库系统权限问题: 每个仓库所在目录,其所有者/所有组必须是apache的user/group
 3.  hooks下部署的钩子脚本要确保有正确部署上

SVN仓库备份
a. 仓库数据热备份,作好备胎.可利用svnsync同步进行实时备份
b. 仓库数据需要冷备份.
c. 硬盘上的仓库物理存储位置的数据也做备份


Tuesday, April 28, 2009

Gmail账号:一个=多个?

   刚发现:使用gmail邮箱有个技巧,那就是在你邮箱账号名称后弄个+号,其跟上的任意字串信息都是被忽略的,因为邮箱地址照常使用。

   而这功能对我们用户有什么用处呢?据介绍:可以方便设置过滤

  假设:你用邮箱去订阅网站信息,如果你用对方管理员的邮箱地址设置过滤,那就不灵活了,万一邮箱名称变了,你就收不到了.(邮箱标题也一样).现在,你可以利用这个功能,给自己的账号加上后缀信息去订阅,然后在去设置过滤,不管对方怎么变,你给的地址是不变的.

  再说白点,你可以将邮箱账号+标签作为邮箱使用,不同注册站点用不同的邮箱,只要你把约定好的地址设置好过滤,那你收到的邮件就会自动归档到相应的标签里了,是不是挺有用的。


  听上去,是不是觉得就一个gmail邮箱,其实等于拥有多个邮箱地址了。

相当于elian at gmail dot com=elian+movie at gmail dot com=elian+scm at gmail dot com 

Gravatar是什么?

Gravatar,什么玩意?有人解释说是全球通用头像(Globally Recognized Avatar

   还是自己动手玩一把,比较有感触:

1. 登录它的站点http://en.gravatar.com,使用个人邮箱注册, 然后配置相应的个人头像(可能有些邮箱收不到它发送的注册邮件).

2. 注册成功后,你在任何blog上使用该注册的邮箱留言,都会显示对应的头像(前提:你访问的blog是支持Gravatar的API

Ps: 你上传过的图片都会存储下来



Redmine项目管理工具介绍

前言

Redmine是一web目管理,基于Ruby on Rails 框架开发 .平台且支持多种数据库..

功能介绍

支持多目的管理

redmine平台就可以管理多個項目

个项目可以分解成多目來管理

目可以所有人可目成

在不同的目中可承担不同角色

可以方便激活或隐藏功能模块(wiki/版本/问题跟踪....

角色的限控制

自定义项目中所需要的角色

根据角色灵活分配权限

和甘特

通过日历,方便查看每个时间点上的任务

通过甘特图,方便查看每个任务的完成进度

、文和文件管理

供团队即时发布任何消息及共享文件

订阅(Feeds)和郵件通知

项目活动/变更/新闻/问题/问题变更都可通过Atom feeds获取通知

设置每項目独立wiki

Wiki页面即采用文本标记符,具有版本控制及比较功能

每个项目都可以拥有独立的wiki页面

置每讨论区

团队可以围绕某个主题建立讨论区,方便项目成员发表看法及观点

简单时间功能

在项目级别中,你可以制定某时间段的工作量报表

1. 以年/月/周/天为单位

2. 项目/活动/成员/问题等作为统计对象

支持問題、目和用户增加自定义属性

自定义属性可以像常规属性那样显示在问题列表中,并可以作为过滤器使用

您可以根据需要为问题、项目和用户添加属性

属性使用多种格式:文本、日期、证书、下拉列表、复选框

集成版本管理系統

可以为每个项目绑定已有的版本库

Redmine使您可以浏览版本库的内容,查阅和搜索变更信息

对比和注释(即追溯)查看器

支持的版本管理系统: Subversion, CVS, Mercurial, Darcs and Bazaar

支持多LDAP(单点)认证方式

Redmine使您可以通过多种LDAP方式认证用户

用户账户可在从目录服务中发现用户后被自动创建(可选的)

支持用自行注冊账号

您可以配置系统允许用户在线注册

提供3种用户激活方式:自动激活(不需要确认)、手动激活(由管理员激活)、通过邮件自动发送的邮件激活

支持多語言

· Bulgarian,Czech,Danish,Dutch

· English,Finnish,Chinese,French

· German,Hebrew,Italian,Japanese

· Lithuanian,Korean,Norvegian,Polish,Portuguese,Romanian

· Russian,Serbian,Spanish,Swedish,Ukrainian

支持多数据库

  Redmine可以使用的数据库有:MySQL、PostgreSQL、SQLite 

相关资讯

 http://218.107.133.32:5000/projects/ezwork/wiki/ZhRedmine 

Friday, April 10, 2009

python + sql server

1. 模块选用pyodbc,资料如下:
Home Page:http://code.google.com/p/pyodbc
Documentation:http://code.google.com/p/pyodbc/w/list
Issues/Bugs:http://code.google.com/p/pyodbc/issues/list
Discussion Group:http://groups.google.com/group/pyodbc
Source:http://github.com/mkleehammer/pyodbc

2. 问题
问题:执行cursor_oem.execute("SELECT id FROM list")
出错:
Errors: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]\xb6\x
d4\xcf\xf3\xc3\xfb 'oem_list' \xce\xde\xd0\xa7\xa1\xa3 (208) (SQLExecDirectW)")
原因:表oem_list需要指定所有者才可行
分析:表的所有者是user2,但连接数据库用的是user1,因此估计跟表的所有者有关系!

问题:连接数据库出
错误信息:
Errors: ('22001', '[22001] [Microsoft][ODBC SQL Server Driver][SQL Server]\xbd\x
ab\xbd\xd8\xb6\xcf\xd7\xd6\xb7\xfb\xb4\xae\xbb\xf2\xb6\xfe\xbd\xf8\xd6\xc6\xca\x
fd\xbe\xdd\xa1\xa3 (8152) (SQLExecDirectW); [01000] [Microsoft][ODBC SQL Server
Driver][SQL Server]\xd3\xef\xbe\xe4\xd2\xd1\xd6\xd5\xd6\xb9\xa1\xa3 (3621)')
原因:
执行的sql语句有问题,即服务器: 消息 8152,级别 16,状态 9,行 1
将截断字符串或二进制数据。语句已终止。

问题:在执行insert之前未加入cursor = cnxn.cursor()    
报错:Errors: No results.  Previous SQL was not a query.
查询数据库表,数据已新增. 反过来,如有加入,则信息:
Errors: ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]\xba\xaf\xca\xfd\x
d0\xf2\xc1\xd0\xb4\xed\xce\xf3 (0) (SQLFetch)')
原因:可能是sqlserver的一个bug http://support.microsoft.com/kb/257517/en-us/
解决:将cnxn的提交动作移到循环插入数据外
注意:添加前,需要有cursor_oem = cnxn.cursor()  

Thursday, April 2, 2009

SVN属性介绍

tsvn:logtemplate
1.  说明:SVN修改日志模板设置,即设置提交时填写修改日志的模板格式.
2.  例子:符号 [修改的目录或单个文件] 详细说明
3.  缺陷: 定制了该模板属性,在提交的对话框中会显示该模板,如果有人不愿意按此格式写,加上日志不能为空,则就等于方便别人将模板的信息作为修改日志说明提交了.
4.  解决: 想要解决这个缺陷,可以考虑在hooks加入检测,如果日志信息与模板相同,此不能提交.

svn:keywords 
1.  说明:SVN关健字设置即在文件里如果出现指定$关键字$,则会被替换成实际值.
2.  例子:以下是针对SVN提供的几个关键字
a. aa.txt文件的头内容
$Rev::               $:  Revision of last commit
$Author::            $:  Author of last commit
$Date::              $:  Date of last commit
b.  属性设置
格式一: Rev Author Date   # 你可以让所有文件都生效
格式二: Rev Author Date *.txt #你可以指定生效的文件类型
注意: 假设是通过TortoiseSVN工具设置,则别忘了打勾Apply property recursively
因为该属性是针对文件而不是文件夹且设置格式:
c.  属性设置完提交查看aa.txt
$Rev:: 1058          $:  Revision of last commit
$Author:: ysl        $:  Author of last commit
$Date:: 2009-04-03 1#$:  Date of last commit
注意: 由于$Date::              $: 我们在文件中写上关键字加上对应的空格,等于是有固定的长度,所有过长的数据会被截断.

bugtraq:url  
1.  说明: BUG号链接之地址设置
2.  例子: http://bug系统地址?IssueID=%BUGID%
bugtraq:label
1.  说明: BUG号链接之标签设置,即会在提交对话框上增加标签组件的名称,默认Bug-ID / Issue-Nr:
2.  例子: BugID:

bugtraq:message
1.  说明: BUG号链接之信息设置,即会在修改日志里追加上对应的信息.其中%BUGID%值会替换成相应的值.
2.  例子: 响应处理bug:%BUGID%

bug其它设置
bugtraq:warnifnoissue BUG号链接之警告设置,
bugtraq:append 默认true,这个属性定义了IssueID是追加到日志信息的末尾(true),还是插入到日志信息的开始(false)
bugtraq:number 默认true,只能输入数字且逗号隔开多值.
bugtraq:logregex 设置正则表达式,自动从修改日志信自里获取.不增加单独输入框.

Tuesday, March 24, 2009

linux's smb配置

引言:自己动手才是王道,下面是简单的配置,贴出来作个记录

1. 安装smb
# /etc/init.d/smb start 
启动后用如下命令查看samba服务器所用的端口,并在防火墙中把相应的端口打开:
# netstat -tlnp |grep smb

2. 编辑配置文件
# vi /etc/samba/smb.conf
{
smb的配置信息(基本参考)
[global]
workgroup = ysl [工作组名称]
netbios name = yusulian  [主机名称]
server string = Samba Server Version %v [smb服务说明信息]
security = user [级别可以是user即需要用户才能访问;share是不用账号直接可以访问的]
display charset = cp936 [编码设置,这是为了win机子访问时,正常显示中文目录而设置]
unix charset = cp936
dos charset = cp936
[smbdir] [共享目录,外部访问的根目录]
comment = smb dir test [共享目录说明]
path = /data/smb/smbdir [共享目录绝对路径]
read list = test [只读权限账号列表,逗号隔开]
write list = admin [可写权限账号列表,逗号隔开]
create mask = 0775 
directory mask = 0775 
writable = yes 

3. 同步系统账号
# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
# vi /etc/samba/smbpasswd  (去掉多余的账号)

4. 修改smb密码(smb虽然用了系统账号,但不共用密码,因此需要作下调整)
# smbpasswd 账号   //为系统用户设置smb口令
5.smb服务重启
# service smb restart 

ps.其它补充说明
1. smb三种权限:read list,write list ,admin

Wednesday, March 11, 2009

linux下执行mount问题

  上回在linux下执行mount,出现中文目录问题,后面加了iocharset=cp963参数搞定,命令是:
sudo mount -t cifs -o iocharset=cp963,username=user,password=pwd //192.168.0.0/Backup /data/mnt/samba
  今天继续执行copy动作:cp -rf /data/mnt/samba/src /data/dst,却出现如下错误:
cp: cannot stat `/data/mnt/samba/src/\324\317\302\311\316\350台.bmp': No such file or directory
  疑问:/src目录下有5个中文名称的文件,为什么有四个可以正常copy到dst目录下,只有一个怎么也不过去.

  后面,先umount掉,继续重新执行:
sudo mount -t cifs -o codepage=936,iocharset=uft8,username=user,password=pwd //192.168.0.0/Backup /data/mnt/samba
  这时候来查看中文目录,显示全变成了乱码了,就把iocharset=uft8改为iocharset=gb2312来执行
显示是正常的,但copy的问题还是存在着.

.........中间让朋友帮上去服务器分析一下,他查了一下那目录是什么编码..................
  后面发现在重新执行以上任何mount的动作,都成功不了,总是报如下两种错误:
mount error 20 = Not a directory
(网上资料是说可以执行echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled,好像在这边没效果)
mount error 79 = Can not access a needed shared library
(这个问题更是一头雾水)

继续寻找原因,朋友试着将-t cifs改为-t smbfs,命令:
sudo mount -t smbfs -o iocharset=cp963,username=user,password=pwd //192.168.0.0/Backup /data/mnt/samba
成功执行,但是无论iocharset=cp963采用什么编码,都显示乱码,根本无法copy操作

补充:
1.重新换个目标挂载目录/data/mnt/samba改为/data/mnt/test,问题还是存在
2.执行sudo reboot,重启电脑,也没有解决

Tuesday, March 10, 2009

英语集锦

hello ,everyone,long time no see

your netname must amend
Unified format:area-selfname

i am working now.
me too.

happy to work
work and is being joyful!
Good morning. Have a nice day!  

090307每日英语

一:基础句型


以下5个句子所有人有要操练,英语好的人不要小看它,你懂了未必就很熟悉,成功其实就是简单事情重复做,力争做得好做的精。


1. To be careful! 一定要小心!

2. Do me a favor? 帮个忙,好吗?

3. Help yourself. 别客气。

4. I'm on a diet. 我在节食。

5. Keep in Touch. 保持联络。


二:成语或谚语


以下是一句谚语


Rome was not built in a day 冰冻三尺,非一日之寒.


三.提高型。


以下5句是属于提高型的,有能力的可以学,不要求人人都学,初学者可以先不学。


1. He made his way through the forest. 他设法穿过了森林。

2. He suggests you leave here at once. 他建议你立刻离开这儿。

3. He was married to a friend of mine. 他和我的一个朋友结了婚。

4. He will blame you for carelessness. 他会责备你的粗心大意。

5. I can give you a number of excuses. 我可以给你说出很多韵理由。


贴了一篇,具体的还是给地址

http://qun.qq.com/1.1/77936032#bbs/

Thursday, March 5, 2009

python编码知识

事件
file1[utf-8]->file2[gbk],从file1读取的数据类型type(数据)是str类型
这时候,如果要将该数据以gbk编码写入file2,则需要作转换:
        var = unicode(var, 'uft-8').encode('gbk')
相反的需求:
        var = unicode(var, 'gbk').encode('uft-8') 
你也可以写个unicode检测信息
        # 检测,如果var不是unicode,则相应转换
        if not isinstance( var, unicode): 
            try:
                var = var. decode ("utf-8", 'ignore')
            except:
                var = var. decode ("gbk", 'ignore')
问题现象
(编码转换过程中经常会有以下的错误提示)
Errors: 'ascii' codec can't encode characters in position 26-27: ordinal not in range(128)
Errors: 'gbk' codec can't encode character u'\u036c' in position 26: illegal multibyte sequence
知识点
decode 解码,将指定的编码转换为unicode
格式:decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。
例子:
var. decode ("gbk") var为gbk编码,转为unicode. (同等式=unicode(var,"gbk"))
var. decode ("gbk", 'ignore') var为gbk编码,转为unicode. 忽略非法字符
encode 编码,将unicode解为指定的编码
var.encode('gbk')
如果两个编码需要转换,则:unicode(a, 'gbk').encode('utf-8')
先将gbk编码转为unicode,然后在转为utf-8
关键
你要清楚接收的数据原编码是啥,最终又是以什么目标编码存储。]
实例
命令行:cmd = E:\WorkDir\yusulian\2009\ver_manage\dirrepo\Case2\DubaRelease\2009\copysharedata.bat \\192.168.11.22 ysl ysl 版本\公测 20081104.13586 standard\beta
执行: os.system(cmd)
出错:
   File "getdata.py", line 61, in getdata
    os.system(cmd)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 114-117:
解决:
先把cmd转为unicode
if not isinstance( cmd, unicode): 
    try:
        cmd = cmd. decode ("utf-8")
    except:
        cmd = cmd. decode ("gbk")

执行的时候, 把cmd转为gbk/utf-8编码
os.system ( cmd. encode("gbk") )
或者
os.system ( cmd. encode("utf-8") )
相关资讯


The Regulator工具介绍

  今天不小心又用上了正则表达式,记得有段时间用得挺起劲,现都差点把它给忘了。
也记得,之前一直使用一个免安装的解析正则表达式的工具,现找不到了;然后不小心就装上RegulatorSetup.msi,这个有点复杂。引用下网上的介绍“The Regulator 就是其中的佼佼者(被列入MSDN上的知名文章《Ten Must-Have Tools Every Developer Should Download Now》)。The Regulator官方网站http://royo.is-a-geek.com/iserializable/regulator/”
   下面简单说下:



ps:小道消息,要学习正则表达式可以到网上找份资料,名叫“正则表达式30分钟入门教程.mht”

Wednesday, March 4, 2009

发布版本归档问题分析

  前段时间兴匆匆的定制了发布版本归档备份说明,大概的内容是发布版本有哪些类别/每个类别有哪些具体的版本/存储位置/存放的目录结构。当时就直接按照版本来划分目录结构了,即第一层是类别,第二层是具体的版本,第三层是对应的构建版本。今天在收集过往的版本时发现了一个问题。
  由于归档的版本要求除了安装包,其散文件也一样要存。那么,如果归档的发布版本与安装包与安装包的散文件不是一一对应关系,就会有个困惑:在归档的备份存储位置,N个版本共用的安装包散文件该如何存放呢,这时候就不是直接将构建版本拉到第三层就可以搞定的?想来想去,就是觉得当初定的结构一点也不适用了。
附加资料:
关系说明:
1. 归档版本[1]-安装包[1]-安装包散文件[1]
2. 归档版本[N]-安装包[N]-安装包散文件[1]
目录结构:
1. 构建版本的原始存放形式:
+ 20080304.100
| | - installfile 存放散文件
| | - package   存放安装包
| |  |- setup    存放特殊包
| |  |  |- A
| |  |  |- B
| |  |  |- C
| |  |  |- D
| |  |  |- E
2. 版本发布出去后存档形式:
+ 版本类别
| | - A 
| | - B   
| | - C 
| | - D   
| | - E 
改进方法:
1. 去掉第一层/第二层,直接以第三层形式存档,然后以记录形式来区分每个版本。(这是目前最优的方式),但这种方式也有一个缺陷:如果构建出来的所有版本并不是全部要发布的,那这时候是全部归档还是去掉不发布的版本呢?
2. 如果需要归类版本的话,那直接存储安装包就可以. 对应的散文件仍在构建版本存放的位置去取。(这是个人的理想方式,不过涉及的改进范围广)



Thursday, February 26, 2009

wget使用经验

使用wget命令,取远程数据,远程有几层目录,在本地就会跟着创建.
如,执行wget -c -r -np -nH ftp://192.168.11.10/public/yusulian/ysl/20090225
==>结果会在本地跟着创建public/yusulian/ysl/20090225
有一个--cut-dirs=NUMBER 参数,即忽略远程目录的层数,
1. 如果是手工执行的时候,你可以自觉的写上要忽略的层数
如,执行wget -c -r -np -nH --cut-dirs=3 ftp://192.168.11.10/public/yusulian/ysl/20090225
==>结果在本地只会创建20090225,把前三层忽略了.
2. 如果是想写脚本自动跑,由于不同的url,目录层级可能不同
你只能在脚本外层,除了初始化url,也需要加上每个url要忽略的目录层数

ps:误区
有人提醒说,把-cut-dirs设为10000,反正目录不为这么多
结果,试了一下才发现,这不是把子目录也给忽略掉了嘛.





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