You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pekko.apache.org by he...@apache.org on 2023/01/12 02:59:36 UTC

[incubator-pekko] 01/02: !sbt Use Apache header for new files.

This is an automated email from the ASF dual-hosted git repository.

hepin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-pekko.git

commit 3323ff6eb3beca3cb36106d324ed8901ab1b84fd
Author: kerr <he...@gmail.com>
AuthorDate: Wed Nov 16 14:02:29 2022 +0800

    !sbt Use Apache header for new files.
---
 project/CopyrightHeader.scala | 92 +++++++++++++++++++++++--------------------
 1 file changed, 49 insertions(+), 43 deletions(-)

diff --git a/project/CopyrightHeader.scala b/project/CopyrightHeader.scala
index 981eca848e..274e6fb2e8 100644
--- a/project/CopyrightHeader.scala
+++ b/project/CopyrightHeader.scala
@@ -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>"
 
-  val cStyleComment = HeaderCommentStyle.cStyleBlockComment.copy(commentCreator = new CommentCreator() {
+  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
 
-    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
-    }
+  val cStyleComment = HeaderCommentStyle.cStyleBlockComment.copy(commentCreator = new CommentCreator() {
 
     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))
+    }
+
   })
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org