Skip to content

Commit

Permalink
Issue #37: inject, invoke maven command, read file and clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
Luolc committed Jul 6, 2017
1 parent f924b17 commit e05140e
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2017 the original author or authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
////////////////////////////////////////////////////////////////////////////////

package com.github.checkstyle.regression.extract;

import java.io.File;
import java.io.IOException;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;

/**
* @author LuoLiangchen
*/
final class CheckstyleInjector {
static File generateExtractInfoFile(String repoPath, String branch)
throws IOException, GitAPIException {
checkoutToPrBranch(repoPath, branch);
moveInjectFilesToCheckstyleRepo(repoPath);
invokeMavenCommand(repoPath);
return null;
}

static void clearInjections() {
// clear the injected files and the generated info file
}

private static void invokeMavenCommand(String repoPath) {
// invoke maven command to generate the extract info file
}

private static void moveInjectFilesToCheckstyleRepo(String repoPath) {
// move the injected files to checkstyle repo ...
}

private static void checkoutToPrBranch(String repoPath, String branch)
throws IOException, GitAPIException {
final File gitDir = new File(repoPath, ".git");
final Repository repository = new FileRepositoryBuilder().setGitDir(gitDir)
.readEnvironment().findGitDir().build();

try {
final Git git = new Git(repository);

try {
git.checkout().setName(branch).call();
}
finally {
git.close();
}
}
finally {
repository.close();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,19 @@

package com.github.checkstyle.regression.extract;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.eclipse.jgit.api.errors.GitAPIException;

import com.github.checkstyle.regression.data.ModuleExtractInfo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
Expand Down Expand Up @@ -57,6 +63,31 @@ private ExtractInfoProcessor() {
GSON = gsonBuilder.create();
}

/**
* Gets the module extract info map from the given branch of checkstyle repository.
* @param repoPath the path of checkstyle repository
* @param branch the given branch on which to generate the extract info
* @return the full qualified name to module extract info map
* @throws IOException failure when creating or reading the info file
* @throws GitAPIException failure when running Git command
*/
public static Map<String, ModuleExtractInfo> getModuleExtractInfos(
String repoPath, String branch) throws IOException, GitAPIException {
final Map<String, ModuleExtractInfo> returnValue;

try {
final File file = CheckstyleInjector.generateExtractInfoFile(repoPath, branch);
final Reader reader = new InputStreamReader(
new FileInputStream(file), Charset.forName("UTF-8"));
returnValue = getModuleExtractInfosFromReader(reader);
}
finally {
CheckstyleInjector.clearInjections();
}

return returnValue;
}

/**
* Gets the module extract info map from the given reader. Map key is the
* fully qualified module name.
Expand Down

0 comments on commit e05140e

Please sign in to comment.