private IArtifactRequest[] getRequestsForRepository(IArtifactRepository repository) { ArrayList<IArtifactRequest> applicable = new ArrayList<IArtifactRequest>(); for (IArtifactRequest request : requestsToProcess) { if (repository.contains(request.getArtifactKey())) applicable.add(request); } return applicable.toArray(new IArtifactRequest[applicable.size()]); }
public void addRepositories(Collection<IArtifactRepository> repositories) { LinkedList<IArtifactRepository> todo = new LinkedList<>(repositories); while (!todo.isEmpty()) { IArtifactRepository repo = todo.removeFirst(); String base = repo.getProperties().get(IRepository.PROP_MIRRORS_BASE_URL); String mirror = repo.getProperties().get(IRepository.PROP_MIRRORS_URL); String stats = repo.getProperties().get("p2.statsURI"); // no public // constant CompositeArtifactRepository composite = repo.getAdapter(CompositeArtifactRepository.class); if (composite != null) todo.addAll(composite.getLoadedChildren()); // constant if (mirror == null) continue; // be a bit paranoid and sanitize these values if (base != null && base.isEmpty()) base = null; if (stats != null && stats.isEmpty()) stats = null; if (base == null) base = repo.getLocation().toString(); mirrorFiles.put(repo.getLocation(), new RepoMirror(base, mirror, stats)); } }
/** * Given a list of IArtifactKeys and an IArtifactRepository, removes all artifacts * in aRepository that are not mapped to by an IArtifactKey in markSet */ public synchronized void clean(IArtifactKey[] markSet, final IArtifactRepository aRepository) { Set<IArtifactKey> set = new HashSet<>(Arrays.asList(markSet)); //this query will match all artifact keys that are not in the given set IQuery<IArtifactKey> query = QueryUtil.createQuery(IArtifactKey.class, "unique($0)", set); //$NON-NLS-1$ final IQueryResult<IArtifactKey> inactive = aRepository.query(query, null); aRepository.executeBatch(monitor -> { for (Iterator<IArtifactKey> iterator = inactive.iterator(); iterator.hasNext();) { IArtifactKey key = iterator.next(); aRepository.removeDescriptor(key, new NullProgressMonitor()); if (debugMode) { Tracing.debug("Key removed:" + key); //$NON-NLS-1$ } } }, new NullProgressMonitor()); }
/** * Given a list of IArtifactKeys and an IArtifactRepository, removes all artifacts * in aRepository that are not mapped to by an IArtifactKey in markSet */ public synchronized void clean(IArtifactKey[] markSet, final IArtifactRepository aRepository) { Set<IArtifactKey> set = new HashSet<IArtifactKey>(Arrays.asList(markSet)); //this query will match all artifact keys that are not in the given set IQuery<IArtifactKey> query = QueryUtil.createQuery(IArtifactKey.class, "unique($0)", set); //$NON-NLS-1$ final IQueryResult<IArtifactKey> inactive = aRepository.query(query, null); aRepository.executeBatch(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { for (Iterator<IArtifactKey> iterator = inactive.iterator(); iterator.hasNext();) { IArtifactKey key = iterator.next(); aRepository.removeDescriptor(key); if (debugMode) { Tracing.debug("Key removed:" + key); //$NON-NLS-1$ } } } }, new NullProgressMonitor()); }
if (destination == null || destination.contains(descriptor)) return; destination.addDescriptor(descriptor); return; File descriptorFile = ((IFileArtifactRepository) destination).getArtifactFile(descriptor); if (inclusion.equals(descriptorFile)) { destination.addDescriptor(descriptor); return; OutputStream output = destination.getOutputStream(descriptor); if (output == null) return;
setSourceRepository(sourceRepository); if (target.contains(getArtifactKey())) { setResult(new Status(IStatus.OK, Activator.ID, NLS.bind(Messages.available_already_in, getArtifactKey()))); return; IArtifactDescriptor canonical = null; if (descriptor == null) { IArtifactDescriptor[] descriptors = source.getArtifactDescriptors(getArtifactKey()); if (descriptors.length > 0) { for (int i = 0; i < descriptors.length; i++) { optimized = descriptors[i]; boolean chooseCanonical = source.getLocation().getScheme().equals("file"); //$NON-NLS-1$ if (target.contains(destinationDescriptor)) target.removeDescriptor(destinationDescriptor);
private IStatus getRawOrNormalArtifact(IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor, boolean raw) { for (Iterator<ChildInfo> childIterator = loadedRepos.iterator(); childIterator.hasNext();) { ChildInfo current = childIterator.next(); if (current.isGood() && current.repo.contains(descriptor)) { // Child hasn't failed & contains descriptor IStatus status = raw ? current.repo.getRawArtifact(descriptor, destination, monitor) : current.repo.getArtifact(descriptor, destination, monitor); if (status.isOK()) { //we are done with this artifact so forgive bad children so they can try again on next artifact resetChildFailures(); return Status.OK_STATUS; } // Download failed if (status.getCode() == CODE_RETRY || status.getCode() == IStatus.CANCEL) // Child has mirrors & wants to be retried, or we were canceled return status; // Child has failed us, mark it bad current.setBad(true); // If more children are available, set retry if (childIterator.hasNext()) return new MultiStatus(Activator.ID, CODE_RETRY, new IStatus[] {status}, NLS.bind(Messages.retryRequest, descriptor.getArtifactKey(), current.repo.getLocation()), null); // Nothing that can be done, pass child's failure on resetChildFailures(); return status; } if (monitor.isCanceled()) return Status.CANCEL_STATUS; } return new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.artifact_not_found, descriptor)); }
setSourceRepository(sourceRepository); if (target.contains(targetDescriptor)) { setResult(new Status(IStatus.INFO, Activator.ID, NLS.bind(Messages.mirror_alreadyExists, targetDescriptor, target))); return; if (!source.contains(getArtifactDescriptor())) { setResult(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.artifact_not_found, getArtifactKey()))); return; if (target.contains(targetDescriptor)) target.removeDescriptor(targetDescriptor);
@Override protected void publishArtifact(IArtifactDescriptor descriptor, File jarFile, IPublisherInfo publisherInfo) { // no files to publish so this is done. if (jarFile == null || publisherInfo == null) return; // if the destination already contains the descriptor, there is nothing to do. IArtifactRepository destination = publisherInfo.getArtifactRepository(); if (destination == null || destination.contains(descriptor)) return; super.publishArtifact(descriptor, jarFile, publisherInfo); // if we are assimilating pack200 files then add the packed descriptor // into the repo assuming it does not already exist. boolean reuse = "true".equals(destination.getProperties().get(AbstractPublisherApplication.PUBLISH_PACK_FILES_AS_SIBLINGS)); //$NON-NLS-1$ if (reuse && (publisherInfo.getArtifactOptions() & IPublisherInfo.A_PUBLISH) > 0) { File packFile = new Path(jarFile.getAbsolutePath()).addFileExtension("pack.gz").toFile(); //$NON-NLS-1$ if (packFile.exists()) { IArtifactDescriptor ad200 = createPack200ArtifactDescriptor(descriptor.getArtifactKey(), packFile, descriptor.getProperty(IArtifactDescriptor.ARTIFACT_SIZE)); publishArtifact(ad200, packFile, publisherInfo); } } }
private IStatus transferSingle(IArtifactDescriptor destinationDescriptor, IArtifactDescriptor sourceDescriptor, IProgressMonitor monitor) { OutputStream destination; try { destination = target.getOutputStream(destinationDescriptor); } catch (ProvisionException e) { return e.getStatus(); } IStatus status = null; // Do the actual transfer try { status = getArtifact(sourceDescriptor, destination, monitor); if (destination instanceof IStateful && status != null && !status.isOK()) { IStatus destStatus = ((IStateful) destination).getStatus(); IStatus root = extractRootCause(status); Throwable e = root != null ? root.getException() : null; ((IStateful) destination).setStatus(new MultiStatus(Activator.ID, status.getCode(), new IStatus[] {status, destStatus}, status.getMessage(), e)); } } finally { try { destination.close(); } catch (IOException e) { if (status != null && status.getSeverity() == IStatus.ERROR && status.getCode() == IArtifactRepository.CODE_RETRY) return new MultiStatus(Activator.ID, status.getCode(), new IStatus[] {status}, NLS.bind(Messages.error_closing_stream, getArtifactKey(), target.getLocation()), e); return new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.error_closing_stream, getArtifactKey(), target.getLocation()), e); } } return status; }
public URI getLocation() { return innerRepo.getLocation(); }
public IQueryResult<IArtifactKey> query(IQuery<IArtifactKey> query, IProgressMonitor monitor) { return delegate.query(query, monitor); }
public IArtifactDescriptor createArtifactDescriptor(IArtifactKey key) { return innerRepo.createArtifactDescriptor(key); }
IQueryResult<IArtifactKey> keys = null; try { keys = (repo != null) ? repo.query(ArtifactKeyQuery.ALL_KEYS, null) : null; } catch (UnsupportedOperationException e) { interpreter.println("Repository does not support queries."); return; IFileArtifactRepository fileRepo = (IFileArtifactRepository) repo.getAdapter(IFileArtifactRepository.class); for (Iterator<IArtifactKey> iterator = keys.iterator(); iterator.hasNext();) { IArtifactKey key = iterator.next(); IArtifactDescriptor[] descriptors = repo.getArtifactDescriptors(key); for (int j = 0; j < descriptors.length; j++) { IArtifactDescriptor descriptor = descriptors[j];
public IArtifactDescriptor[] getArtifactDescriptors(IArtifactKey key) { return delegate.getArtifactDescriptors(key); }
public void initializeRepository(IArtifactRepository repository, URI location, IProgressMonitor monitor) throws ProvisionException { UpdateSite updateSite = UpdateSite.load(location, (Transport) getAgent().getService(Transport.SERVICE_NAME), monitor); String savedChecksum = repository.getProperties().get(PROP_SITE_CHECKSUM); if (savedChecksum != null && savedChecksum.equals(updateSite.getChecksum())) return; if (!location.getScheme().equals(PROTOCOL_FILE)) repository.setProperty(PROP_FORCE_THREADING, "true"); //$NON-NLS-1$ repository.setProperty(PROP_SITE_CHECKSUM, updateSite.getChecksum()); if (updateSite.getSite().getMirrorsURI() != null) repository.setProperty(IRepository.PROP_MIRRORS_URL, updateSite.getSite().getMirrorsURI()); repository.removeAll(); generateArtifactDescriptors(updateSite, repository, monitor); }
public IQueryable<IArtifactDescriptor> descriptorQueryable() { return delegate.descriptorQueryable(); }
public void save() { innerRepo.executeBatch(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { savePropertyChanges(); saveAdditions(); saveRemovals(); } }, null); }
public Map<String, String> getProperties() { // TODO need to combine the local and inner properties return innerRepo.getProperties(); }
void saveRemovals() { for (IArtifactDescriptor desc : descriptorsToRemove) innerRepo.removeDescriptor(desc); descriptorsToRemove.clear(); }