Diff assert: handle the case when build revision is same as upper limit revision
authorDmitry Neverov <dmitry.neverov@gmail.com>
Thu, 12 Apr 2018 10:12:26 +0000 (12:12 +0200)
committerDmitry Neverov <dmitry.neverov@gmail.com>
Thu, 12 Apr 2018 10:13:32 +0000 (12:13 +0200)
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/UpdaterImpl.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/command/impl/DiffCommandImpl.java
git-tests/src/jetbrains/buildServer/buildTriggers/vcs/git/tests/DiffWithUpperLimitRevisionTest.java

index 189b74c90f73a65338f61c6f440ebd145d17778c..1cf02290b69f52f586348c761532d2ba660b5fb1 100644 (file)
@@ -1066,6 +1066,12 @@ public class UpdaterImpl implements Updater {
         myLogger.warning("Failed to fetch " + upperLimitRevision + ", will not analyze diff with upper limit revision");
         return;
       }
+
+      if (myRevision.equals(upperLimitRevision)) {
+        myLogger.message("Build revision is the same as the upper limit revision, skip checking diff");
+        return;
+      }
+
       List<String> pathsMatchedByRules = getChangedFilesMatchedByRules(upperLimitRevision);
       if (!pathsMatchedByRules.isEmpty()) {
         StringBuilder msg = new StringBuilder();
@@ -1080,6 +1086,8 @@ public class UpdaterImpl implements Updater {
         myLogger.error(msg.toString());
         String type = "UpperLimitRevisionDiff";
         myLogger.logBuildProblem(BuildProblemData.createBuildProblem(type + myRoot.getId(), type, "Diff with upper limit revision found"));
+      } else {
+        myLogger.message("No diff matched by checkout rules found");
       }
     } finally {
       myLogger.activityFinished(message, GitBuildProgressLogger.GIT_PROGRESS_ACTIVITY);
index 6f8b051e3e5e1ec3a968cc96c3f319da909f5349..58f3be51b2e4aafbbad6ae4bbe96cb1879a09727 100644 (file)
@@ -24,6 +24,7 @@ import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class DiffCommandImpl extends BaseCommandImpl implements DiffCommand {
@@ -73,6 +74,7 @@ public class DiffCommandImpl extends BaseCommandImpl implements DiffCommand {
     }
 
     ExecResult r = CommandUtil.runCommand(cmd);
-    return Arrays.asList(StringUtil.splitByLines(r.getStdout().trim()));
+    String stdout = r.getStdout().trim();
+    return StringUtil.isEmpty(stdout) ? Collections.<String>emptyList() : Arrays.asList(StringUtil.splitByLines(stdout));
   }
 }
index b4d2c2533114d1cce8a50e968c51a979e2da1a25..41c6239118762215a9744ebe94c8d043fefa805d 100644 (file)
@@ -96,6 +96,14 @@ public class DiffWithUpperLimitRevisionTest extends BaseRemoteRepositoryTest {
   }
 
 
+  public void no_error_when_revisions_are_the_same() throws Exception {
+    String version = "ad4528ed5c84092fdbe9e0502163cf8d6e6141e7";
+    AgentRunningBuild build = createBuild(version, version);
+    myVcsSupport.updateSources(myRoot, new CheckoutRules("+:.=>dir"), version, myCheckoutDir, build, false);
+    then(myBuildLogger.getErrors()).isEmpty();
+  }
+
+
   private AgentRunningBuild createBuild(@NotNull String buildRevision, @Nullable String upperLimitRevision, String... additionalParams) {
     String rootExtId = "RootExtId";
     Map<String, String> params = new HashMap<>();