diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/orient/internal/hosted/OrientAptHostedFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/orient/internal/hosted/OrientAptHostedFacet.java index 27a2690d13..19b5450861 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/orient/internal/hosted/OrientAptHostedFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/orient/internal/hosted/OrientAptHostedFacet.java @@ -22,8 +22,10 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeSet; import java.util.TimeZone; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import javax.inject.Named; @@ -86,6 +88,8 @@ public class OrientAptHostedFacet private static final String P_PACKAGE_NAME = "package_name"; private static final String P_PACKAGE_VERSION = "package_version"; + private static final String ALL_ARCHITECTURE = "all"; + private static final String SELECT_HOSTED_ASSETS = "SELECT " + "name, " + @@ -217,7 +221,12 @@ private CompressingTempFileStore buildPackageIndexes(final StorageTx tx, final B Set excludeNames = changes.stream().map(change -> change.asset.name()).collect(Collectors.toSet()); Iterable browse = tx.browse(SELECT_HOSTED_ASSETS, sqlParams); + TreeSet archs = StreamSupport.stream(browse.spliterator(), false) + .map(document -> document.field(P_ARCHITECTURE, String.class)) + .filter(arch -> !ALL_ARCHITECTURE.equals(arch)) + .collect(Collectors.toCollection(TreeSet::new)); + browse = tx.browse(SELECT_HOSTED_ASSETS, sqlParams); for (ODocument document : browse) { String name = document.field(P_NAME, String.class); String arch = document.field(P_ARCHITECTURE, String.class); @@ -226,6 +235,14 @@ private CompressingTempFileStore buildPackageIndexes(final StorageTx tx, final B String indexSection = document.field(P_INDEX_SECTION, String.class); outWriter.write(indexSection); outWriter.write("\n\n"); + + if (ALL_ARCHITECTURE.equals(arch)) { + for (String foreignArch: archs) { + Writer foreignOutWriter = streams.computeIfAbsent(foreignArch, result::openOutput); + foreignOutWriter.write(indexSection); + foreignOutWriter.write("\n\n"); + } + } } } @@ -239,6 +256,14 @@ private CompressingTempFileStore buildPackageIndexes(final StorageTx tx, final B Writer outWriter = streams.computeIfAbsent(arch, result::openOutput); outWriter.write(indexSection); outWriter.write("\n\n"); + + if (ALL_ARCHITECTURE.equals(arch)) { + for (String foreignArch: archs) { + Writer foreignOutWriter = streams.computeIfAbsent(foreignArch, result::openOutput); + foreignOutWriter.write(indexSection); + foreignOutWriter.write("\n\n"); + } + } } ok = true; }