1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.impl.resolver;
20
21 import java.time.Instant;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.LinkedHashMap;
25 import java.util.Map;
26
27 import org.apache.maven.api.Constants;
28 import org.apache.maven.api.MonotonicClock;
29 import org.eclipse.aether.RepositorySystemSession;
30 import org.eclipse.aether.artifact.Artifact;
31 import org.eclipse.aether.deployment.DeployRequest;
32 import org.eclipse.aether.impl.MetadataGenerator;
33 import org.eclipse.aether.metadata.Metadata;
34 import org.eclipse.aether.util.ConfigUtils;
35
36
37
38
39
40
41 class RemoteSnapshotMetadataGenerator implements MetadataGenerator {
42
43 private final Map<Object, RemoteSnapshotMetadata> snapshots;
44
45 private final Instant timestamp;
46
47 private final Integer buildNumber;
48
49 RemoteSnapshotMetadataGenerator(RepositorySystemSession session, DeployRequest request) {
50 timestamp = (Instant) ConfigUtils.getObject(session, MonotonicClock.now(), Constants.MAVEN_START_INSTANT);
51 Object bn = ConfigUtils.getObject(session, null, Constants.MAVEN_DEPLOY_SNAPSHOT_BUILD_NUMBER);
52 if (bn instanceof Integer) {
53 this.buildNumber = (Integer) bn;
54 } else if (bn instanceof String) {
55 this.buildNumber = Integer.valueOf((String) bn);
56 } else {
57 this.buildNumber = null;
58 }
59
60 snapshots = new LinkedHashMap<>();
61
62
63
64
65
66
67
68 for (Metadata metadata : request.getMetadata()) {
69 if (metadata instanceof RemoteSnapshotMetadata) {
70 RemoteSnapshotMetadata snapshotMetadata = (RemoteSnapshotMetadata) metadata;
71 snapshots.put(snapshotMetadata.getKey(), snapshotMetadata);
72 }
73 }
74 }
75
76 @Override
77 public Collection<? extends Metadata> prepare(Collection<? extends Artifact> artifacts) {
78 for (Artifact artifact : artifacts) {
79 if (artifact.isSnapshot()) {
80 Object key = RemoteSnapshotMetadata.getKey(artifact);
81 RemoteSnapshotMetadata snapshotMetadata = snapshots.get(key);
82 if (snapshotMetadata == null) {
83 snapshotMetadata = new RemoteSnapshotMetadata(artifact, timestamp, buildNumber);
84 snapshots.put(key, snapshotMetadata);
85 }
86 snapshotMetadata.bind(artifact);
87 }
88 }
89
90 return snapshots.values();
91 }
92
93 @Override
94 public Artifact transformArtifact(Artifact artifact) {
95 if (artifact.isSnapshot() && artifact.getVersion().equals(artifact.getBaseVersion())) {
96 Object key = RemoteSnapshotMetadata.getKey(artifact);
97 RemoteSnapshotMetadata snapshotMetadata = snapshots.get(key);
98 if (snapshotMetadata != null) {
99 artifact = artifact.setVersion(snapshotMetadata.getExpandedVersion(artifact));
100 }
101 }
102
103 return artifact;
104 }
105
106 @Override
107 public Collection<? extends Metadata> finish(Collection<? extends Artifact> artifacts) {
108 return Collections.emptyList();
109 }
110 }