Skip to content

Commit

Permalink
Merge pull request #317 from PolyhedralDev/ver/6.0.1
Browse files Browse the repository at this point in the history
Update addons when new minor and patch versions are available
  • Loading branch information
dfsek authored Jun 7, 2022
2 parents 3fbb93d + 90a4834 commit cec83ae
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 5 deletions.
6 changes: 3 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
preRelease(true)

versionProjects(":common:api", version("6.0.0"))
versionProjects(":common:implementation", version("6.0.0"))
versionProjects(":platforms", version("6.0.0"))
versionProjects(":common:api", version("6.0.1"))
versionProjects(":common:implementation", version("6.0.1"))
versionProjects(":platforms", version("6.0.1"))


allprojects {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

version = version("1.0.0")
version = version("1.0.1")

dependencies {
api("commons-io:commons-io:2.7")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,49 @@
import org.jetbrains.annotations.NotNull;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;


public final class Pair<L, R> {
private static final Pair<?, ?> NULL = new Pair<>(null, null);
private final L left;
private final R right;

public static <L, R, T> Function<Pair<L, R>, Pair<T, R>> mapLeft(Function<L, T> function) {
return pair -> of(function.apply(pair.left), pair.right);
}

public static <L, R, T> Function<Pair<L, R>, Pair<L, T>> mapRight(Function<R, T> function) {
return pair -> of(pair.left, function.apply(pair.right));
}

public static <L> Predicate<Pair<L, ?>> testLeft(Predicate<L> predicate) {
return pair -> predicate.test(pair.left);
}

public static <R> Predicate<Pair<?, R>> testRight(Predicate<R> predicate) {
return pair -> predicate.test(pair.right);
}

public static <L> Consumer<Pair<L, ?>> consumeLeft(Consumer<L> consumer) {
return pair -> consumer.accept(pair.left);
}

public static <R> Consumer<Pair<?, R>> consumeRight(Consumer<R> consumer) {
return pair -> consumer.accept(pair.right);
}

public static <R> Function<Pair<?, R>, R> unwrapRight() {
return pair -> pair.right;
}

public static <L> Function<Pair<L, ?>, L> unwrapLeft() {
return pair -> pair.left;
}

private Pair(L left, R right) {
this.left = left;
this.right = right;
Expand Down Expand Up @@ -108,4 +144,9 @@ public boolean equals(Object obj) {
return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right);
}
}

@Override
public String toString() {
return String.format("{%s,%s}", left, right);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
package com.dfsek.terra;

import com.dfsek.tectonic.api.TypeRegistry;

import com.dfsek.terra.api.util.generic.pair.Pair;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull;
Expand All @@ -33,12 +36,15 @@
import java.io.UncheckedIOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import com.dfsek.terra.addon.BootstrapAddonLoader;
import com.dfsek.terra.addon.DependencySorter;
Expand Down Expand Up @@ -212,13 +218,71 @@ protected void dumpResources() {
logger.info("No resources config found. Skipping resource dumping.");
return;
}

Path data = getDataFolder().toPath();

Path addonsPath = data.resolve("addons");
Set<Pair<Path, String>> paths = Files
.walk(addonsPath)
.map(path -> Pair.of(path, data.relativize(path).toString()))

.map(Pair.mapRight(s -> {
if(s.contains("+")) { // remove commit hash
return s.substring(0, s.lastIndexOf('+'));
}
return s;
}))

.filter(Pair.testRight(s -> s.contains("."))) // remove patch version
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))

.filter(Pair.testRight(s -> s.contains("."))) // remove minor version
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))

.collect(Collectors.toSet());

Set<String> pathsNoMajor = paths
.stream()
.filter(Pair.testRight(s -> s.contains(".")))
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.')))) // remove major version
.map(Pair.unwrapRight())
.collect(Collectors.toSet());


// Terra-aaa-aaa-1.2.3-BETA+1e6af8923d.jar
String resourceYaml = IOUtils.toString(resourcesConfig, StandardCharsets.UTF_8);
Map<String, List<String>> resources = new Yaml().load(resourceYaml);
resources.forEach((dir, entries) -> entries.forEach(entry -> {
String resourcePath = String.format("%s/%s", dir, entry);
String resourcePath = dir + File.separatorChar + entry;
File resource = new File(getDataFolder(), resourcePath);
if(resource.exists())
return; // dont overwrite

paths
.stream()
.filter(Pair.testRight(resourcePath::startsWith))
.forEach(Pair.consumeLeft(path -> {
logger.info("Removing outdated resource {}, replacing with {}", path, resourcePath);
try {
Files.delete(path);
} catch(IOException e) {
throw new UncheckedIOException(e);
}
}));

if(pathsNoMajor
.stream()
.anyMatch(resourcePath::startsWith) && // if any share name
paths
.stream()
.map(Pair.unwrapRight())
.noneMatch(resourcePath::startsWith)) { // but dont share major version
logger.warn(
"Addon {} has a new major version available. It will not be automatically updated; you will need to ensure " +
"compatibility and update manually.",
resourcePath);
}

logger.info("Dumping resource {}...", resource.getAbsolutePath());
try {
resource.getParentFile().mkdirs();
Expand Down

0 comments on commit cec83ae

Please sign in to comment.