On 14/10/2009, at 7:03 PM, Deng Ching wrote:

Hi Brett,

On Tue, Oct 13, 2009 at 8:49 PM, Brett Porter <[email protected]> wrote:


On 13/10/2009, at 9:36 PM, [email protected] wrote:

-                resource =
- processRepositoryGroup( request, archivaLocator,
repoGroupConfig.getRepositories(),
-                                            activePrincipal,
resourcesInAbsolutePath );
+                try
+                {
+                    resource =
+ processRepositoryGroup( request, archivaLocator,
repoGroupConfig.getRepositories(),
+                                                activePrincipal,
resourcesInAbsolutePath );
+                }
+                catch ( ReleaseArtifactAlreadyExistsException e )
+                {
+                    throw new DavException(
HttpServletResponse.SC_CONFLICT );
+                }



it might make more sense just to throw this at the source and eliminate the
exception, since the result is always the same?


agreed :)



       // MRM-872 : merge all available metadata
      // merge metadata only when requested via the repo group
- if ( ( repositoryRequest.isMetadata( requestedResource ) || (
requestedResource.endsWith( "metadata.xml.sha1" ) ||
requestedResource.endsWith( "metadata.xml.md5" ) ) )
-            && repoGroupConfig != null )
+ if ( ( repositoryRequest.isMetadata( requestedResource ) || (
requestedResource.endsWith( "metadata.xml.sha1" ) ||
requestedResource.endsWith( "metadata.xml.md5" ) ) ) &&
+            repoGroupConfig != null )


Should this use "isSupportFile" like below? That will cover the two
metadata checksums


.. but it will also get the other non-metadata checksum files so I don't
think we can use isSupportFile(..) here


ok - could the check be moved to the repository request (eg, isMetadataSupportFile), so that it is all in one spot?




@@ -482,6 +496,35 @@

          if ( request.getMethod().equals( HTTP_PUT_METHOD ) )
          {
+                String resourcePath = logicalResource.getPath();
+
+                // check if target repo is enabled for releases
+ // we suppose that release-artifacts can deployed only to
repos enabled for releases
+ if ( managedRepository.getRepository().isReleases () &&
!repositoryRequest.isMetadata( resourcePath ) &&
+ !repositoryRequest.isSupportFile ( resourcePath ) )
+                {
+                    ArtifactReference artifact = null;
+                    try
+                    {
+ artifact = managedRepository.toArtifactReference(
resourcePath );
+                    }
+                    catch ( LayoutException e )
+                    {
+                        throw new DavException(
HttpServletResponse.SC_BAD_REQUEST, e );
+                    }
+
+ if ( !VersionUtil.isSnapshot ( artifact.getVersion() )
)
+                    {
+                        // check if artifact already exists
+ if ( managedRepository.hasContent ( artifact ) )
+                        {
+ log.warn( "Overwriting released artifacts is
not allowed." );
+                            throw new
ReleaseArtifactAlreadyExistsException( managedRepository.getId(),
+
   "Overwriting released artifacts is not allowed." );
+                        }
+                    }
+                }
+


Is it necessarily a bad request if the reference can't be derived, or
should the check just be skipped?


I don't think this is just a check though but it's for getting the artifact object and its coordinates. Maybe we could add a fall back for getting the artifact obj & its coordinates when a LayoutException is thrown instead of
immediately propagating it as a bad request error?

The check I meant was the VersionUtil bit.

Say you are trying to store /foo.txt using webdav, which is not a valid artifact. I believe this was still allowed previously (though I might be wrong) - but now it will be a bad request because of the artifact path, when all it needs that for is to check if it is a release. Does that make sense?



Also, given this is a point release (1.2.3), I don't think this kind of
functionality change should be imposed on users - can we offer a
configuration option?


+1
I've left the issue open yesterday since this functionality also needs to be
applied to the web upload.

Thanks,
Deng


Thanks!

- Brett

Reply via email to