diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java index 9e60e2d16..d6a0f9134 100644 --- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java @@ -501,6 +501,22 @@ public class MetadataTools return cal.getTime(); } + + private long toLastUpdatedLong( String timestampString ) + { + try + { + Date date = lastUpdatedFormat.parse( timestampString ); + Calendar cal = Calendar.getInstance( DateUtils.UTC_TIME_ZONE ); + cal.setTime( date ); + + return cal.getTimeInMillis(); + } + catch ( ParseException e ) + { + return 0; + } + } private long getLastUpdated( ArchivaRepositoryMetadata metadata ) { @@ -570,16 +586,12 @@ public class MetadataTools { File metadataFile = new File( managedRepository.getRepoRoot(), toPath( reference ) ); - long originalLastUpdated = getExistingLastUpdated( metadataFile ); + long lastUpdated = getExistingLastUpdated( metadataFile ); ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata(); metadata.setGroupId( reference.getGroupId() ); metadata.setArtifactId( reference.getArtifactId() ); - if ( originalLastUpdated > 0 ) - { - metadata.setLastUpdatedTimestamp( toLastUpdatedDate( originalLastUpdated ) ); - } - + if ( VersionUtil.isSnapshot( reference.getVersion() ) ) { // Do SNAPSHOT handling. @@ -619,7 +631,11 @@ public class MetadataTools { String tsDate = mtimestamp.group( 1 ); String tsTime = mtimestamp.group( 2 ); - metadata.setLastUpdated( tsDate + tsTime ); + + long snapshotLastUpdated = toLastUpdatedLong( tsDate + tsTime ); + + lastUpdated = Math.max( lastUpdated, snapshotLastUpdated ); + metadata.getSnapshotVersion().setTimestamp( m.group( 2 ) ); } } @@ -631,9 +647,12 @@ public class MetadataTools metadata.setSnapshotVersion( new SnapshotVersion() ); - /* TODO: Should this be the last updated timestamp of the file, or in the case of an + /* Disabled due to decision in [MRM-535]. + * Do not set metadata.lastUpdated to file.lastModified. + * + * Should this be the last updated timestamp of the file, or in the case of an * archive, the most recent timestamp in the archive? - */ + * ArtifactReference artifact = getFirstArtifact( managedRepository, reference ); if ( artifact == null ) @@ -648,6 +667,7 @@ public class MetadataTools Date lastModified = new Date( artifactFile.lastModified() ); metadata.setLastUpdatedTimestamp( lastModified ); } + */ } else { @@ -661,6 +681,12 @@ public class MetadataTools metadata.setVersion( reference.getVersion() ); } + // Set last updated + if ( lastUpdated > 0 ) + { + metadata.setLastUpdatedTimestamp( toLastUpdatedDate( lastUpdated ) ); + } + // Save the metadata model to disk. RepositoryMetadataWriter.write( metadata, metadataFile ); checksums.update( metadataFile );