Windows SVN変更送信メール通知(JAVA実装)

7326 ワード

前にpythonの実装http://blog.csdn.net/wiker_yong/article/details/10334967がありました
 
1,新規ファイルpost-commit.bat
内容:
rem REPOS-PATH (the path to this repository)
set REPOS=%1
rem REV (the number of the revision just committed)
set REV=%2

set HOOK_DIR=F:/Repositories/    /hooks
java -jar %HOOK_DIR%/SendMail.jar %REPOS% %REV%

F:/Repositories/バージョンライブラリ名/hooksの下に置く(特定のパスによって異なり、ここでは参照のみ)
2,SVNSendMail.java
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author Wiker Yong Email:<a href="mailto:[email protected]">[email protected]</a>
 * @date 2013-8-27   10:28:54
 * @version 1.0-SNAPSHOT
 */
public class SVNSendEmail {
    
    private static String VERSION = null;
    private static String REPOSITORIES = null;
    private static String SVNLOOK_BIN_PATH = "C:/Program Files/VisualSVN Server/bin/svnlook.exe";  //VisualSVN Server    
    
    private static String emailSubject = "SVN     "; //    
    
    public static void main(String[] args) {
        REPOSITORIES = args[0];
        VERSION = args[1];
        
        StringBuffer emailContent = new StringBuffer();
        emailContent.append("<html> <h2 style=\"color:#FFFFFF; background: #008040;\">    </h2>");
        emailContent.append("<div> <b>   :</b> <a href=\"http://blog.csdn.net/wiker_yong\">"
                + REPOSITORIES + "</a> </div>");
        emailContent.append("<div> <b>   :</b>" + VERSION + " </div>");
        emailContent.append(" <div> <b>   :</b>" + getAuthor() + " </div>");
        emailContent.append("<div> <b>    :</b>" + getDate() + " </div>");
        emailContent.append("<h2 style=\"color:#FFFFFF; background: #4682B4;\">    </h2>");
        emailContent.append("<font size=\"4\" color=\"#BF6000\"><xmp>" + getLog() + "</xmp></font>");
        emailContent.append("<h2 style=\"color:#FFFFFF; background: #5353A8;\">    </h2>");
        emailContent.append("<xmp>" + getChangeList() + "</xmp> <hr>");
        emailContent.append("<center> ☆ Powered by <a href=\"http://blog.csdn.net/wiker_yong\">Wiker Yong</a> </center> </html>");
        
        MailUtils mail = new MailUtils();
        mail.setSubject(emailSubject);
        mail.setContent(emailContent.toString());
        mail.sendMail();
    }
    
    public static String getRepoName() {
        return REPOSITORIES;
    }
    
    public static String getAuthor() {
        try {
            String[] cmd = {
                SVNLOOK_BIN_PATH, "author", "-r", VERSION, REPOSITORIES
            };
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String output = "";
            String returnStr = "";
            while ((output = stdout.readLine()) != null) { //   bat    .   bat      
                System.out.println(output); //   exe     
                returnStr += output;
            }
            return returnStr;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    
    public static String getDate() {
        try {
            String[] cmd = {
                SVNLOOK_BIN_PATH, "date", "-r", VERSION, REPOSITORIES
            };
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String output = "";
            String returnStr = "";
            while ((output = stdout.readLine()) != null) { //   bat    .   bat      
                System.out.println(output); //   exe     
                returnStr += output;
            }
            return returnStr;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    
    public static String getLog() {
        try {
            String[] cmd = {
                SVNLOOK_BIN_PATH, "log", "-r", VERSION, REPOSITORIES
            };
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String output = "";
            String returnStr = "";
            while ((output = stdout.readLine()) != null) { //   bat    .   bat      
                System.out.println(output); //   exe     
                returnStr += output;
            }
            return returnStr;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    
    public static String getChangeList() {
        try {
            String[] cmd = {
                SVNLOOK_BIN_PATH, "changed", "-r", VERSION, REPOSITORIES
            };
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String output = "";
            String returnStr = "";
            while ((output = stdout.readLine()) != null) { //   bat    .   bat      
                System.out.println(output); //   exe     
                returnStr += output;
            }
            return returnStr;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

同様にF:/Repositories/バージョンライブラリ名/hooksでファイルのコミットをテストできます.効果は次のとおりです.
 
Windows SVN变更发送邮件通知(JAVA实现)_第1张图片
ソースコードダウンロード地下(関連classと参照jarパッケージを含む.ポイントフリー):http://download.csdn.net/detail/yangwei19680827/6018571