Created first draft of splitting file, implemented validation of splitting file

This commit is contained in:
Miro Spönemann 2016-06-08 11:22:17 +02:00
parent 47ec7fd28c
commit 5f0724f241
4 changed files with 372 additions and 9 deletions

View file

@ -1,13 +1,12 @@
apply plugin: 'java'
def splitDir = file("$buildDir/splitting")
sourceSets.main.java.srcDirs = ['src']
def splittingPath = "$buildDir/splitting"
def allHistoryFiles = file(splittingPath + "/all-files.txt")
def allProjects = file(splittingPath + "/all-projects.txt")
def unmappedPaths = file(splittingPath + "/unmapped-paths.txt")
def outputFilesDir = "$buildDir/splitting"
def allHistoryFiles = file(outputFilesDir + "/all-files.txt")
def allProjects = file(outputFilesDir + "/all-projects.txt")
def unmappedPaths = file(outputFilesDir + "/unmapped-paths.txt")
def splittingFile = file("splitting.txt")
task listFiles(type: Exec) {
outputs.file allHistoryFiles
@ -25,5 +24,13 @@ task findProjects(type: JavaExec) {
outputs.files allProjects, unmappedPaths
classpath = sourceSets.main.runtimeClasspath.filter{it.exists()}
main = "org.eclipse.xtext.splitting.FindProjects"
args splittingPath
args outputFilesDir
}
task validateSplitting(type: JavaExec) {
dependsOn(sourceSets.main.runtimeClasspath, listFiles)
inputs.files splittingFile, allHistoryFiles
classpath = sourceSets.main.runtimeClasspath.filter{it.exists()}
main = "org.eclipse.xtext.splitting.ValidateSplitting"
args splittingFile, outputFilesDir
}

254
splitting/splitting.txt Normal file
View file

@ -0,0 +1,254 @@
plugins/org.eclipse.xtext >> core
plugins/org.eclipse.xtext.core >> core
plugins/org.eclipse.xtext.ide >> core
plugins/org.eclipse.xtext.util >> core
plugins/org.eclipse.xtext.xtext.generator >> core
plugins/org.eclipse.xtext.xtext.wizard >> core
tests/org.eclipse.xtext.tests >> core, extras
tests/org.eclipse.xtext.ide.tests >> core
devtools/org.eclipse.xtext.bootstrap >> core
devtools/org.eclipse.xtext.contributor >> core
devtools/org.eclipse.xtext.language-generator >> extras
plugins/org.eclipse.xtext.builder.standalone >> extras
plugins/org.eclipse.xtext.common.types >> extras
plugins/org.eclipse.xtext.ecore >> extras
plugins/org.eclipse.xtext.generator >> extras
plugins/org.eclipse.xtext.generator.parser >> extras
plugins/org.eclipse.xtext.index >> extras
plugins/org.eclipse.xtext.java >> extras
plugins/org.eclipse.xtext.purexbase >> extras
plugins/org.eclipse.xtext.purexbase.test >> extras
plugins/org.eclipse.xtext.smap >> extras
plugins/org.eclipse.xtext.xbase >> extras
plugins/org.eclipse.xtext.xbase.ide >> extras
tests/org.eclipse.xtext.generator.tests >> extras
tests/org.eclipse.xtext.common.types.test >> extras, eclipse
tests/org.eclipse.xtext.common.types.tests >> extras, eclipse
tests/org.eclipse.xtext.java.tests >> extras, eclipse
tests/org.eclipse.xtext.purexbase.tests >> extras, eclipse
tests/org.eclipse.xtext.testlanguages >> extras
tests/org.eclipse.xtext.testlanguages.ide >> extras
tests/org.eclipse.xtext.testlanguages.tests >> extras
tests/org.eclipse.xtext.xbase.tests >> extras
maven/org.eclipse.xtend.lib.gwt.test >> lib
maven/org.eclipse.xtext.xbase.lib.slim >> lib
plugins/org.eclipse.xtend.lib >> lib
plugins/org.eclipse.xtend.lib.gwt >> lib
plugins/org.eclipse.xtend.lib.macro >> lib
plugins/org.eclipse.xtend.lib.maven >> lib
plugins/org.eclipse.xtend2.lib >> lib
plugins/org.eclipse.xtext.xbase.lib >> lib
plugins/org.eclipse.xtext.xbase.lib.gwt >> lib
plugins/org.eclipse.xtext.xbase.lib.maven >> lib
plugins/org.eclipse.xtext.xtend2.lib >> lib
docs/org.eclipse.xtend.bootstrapdoc >> xtend
docs/org.eclipse.xtend.doc >> xtend
docs/org.eclipse.xtend.doc.xdoc >> xtend
examples/org.eclipse.xtend.examples >> xtend
examples/org.eclipse.xtend.examples-container >> xtend
plugins/org.eclipse.xtend.bootstrapdoc >> xtend
plugins/org.eclipse.xtend.core >> xtend
plugins/org.eclipse.xtend.doc >> xtend
plugins/org.eclipse.xtend.doc.xdoc >> xtend
plugins/org.eclipse.xtend.gradle.plugin >> xtend
plugins/org.eclipse.xtend.ide >> xtend
plugins/org.eclipse.xtend.ide.common >> xtend
plugins/org.eclipse.xtend.m2e >> xtend
plugins/org.eclipse.xtend.macro >> xtend
plugins/org.eclipse.xtend.macro.lang >> xtend
plugins/org.eclipse.xtend.macro.lang.tests >> xtend
plugins/org.eclipse.xtend.macro.lang.ui >> xtend
plugins/org.eclipse.xtend.maven >> xtend
plugins/org.eclipse.xtend.maven.android.archetype >> xtend
plugins/org.eclipse.xtend.maven.archetype >> xtend
plugins/org.eclipse.xtend.standalone >> xtend
plugins/org.eclipse.xtend.xdoc >> xtend
plugins/org.eclipse.xtext.xtend >> xtend
plugins/org.eclipse.xtext.xtend2 >> xtend
plugins/org.eclipse.xtext.xtend2.bootstrapdoc >> xtend
plugins/org.eclipse.xtext.xtend2.doc >> xtend
plugins/org.eclipse.xtext.xtend2.m2e >> xtend
plugins/org.eclipse.xtext.xtend2.ui >> xtend
tests/org.eclipse.xtend.caliper.tests >> xtend
tests/org.eclipse.xtend.core.tests >> xtend
tests/org.eclipse.xtend.core.tests.java8 >> xtend
tests/org.eclipse.xtend.ide.swtbot.tests >> xtend
tests/org.eclipse.xtend.ide.tests >> xtend
tests/org.eclipse.xtend.ide.tests.data >> xtend
tests/org.eclipse.xtend.macro.lang.tests >> xtend
tests/org.eclipse.xtend.performance.tests >> xtend
tests/org.eclipse.xtend.standalone.tests >> xtend
tests/org.eclipse.xtend.swtbot >> xtend
tests/org.eclipse.xtext.xtend.tests >> xtend
tests/org.eclipse.xtext.xtend2.standalone.tests >> xtend
tests/org.eclipse.xtext.xtend2.tests >> xtend
tests/org.eclipse.xtext.xtend2.ui.tests >> xtend
features >> eclipse
releng >> eclipse
docs/gen_toc.jar >> eclipse
docs/org.eclipse.xtext.doc >> eclipse
docs/org.eclipse.xtext.doc.xdoc >> eclipse
examples/org.eclipse.xtext.example.domainmodel >> eclipse
examples/org.eclipse.xtext.example.domainmodel.ui >> eclipse
examples/org.eclipse.xtext.example.ecoredsl >> eclipse
examples/org.eclipse.xtext.example.ecoredsl.ui >> eclipse
examples/org.eclipse.xtext.example.fowlerdsl >> eclipse
examples/org.eclipse.xtext.example.fowlerdsl.ui >> eclipse
examples/org.eclipse.xtext.xtext.ui.examples >> eclipse
plugins/org.eclipse.xtext.activities >> eclipse
plugins/org.eclipse.xtext.builder >> eclipse
plugins/org.eclipse.xtext.common.types.edit >> eclipse
plugins/org.eclipse.xtext.common.types.shared >> eclipse
plugins/org.eclipse.xtext.common.types.shared.jdt38 >> eclipse
plugins/org.eclipse.xtext.common.types.ui >> eclipse
plugins/org.eclipse.xtext.common.ui >> eclipse
plugins/org.eclipse.xtext.compatibility.galileo >> eclipse
plugins/org.eclipse.xtext.doc >> eclipse
plugins/org.eclipse.xtext.doc.xdoc >> eclipse
plugins/org.eclipse.xtext.gmf.glue >> eclipse
plugins/org.eclipse.xtext.graphviewer.ui >> eclipse
plugins/org.eclipse.xtext.junit >> eclipse
plugins/org.eclipse.xtext.junit4 >> eclipse
plugins/org.eclipse.xtext.log4j >> eclipse
plugins/org.eclipse.xtext.logging >> eclipse
plugins/org.eclipse.xtext.m2e >> eclipse
plugins/org.eclipse.xtext.purexbase.ui >> eclipse
plugins/org.eclipse.xtext.preference >> eclipse
plugins/org.eclipse.xtext.service >> eclipse
plugins/org.eclipse.xtext.service.ui >> eclipse
plugins/org.eclipse.xtext.ui >> eclipse
plugins/org.eclipse.xtext.ui.builtin >> eclipse
plugins/org.eclipse.xtext.ui.codetemplates >> eclipse
plugins/org.eclipse.xtext.ui.codetemplates.ui >> eclipse
plugins/org.eclipse.xtext.ui.common >> eclipse
plugins/org.eclipse.xtext.ui.common.xtend >> eclipse
plugins/org.eclipse.xtext.ui.core >> eclipse
plugins/org.eclipse.xtext.ui.ecore >> eclipse
plugins/org.eclipse.xtext.ui.generator >> eclipse
plugins/org.eclipse.xtext.ui.junit >> eclipse
plugins/org.eclipse.xtext.ui.shared >> eclipse
plugins/org.eclipse.xtext.wikitext.core >> eclipse
plugins/org.eclipse.xtext.wizard >> eclipse
plugins/org.eclipse.xtext.xbase.doc >> eclipse
plugins/org.eclipse.xtext.xbase.junit >> eclipse
plugins/org.eclipse.xtext.xbase.ui >> eclipse
plugins/org.eclipse.xtext.xtext.ui >> eclipse
plugins/org.eclipse.xtext.xtext.ui.graph >> eclipse
tests/org.eclipse.xtext.automated.tests >> eclipse
tests/org.eclipse.xtext.builder.tests >> eclipse
tests/org.eclipse.xtext.example.domainmodel.ui.tests >> eclipse
tests/org.eclipse.xtext.index.tests >> eclipse
tests/org.eclipse.xtext.junit4.tests >> eclipse
tests/org.eclipse.xtext.preference.tests >> eclipse
tests/org.eclipse.xtext.service.tests >> eclipse
tests/org.eclipse.xtext.service.ui.tests >> eclipse
tests/org.eclipse.xtext.testlanguages.ui >> eclipse
tests/org.eclipse.xtext.ui.codetemplates.tests >> eclipse
tests/org.eclipse.xtext.ui.common.tests >> eclipse
tests/org.eclipse.xtext.ui.core.tests >> eclipse
tests/org.eclipse.xtext.ui.integration.tests >> eclipse
tests/org.eclipse.xtext.ui.tests >> eclipse
tests/org.eclipse.xtext.wikitext.tests >> eclipse
tests/org.eclipse.xtext.xbase.testlanguages >> eclipse
tests/org.eclipse.xtext.xbase.testlanguages.ui >> eclipse
tests/org.eclipse.xtext.xbase.ui.tests >> eclipse
tests/org.eclipse.xtext.xtext.ui.graph.tests >> eclipse
tests/org.eclipse.xtext.xtext.ui.tests >> eclipse
intellij >> idea
web >> web
maven/org.eclipse.xtend.core >> maven
maven/org.eclipse.xtend.ide.common >> maven
maven/org.eclipse.xtend.maven.android.archetype >> maven
maven/org.eclipse.xtend.maven.archetype >> maven
maven/org.eclipse.xtend.maven.plugin >> maven
maven/org.eclipse.xtext >> maven
maven/org.eclipse.xtext.common.types >> maven
maven/org.eclipse.xtext.dependencies >> maven
maven/org.eclipse.xtext.ide >> maven
maven/org.eclipse.xtext.maven.plugin >> maven
maven/org.eclipse.xtext.parent >> maven
maven/org.eclipse.xtext.standalone.parent >> maven
maven/org.eclipse.xtext.target >> maven
maven/org.eclipse.xtext.tycho.parent >> maven
maven/org.eclipse.xtext.tycho.tests.parent >> maven
maven/org.eclipse.xtext.xbase >> maven
maven/org.eclipse.xtext.xtext >> maven
plugins/org.eclipse.xtend.maven.plugin >> maven
plugins/org.eclipse.xtend.standalone.maven >> maven
plugins/org.eclipse.xtend2.lib.maven >> maven
plugins/org.eclipse.xtend2.maven.plugin >> maven
plugins/org.eclipse.xtend2.standalone.maven >> maven
plugins/org.eclipse.xtext.maven.plugin >> maven
plugins/org.eclipse.xtext.standalone.maven >> maven
plugins/org.eclipse.xtext.xtend2.maven >> maven
plugins/org.eclipse.xtext.xtend2.standalone >> maven
plugins/org.eclipse.xtext.xtend2.standalone.maven >> maven
website >> xtext-website
xtext-website >> xtext-website
xtext.website.generator >> xtext-website
website-xtend >> xtend-website
xtend-website >> xtend-website
xtend.website.generator >> xtend-website
.DS_Store >> delete
.gitignore >> delete
.project >> delete
.settings >> delete
CONTRIBUTING >> delete
README.md >> delete
build.gradle >> delete
develop >> delete
devtools/com.rcpquickstart.bundletestcollector >> delete
devtools/org.eclipse.xtext.reference >> delete
devtools/org.eclipse.xtext.reference.ui >> delete
devtools/org.eclipse.xtext.testcollector >> delete
docs/images >> delete
docs/org.xtext.sevenlanguages.doc.xdoc >> delete
dummy.txt >> delete
gradle >> delete
gradle-app.setting >> delete
gradle.ant >> delete
gradle.properties >> delete
gradlew >> delete
gradlew.bat >> delete
hover.patch.txt >> delete
jenkins >> delete
maven/.settings >> delete
maven/build.gradle >> delete
maven/mvnw >> delete
maven/mvnw.bat >> delete
maven/wrapper >> delete
org.eclipse.core.resources.prefs >> delete
org.eclipse.core.runtime.prefs >> delete
org.eclipse.jdt.core.prefs >> delete
org.eclipse.jdt.launching.prefs >> delete
org.eclipse.jdt.ui.prefs >> delete
org.eclipse.xtend.core.Xtend.prefs >> delete
plugins/.settings >> delete
plugins/build.gradle >> delete
plugins/com.google.collect >> delete
plugins/com.google.guava >> delete
plugins/com.google.guice >> delete
plugins/com.google.inject >> delete
plugins/images >> delete
plugins/org.antlr.gen >> delete
plugins/org.antlr.runtime >> delete
plugins/org.apache.log4j >> delete
plugins/org.eclipse.emf.index >> delete
plugins/org.eclipse.emf.index.ui >> delete
plugins/org.eclipse.xtext.doc.manual >> delete
settings.gradle >> delete
test.txt >> delete
tests/.settings >> delete
tests/build.gradle >> delete
tests/org.eclipse.emf.index.tests >> delete
tests/org.eclipse.emf.index.ui.tests >> delete

View file

@ -26,8 +26,7 @@ public class FindProjects {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Expected file list as argument.");
return;
fail("Expected path to working directory as argument.");
}
String workingDir = args[0];
try {
@ -82,9 +81,16 @@ public class FindProjects {
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private static void fail(String message) {
System.err.print("ERROR: ");
System.err.println(message);
System.exit(1);
}
private static boolean findProjects(Directory dir, List<Directory> projects, List<DirectoryEntry> otherPaths, boolean skipOtherPaths) {
boolean containsProject = dir.parent != null && dir.entries.values().stream().anyMatch((e) -> e.name.equals(".project"));
if (containsProject) {

View file

@ -0,0 +1,96 @@
/*******************************************************************************
* Copyright (c) 2016 TypeFox GmbH (http://www.typefox.io) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.xtext.splitting;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidateSplitting {
public static final Set<String> REPOSITORIES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
"core", "extras", "lib", "xtend", "eclipse", "idea", "web", "maven", "xtext-website", "xtend-website"
)));
public static final String DELETE = "delete";
public static void main(String[] args) {
if (args.length != 2) {
fail("Expected paths to splitting.txt and working directory as arguments.");
}
String workingDir = args[1];
try {
// Validate repositories and gather all paths from the splitting file
final Set<String> specifiedPaths = new HashSet<>();
try (BufferedReader reader = new BufferedReader(new FileReader(args[0]))) {
String line;
while ((line = reader.readLine()) != null) {
if (!line.isEmpty()) {
String[] parts = line.split(">>");
if (parts.length != 2) {
fail("Invalid line: " + line);
}
String[] repos = parts[1].split(",");
if (repos.length == 0) {
fail("Invalid line: " + line);
}
for (String repo : repos) {
String trimmed = repo.trim();
if (!(REPOSITORIES.contains(trimmed) || DELETE.equals(trimmed))) {
fail("Invalid repository: " + trimmed);
}
}
String path = parts[0].trim();
specifiedPaths.add(path);
}
}
}
// Check whether each file has a specified path as prefix
final Pattern segmentPattern = Pattern.compile("/");
try (BufferedReader reader = new BufferedReader(new FileReader(workingDir + "/" + FindProjects.ALL_FILES))) {
String line;
while ((line = reader.readLine()) != null) {
if (!line.isEmpty()) {
String file = line.replaceAll("\"|\\\\.", "");
if (!specifiedPaths.contains(file)) {
Matcher matcher = segmentPattern.matcher(file);
boolean foundSplitting = false;
int lastMatch = -1;
while (!foundSplitting && matcher.find()) {
lastMatch = matcher.start();
if (specifiedPaths.contains(file.substring(0, lastMatch)))
foundSplitting = true;
}
if (!foundSplitting) {
fail("File not covered by splitting: " + file);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private static void fail(String message) {
System.err.print("ERROR: ");
System.err.println(message);
System.exit(1);
}
}