]> source.dussan.org Git - archiva.git/commitdiff
[MRM-535] metadata-updater is changing lastUpdating timestamp when it shouldn't
authorJoakim Erdfelt <joakime@apache.org>
Tue, 16 Oct 2007 01:31:40 +0000 (01:31 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Tue, 16 Oct 2007 01:31:40 +0000 (01:31 +0000)
Correcting logic in snapshot metadata to only update on the following conditions.
* Last Updated exist in original metadata.xml or ...
* Last Updated timestamp as found in unique (timestamped) snapshots is newer.

git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@584994 13f79535-47bb-0310-9956-ffa450edef68

archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java

index 9e60e2d1650f429b0de5cd4ed5e961410624b91a..d6a0f91342f506b709fb7e3d935fae7699744fc2 100644 (file)
@@ -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 );