使用svnClientAdapter程式設計控制上傳下載已經實現
public class SvnClientUtil {
private SvnConfig config;
private ISVNClientAdapter svnClient;
private SvnClientUtil(){}
public SvnClientUtil(SvnConfig config)throws SVNClientException{
this.config = config;
getClient();
}
/**
* 本地路徑轉為svn路徑
* @param file 本地路徑檔案
* @return SVNUrl
*/
public SVNUrl localPath2SVNUrl(File file) throws MalformedURLException{
String absltPath = file.getAbsolutePath();
absltPath = absltPath.replaceAll("//", "/");
String tmpPath = this.config.getRootDir().replaceAll("//", "/");
absltPath = absltPath.replaceAll(tmpPath, "");
return new SVNUrl(this.config.getRootUrl() + absltPath);
}
/**
* checkout from svn server
* @param moduleName svnserver 上的URL
* @param destPath 本地目標路徑
* @param revision 版本
* @param recurse 是否遞迴
* @throws SVNClientException
*/
public void checkOut(
SVNUrl moduleName,
File destPath,
SVNRevision revision,
boolean recurse)throws SVNClientException{
this.svnClient.checkout(moduleName, destPath, revision, recurse);
}
/**
* 新增檔案到svn
* @param file 待新增的File
* @param url 新增到的SVNUrl
* @param message 備註(必須有中文)
* @throws SVNClientException
*/
public void add(File file,SVNUrl url,String message)throws SVNClientException{
this.svnClient.addFile(file);
File [] paths = new File[]{file};
this.svnClient.commit(paths, message, false);
}
/**
* 新增目錄
* @param dir 目錄File
* @param message 備註(中文)
* @param recurse 是否遞迴
* @throws SVNClientException
*/
public void addDir(File dir, String message,boolean recurse)throws SVNClientException{
this.svnClient.addDirectory(dir, recurse);
File [] paths = new File[]{dir};
this.svnClient.commit(paths, message, recurse);
}
/**
* 獲得某版本的內容
* @param url svnURL
* @param revision 版本號
* @return InputStream
* @throws SVNClientException
*/
public InputStream getHistoryContent(SVNUrl url, SVNRevision revision)throws SVNClientException{
return this.svnClient.getContent(url, revision);
}
/**
* 提交
* @param path 提交的檔案
* @param message 備註(必須含中文)
* @throws SVNClientException
*/
public void commit(File path, String message)throws SVNClientException{
File [] paths = new File[]{path};
this.svnClient.commit(paths, message, false);
}
/**
* 刪除
* @param url 刪除檔案的URL
* @param message 備註(必須含中文)
* @throws SVNClientException
*/
public void delete(SVNUrl url,String message)throws SVNClientException{
SVNUrl[] urls = new SVNUrl[]{url};
this.svnClient.remove(urls, message);
}
/**
* 獲取歷史紀錄
* @param url 檔案對應的svn url
* @return ISVNLogMessage[]
* @throws SVNClientException
*/
public ISVNLogMessage[] getHistory(SVNUrl url)throws SVNClientException{
return this.svnClient.getLogMessages(url, SVNRevision.START, SVNRevision.HEAD);
}
/**
* 復原為某一個版本
* @param path 路徑
* @param revision 版本號
* @param recurse 是否遞迴
* @throws SVNClientException
*/
public void update(File path, SVNRevision revision, boolean recurse)throws SVNClientException{
this.svnClient.update(path, revision, recurse);
}
public SvnConfig getConfig() {
return config;
}
public void setup() {
try {
JhlClientAdapterFactory.setup();
} catch (SVNClientException e) {
// can't register this factory
}
try {
CmdLineClientAdapterFactory.setup();
} catch (SVNClientException e1) {
// can't register this factory
}
try {
SvnKitClientAdapterFactory.setup();
} catch (SVNClientException e1) {
// can't register this factory
}
}
public void getClient() throws SVNClientException{
setup();
try {
String bestClientType = SVNClientAdapterFactory.getPreferredSVNClientType();
System.out.println("Using "+bestClientType+" factory");
svnClient = SVNClientAdapterFactory.createSVNClient(bestClientType);
} catch (SVNClientException e) {
System.out.println(e.getMessage());
throw e;
}
// set username and password if necessary
svnClient.setUsername(this.config.getSvnUser());
svnClient.setPassword(this.config.getSvnPwd());
// add a listener if you wish
NotifyListener listener = new SvnClientUtil.NotifyListener();
svnClient.addNotifyListener(listener);
//初始化工作目錄
SVNUrl moduleName;
File destPath = new File(this.config.getRootDir());
try{
if(!destPath.exists()){
destPath.mkdirs();
System.out.println("create local SVN work space!");
}
moduleName = new SVNUrl(this.config.getRootUrl());
System.out.println("update SVN work space from server!");
this.checkOut(moduleName, destPath, SVNRevision.HEAD, true);
}catch(Exception e){
System.out.println("update SVN work space from server fail!");
e.printStackTrace();
throw new SVNClientException(e);
}
}
public static class NotifyListener implements ISVNNotifyListener {
public void setCommand(int cmd) {
// the command that is being executed. See ISVNNotifyListener.Command
// ISVNNotifyListener.Command.ADD for example
}
public void logMessage(String message) {
System.out.println(message);
}
public void logCommandLine(String message) {
// the command line used
System.out.println(message);
}
public void logError(String message) {
// when an error occurs
System.out.println("error :" +message);
}
public void logRevision(long revision, String path) {
// when command completes against revision
System.out.println("revision :" +revision);
}
public void logCompleted(String message) {
// when command completed
System.out.println(message);
}
public void onNotify(File path, SVNNodeKind nodeKind) {
// each time the status of a file or directory changes (file added, reverted ...)
// nodeKind is SVNNodeKind.FILE or SVNNodeKind.DIR
// this is the function we use in subclipse to know which files need to be refreshed
System.out.println("Status of "+path.toString()+" has changed");
}
}
}
相關文章
- JavaWeb之實現檔案上傳與下載控制元件JavaWeb控制元件
- React中使用fetch實現檔案上傳下載React
- Feign實現檔案上傳下載
- SpringMVC實現檔案上傳&下載(2)SpringMVC
- 使用Vue+go實現前後端檔案的上傳下載,csv檔案上傳下載可直接照搬VueGo後端
- 前端實現檔案下載和拖拽上傳前端
- vue實現Excel檔案的上傳與下載VueExcel
- JavaWeb之實現檔案上傳與下載工具JavaWeb
- JavaWeb之實現檔案上傳與下載元件JavaWeb元件
- JavaWeb之實現檔案上傳與下載示例JavaWeb
- 使用SecureCRT上傳下載檔案Securecrt
- 教你如何實現c#檔案上傳下載功能C#
- JavaWeb之實現檔案上傳與下載外掛JavaWeb
- JavaWeb之實現檔案上傳與下載原始碼JavaWeb原始碼
- JavaWeb之實現檔案上傳與下載例項JavaWeb
- element對上傳元件二次封裝,vue上傳下載元件的實現元件封裝Vue
- xshell 使用 sftp上傳下載檔案FTP
- JAVA併發程式設計實踐 下載Java程式設計
- Spring 對檔案上傳下載的支援(Spring boot實現)Spring Boot
- 純前端表格控制元件SpreadJS與Java結合,實現模板上傳和下載等功能前端控制元件JSJava
- servlet上傳下載Servlet
- ftp上傳工具下載,ftp上傳工具下載使用教程,Linux如何配置ftp伺服器?FTPLinux伺服器
- 檔案上傳/下載後臺程式碼
- 哪裡可以下載Mac上最好用的前端設計軟體?Zeplin已經上線!Mac前端
- 使用Spring實現上傳檔案Spring
- golang版supervisor 已經線上上使用Golang
- 檔案上傳下載
- mac下iterm2使用rz和sz上傳下載Mac
- 實現簡單的csv檔案上傳和bootstrap表格的下載boot
- 使用Flask-Dropzone在Flask程式中實現檔案上傳Flask
- 如何實現歐姆龍PLC的線上程式設計和遠端上下載程式設計
- “Lunar Lobster “現已經可以下載
- 《上載新生》設計的“數字永生”,可以實現嗎?
- C++程式設計_簡易計時器(Timer)的控制檯實現C++程式設計
- 使用 canvas 繪製圖片,然後下載、上傳Canvas
- [python網路程式設計]檔案上傳Python程式設計
- JAVA檔案上傳下載Java
- springboot 檔案上傳下載Spring Boot