Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2019, 17:32   #1
AntonCH
Пользователь
 
Регистрация: 28.11.2017
Сообщений: 58
По умолчанию простой парсер лога для гит. я так понимаю что git.log().call(); читает лог для всех веток. или только для master? нужно считывать все коммиты для всех веток

Библиотека JGit

пишу простой парсер лога для гит. я так понимаю что git.log().call(); читает лог для всех веток. или только для master? нужно считывать все коммиты для всех веток и распределять их по определенным правилам, записывая в файл.
Код:
package git.tools.gitparser;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;


public class parseThread implements Runnable {
    final private String gitpath;
    final int TIME_REFRESH = 10000;
    
    public parseThread(String gitpath){
        this.gitpath = gitpath;
    }
    
    @Override
    public void run() {
        BufferedWriter output = null;
        try {
            
            int P = 0, F = 0, B = 0, BLD = 678;
            String template1 = "^!|^fix|^#|^refactor";
            String template2 = "^\\+|^add|^\\-|^remove|^\\*|^change";
            List<String> strToLog = new ArrayList<>();
            
            try (Repository existingRepo = new FileRepositoryBuilder()
                    .setGitDir(new File(gitpath))
                    .build();){
                
                try(Git git = new Git(existingRepo)){
                    while(true){
                    Iterable<RevCommit> logs = git.log().call();
                    
                    for (RevCommit rev : logs) {
                        
                        if(checkWithRegExp(rev.getShortMessage(), template1))
                        {
                            B++;
                            strToLog.add(P+"."+F+"."+B+"."+BLD+" - "+rev.getFullMessage());
                        }
                        else if(checkWithRegExp(rev.getShortMessage(), template2))
                        {
                            F++;
                            B = 0;
                            strToLog.add(P+"."+F+"."+B+"."+BLD+" - "+rev.getFullMessage());
                        }
                    }
                    saveToFile(strToLog);
                    Thread.sleep(TIME_REFRESH);
                    }
                } catch (GitAPIException ex) {
                    Logger.getLogger(gitLogMain.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InterruptedException ex) {
                    Logger.getLogger(parseThread.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (IOException ex) {
                Logger.getLogger(gitLogMain.class.getName()).log(Level.SEVERE, null, ex);
            }            
        } finally {
            try {
                output.close();
            } catch (IOException ex) {
                Logger.getLogger(gitLogMain.class.getName()).log(Level.SEVERE, null, ex);
            }
        }   
    }
    
    private static boolean checkWithRegExp(String userNameString, String template){  
        Pattern p = Pattern.compile(template);  
        Matcher m = p.matcher(userNameString);  
        return m.matches();  
    }
    
    private void saveToFile(List<String> strToLog) throws IOException{
        synchronized(this){
        try (BufferedWriter output = new BufferedWriter(new FileWriter("changelog.txt",true))) {
            for(String str : strToLog.toArray(new String[strToLog.size()]))
                output.append(str + System.getProperty("line.separator"));
            output.flush();
        }}
    }
}
AntonCH вне форума Ответить с цитированием
Старый 16.02.2019, 18:05   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://stackoverflow.com/a/31556992/964478
Цитата:
Код:
Repository repository = new FileRepository("/path/to/repository/.git");
String treeName = "refs/heads/master"; // tag or branch
for (RevCommit commit : git.log().add(repository.resolve(treeName)).call()) {
    System.out.println(commit.getName());
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан текст. Найти множество всех слов, которые встречаются во всех предло-жениях текста. Anton94.by Помощь студентам 1 31.03.2014 15:30
Не понимаю как работает CALL Bizunov SQL, базы данных 0 04.06.2013 11:29
восстановление веток реестра ответственных за скрытые папки(Hidden && SuperHidden) Пепел Феникса Операционные системы общие вопросы 2 26.03.2012 00:30
Кол-во записей в заголовках веток dbTreeView Aleks_www Общие вопросы Delphi 0 01.12.2010 08:44
Имена всех секций всех ini-файлов (DELPHI) Dj_SheLL Помощь студентам 7 10.10.2010 17:44