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

fix: Watch uses same logic as build to monitor changed assembly files #266

Merged
merged 1 commit into from
Jun 30, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Usage:
* Fix #189: Removed `@Deprecated` fields from BuildConfiguration
* Fix #195: Added MigrateMojo for migrating projects from FMP to JKube
* Fix #261: DockerFileBuilder only supports *nix paths (Dockerfile Linux only), fixed invalid default configs
* Fix #238: Watch uses same logic as build to monitor changed assembly files

### 1.0.0-alpha-4 (2020-06-08)
* Fix #173: Use OpenShift compliant git/vcs annotations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import org.eclipse.jkube.kit.common.AssemblyFileSet;
import org.eclipse.jkube.kit.common.Assembly;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
Expand All @@ -35,7 +37,8 @@ class AssemblyConfigurationUtils {

private AssemblyConfigurationUtils() {}

static AssemblyConfiguration getAssemblyConfigurationOrCreateDefault(BuildConfiguration buildConfiguration) {
@Nonnull
static AssemblyConfiguration getAssemblyConfigurationOrCreateDefault(@Nullable BuildConfiguration buildConfiguration) {
final AssemblyConfiguration ac = Optional.ofNullable(buildConfiguration)
.map(BuildConfiguration::getAssembly)
.orElse(AssemblyConfiguration.builder().user(DEFAULT_USER).build());
Expand All @@ -53,14 +56,16 @@ static AssemblyConfiguration getAssemblyConfigurationOrCreateDefault(BuildConfig
return builder.build();
}

static List<AssemblyFileSet> getJKubeAssemblyFileSets(AssemblyConfiguration configuration) {
@Nonnull
static List<AssemblyFileSet> getJKubeAssemblyFileSets(@Nullable AssemblyConfiguration configuration) {
return Optional.ofNullable(configuration)
.map(AssemblyConfiguration::getInline)
.map(Assembly::getFileSets)
.orElse(Collections.emptyList());
}

static List<String> getJKubeAssemblyFileSetsExcludes(AssemblyConfiguration assemblyConfiguration) {
@Nonnull
static List<String> getJKubeAssemblyFileSetsExcludes(@Nullable AssemblyConfiguration assemblyConfiguration) {
return getJKubeAssemblyFileSets(assemblyConfiguration).stream()
.filter(Objects::nonNull)
.map(AssemblyFileSet::getExcludes)
Expand All @@ -70,6 +75,7 @@ static List<String> getJKubeAssemblyFileSetsExcludes(AssemblyConfiguration assem
.collect(Collectors.toList());
}

@Nonnull
static List<AssemblyFile> getJKubeAssemblyFiles(AssemblyConfiguration configuration) {
return Optional.ofNullable(configuration)
.map(AssemblyConfiguration::getInline)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
*/
package org.eclipse.jkube.kit.build.core.assembly;

import org.eclipse.jkube.kit.common.AssemblyFileEntry;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* Collection of assembly files which need to be monitored for checking when
Expand All @@ -26,7 +29,7 @@
public class AssemblyFiles {

private final File assemblyDirectory;
private List<Entry> entries = new ArrayList<>();
private List<AssemblyFileEntry> entries = new ArrayList<>();

/**
* Create a collection of assembly files
Expand All @@ -40,28 +43,21 @@ public AssemblyFiles(File assemblyDirectory) {
/**
* Add a entry to the list of assembly files which possible should be monitored
*
* @param srcFile source file to monitor. The source file must exist.
* @param destFile the destination to which it is eventually copied. The destination file must be relative.
* @param assemblyFileEntry to monitor.
*/
public void addEntry(File srcFile, File destFile) {
entries.add(new Entry(srcFile, destFile));
public void addEntry(AssemblyFileEntry assemblyFileEntry) {
entries.add(assemblyFileEntry);
}

/**
* Get the list of all updated entries i.e. all entries which have modification date
* which is newer than the last time check. ATTENTION: As a side effect this method also
* updates the timestamp of entries.
* updates the timestamp of updated entries.
*
* @return list of all entries which has been updated since the last call to this method or an empty list
*/
public List<Entry> getUpdatedEntriesAndRefresh() {
List<Entry> ret = new ArrayList<>();
for (Entry entry : entries) {
if (entry.isUpdated()) {
ret.add(entry);
}
}
return ret;
public List<AssemblyFileEntry> getUpdatedEntriesAndRefresh() {
return entries.stream().filter(AssemblyFileEntry::isUpdated).collect(Collectors.toList());
}

/**
Expand All @@ -82,49 +78,4 @@ public File getAssemblyDirectory() {
return assemblyDirectory;
}

// ===============================================================================
// Inner class remembering the modification date of a source file and its destination

public static class Entry {

private long lastModified;
private File srcFile;
private File destFile;

private Entry(File srcFile, File destFile) {
this.srcFile = srcFile;
this.destFile = destFile;
if (!srcFile.exists()) {
throw new IllegalArgumentException("Source " + srcFile + " does not exist");
}
if (!destFile.exists()) {
throw new IllegalArgumentException("Destination " + destFile + " does not exist");
}
if (srcFile.isDirectory()) {
throw new IllegalArgumentException("Can only watch files, not directories: " + srcFile);
}
this.lastModified = this.srcFile.lastModified();
}

public File getSrcFile() {
return srcFile;
}

/**
* @return destination file which is absolute (and withing AssemblyFiles.assemblyDirectory)
*/
public File getDestFile() {
return destFile;
}

boolean isUpdated() {
if (srcFile.lastModified() > lastModified) {
// Update last modified as a side effect
lastModified = srcFile.lastModified();
return true;
} else {
return false;
}
}
}
}
Loading