Created
February 19, 2018 07:51
-
-
Save serdroid/c9bc0a7b2b8b4c6988caec4e28cd09d8 to your computer and use it in GitHub Desktop.
nexus-3 repository clean groovy script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.sonatype.nexus.repository.storage.Asset; | |
import org.sonatype.nexus.repository.storage.Component; | |
import org.sonatype.nexus.repository.storage.Query; | |
import org.sonatype.nexus.repository.storage.StorageFacet; | |
import org.sonatype.nexus.repository.storage.Query.Builder; | |
import groovy.json.JsonOutput; | |
import groovy.json.JsonSlurper; | |
def request = new JsonSlurper().parseText(args); | |
assert request.repoName: 'repoName parameter is required'; | |
def count = request.count ?: 5; | |
def compInfo = { Component c -> "{${c.group()}:${c.name()}:${c.version()}:${c.lastUpdated()}}" }; | |
def repo = repository.repositoryManager.get(request.repoName); | |
StorageFacet storageFacet = repo.facet(StorageFacet); | |
def tx = storageFacet.txSupplier().get(); | |
def urls = []; | |
Builder qBuilder = Query.builder(); | |
if ( request.groupId != null ) | |
qBuilder.where('group = ').param(request.groupId); | |
if ( request.artifactId != null ) { | |
if (qBuilder.hasWhere()) { | |
qBuilder.and('name = ').param(request.artifactId); | |
} else { | |
qBuilder.where('name = ').param(request.artifactId); | |
}; | |
}; | |
tx.begin(); | |
Iterable<Component> comps = tx.findComponents(qBuilder.build(), [repo]); | |
tx.close(); | |
def componentByName = [:]; | |
for(Component comp : comps) { | |
if(componentByName.containsKey( comp.name() )) { | |
componentByName.get(comp.name()).add(comp); | |
} else { | |
componentByName.put(comp.name(), [comp]); | |
}; | |
}; | |
def toDelete = []; | |
for(List<Component> compList : componentByName.values()) { | |
if ( compList.size() > count ) { | |
compList.sort( { a,b-> a.lastUpdated() <=> b.lastUpdated() } ); | |
for( int idx = 0; idx < compList.size() - count; ++idx) { | |
toDelete.add(compList.get(idx)); | |
} | |
} | |
}; | |
if(request.delete) { | |
toDelete.each({ | |
tx2 = storageFacet.txSupplier().get(); | |
tx2.begin(); | |
tx2.deleteComponent(it); | |
tx2.commit(); | |
tx2.close(); | |
}); | |
log.info(toDelete.size() + " components deleted"); | |
}; | |
return toDelete.flatten(compInfo); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment