protected void addRepositoryDetails( Request request, SearchNGResponse response, Repository repository) { boolean add = true; for (NexusNGRepositoryDetail repoDetail : response.getRepoDetails()) { if (repoDetail.getRepositoryId().equals(repository.getId())) { add = false; break; } } if (add) { NexusNGRepositoryDetail repoDetail = new NexusNGRepositoryDetail(); repoDetail.setRepositoryId(repository.getId()); repoDetail.setRepositoryName(repository.getName()); repoDetail.setRepositoryURL( createRepositoryReference(request, repository.getId()).getTargetRef().toString()); repoDetail.setRepositoryContentClass(repository.getRepositoryContentClass().getId()); repoDetail.setRepositoryKind(extractRepositoryKind(repository)); MavenRepository mavenRepo = repository.adaptToFacet(MavenRepository.class); if (mavenRepo != null) { repoDetail.setRepositoryPolicy(mavenRepo.getRepositoryPolicy().name()); } response.addRepoDetail(repoDetail); } }
public boolean releaseExistsForSnapshot(Gav snapshotGav, Map<String, Object> context) { for (Repository repository : repositoryRegistry.getRepositories()) { // we need to filter for: // repository that is MavenRepository and is hosted or proxy // repository that has release policy if (repository.getRepositoryKind().isFacetAvailable(MavenHostedRepository.class) || repository.getRepositoryKind().isFacetAvailable(MavenProxyRepository.class)) { // actually, we don't care is it proxy or hosted, we only need to filter out groups and // other // "composite" reposes like shadows MavenRepository mrepository = repository.adaptToFacet(MavenRepository.class); // look in release reposes only if (mrepository.isUserManaged() && RepositoryPolicy.RELEASE.equals(mrepository.getRepositoryPolicy())) { try { String releaseVersion = null; // NEXUS-3148 if (snapshotGav.getBaseVersion().endsWith("-SNAPSHOT")) { // "-SNAPSHOT" :== 9 chars releaseVersion = snapshotGav .getBaseVersion() .substring(0, snapshotGav.getBaseVersion().length() - 9); } else { // "SNAPSHOT" :== 8 chars releaseVersion = snapshotGav .getBaseVersion() .substring(0, snapshotGav.getBaseVersion().length() - 8); } Gav releaseGav = new Gav( snapshotGav.getGroupId(), snapshotGav.getArtifactId(), releaseVersion, snapshotGav.getClassifier(), snapshotGav.getExtension(), null, null, null, false, null, false, null); String path = mrepository.getGavCalculator().gavToPath(releaseGav); ResourceStoreRequest req = new ResourceStoreRequest(path, true); req.getRequestContext().putAll(context); mrepository.retrieveItem(false, req); return true; } catch (ItemNotFoundException e) { // nothing } catch (Exception e) { // nothing } } } } return false; }
/** * Removes the snapshots from maven repository. * * @param repository the repository * @throws Exception the exception */ protected SnapshotRemovalRepositoryResult removeSnapshotsFromMavenRepository( MavenRepository repository, SnapshotRemovalRequest request) { TaskUtil.checkInterruption(); SnapshotRemovalRepositoryResult result = new SnapshotRemovalRepositoryResult(repository.getId(), 0, 0, true); if (!repository.getLocalStatus().shouldServiceRequest()) { return result; } // we are already processed here, so skip repo if (request.isProcessedRepo(repository.getId())) { return new SnapshotRemovalRepositoryResult(repository.getId(), true); } request.addProcessedRepo(repository.getId()); // if this is not snap repo, do nothing if (!RepositoryPolicy.SNAPSHOT.equals(repository.getRepositoryPolicy())) { return result; } if (getLogger().isDebugEnabled()) { getLogger() .debug( "Collecting deletable snapshots on repository " + repository.getId() + " from storage directory " + repository.getLocalUrl()); } request.getMetadataRebuildPaths().clear(); // create a walker to collect deletables and let it loose on collections only SnapshotRemoverWalkerProcessor snapshotRemoveProcessor = new SnapshotRemoverWalkerProcessor(repository, request); DefaultWalkerContext ctxMain = new DefaultWalkerContext( repository, new ResourceStoreRequest("/"), new DottedStoreWalkerFilter()); ctxMain.getProcessors().add(snapshotRemoveProcessor); walker.walk(ctxMain); if (ctxMain.getStopCause() != null) { result.setSuccessful(false); } // and collect results result.setDeletedSnapshots(snapshotRemoveProcessor.getDeletedSnapshots()); result.setDeletedFiles(snapshotRemoveProcessor.getDeletedFiles()); if (getLogger().isDebugEnabled()) { getLogger() .debug( "Collected and deleted " + snapshotRemoveProcessor.getDeletedSnapshots() + " snapshots with alltogether " + snapshotRemoveProcessor.getDeletedFiles() + " files on repository " + repository.getId()); } repository.expireCaches(new ResourceStoreRequest(RepositoryItemUid.PATH_ROOT)); RecreateMavenMetadataWalkerProcessor metadataRebuildProcessor = new RecreateMavenMetadataWalkerProcessor(getLogger()); for (String path : request.getMetadataRebuildPaths()) { DefaultWalkerContext ctxMd = new DefaultWalkerContext( repository, new ResourceStoreRequest(path), new DottedStoreWalkerFilter()); ctxMd.getProcessors().add(metadataRebuildProcessor); try { walker.walk(ctxMd); } catch (WalkerException e) { if (!(e.getCause() instanceof ItemNotFoundException)) { // do not ignore it throw e; } } } return result; }
@Override public Object upload(Context context, Request request, Response response, List<FileItem> files) throws ResourceException { // we have "nibbles": (params,fileA,[fileB])+ // the second file is optional // if two files are present, one of them should be POM String repositoryId = null; boolean hasPom = false; boolean isPom = false; InputStream is = null; String groupId = null; String artifactId = null; String version = null; String classifier = null; String packaging = null; String extension = null; ArtifactCoordinate coords = null; PomArtifactManager pomManager = new PomArtifactManager(getNexus().getNexusConfiguration().getTemporaryDirectory()); try { for (FileItem fi : files) { if (fi.isFormField()) { // a parameter if ("r".equals(fi.getFieldName())) { repositoryId = fi.getString(); } else if ("g".equals(fi.getFieldName())) { groupId = fi.getString(); } else if ("a".equals(fi.getFieldName())) { artifactId = fi.getString(); } else if ("v".equals(fi.getFieldName())) { version = fi.getString(); } else if ("p".equals(fi.getFieldName())) { packaging = fi.getString(); } else if ("c".equals(fi.getFieldName())) { classifier = fi.getString(); } else if ("e".equals(fi.getFieldName())) { extension = fi.getString(); } else if ("hasPom".equals(fi.getFieldName())) { hasPom = Boolean.parseBoolean(fi.getString()); } coords = new ArtifactCoordinate(); coords.setGroupId(groupId); coords.setArtifactId(artifactId); coords.setVersion(version); coords.setPackaging(packaging); } else { // a file isPom = fi.getName().endsWith(".pom") || fi.getName().endsWith("pom.xml"); ArtifactStoreRequest gavRequest = null; if (hasPom) { if (isPom) { // let it "thru" the pomManager to be able to get GAV from it on later pass pomManager.storeTempPomFile(fi.getInputStream()); is = pomManager.getTempPomFileInputStream(); } else { is = fi.getInputStream(); } try { coords = pomManager.getArtifactCoordinateFromTempPomFile(); } catch (IOException e) { getLogger().info(e.getMessage()); throw new ResourceException( Status.CLIENT_ERROR_BAD_REQUEST, "Error occurred while reading the POM file. Malformed POM?"); } if (isPom) { gavRequest = getResourceStoreRequest( request, true, repositoryId, coords.getGroupId(), coords.getArtifactId(), coords.getVersion(), coords.getPackaging(), null, null); } else { gavRequest = getResourceStoreRequest( request, true, repositoryId, coords.getGroupId(), coords.getArtifactId(), coords.getVersion(), coords.getPackaging(), classifier, extension); } } else { is = fi.getInputStream(); gavRequest = getResourceStoreRequest( request, true, repositoryId, groupId, artifactId, version, packaging, classifier, extension); } MavenRepository mr = gavRequest.getMavenRepository(); ArtifactStoreHelper helper = mr.getArtifactStoreHelper(); // temporarily we disable SNAPSHOT upload // check is it a Snapshot repo if (RepositoryPolicy.SNAPSHOT.equals(mr.getRepositoryPolicy())) { getLogger() .info("Upload to SNAPSHOT maven repository attempted, returning Bad Request."); throw new ResourceException( Status.CLIENT_ERROR_BAD_REQUEST, "This is a Maven SNAPSHOT repository, and manual upload against it is forbidden!"); } if (!versionMatchesPolicy(gavRequest.getVersion(), mr.getRepositoryPolicy())) { getLogger() .warn("Version (" + gavRequest.getVersion() + ") and Repository Policy mismatch"); throw new ResourceException( Status.CLIENT_ERROR_BAD_REQUEST, "The version " + gavRequest.getVersion() + " does not match the repository policy!"); } if (isPom) { helper.storeArtifactPom(gavRequest, is, null); isPom = false; } else { if (hasPom) { helper.storeArtifact(gavRequest, is, null); } else { helper.storeArtifactWithGeneratedPom(gavRequest, packaging, is, null); } } } } } catch (Throwable t) { return buildUploadFailedHtmlResponse(t, request, response); } finally { if (hasPom) { pomManager.removeTempPomFile(); } } return coords; }