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.SourcePackageInfo;
\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<SourcePackageInfo> 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<SourcePackageInfo> _packages) {
\r
65 List<SourcePackageInfo> sorted = new ArrayList<SourcePackageInfo>(_packages);
\r
66 Collections.sort(sorted, new Comparator<SourcePackageInfo>() {
\r
67 public int compare(SourcePackageInfo o1, SourcePackageInfo o2) {
\r
69 String s1 = o1.getSource();
\r
70 String s2 = o2.getSource();
\r
71 if (s1 != null && s2 != null && 0 != (i = s1.compareTo(s2))) return i;
\r
72 if (0 != (i = o1.getPackageId().compareTo(o2.getPackageId()))) return i;
\r
73 if (0 != (i = o1.getVersion().compareTo(o2.getVersion()))) return i;
\r
78 StringBuilder sb = new StringBuilder();
\r
79 for (SourcePackageInfo info : sorted) {
\r
80 String source = info.getSource();
\r
81 if (source != null) {
\r
82 sb.append("|s:").append(source);
\r
84 sb.append("|p:").append(info.getPackageId());
\r
85 sb.append("|v:").append(info.getVersion());
\r
87 return sb.toString();
\r