1 package jetbrains.buildServer.nuget.server.trigger;
\r
3 import jetbrains.buildServer.buildTriggers.BuildTriggerDescriptor;
\r
4 import jetbrains.buildServer.buildTriggers.BuildTriggerException;
\r
5 import jetbrains.buildServer.nuget.server.exec.ListPackagesCommand;
\r
6 import jetbrains.buildServer.nuget.server.exec.PackageInfo;
\r
7 import jetbrains.buildServer.serverSide.CustomDataStorage;
\r
8 import jetbrains.buildServer.util.StringUtil;
\r
9 import org.jetbrains.annotations.NotNull;
\r
11 import java.io.File;
\r
15 * Created by Eugene Petrenko (eugene.petrenko@gmail.com)
\r
16 * Date: 14.07.11 15:41
\r
18 public class NamedPackagesUpdateChecker implements TriggerUpdateChecker {
\r
19 public static final String KEY = "hash";
\r
20 private final ListPackagesCommand myCommand;
\r
22 public NamedPackagesUpdateChecker(@NotNull final ListPackagesCommand command) {
\r
23 myCommand = command;
\r
26 public BuildStartReason checkChanges(@NotNull BuildTriggerDescriptor descriptor,
\r
27 @NotNull CustomDataStorage storage) throws BuildTriggerException {
\r
28 final String path = descriptor.getProperties().get(TriggerConstants.NUGET_EXE);
\r
29 final String pkgId = descriptor.getProperties().get(TriggerConstants.PACKAGE);
\r
30 final String version = descriptor.getProperties().get(TriggerConstants.VERSION);
\r
31 final String source = descriptor.getProperties().get(TriggerConstants.SOURCE);
\r
33 if (StringUtil.isEmptyOrSpaces(path)) {
\r
34 throw new BuildTriggerException("Path to NuGet.exe must be specified");
\r
37 if (StringUtil.isEmptyOrSpaces(pkgId)) {
\r
38 throw new BuildTriggerException("Package Id must be specified");
\r
41 File nugetPath = new File(path);
\r
42 if (!nugetPath.isFile()) {
\r
43 throw new BuildTriggerException("Failed to find NuGet.exe at: " + nugetPath);
\r
46 Collection<PackageInfo> result;
\r
48 result = myCommand.checkForChanges(nugetPath, source, pkgId, version);
\r
49 } catch (Throwable t) {
\r
50 throw new BuildTriggerException("Failed to check for package versions. " + t.getMessage(), t);
\r
52 final String hash = serializeHashcode(result);
\r
54 String oldHash = storage.getValue(KEY);
\r
55 if (oldHash != null && !hash.equals(oldHash)) {
\r
56 storage.putValue(KEY, hash);
\r
58 return new BuildStartReason("NuGet Package " + pkgId + " updated");
\r
64 private String serializeHashcode(@NotNull final Collection<PackageInfo> _packages) {
\r
65 List<PackageInfo> sorted = new ArrayList<PackageInfo>(_packages);
\r
66 Collections.sort(sorted, new Comparator<PackageInfo>() {
\r
67 public int compare(PackageInfo o1, PackageInfo o2) {
\r
69 if (0 != (i = o1.getSource().compareTo(o2.getSource()))) return i;
\r
70 if (0 != (i = o1.getPackageId().compareTo(o2.getPackageId()))) return i;
\r
71 if (0 != (i = o1.getVersion().compareTo(o2.getVersion()))) return i;
\r
76 StringBuilder sb = new StringBuilder();
\r
77 for (SourcePackageInfo info : sorted) {
\r
78 String source = info.getSource();
\r
79 if (source != null) {
\r
80 sb.append("|s:").append(source);
\r
82 sb.append("|p:").append(info.getPackageId());
\r
83 sb.append("|v:").append(info.getVersion());
\r
85 return sb.toString();
\r