aboutsummaryrefslogblamecommitdiff
path: root/project/MimaBuild.scala
blob: 182ca7615de67c3293a1fa334c5dba82b1392420 (plain) (tree)































                                                                                     
                                           
                                     





                                        
                                                          

                                           
                                  

                                                               
                                        



                                                                     









                                                                       
 
                                                                         
 
                                                 





                                                                 
 
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

import com.typesafe.tools.mima.plugin.MimaKeys.{binaryIssueFilters, previousArtifact}
import com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings
import sbt._

object MimaBuild {

  def ignoredABIProblems(base: File) = {
    import com.typesafe.tools.mima.core._
    import com.typesafe.tools.mima.core.ProblemFilters._

    // Excludes placed here will be used for all Spark versions
    val defaultExcludes = Seq()

    // Read package-private excludes from file
    val excludeFilePath = (base.getAbsolutePath + "/.mima-excludes")
    val excludeFile = file(excludeFilePath)
    val ignoredClasses: Seq[String] =
      if (!excludeFile.exists()) {
        Seq()
      } else {
        IO.read(excludeFile).split("\n")
      }

    // Exclude a single class and its corresponding object
    def excludeClass(className: String) = {
      Seq(
        excludePackage(className),
        ProblemFilters.exclude[MissingClassProblem](className),
        ProblemFilters.exclude[MissingTypesProblem](className),
        excludePackage(className + "$"),
        ProblemFilters.exclude[MissingClassProblem](className + "$"),
        ProblemFilters.exclude[MissingTypesProblem](className + "$")
      )
    }

    // Exclude a Spark class, that is in the package org.apache.spark
    def excludeSparkClass(className: String) = {
      excludeClass("org.apache.spark." + className)
    }

    // Exclude a Spark package, that is in the package org.apache.spark
    def excludeSparkPackage(packageName: String) = {
      excludePackage("org.apache.spark." + packageName)
    }

    val externalExcludeFileClasses = ignoredClasses.flatMap(excludeClass)

    defaultExcludes ++ externalExcludeFileClasses
  }

  def mimaSettings(sparkHome: File) = mimaDefaultSettings ++ Seq(
    previousArtifact := None,
    binaryIssueFilters ++= ignoredABIProblems(sparkHome)
  )
}