!sbt Use Apache header for new files.
This commit is contained in:
parent
e365e44aea
commit
3323ff6eb3
1 changed files with 49 additions and 43 deletions
|
|
@ -1,3 +1,12 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* license agreements; and to You under the Apache License, version 2.0:
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* This file is part of the Apache Pekko project, derived from Akka.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018-2022 Lightbend Inc. <https://www.lightbend.com>
|
||||
*/
|
||||
|
|
@ -6,8 +15,9 @@ package org.apache.pekko
|
|||
|
||||
import org.apache.pekko.PekkoValidatePullRequest.additionalTasks
|
||||
import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport._
|
||||
import de.heikoseeberger.sbtheader.{ CommentCreator, HeaderPlugin }
|
||||
import de.heikoseeberger.sbtheader.{ CommentCreator, HeaderPlugin, NewLine }
|
||||
import com.typesafe.sbt.MultiJvmPlugin.MultiJvmKeys._
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
import sbt.Keys._
|
||||
import sbt._
|
||||
|
||||
|
|
@ -21,7 +31,7 @@ trait CopyrightHeader extends AutoPlugin {
|
|||
Seq(Compile, Test, MultiJvm).flatMap { config =>
|
||||
inConfig(config)(
|
||||
Seq(
|
||||
headerLicense := Some(HeaderLicense.Custom(headerFor(CurrentYear))),
|
||||
headerLicense := Some(HeaderLicense.Custom(apacheHeader)),
|
||||
headerMappings := headerMappings.value ++ Map(
|
||||
HeaderFileType.scala -> cStyleComment,
|
||||
HeaderFileType.java -> cStyleComment,
|
||||
|
|
@ -40,60 +50,56 @@ trait CopyrightHeader extends AutoPlugin {
|
|||
(Test / compile).value
|
||||
})
|
||||
|
||||
// We hard-code this so PR's created in year X will not suddenly fail in X+1.
|
||||
// Of course we should remember to update it early in the year.
|
||||
val CurrentYear = "2022"
|
||||
val CopyrightPattern = "Copyright \\([Cc]\\) (\\d{4}([-–]\\d{4})?) (Lightbend|Typesafe) Inc. <.*>".r
|
||||
val CopyrightHeaderPattern = s"(?s).*${CopyrightPattern}.*".r
|
||||
|
||||
def headerFor(year: String): String =
|
||||
s"Copyright (C) $year Lightbend Inc. <https://www.lightbend.com>"
|
||||
|
||||
def apacheHeader: String =
|
||||
"""Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
|license agreements; and to You under the Apache License, version 2.0:
|
||||
|
|
||||
| https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
|
||||
|This file is part of the Apache Pekko project, derived from Akka.
|
||||
|""".stripMargin
|
||||
|
||||
val cStyleComment = HeaderCommentStyle.cStyleBlockComment.copy(commentCreator = new CommentCreator() {
|
||||
|
||||
def updateLightbendHeader(header: String): String = header match {
|
||||
case CopyrightHeaderPattern(years, null, _) =>
|
||||
if (years != CurrentYear)
|
||||
CopyrightPattern.replaceFirstIn(header, headerFor(years + "-" + CurrentYear))
|
||||
else
|
||||
CopyrightPattern.replaceFirstIn(header, headerFor(years))
|
||||
case CopyrightHeaderPattern(years, endYears, _) =>
|
||||
CopyrightPattern.replaceFirstIn(header, headerFor(years.replace(endYears, "-" + CurrentYear)))
|
||||
case _ =>
|
||||
header
|
||||
}
|
||||
|
||||
def parseStartAndEndYear(header: String): Option[(String, Option[String])] = header match {
|
||||
case CopyrightHeaderPattern(years, null, _) =>
|
||||
Some((years, None))
|
||||
case CopyrightHeaderPattern(years, endYears, _) =>
|
||||
Some((years, Some(endYears)))
|
||||
case _ =>
|
||||
None
|
||||
}
|
||||
|
||||
override def apply(text: String, existingText: Option[String]): String = {
|
||||
val formatted = existingText match {
|
||||
case Some(existedText) if isValidCopyRightAnnotated(existedText) =>
|
||||
existedText
|
||||
case Some(existedText) if isOnlyLightbendCopyRightAnnotated(existedText) =>
|
||||
HeaderCommentStyle.cStyleBlockComment.commentCreator(text, existingText) + NewLine * 2 + existedText
|
||||
case Some(existedText) =>
|
||||
parseStartAndEndYear(existedText) match {
|
||||
case Some((years, None)) =>
|
||||
if (years != CurrentYear) {
|
||||
val header = headerFor(years + "-" + CurrentYear)
|
||||
HeaderCommentStyle.cStyleBlockComment.commentCreator(header, existingText)
|
||||
} else {
|
||||
HeaderCommentStyle.cStyleBlockComment.commentCreator(headerFor(CurrentYear), existingText)
|
||||
}
|
||||
case Some((years, Some(endYears))) =>
|
||||
val header = headerFor(years.replace(endYears, "-" + CurrentYear))
|
||||
HeaderCommentStyle.cStyleBlockComment.commentCreator(header, existingText)
|
||||
case None =>
|
||||
existedText
|
||||
}
|
||||
throw new IllegalStateException(s"Unable to detect copyright for header:[${existedText}]")
|
||||
case None =>
|
||||
HeaderCommentStyle.cStyleBlockComment.commentCreator(text, existingText)
|
||||
}
|
||||
formatted.trim
|
||||
}
|
||||
|
||||
private def isApacheCopyRighted(text: String): Boolean =
|
||||
StringUtils.containsIgnoreCase(text, "licensed to the apache software foundation (asf)") ||
|
||||
StringUtils.containsIgnoreCase(text, "www.apache.org/licenses/license-2.0")
|
||||
|
||||
private def isLAMPCopyRighted(text: String): Boolean =
|
||||
StringUtils.containsIgnoreCase(text, "lamp/epfl")
|
||||
|
||||
private def isLightbendCopyRighted(text: String): Boolean =
|
||||
StringUtils.containsIgnoreCase(text, "lightbend inc.")
|
||||
|
||||
private def isDebianCopyRighted(text: String): Boolean =
|
||||
StringUtils.containsIgnoreCase(text, "debian.org")
|
||||
|
||||
private def isValidCopyRightAnnotated(text: String): Boolean = {
|
||||
isApacheCopyRighted(text) || isLAMPCopyRighted(text) || isDebianCopyRighted(text)
|
||||
}
|
||||
|
||||
private def isOnlyLightbendCopyRightAnnotated(text: String): Boolean = {
|
||||
isLightbendCopyRighted(text) && !(isApacheCopyRighted(text) || isLAMPCopyRighted(text) || isDebianCopyRighted(
|
||||
text))
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue