From c4d6f4851c893d87eb91dc31f8dac4ef57fd86c7 Mon Sep 17 00:00:00 2001 From: Rafael Mota Date: Sat, 9 Nov 2019 17:53:43 -0300 Subject: [PATCH 1/2] Add option to keep projects after analysis --- src/main/app/MiningFramework.groovy | 5 ++--- src/main/app/MiningWorker.groovy | 12 +++++++++++- src/main/arguments/ArgsParser.groovy | 6 +++++- src/main/arguments/Arguments.groovy | 11 ++++++++++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/app/MiningFramework.groovy b/src/main/app/MiningFramework.groovy index 971385687..852b199d3 100644 --- a/src/main/app/MiningFramework.groovy +++ b/src/main/app/MiningFramework.groovy @@ -26,7 +26,7 @@ class MiningFramework { private OutputProcessor outputProcessor static public Arguments arguments - private final String LOCAL_PROJECT_PATH = 'localProject' + private final String LOCAL_PROJECT_PATH = 'clonedRepositories' private final String LOCAL_RESULTS_REPOSITORY_PATH = System.getProperty('user.home') @Inject @@ -103,8 +103,7 @@ class MiningFramework { Thread [] workers = new Thread[numOfThreads] for (int i = 0; i < numOfThreads; i++) { - String workerPath = "${LOCAL_PROJECT_PATH}/worker${i}" - Runnable worker = new MiningWorker(dataCollectors, commitFilter, projectQueue, workerPath); + Runnable worker = new MiningWorker(dataCollectors, commitFilter, projectQueue, LOCAL_PROJECT_PATH); workers[i] = new Thread(worker) workers[i].start(); } diff --git a/src/main/app/MiningWorker.groovy b/src/main/app/MiningWorker.groovy index df9c592cd..6b93d2109 100644 --- a/src/main/app/MiningWorker.groovy +++ b/src/main/app/MiningWorker.groovy @@ -39,7 +39,7 @@ class MiningWorker implements Runnable { printProjectInformation (project) if (project.isRemote()) { - cloneRepository(project, baseDir) + cloneRepository(project, "${baseDir}/${project.getName()}") } else { checkForUnstagedChanges(project); } @@ -57,12 +57,22 @@ class MiningWorker implements Runnable { if(arguments.isPushCommandActive()) // Will push. pushResults(project, arguments.getResultsRemoteRepositoryURL()) + if (arguments.getKeepProjects()) { + goBackToMaster(project) + } else { + FileManager.delete(new File(project.getPath())) + } + endProjectAnalysis (project) } catch (NoSuchElementException e) { } } } + private void goBackToMaster (Project project) { + ProcessRunner.runProcess(project.getPath(), "git", "checkout", "master").waitFor() + } + private void runDataCollectors(Project project, MergeCommit mergeCommit) { for (dataCollector in dataCollectors) { dataCollector.collectData(project, mergeCommit) diff --git a/src/main/arguments/ArgsParser.groovy b/src/main/arguments/ArgsParser.groovy index be8fad914..f439734fe 100644 --- a/src/main/arguments/ArgsParser.groovy +++ b/src/main/arguments/ArgsParser.groovy @@ -30,6 +30,7 @@ class ArgsParser { this.cli.p(longOpt: 'post-script', args:1, argName: 'post script', 'Specify a bash script to be run after output is ready') this.cli.a(longOpt: 'access-key',args:1, argName: 'access key', 'Specify the access key of the git account used') this.cli.t(longOpt: 'threads', args: 1, argName: 'threads', "Number of cores used in analysis (default: 1)") + this.cli.k(longOpt: 'keep-projects', argName: 'keep projects', 'Keep projects in disk after analysis') } @@ -98,7 +99,6 @@ class ArgsParser { if(!repositoryExists(this.options.push)) throw new InvalidArgsException('Inexistent remote git repository.') - println this.options.push args.setResultsRemoteRepositoryURL(this.options.push) } @@ -113,6 +113,10 @@ class ArgsParser { if (this.options.t) { args.setNumOfThreads(this.options.t.toInteger()) } + + if (this.options.k) { + args.setKeepProjects() + } } private boolean repositoryExists(String repositoryURL) { diff --git a/src/main/arguments/Arguments.groovy b/src/main/arguments/Arguments.groovy index 699d36c5c..f34dc6900 100644 --- a/src/main/arguments/Arguments.groovy +++ b/src/main/arguments/Arguments.groovy @@ -13,8 +13,8 @@ class Arguments { private String resultsRemoteRepositoryURL private String postScript private String accessKey - private boolean useForks private int numOfThreads + private boolean keepProjects Arguments() { isHelp = false @@ -26,6 +26,7 @@ class Arguments { postScript = '' accessKey = '' numOfThreads = 1 + keepProjects = false } void setNumOfThreads (int numOfThreads) { @@ -68,6 +69,10 @@ class Arguments { this.accessKey = accessKey } + void setKeepProjects() { + this.keepProjects = true; + } + int getNumOfThreads() { return this.numOfThreads } @@ -96,6 +101,10 @@ class Arguments { return isHelp } + boolean getKeepProjects () { + return keepProjects + } + String getResultsRemoteRepositoryURL() { return resultsRemoteRepositoryURL } From 90d18cfbb65f8e8148016d51e7f821b2ef65b481 Mon Sep 17 00:00:00 2001 From: Rafael Mota Date: Mon, 11 Nov 2019 18:01:05 -0300 Subject: [PATCH 2/2] Remove go back to master call --- src/main/app/MiningWorker.groovy | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/app/MiningWorker.groovy b/src/main/app/MiningWorker.groovy index 6b93d2109..207a8f4b0 100644 --- a/src/main/app/MiningWorker.groovy +++ b/src/main/app/MiningWorker.groovy @@ -57,9 +57,7 @@ class MiningWorker implements Runnable { if(arguments.isPushCommandActive()) // Will push. pushResults(project, arguments.getResultsRemoteRepositoryURL()) - if (arguments.getKeepProjects()) { - goBackToMaster(project) - } else { + if (!arguments.getKeepProjects()) { FileManager.delete(new File(project.getPath())) } @@ -69,10 +67,6 @@ class MiningWorker implements Runnable { } } - private void goBackToMaster (Project project) { - ProcessRunner.runProcess(project.getPath(), "git", "checkout", "master").waitFor() - } - private void runDataCollectors(Project project, MergeCommit mergeCommit) { for (dataCollector in dataCollectors) { dataCollector.collectData(project, mergeCommit)