SVN自动更新(纯SVN命令行)
点h文件
#ifndef WIDGET_H
#define WIDGET_H
#include
struct SVNPATH
{
QString dirSvnPath;
QString dirLocalPath;
};
class Widget : public QWidget
{
Q_OBJECT
public:
Widget( QWidget *parent = nullptr );
~Widget();
public slots:
void scanDir(); //扫描文件夹,判断是否有文件或目录存在
public:
void checkoutSvndata( QString svnPath, QString localPath ); //将SVN上的数据checkout到本地文件夹
int getSvnInfolog( QString localPath, QString svnpath, QString savePath ); //获取svn上目前的版本号
int getLocalnfolog( QString localPath, QString savePath ); //获取local目前的版本号
void getLocalDirlog( QString localPath, QString savePath ); //获取本地文件夹的log
void getSvnlog( QString localPath, QString svnPath, QString savePath ); //获取svn上面的log
void versionlogUpdate( QString savePath ); //比较两个文件的信息,将更改文件co下来
QStringList getLocalDirfile( QString localPath ); //获取本地文件夹信息
QStringList getSvnDirfile( QString localPath, QString svnPath ); //获取svn上文件夹信息
void deletFile( QStringList localList, QStringList svnList );
void downFile( QStringList localList, QStringList svnList );
void checkDirisNull( QString localPath ); //检查目录是否为空,为空则删除
//删除文件前3行
void DeleteOneline( int nNum, QString& strall );
void deleteOnelineInFile( int nNumLine, QString filename );
private:
QString localPath;
QString svnPath;
QString savePath;
};
#endif // WIDGET_H
=================================================
点cpp
#include “widget.h”
#include
#include
#include
#include
Widget::Widget( QWidget *parent )
: QWidget( parent )
{
localPath = “/data/SvnData/UpdateSvn/build/svndata”;
svnPath = “svn://192.168.3.89/svndata”;
savePath = “/data/SvnData/UpdateSvn/build/svndata”;
QTimer *timer = new QTimer();
connect( timer, &QTimer::timeout, this, &Widget::scanDir );
timer->start( 10000 );
}
Widget::~Widget()
{
}
void Widget::scanDir( /QString localPath/ )
{
QStringList Allnamedirlist; //读取最初路径时获取的文件夹列表
QString strPath = localPath;
QDir dir( strPath );
strPath = dir.fromNativeSeparators( strPath );
if( !dir.exists() )
{
Allnamedirlist = QStringList( "" );
}
dir.setFilter( QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot );
dir.setSorting( QDir::Name );
Allnamedirlist = dir.entryList();
if( Allnamedirlist.isEmpty() )
{
qDebug() << "The dir is empty!!";
checkoutSvndata( svnPath, localPath );
}
else
{
qDebug() << "The dir is not empty!!";
if( getLocalnfolog( localPath, savePath ) == getSvnInfolog( localPath, svnPath, savePath ) )
{
qDebug() << "The version number information is consistent,There is no need to do anything";
QStringList localFileList = getLocalDirfile( localPath );
QStringList svnFileList = getSvnDirfile( localPath, svnPath );
deletFile( localFileList, svnFileList ); //删除本地上 svn没有的文件
downFile( localFileList, svnFileList ); //下载本地没有的文件
checkDirisNull( localPath ); //删除空目录
checkDirisNull( localPath );
checkDirisNull( localPath );
checkDirisNull( localPath );
}
else if( getLocalnfolog( localPath, savePath ) < getSvnInfolog( localPath, svnPath, savePath ) )
{
//读取log文件,查看更改信息,然后更新相关文件
getSvnlog( localPath, svnPath, savePath ); //获取svn的日志文件,存储在本地
versionlogUpdate( savePath ); //根据log的改变,进行更新或删除
QStringList localFileList = getLocalDirfile( localPath );
QStringList svnFileList = getSvnDirfile( localPath, svnPath );
deletFile( localFileList, svnFileList ); //删除本地上 svn没有的文件
downFile( localFileList, svnFileList ); //下载本地没有的文件
checkDirisNull( localPath ); //删除空目录
checkDirisNull( localPath );
checkDirisNull( localPath );
checkDirisNull( localPath );
}
}
}</