Skip to content

Commit

Permalink
Fix source path detection in multi-project repos
Browse files Browse the repository at this point in the history
  • Loading branch information
nikita-tkachenko-datadog committed Dec 5, 2023
1 parent c88f535 commit e74dbfb
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,15 @@ private static DDBuildSystemSession.Factory buildSystemSessionFactory(
ResourceResolver resourceResolver =
new ConventionBasedResourceResolver(
fileSystem, config.getCiVisibilityResourceFolderNames());

// scanning only the project folder and not the entire repo to
// save time and to properly determine root packages for coverage instrumentation
// (when there are multiple projects in the repo, root package resolution cannot establish
// common roots)
String sourcePathResolutionRoot = projectRoot.toString();
RepoIndexBuilder indexBuilder =
new RepoIndexBuilder(
config, sourcePathResolutionRoot, packageResolver, resourceResolver, fileSystem);
SourcePathResolver sourcePathResolver =
getSourcePathResolver(sourcePathResolutionRoot, indexBuilder);
config,
repoRoot,
projectRoot.toString(),
packageResolver,
resourceResolver,
fileSystem);
SourcePathResolver sourcePathResolver = getSourcePathResolver(repoRoot, indexBuilder);
Codeowners codeowners = getCodeowners(repoRoot);

MethodLinesResolver methodLinesResolver =
Expand Down Expand Up @@ -314,7 +312,8 @@ private static DDTestFrameworkSession.Factory testFrameworkSessionFactory(
new ConventionBasedResourceResolver(
fileSystem, config.getCiVisibilityResourceFolderNames());
RepoIndexProvider indexProvider =
new RepoIndexBuilder(config, repoRoot, packageResolver, resourceResolver, fileSystem);
new RepoIndexBuilder(
config, repoRoot, repoRoot, packageResolver, resourceResolver, fileSystem);

BackendApi backendApi = backendApiFactory.createBackendApi();
GitDataUploader gitDataUploader =
Expand Down Expand Up @@ -396,7 +395,8 @@ private static CIVisibility.SessionFactory apiSessionFactory(
new ConventionBasedResourceResolver(
fileSystem, config.getCiVisibilityResourceFolderNames());
RepoIndexProvider indexProvider =
new RepoIndexBuilder(config, repoRoot, packageResolver, resourceResolver, fileSystem);
new RepoIndexBuilder(
config, repoRoot, repoRoot, packageResolver, resourceResolver, fileSystem);
SourcePathResolver sourcePathResolver = getSourcePathResolver(repoRoot, indexProvider);

return new DDTestSessionImpl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class RepoIndexBuilder implements RepoIndexProvider {

private final Config config;
private final String repoRoot;
private final String scanRoot;
private final PackageResolver packageResolver;
private final ResourceResolver resourceResolver;
private final FileSystem fileSystem;
Expand All @@ -33,11 +34,13 @@ public class RepoIndexBuilder implements RepoIndexProvider {
public RepoIndexBuilder(
Config config,
String repoRoot,
String scanRoot,
PackageResolver packageResolver,
ResourceResolver resourceResolver,
FileSystem fileSystem) {
this.config = config;
this.repoRoot = repoRoot;
this.scanRoot = scanRoot;
this.packageResolver = packageResolver;
this.resourceResolver = resourceResolver;
this.fileSystem = fileSystem;
Expand All @@ -57,24 +60,26 @@ public RepoIndex getIndex() {

private RepoIndex doGetIndex() {
log.warn(
"Building index of source files in {}. "
"Building index of source files in {}, repo root is {}. "
+ "This operation can be slow, "
+ "please consider using Datadog Java compiler plugin to avoid indexing",
scanRoot,
repoRoot);

Path repoRootPath = fileSystem.getPath(repoRoot);
Path scanRootPath = fileSystem.getPath(scanRoot);
RepoIndexingFileVisitor repoIndexingFileVisitor =
new RepoIndexingFileVisitor(config, packageResolver, resourceResolver, repoRootPath);

long startTime = System.currentTimeMillis();
try {
Files.walkFileTree(
repoRootPath,
scanRootPath,
EnumSet.of(FileVisitOption.FOLLOW_LINKS),
Integer.MAX_VALUE,
repoIndexingFileVisitor);
} catch (Exception e) {
log.error("Failed to build index repo of {}", repoRoot, e);
log.error("Failed to build index of {}", scanRootPath, e);
}

long duration = System.currentTimeMillis() - startTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public RepoIndexSourcePathResolver(String repoRoot, RepoIndexProvider indexProvi
FileSystem fileSystem) {
this.repoRoot = repoRoot;
this.indexProvider =
new RepoIndexBuilder(config, repoRoot, packageResolver, resourceResolver, fileSystem);
new RepoIndexBuilder(
config, repoRoot, repoRoot, packageResolver, resourceResolver, fileSystem);
}

@Nullable
Expand Down

0 comments on commit e74dbfb

Please sign in to comment.