2012-07-02 130 views
1

我目前正在研究一个关于计算的项目。我已经完成了我项目的主要部分,还将SVN提交功能集成到了我的代码中(使用.ini文件读取特定地址等)SVN提交日志问题

我可以很容易地提交文件,我正在尝试的是我想实现实时日志到我的控制台。有没有办法将日志实现到控制台?不是一般的日志,而是应该是实时的提交日志。

  • 我使用eclipse for mac,我听说过关于SVNKit,但我对SVN很差。

预先感谢任何信息

---编辑---

这是代码从.ini文件读取SVN命令

public static String iniSVNOkut(String deger, String getObje, String fetchObje){ 

     Ini uzantilariAlIni = null; 

     try 
     { 
      String uzantiAyarlari = "Uzantilar.ini";  

      try 
      { 
       uzantilariAlIni = new Ini(new FileReader(uzantiAyarlari)); 
      } 
      catch (InvalidFileFormatException e) 
      { 
       System.err.print("Hata InvalidFileFormat : " + e.getMessage() + "\n"); 
       e.printStackTrace(); 
      } 
      catch(FileNotFoundException e) 
      { 
       System.err.print("Hata FileNotFoundException : " + e.getMessage() + "\n"); 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       System.err.print("Hata IOException : " + e.getMessage() + "\n"); 
       e.printStackTrace(); 
      } 
     return deger = uzantilariAlIni.get(getObje).fetch(fetchObje); 


     } 
     finally 
     { 

     } 

    } 

这是什么.ini包含

[svnAdresi] 
svnAdresiniAl = svn co http://svn.svnkit.com/repos/svnkit/trunk/ /Users/sample/Documents/workspace/SatirHesaplaGUI/svnTestMAC 

这就是我称之为

String svnAdresi; 
     svnAdresi = IniFonksiyon.iniSVNOkut(svnAdresi, "svnAdresi", "svnAdresiniAl"); 
    Runtime cmdCalistir = Runtime.getRuntime(); 

    try 
    { 
     Process islem = cmdCalistir.exec(svnAdresi); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

回答

2

如果我正确理解你的问题,你想读取Subversion提交日志到你的控制台应用程序。

最简单的方法是使用SVNKit

下面是我做到的。

private static List<SVNLogEntry> logEntryList; 

    /* 
    * Gets the Subversion log records for the directory 
    */ 
    LogHandler handler = new LogHandler(); 
    String[] paths = { directory }; 
    try { 
     repository.log(paths, latestRevision, 1L, false, true, handler); 
    } catch (SVNException svne) { 
     if (svne.getMessage().contains("not found")) { 
      logEntryList = new ArrayList<SVNLogEntry>(); 
     } else { 
      CobolSupportLog.logError(
        "Error while fetching the repository history: " 
          + svne.getMessage(), svne); 
      return false; 
     } 
    } 

    logEntryList = handler.getLogEntries(); 
  • 目录 - 字符串指向一个特定的目录或模块
  • latestRevision - 从Subversion最大的版本号。在日志方法调用中放置latestRevision秒会以最近的顺序返回日志记录。

如果您想按顺序排列从1到latestRevision的日志记录,那么1L将放在第二位,而latestRevision将放在第三位。

  • 存储库 - 您已经验证的Subversion存储库。

这里是LogHandler。

public class LogHandler implements ISVNLogEntryHandler { 

    protected static final int REVISION_LIMIT = 5; 

    protected List<SVNLogEntry> logEntryList; 

    public LogHandler() { 
     logEntryList = new ArrayList<SVNLogEntry>(); 
    } 

    public void handleLogEntry(SVNLogEntry logEntry) throws SVNException { 
     logEntryList.add(logEntry); 
    } 

    public List<SVNLogEntry> getLogEntries() { 
     if (logEntryList.size() <= REVISION_LIMIT) { 
      return logEntryList; 
     } else { 
      return logEntryList.subList(0, REVISION_LIMIT); 
     } 
    } 

} 
+1

好的答案,我只是补充一点,您可以指定REVISION_LIMIT直接登录()方法。然后他们不会被加载到服务器上并通过网络进行转换。如果存储库有很多修订,这可能会显着加快您的实现。 –

+0

非常感谢!那正是我所需要的,如果我们不指定REVISION_LIMIT,那么它有多重要?由于我正在处理的存储库有很多修订 –

+0

@ Yesilmen:不,如果您不想指定修订限制,则不必指定修订限制。在我的应用程序中,我只需要最近的5.对德米特里来说,你是对的。我不记得为什么,但我需要一段时间的所有修订,然后我将代码限制为5.我应该把限制放在handleLogEntry方法中。 –