public class SVNOperationServiceBean implements SVNOperationService
{
private final DataVoiceLogger logger = DataVoiceLogFactory.getLogger(getClass());
private SVNRepository repository = null;
@PostConstruct
public void initSVNOperationService()
{
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();
}
public void login(String username, String password, String url)
throws Exception
{
password = new String(Base64.decode(password.getBytes()));
this.repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username,
password);
this.repository.setAuthenticationManager(authManager);
testConnection();
}
private void testConnection() throws SVNException
{
this.repository.testConnection();
}
@Override
public boolean testRepositoryConnected(SvnConfigInfo conf)
{
boolean isSucceed = false;
try
{
login(conf.getUserAccount(), conf.getUserPassword(), conf.getConfigCodePath());
String[] codepath = getCodePaths(conf.getConfigCodePath());
SVNDirEntry dir = getTargetInfo(codepath[0], -1);
if (dir != null)
{
isSucceed = true;
logger.info(conf.getConfigCodePath() + " testlogin success ");
}
}
catch (SVNAuthenticationException e)
{
logger.error("login error" + e.getMessage());
}
catch (Exception e)
{
logger.error(e.getMessage());
}
return isSucceed;
}
public SVNDirEntry getTargetInfo(String path, long revision)
{
SVNDirEntry collect = null;
try
{
collect = this.repository.info(path, revision);
}
catch (SVNException e)
{
collect = null;
logger.error(e.getMessage());
}
return collect;
}
public List<SVNLogEntry> getSVNLog(long startRevision, long endRevision,
String[] codePaths)
{
List<SVNLogEntry> entries = new ArrayList<SVNLogEntry>();
try
{
this.repository.log(codePaths,
entries,
startRevision,
endRevision,
true,
true);
}
catch (SVNException e)
{
logger.error(e.getMessage());
}
return entries;
}
public SvnLogFileInfo getLastFileRevision(SvnLogFileInfo fInfo)
{
SvnLogFileInfo fileInfo = null;
List<SVNFileRevision> s = new ArrayList<SVNFileRevision>();
int index = -2;
try
{
this.repository.getFileRevisions(fInfo.getFilename(), s, 0, fInfo.getRevision());
}
catch (SVNException e)
{
logger.error(e.getMessage());
}
index = s.size() + index;
if (index >= 0)
{
SVNFileRevision revision = s.get(index);
fileInfo = new SvnLogFileInfo();
fileInfo.setFilename(revision.getPath(),this.getRepositoryType());
fileInfo.setRevision(revision.getRevision());
}
return fileInfo;
}
public boolean copyFile(String workspace, String type, SvnLogFileInfo fileInfo)
{
FileOutputStream fo = null;
boolean isSuccess = false;
try
{
SVNProperties pro = new SVNProperties();
File file = new File(workspace + "\\" + type + "\\" + fileInfo.getShortFileName());
fo = new FileOutputStream(file);
try
{
this.repository.getFile(fileInfo.getFilename(), fileInfo.getRevision(), pro, fo);
}
catch (SVNException e)
{
logger.error("query the file "+fileInfo.getShortFileName()+"'info from repository, but file copy failed!");
}
fo.close();
isSuccess = true;
}
catch (Exception e)
{
logger.error(e.getMessage());
}
finally
{
try
{
if (fo != null)
{
fo.close();
}
}
catch (IOException e)
{
logger.error(e.getMessage());
}
}
return isSuccess;
}
public long getLatestRevision()
{
long lastRevision = 0;
try
{
lastRevision = this.repository.getLatestRevision();
}
catch (SVNException e)
{
logger.error("Lastest revision of this repository is not exists!");
}
return lastRevision;
}
public String getSvnRoot()
{
SVNURL url = null;
try
{
url = this.repository.getRepositoryRoot(false);
return url.getPath();
}
catch (SVNException e)
{
e.printStackTrace();
logger.error("You have no right get this repository root url !!!");
}
return null;
}
public String[] getCodePaths(String url)
{
String codepath = getSvnRoot();
int homeIndex = url.indexOf(codepath);
return new String[] { url.substring(homeIndex + codepath.length()) };
}
@Override
public String getRepositoryType() {
return RepositoryOperation.IREP_TYPE_SVN;
}
}
分享到:
相关推荐
安装完成后,你可以开始编写代码来获取SVN信息。首先,创建一个`SVNClientManager`实例,这是SVNKit的核心类,它提供了对各种SVN操作的支持: ```java import org.tmatesoft.svn.core.SVNClientManager; import org...
利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...
`doCheckout()`方法用于从SVN仓库获取最新代码到本地,`doUpdate()`用于更新本地代码到最新的仓库版本,而`doCommit()`则用于将本地更改提交回仓库。 需要注意的是,在进行SVN操作时,你可能需要配置用户名和密码,...
本主题聚焦于如何利用Ant与XMLTask jar包来获取SVN(Subversion)版本信息。下面将详细介绍这个过程以及相关知识点。 首先,了解Ant。Ant是一个基于Java的构建工具,它提供了跨平台的构建脚本能力,能够执行编译、...
### SVNKit Java操作SVN详解 #### 一、SVN快速入门 SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和追踪多个开发者共享的文件变更。本文将详细介绍如何使用SVNKit进行SVN的基本操作,包括上传、下载、...
需要svnkit 使用方法 SVNUtil.getHistoryByDate("https://127.0.0.1:8443/svn/Test/mytestprotect/", "username", "password"); 如果jar 在我的其它资源里
6. **Status**:获取文件或目录的状态信息,如是否被修改、新增或删除。 三、源码软件 SVNKit是开源的,这意味着你可以访问其源代码,理解其工作原理,甚至根据项目需求进行定制。这对于调试、优化或者扩展功能非常...
Java调用SVNKit是为了在Java程序中集成Subversion(SVN)版本控制系统的能力。SVNKit是一个纯Java实现的Subversion库,允许开发者在Java应用中执行各种SVN操作,如检出、提交、更新、回滚等。以下是对标题和描述中所...
1. **获取日志信息**:查询特定文件或目录的变更历史,包括每次提交的作者、日期、修改描述等。 2. **遍历日志条目**:通过API迭代所有日志条目,进行分析或展示。 3. **搜索日志**:根据关键词、作者或日期范围...
通过这个示例项目,开发者可以学习如何在 Java 应用中使用 SVNKit 进行版本控制操作,例如如何连接到 SVN 服务器,如何查询版本信息,如何执行 CRUD(创建、读取、更新、删除)操作,以及如何将这些信息格式化为 ...
虽然描述部分为空,但我们可以通过提供的博客链接获取更详细的信息。在这个博客中,作者可能会详细介绍如何利用SVNKit来开发这个工具,包括但不限于设置环境、理解SVNKit的基本API、如何检测文件的改动、如何实现...
使用类SVNRepository可以检查一个subversion仓库中是否存在制定的文件(SVNRepository.checkPath)、获取一个 ISVNEdirot向subversion仓库中commit(SVNRepository.getCommitEditor)等等。 PS: 有两个使用svnkit...
以下是一个简单的示例,展示如何使用SvnKit登录SVN仓库并获取版本信息: ```java import org.tmatesoft.svn.core.*; import org.tmatesoft.svn.core.auth.*; import org.tmatesoft.svn.core.wc.*; public class ...
3. **检查版本**:使用`SVNInfo`对象获取文件或目录的版本信息,包括版本号、作者、日期等。 4. **添加文件到仓库**:调用`SVNWCUtil.createDefaultOptions`配置选项,然后使用`SVNCommitClient.doAdd`方法将本地...
`SVNInfo`类用于获取文件或目录的版本信息,`SVNRevision`表示版本号,`SVNProperties`则用于处理属性。 6. **注意事项** - 在实际应用中,需要正确处理异常,确保与SVN服务器的通信顺利。 - 考虑性能优化,避免...
SVNKit是一个强大的Java库,它实现了Subversion(SVN)客户端功能,允许开发者在Java应用程序中集成版本控制系统。SVNKit提供了丰富的API,用于执行常见的SVN操作,如检查、更新、提交、合并和分支等。这个"svnkit的...
- 版本控制:通过API可以获取SVN仓库的版本信息,包括每个文件和目录的历史版本。 - 提交和更新:允许开发者提交代码更改到仓库,并从仓库获取最新的代码更新。 - 差异和合并:提供代码差异对比和多版本间的合并...
- SVNKit提供了获取文件或目录历史版本的能力,包括版本号、作者、日期和提交信息。 - 可以比较不同版本之间的差异,这对于查看历史变更非常有用。 7. 连接管理: - SVNKit支持多种连接方式,包括HTTP(S)、SVN(S...
以下是一个基本示例,展示如何使用SVNKit 1.10.0获取SVN仓库的日志: ```java import com.tmatesoft.svn.core.*; import com.tmatesoft.svn.core.wc.*; import com.tmatesoft.svn.core.io.*; import ...
例如,Subversive的特性文件可能包含与SVN连接、版本控制操作等相关的信息。 "plugins"目录则是实际的插件实现,包含了插件运行所需的Java类和其他资源。在Eclipse中安装插件时,这些文件会被复制到Eclipse的安装...