Как получить указанный c тип коммитов от некоторой указанной c даты до текущей даты, используя JGit - PullRequest
0 голосов
/ 30 марта 2020

используя J Git framework, я хотел бы собрать список коммитов с некоторым конкретным c сообщением коммита, например, коммитами, начинающимися с шаблона "[EA-" с диапазона дат, например с 24.01.2018 по текущую дату как в git, git log --since = 2018-01-24 --until = 2020-03.30 --grep = [EA-. Я пробовал что-то, как показано ниже:

    String path = "C:/path_to_repo";
    FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();
    Repository repo = repositoryBuilder.setGitDir(new File(path, ".git")).findGitDir().build();
    Git git = new Git(repo);
    ObjectId start;
    ObjectId end;
    Iterable<RevCommit> call = git.log().addRange(start, end).call();

Это правильно, чтобы сделать это таким образом? Во-вторых, как я могу передать правильные параметры в метод addRange ()?

1 Ответ

1 голос
/ 30 марта 2020
Команда

J Git log не поддерживает фильтрацию диапазонов дат и шаблонов сообщений.

Вам нужно будет использовать RevWalk для ручного просмотра истории. Фильтры могут быть добавлены для ограничения полученных коммитов. Используйте CommitTimeRevFilter.between(since, until), чтобы ограничить коммиты желаемым диапазоном дат.

Для дальнейшей фильтрации определенных сообщений или выбора подходящих сообщений во время перебора коммитов RevWalk.

Вот Пример для начала работы:

try (RevWalk walk = new RevWalk(repo)) {
  walk.markStart(walk.parseCommit(repo.resolve(Constants.HEAD)));
  walk.sort(RevSort.REVERSE);
  walk.setRevFilter(CommitTimeRevFilter.between(since, until));
  for(RevCommit commit : walk) {
    if (commit.getFullMessage().contains(...)) {
      // include commit in result
    }
  }
}

В качестве альтернативы вы можете расширить RevFilter, чтобы написать собственный фильтр сообщений, и использовать AndRevFilter, чтобы объединить этот фильтр с фильтром диапазона дат.

См. Также вопросы об использовании фильтров фиксации в J Git:

...