Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate and deprecate LayerConfiguration and LayerEntry #2334

Merged
merged 15 commits into from
Mar 17, 2020
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,30 @@

import com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath;
import com.google.cloud.tools.jib.api.buildplan.FileEntriesLayer;
import com.google.cloud.tools.jib.api.buildplan.FileEntry;
import com.google.cloud.tools.jib.api.buildplan.FilePermissions;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.concurrent.Immutable;

/** Configures how to build a layer in the container image. Instantiate with {@link #builder}. */
/**
* Configures how to build a layer in the container image. Instantiate with {@link #builder}.
*
* <p>Deprecated. Use {@link FileEntriesLayer}.
*/
@Deprecated
@Immutable
public class LayerConfiguration {

/** Builds a {@link LayerConfiguration}. */
public static class Builder {

private String name = "";
private List<LayerEntry> entries = new ArrayList<>();
private FileEntriesLayer.Builder builder = FileEntriesLayer.builder();

private Builder() {}

Expand All @@ -50,7 +52,7 @@ private Builder() {}
* @return this
*/
public Builder setName(String name) {
this.name = name;
builder.setName(name);
return this;
}

Expand All @@ -61,7 +63,8 @@ public Builder setName(String name) {
* @return this
*/
public Builder setEntries(List<LayerEntry> entries) {
this.entries = new ArrayList<>(entries);
builder.setEntries(
entries.stream().map(LayerEntry::toFileEntry).collect(Collectors.toList()));
return this;
}

Expand All @@ -72,7 +75,7 @@ public Builder setEntries(List<LayerEntry> entries) {
* @return this
*/
public Builder addEntry(LayerEntry entry) {
entries.add(entry);
builder.addEntry(entry.toFileEntry());
return this;
}

Expand All @@ -95,10 +98,8 @@ public Builder addEntry(LayerEntry entry) {
* @return this
*/
public Builder addEntry(Path sourceFile, AbsoluteUnixPath pathInContainer) {
return addEntry(
sourceFile,
pathInContainer,
DEFAULT_FILE_PERMISSIONS_PROVIDER.apply(sourceFile, pathInContainer));
builder.addEntry(sourceFile, pathInContainer);
return this;
}

/**
Expand All @@ -117,7 +118,8 @@ public Builder addEntry(Path sourceFile, AbsoluteUnixPath pathInContainer) {
*/
public Builder addEntry(
Path sourceFile, AbsoluteUnixPath pathInContainer, FilePermissions permissions) {
return addEntry(sourceFile, pathInContainer, permissions, DEFAULT_MODIFICATION_TIME);
builder.addEntry(sourceFile, pathInContainer, permissions);
return this;
}

/**
Expand All @@ -134,11 +136,8 @@ public Builder addEntry(
*/
public Builder addEntry(
Path sourceFile, AbsoluteUnixPath pathInContainer, Instant modificationTime) {
return addEntry(
sourceFile,
pathInContainer,
DEFAULT_FILE_PERMISSIONS_PROVIDER.apply(sourceFile, pathInContainer),
modificationTime);
builder.addEntry(sourceFile, pathInContainer, modificationTime);
return this;
}

/**
Expand All @@ -161,7 +160,8 @@ public Builder addEntry(
AbsoluteUnixPath pathInContainer,
FilePermissions permissions,
Instant modificationTime) {
return addEntry(new LayerEntry(sourceFile, pathInContainer, permissions, modificationTime));
builder.addEntry(new FileEntry(sourceFile, pathInContainer, permissions, modificationTime));
return this;
}

/**
Expand All @@ -181,7 +181,8 @@ public Builder addEntry(
*/
public Builder addEntryRecursive(Path sourceFile, AbsoluteUnixPath pathInContainer)
throws IOException {
return addEntryRecursive(sourceFile, pathInContainer, DEFAULT_FILE_PERMISSIONS_PROVIDER);
builder.addEntryRecursive(sourceFile, pathInContainer);
return this;
}

/**
Expand All @@ -201,8 +202,8 @@ public Builder addEntryRecursive(
AbsoluteUnixPath pathInContainer,
BiFunction<Path, AbsoluteUnixPath, FilePermissions> filePermissionProvider)
throws IOException {
return addEntryRecursive(
sourceFile, pathInContainer, filePermissionProvider, DEFAULT_MODIFICATION_TIME_PROVIDER);
builder.addEntryRecursive(sourceFile, pathInContainer, filePermissionProvider);
return this;
}

/**
Expand All @@ -225,21 +226,8 @@ public Builder addEntryRecursive(
BiFunction<Path, AbsoluteUnixPath, FilePermissions> filePermissionProvider,
BiFunction<Path, AbsoluteUnixPath, Instant> modificationTimeProvider)
throws IOException {
FilePermissions permissions = filePermissionProvider.apply(sourceFile, pathInContainer);
Instant modificationTime = modificationTimeProvider.apply(sourceFile, pathInContainer);
addEntry(sourceFile, pathInContainer, permissions, modificationTime);
if (!Files.isDirectory(sourceFile)) {
return this;
}
try (Stream<Path> files = Files.list(sourceFile)) {
for (Path file : files.collect(Collectors.toList())) {
addEntryRecursive(
file,
pathInContainer.resolve(file.getFileName()),
filePermissionProvider,
modificationTimeProvider);
}
}
builder.addEntryRecursive(
sourceFile, pathInContainer, filePermissionProvider, modificationTimeProvider);
return this;
}

Expand All @@ -249,7 +237,7 @@ public Builder addEntryRecursive(
* @return the built {@link LayerConfiguration}
*/
public LayerConfiguration build() {
return new LayerConfiguration(name, entries);
return new LayerConfiguration(builder.build());
}
}

Expand All @@ -274,18 +262,10 @@ public static Builder builder() {
return new Builder();
}

private final String name;
private final List<LayerEntry> entries;
private final FileEntriesLayer fileEntriesLayer;

/**
* Use {@link #builder} to instantiate.
*
* @param name an optional name for the layer
* @param entries the list of {@link LayerEntry}s
*/
private LayerConfiguration(String name, List<LayerEntry> entries) {
this.name = name;
this.entries = entries;
private LayerConfiguration(FileEntriesLayer fileEntriesLayer) {
this.fileEntriesLayer = fileEntriesLayer;
}

/**
Expand All @@ -294,7 +274,7 @@ private LayerConfiguration(String name, List<LayerEntry> entries) {
* @return the name
*/
public String getName() {
return name;
return fileEntriesLayer.getName();
}

/**
Expand All @@ -303,10 +283,11 @@ public String getName() {
* @return the list of entries
*/
public ImmutableList<LayerEntry> getLayerEntries() {
return ImmutableList.copyOf(entries);
List<FileEntry> entries = fileEntriesLayer.getEntries();
return entries.stream().map(LayerEntry::new).collect(ImmutableList.toImmutableList());
}

public Builder toBuilder() {
return builder().setName(name).setEntries(entries);
FileEntriesLayer toFileEntriesLayer() {
return fileEntriesLayer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,25 @@
package com.google.cloud.tools.jib.api;

import com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath;
import com.google.cloud.tools.jib.api.buildplan.FileEntry;
import com.google.cloud.tools.jib.api.buildplan.FilePermissions;
import java.nio.file.Path;
import java.time.Instant;
import java.util.Objects;
import javax.annotation.concurrent.Immutable;

/**
* Represents an entry in the layer. A layer consists of many entries that can be converted into tar
* archive entries.
*
* <p>This class is immutable and thread-safe.
*
* <p>Deprecated. Use {@link FileEntry}.
*/
@Deprecated
@Immutable
public class LayerEntry {

private final Path sourceFile;
private final AbsoluteUnixPath extractionPath;
private final FilePermissions permissions;
private final Instant modificationTime;
private final FileEntry fileEntry;

/**
* Instantiates with a source file and the path to place the source file in the container file
Expand Down Expand Up @@ -68,10 +68,11 @@ public LayerEntry(
AbsoluteUnixPath extractionPath,
FilePermissions permissions,
Instant modificationTime) {
this.sourceFile = sourceFile;
this.extractionPath = extractionPath;
this.permissions = permissions;
this.modificationTime = modificationTime;
this(new FileEntry(sourceFile, extractionPath, permissions, modificationTime));
}

LayerEntry(FileEntry entry) {
fileEntry = entry;
}

/**
Expand All @@ -80,7 +81,7 @@ public LayerEntry(
* @return the modification time
*/
public Instant getModificationTime() {
return modificationTime;
return fileEntry.getModificationTime();
}

/**
Expand All @@ -91,7 +92,7 @@ public Instant getModificationTime() {
* @return the source file
*/
public Path getSourceFile() {
return sourceFile;
return fileEntry.getSourceFile();
}

/**
Expand All @@ -100,7 +101,7 @@ public Path getSourceFile() {
* @return the extraction path
*/
public AbsoluteUnixPath getExtractionPath() {
return extractionPath;
return fileEntry.getExtractionPath();
}

/**
Expand All @@ -109,7 +110,7 @@ public AbsoluteUnixPath getExtractionPath() {
* @return the file permissions on the container
*/
public FilePermissions getPermissions() {
return permissions;
return fileEntry.getPermissions();
}

@Override
Expand All @@ -121,14 +122,15 @@ public boolean equals(Object other) {
return false;
}
LayerEntry otherLayerEntry = (LayerEntry) other;
return sourceFile.equals(otherLayerEntry.sourceFile)
&& extractionPath.equals(otherLayerEntry.extractionPath)
&& Objects.equals(permissions, otherLayerEntry.permissions)
&& Objects.equals(modificationTime, otherLayerEntry.modificationTime);
return toFileEntry().equals(otherLayerEntry.toFileEntry());
}

@Override
public int hashCode() {
return Objects.hash(sourceFile, extractionPath, permissions, modificationTime);
return fileEntry.hashCode();
}

FileEntry toFileEntry() {
return fileEntry;
}
}