Skip to content

Commit

Permalink
[checksum] finer control on which files get checksumed. Resolves #326
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Jul 30, 2021
1 parent a0adfbd commit 77db948
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import java.util.List;
import java.util.Map;

import static org.jreleaser.model.Checksum.KEY_SKIP_CHECKSUM;
import static org.jreleaser.util.StringUtils.isNotBlank;

/**
Expand All @@ -47,12 +48,14 @@ public static void collectAndWriteChecksums(JReleaserContext context) throws JRe

Map<Algorithm, List<String>> checksums = new LinkedHashMap<>();

for (Artifact artifact : Artifacts.resolveFiles(context)) {
if (!artifact.isActive()) continue;
for (Algorithm algorithm : context.getModel().getChecksum().getAlgorithms()) {
readHash(context, algorithm, artifact);
List<String> list = checksums.computeIfAbsent(algorithm, k -> new ArrayList<>());
list.add(artifact.getHash(algorithm) + " " + artifact.getEffectivePath(context).getFileName());
if (context.getModel().getChecksum().isFiles()) {
for (Artifact artifact : Artifacts.resolveFiles(context)) {
if (!artifact.isActive() || artifact.extraPropertyIsTrue(KEY_SKIP_CHECKSUM)) continue;
for (Algorithm algorithm : context.getModel().getChecksum().getAlgorithms()) {
readHash(context, algorithm, artifact);
List<String> list = checksums.computeIfAbsent(algorithm, k -> new ArrayList<>());
list.add(artifact.getHash(algorithm) + " " + artifact.getEffectivePath(context).getFileName());
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,18 @@
* @since 0.4.0
*/
public class Checksum implements Domain {
public static final String KEY_SKIP_CHECKSUM = "skipChecksum";
public static final String INDIVIDUAL_CHECKSUM = "individualChecksum";

private final Set<Algorithm> algorithms = new LinkedHashSet<>();
private Boolean individual;
private String name;
private Boolean files;

void setAll(Checksum checksum) {
this.name = checksum.name;
this.individual = checksum.individual;
this.files = checksum.files;
setAlgorithms(checksum.algorithms);
}

Expand Down Expand Up @@ -90,12 +93,26 @@ public void setAlgorithms(Set<Algorithm> algorithms) {
this.algorithms.addAll(algorithms);
}

public Boolean isFiles() {
return files == null || files;
}

public boolean isFilesSet() {
return files != null;
}

public void setFiles(Boolean files) {
System.out.println("setting files "+files);
this.files = files;
}

@Override
public Map<String, Object> asMap(boolean full) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("name", name);
map.put("individual", isIndividual());
map.put("algorithms", algorithms);
return map;
Map<String, Object> props = new LinkedHashMap<>();
props.put("name", name);
props.put("individual", isIndividual());
props.put("algorithms", algorithms);
props.put("files", isFiles());
return props;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void setAll(Glob glob) {

@Override
public String getPrefix() {
return "glob";
return "artifact";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

import static java.util.Objects.requireNonNull;
import static org.jreleaser.model.Checksum.INDIVIDUAL_CHECKSUM;
import static org.jreleaser.model.Checksum.KEY_SKIP_CHECKSUM;
import static org.jreleaser.model.GitService.KEY_SKIP_RELEASE;
import static org.jreleaser.model.GitService.KEY_SKIP_RELEASE_SIGNATURES;
import static org.jreleaser.model.Signing.KEY_SKIP_SIGNING;
Expand Down Expand Up @@ -87,7 +88,8 @@ public ReleaserBuilder<R> configureWith(JReleaserContext context) {
if (!artifact.isActive() || artifact.extraPropertyIsTrue(KEY_SKIP_RELEASE)) continue;
Path path = artifact.getEffectivePath(context);
artifacts.add(Artifact.of(path, artifact.getExtraProperties()));
if (service.isChecksums() && isIndividual(context, artifact)) {
if (service.isChecksums() && isIndividual(context, artifact) &&
!artifact.extraPropertyIsTrue(KEY_SKIP_CHECKSUM)) {
for (Algorithm algorithm : context.getModel().getChecksum().getAlgorithms()) {
artifacts.add(Artifact.of(context.getChecksumsDirectory()
.resolve(path.getFileName() + "." + algorithm.formatted())));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ interface Checksum {

Property<Boolean> getIndividual()

Property<Boolean> getFiles()

ListProperty<Algorithm> getAlgorithms()

void algorithm(String algorithm)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,22 @@ import static org.jreleaser.util.StringUtils.isNotBlank
class ChecksumImpl implements Checksum {
final Property<String> name
final Property<Boolean> individual
final Property<Boolean> files
final ListProperty<Algorithm> algorithms

@Inject
ChecksumImpl(ObjectFactory objects) {
name = objects.property(String).convention(Providers.notDefined())
individual = objects.property(Boolean).convention(Providers.notDefined())
files = objects.property(Boolean).convention(Providers.notDefined())
algorithms = objects.listProperty(Algorithm).convention(Providers.notDefined())
}

@Internal
boolean isSet() {
return name.present ||
individual.present
individual.present ||
files.present
}

@Override
Expand All @@ -65,6 +68,7 @@ class ChecksumImpl implements Checksum {
org.jreleaser.model.Checksum checksum = new org.jreleaser.model.Checksum()
if (name.present) checksum.name = name.get()
if (individual.present) checksum.individual = individual.get()
if (files.present) checksum.files = files.get()
checksum.algorithms = (Set<Algorithm>) algorithms.getOrElse([])
checksum
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ public class Checksum {
private final Set<Algorithm> algorithms = new LinkedHashSet<>();
private Boolean individual;
private String name;
private Boolean files;

void setAll(Checksum checksum) {
this.name = checksum.name;
this.individual = checksum.individual;
setAlgorithms(checksum.algorithms);
this.files = checksum.files;
}

public String getName() {
Expand Down Expand Up @@ -65,4 +67,16 @@ public void setAlgorithms(Set<Algorithm> algorithms) {
this.algorithms.clear();
this.algorithms.addAll(algorithms);
}

public Boolean isFiles() {
return files == null || files;
}

public boolean isFilesSet() {
return files != null;
}

public void setFiles(Boolean files) {
this.files = files;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,7 @@ private static org.jreleaser.model.Checksum convertChecksum(Checksum checksum) {
s.setName(checksum.getName());
s.setIndividual(checksum.isIndividual());
s.setAlgorithms(checksum.getAlgorithms());
if (checksum.isFilesSet()) s.setFiles(checksum.isFiles());
return s;
}

Expand Down

0 comments on commit 77db948

Please sign in to comment.