从SVN一键对比版本
公司的部署程序太多,每次部署安装完后,还得从SVN上对比版本,手工做实在太麻烦。
比如下面的一个版本

思路:
将需要检查的部件及安装的位置、SVN相关信息写入配置文件,然后程序读取配置文件
配置文件内容如下:
[server1]
ipaddr=192.168.3.2
password=qqqqq
port=
dir=/home/gx/ ----##部件按装的位置
compent=sc,cag,ghomeAgent,IfTImg,Stream,TransDownload ---###服务器上安装的部件 [Server2]
ipaddr=192.168.14.31
password=qqqqq
port=
dir=/home/gx/
compent=bms,bussinessAgent [SVN]
svnserver=192.168.3.185
user=nenenen
password=xxxx
url=http://192.168.3.185/TM/VS/VSP/04_Build
~
因设计到公司内部的产品,代码屏蔽了一些东西:
#!/usr/bin/python
#coding:utf-8
import paramiko
import sys
import subprocess
import ConfigParser
import os,time
import re
import urllib2
from urlparse import urlparse
import unittest #从SVN获取组件及版本号
class snvparser(): aa={}
def __init__(self,url,server,user,passwd): auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='TM Repository',
uri=server,
user=user,
passwd=passwd)
self.opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(self.opener)
self.url=url #print self.url
a=self.opener.open(self.url)
data=a.read()
patten='href="(\w*?)/"'
self.compentlist=re.findall(patten,data)
#print self.compentlist
if 'mvp' in "".join(self.compentlist) or 'GXVCP' in ''.join(self.compentlist):
urldd = urlparse(self.url)
result=urldd.path.split('/')[-1]
self.compentlist.sort(reverse=True)
#print self.compentlist
#print self.compentlist[0]
self.aa[result]=self.compentlist[0]
else:
for self.subb in self.compentlist:
#print self.subb
#print '-'*50
self.suburl=self.url+'/'+self.subb
#print self.suburl
self.openurl(self.suburl) def openurl(self,url):
#self.url=url
#print url
a=self.opener.open(url)
data=a.read()
patten='href="(\w*?)/"'
self.compentlist=re.findall(patten,data) if 'mvp' in "".join(self.compentlist) or 'GXVCP' in ''.join(self.compentlist):
urldd = urlparse(url)
result=urldd.path.split('/')[-1]
self.compentlist.sort(reverse=True)
# print self.compentlist
# print self.compentlist[0]
self.aa[result]=self.compentlist[0]
else:
for self.subb in self.compentlist:
#print self.subb
#print '-'*50
self.suburl=url+'/'+self.subb
#print self.suburl
self.openurl(self.suburl) def result(self):
return self.aa #配置文件判断及读取
config=ConfigParser.ConfigParser()
if not os.path.exists('config.ini'):
print "config.ini is not exists,please check it!!"
exit(-1) config.read('config.ini')
print "You want to check follow Component:"
print config.get('server1','compent')
print config.get('Server2','compent') #SSH远程操作函数
def ssh2(ip,pt,pw,us,comm):
try:
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port=int(pt),username=us,password=pw)
#for COMM in comm:
stdin,stdout,stderr = ssh.exec_command(comm)
print "The Installed Version is :",
read = stdout.read()
#print read
compi=re.compile('Implementation-Version:(.*)')
qq=re.search(compi,read).group(1)
#print '======================'
print "\033[36m %s \033[0m" % (qq.strip())
print '-'*30
ssh.close()
except Exception,e:
print "\033[36mError\033[0m is :",ip,e class testCheckVersion(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testVersion(self):
#self.assert(1==2)
pass if __name__ == '__main__':
#print config.sections()
server=config.get('SVN','svnserver')
user=config.get('SVN','user')
password=config.get('SVN','password')
url=config.get('SVN','url')
try: cc=snvparser(url,server,user,password)
result=cc.result()
except Exception,e:
print e
exit(-1)
#print result
#print '='*70 for section_name in config.sections():
if not section_name=='SVN':
print '='*70
configdd=dict(config.items(section_name))
#configdd=getconfig(section_name)
# print configdd
for compent in configdd['compent'].split(","):
try:
if compent=='sc' or compent=='bussinessAgent' or compent=='cag':
comm='cat %s%s-vcp/META-INF/MANIFEST.MF' % (configdd['dir'],compent)
print "The SVN \033[31m %-13s \033[0m Version is:" % compent ,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
if compent=='ghomeAgent':
comm='cat %s%s/META-INF/MANIFEST.MF' % (configdd['dir'],compent)
print "The SVN \033[31m %-13s \033[0m Version is:" % compent,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
if compent=='bms':
comm='cat %sbms/apache-tomcat-6.0.36/webapps/bms/META-INF/MANIFEST.MF' % configdd['dir']
print "The SVN \033[31m %-13s \033[0m Version is:" % compent,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
#if compent=='IfTImg' or compent=='Stream' or compent=='TransDownload':
#comm='ls /home/gx'
#print result except KeyError,e:
print "Please Check input !",e
except Exception,e:
print "Error",e
print '='*70
在写完程序后才发现,公司的SVN 命令太不规范,甚至单词也有拼错;目录安装也非常随意,查看版本方式多样花。一时没心情再将程序往下写了,有需要的可以根据实际情况更改
程序运行如下:
[root@localhost tools]# python checkVersion.py
['sc', 'bussinessAgent', 'cag', 'bms', 'ghomeAgent', 'server1', 'Server2']
======================================================================
sc
:: The Installed Version is: 'NoneType' object has no attribute 'group'
The SVN NESTEST Version is : GXVCP_sc_D10V200_alpha1
======================================================================
bussinessAgent
[Errno None] Unable to connect to port on or 192.168.14.31 --#服务器密码被更改了
The SVN NESTEST Version is : GXVCP_businessAgent_D10V200_alpha1
======================================================================
cag
:: The Installed Version is: 'NoneType' object has no attribute 'group' ---文件已改名了
The SVN NESTEST Version is : GXVCP_cag_D10V200_alpha1
======================================================================
bms
[Errno None] Unable to connect to port on or 192.168.14.31
The SVN NESTEST Version is : GXVCP_bms_D10V200_alpha1
======================================================================
ghomeAgent
:: The Installed Version is: GXVCP_ghomeAgent_D10V200_alpha1
------------------------------
The SVN NESTEST Version is : GXVCP_ghomeAgent_D10V200_alpha1
======================================================================
从SVN一键对比版本的更多相关文章
- svn还原到指定版本
svn还原到指定版本 1,选中文件夹,右健,show log 2,选中指定版本,右健,Revert to this revision 3,svn commit 4,ok
- svn回复历史版本的操作方法
svn恢复历史版本的操作方法svn update 保证最新svn log login.php 获得版本号svn diff -r 11026:11027 login.php 发现11027出问题svn ...
- 细说SVN集中式版本控制器
svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具.在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行. 如 ...
- SVN仓库连同版本信息迁移新服务器的步骤
SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bi ...
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
- SVN集中式版本控制器的安装、使用与常见问题汇总
SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...
- SVN源代码的版本控制系统使用简介
SVN是以个开放源代码的版本控制系统,当前最流行的版本控制系统,GIT是近段时间刚兴起的. 下面开始介绍如何安装也配置 1先下载或者从别的地方弄一个安装包(本人是64位的,32位的就用32位的安装包) ...
- SVN 集中式版本控制软件
简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...
- Linux svn 回滚版本库
Linux代码 svn up Index/ 然后找出要撤销的确切版本: Linux代码 svn log --limit 10 Index/tpl/css/global.css 根据log怀疑是 ...
随机推荐
- js学习笔记18----元素创建操作
1.父级.appendChild(新的元素) 从后面开始追加子元素. 2.父级.insertBefore(新的元素,被插入的元素) 在指定元素前面开始插入一个新元素. 兼容性:在ie下,如果第二个参数 ...
- loadrunner循环执行某个动作
1.action部分定义 int i; int count; 2. 打算循环的代码前代码如下: count=rand() % 8 +1; for(i=0;i<coun ...
- openfire User Service 和删除分组的方法
z4PstKlN 服务器-> 系统属性 plugin.userservice.enabled 值为 true 增加用户 9090/plugins/userService/userservice? ...
- AppendMenu函数添加菜单
这个函数添加新项目到指定菜单的末尾.你可以使用appendmenu指定内容,外观,和菜单项行为. BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT uID ...
- Spring 依赖注入(DI)的注解
Spring中想要使用注解进行依赖注入,需要进行如下配置: <beans xmlns="http://www.springframework.org/schema/beans" ...
- e683. 设置打印的方向
PrinterJob pjob = PrinterJob.getPrinterJob(); PageFormat pf = pjob.defaultPage(); if (portrait) { pf ...
- 多媒体开发之rtcp详解---rtcp数据包
http://www.360doc.com/content/13/0606/10/1317564_290865866.shtml http://blog.csdn.net/hrbeuwhw/artic ...
- linux下安装dovecot
Dovecot是一个开源的,为Linux/Unix-like系统提供IMAP,POP3服务的软件.主要是为了安全产生的,不管大小应用,Dovecot都是一个非常优秀的选择.它非常快,配置简单,不需要专 ...
- jquery日期插件datePicker
index.html <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equi ...
- jQuery页面刷新(局部、全部)问题分析
本文实例分两部分对jquery刷新问题进行介绍,第一部分介绍了呢页面局部刷新:第二部分介绍了页面全部刷新第一:页面局部刷新 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属 ...