view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgVersionConstraint.java @ 888:207c4ec46d54

CommitSupport: return CommitResult instead of revision
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 03 Nov 2014 12:53:47 +0100
parents 31a1aca3305c
children 7bf4d943d5bb
line wrap: on
line source
/*
 * Copyright 2000-2014 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.TestCommandSettingsFactory;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.VersionCommand;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.ParseHgVersionException;
import org.jetbrains.annotations.NotNull;
import org.testng.annotations.DataProvider;

import java.io.File;
import java.lang.reflect.Method;

public class HgVersionConstraint {

  @DataProvider
  public static Object[][] installedHgVersion(Method testMethod) throws Exception {
    HgVersion actualVersion = getHgVersion();
    RequiredHgVersion constaint = testMethod.getAnnotation(RequiredHgVersion.class);
    if (constaint == null)
      constaint = testMethod.getDeclaringClass().getAnnotation(RequiredHgVersion.class);
    if (constaint == null)
      return new Object[][] { new Object[] { actualVersion }};
    HgVersion requiredMinVersion = parse(constaint.min());
    if (!actualVersion.isEqualsOrGreaterThan(requiredMinVersion))
      return new Object[0][];
    return new Object[][] { new Object[] { actualVersion }};
  }

  private static HgVersion getHgVersion() throws Exception {
    VersionCommand versionCommand = new VersionCommand(new TestCommandSettingsFactory().create(), Util.getHgPath(), new File(".."));
    return versionCommand.call();
  }

  private static HgVersion parse(@NotNull String version) throws ParseHgVersionException {
    return HgVersion.parse("Mercurial Distributed SCM (version " + version);
  }

}