Проблема с журналом коммитов SVN

В настоящее время я работаю над проектом о расчетах. Я выполнил основную часть своего проекта, а также интегрировал функцию SVN Commit в свой код (используя файл .ini для чтения определенного адреса и т. д.).

Я могу легко зафиксировать файлы, я пытаюсь реализовать журнал в реальном времени на своей консоли. Есть ли способ вывести журнал на консоль? Не общий журнал, а журнал фиксации, который должен быть в реальном времени.

  • Я использую eclipse для Mac, я слышал о SVNKit, но я очень плохо разбираюсь в SVN.

Заранее спасибо за любую информацию

--- РЕДАКТИРОВАТЬ ---

Это код для чтения команд svn из файла .ini.

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();
    }

person A. Mesut Konuklar    schedule 02.07.2012    source источник


Ответы (1)


Если я правильно понял ваш вопрос, вы хотите прочитать журнал фиксации 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();
  • directory - строка, указывающая на определенный каталог или модуль
  • lastRevision — наибольший номер версии из Subversion. Размещение lastRevision вторым в вызове метода журнала возвращает записи журнала в самом последнем порядке.

Если вы хотите, чтобы записи журнала располагались в последовательном порядке, от 1 до последней редакции, то 1L будет помещен на второе место, а последняя редакция — на третье.

  • репозиторий — репозиторий Subversion, который вы уже аутентифицировали.

Вот Логхандлер.

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);
        }
    }

}  
person Gilbert Le Blanc    schedule 02.07.2012
comment
Хороший ответ, я просто добавлю, что вы можете указать REVISION_LIMIT для метода log() напрямую. Тогда они не будут загружаться на сервер и трансформироваться по сети. Это может значительно ускорить вашу реализацию, если в репозитории много ревизий. - person Dmitry Pavlenko; 02.07.2012
comment
Большое спасибо! Это именно то, что мне нужно, и будет ли это так важно, если мы не укажем REVISION_LIMIT? Поскольку репозиторий, над которым я работаю, имеет МНОГО изменений - person A. Mesut Konuklar; 02.07.2012
comment
@Yesilmen: Нет, вам не нужно указывать предел редакции, если вы этого не хотите. В моем приложении мне нужны были только самые последние 5. Дмитрий, вы правы. Не помню зачем, но мне нужны были все ревизии какое-то время, потом я ограничил код до 5. Надо было поставить ограничение в методе handleLogEntry. - person Gilbert Le Blanc; 02.07.2012
comment
Большое спасибо, я очень ценю. Время учиться/неудачи/успеха :)) - person A. Mesut Konuklar; 02.07.2012
comment
Еще один вопрос, я использую svnAdresi = IniFonksiyon.iniSVNOkut(svnAdresi, svnAdresi, svnAdresiniAl); Время выполнения cmdCalistir = Runtime.getRuntime(); попробуйте { Process islem = cmdCalistir.exec(svnAdresi); } catch (Исключение e) { e.printStackTrace(); } для фиксации. Могу ли я интегрировать с ним журнал? - person A. Mesut Konuklar; 02.07.2012
comment
@Yesilmen: я понятия не имею, что делает cmdCalistr. - person Gilbert Le Blanc; 02.07.2012
comment
Ах, простите мою ошибку. Позвольте мне добавить это как можно скорее :) Собираюсь добавить это к вопросу - person A. Mesut Konuklar; 02.07.2012