Eliminate VCS TimeoutExceptions on startup (#8080)

Having a modest-size files in a project would lead to a timeout when the project was first initialized. This became apparent when testing delivered `.enso-project` files with some data files. After some digging there was a bug in JGit
(https://bugs.eclipse.org/bugs/show_bug.cgi?id=494323) which meant that adding such files was really slow. The implemented fix is not on by default but even with `--renormalization` turned off I did not see improvement.
In the end it didn't make sense to add `data` directory to our version control, or any other files than those in `src` or some meta files in `.enso`. Not including such files eliminates first-use initialization problems.

# Important Notes
To test, pick an existing Enso project with some data files in it (> 100MB) and remove `.enso/.vcs` directory. Previously it would timeout on first try (and work in successive runs). Now it works even on the first try.

The crash:
```
[org.enso.languageserver.requesthandler.vcs.InitVcsHandler] Initialize project request [Number(2)] for [f9a7cd0d-529c-4e1d-a4fa-9dfe2ed79008] failed with: null.
java.util.concurrent.TimeoutException: null
at org.enso.languageserver.effect.ZioExec$.<clinit>(Exec.scala:134)
at org.enso.languageserver.effect.ZioExec.$anonfun$exec$3(Exec.scala:60)
at org.enso.languageserver.effect.ZioExec.$anonfun$exec$3$adapted(Exec.scala:60)
at zio.ZIO.$anonfun$foldCause$4(ZIO.scala:683)
at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:904)
at zio.internal.FiberRuntime.evaluateEffect(FiberRuntime.scala:381)
at zio.internal.FiberRuntime.evaluateMessageWhileSuspended(FiberRuntime.scala:504)
at zio.internal.FiberRuntime.drainQueueOnCurrentThread(FiberRuntime.scala:220)
at zio.internal.FiberRuntime.run(FiberRuntime.scala:139)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
```
This commit is contained in:
Hubert Plociniczak 2023-10-18 11:34:08 +02:00 committed by GitHub
parent b039f92598
commit 0b58a361ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 276 additions and 184 deletions

2
.gitattributes vendored
View File

@ -1,2 +1,2 @@
* text eol=lf
*.enso text eol=lf
*.png binary

View File

@ -461,7 +461,7 @@ val directoryWatcherVersion = "0.9.10"
val flatbuffersVersion = "1.12.0"
val guavaVersion = "32.0.0-jre"
val jlineVersion = "3.23.0"
val jgitVersion = "6.3.0.202209071007-r"
val jgitVersion = "6.7.0.202309050840-r"
val diffsonVersion = "4.4.0"
val kindProjectorVersion = "0.13.2"
val mockitoScalaVersion = "1.17.14"

View File

@ -78,7 +78,7 @@ Copyright notices related to this dependency can be found in the directory `com.
'JavaEWAH', licensed under the Apache 2, is distributed with the engine.
The license file can be found at `licenses/APACHE2.0`.
Copyright notices related to this dependency can be found in the directory `com.googlecode.javaewah.JavaEWAH-1.1.13`.
Copyright notices related to this dependency can be found in the directory `com.googlecode.javaewah.JavaEWAH-1.2.3`.
'icu4j', licensed under the Unicode/ICU License, is distributed with the engine.
@ -176,6 +176,11 @@ The license file can be found at `licenses/APACHE2.0`.
Copyright notices related to this dependency can be found in the directory `commons-cli.commons-cli-1.5.0`.
'commons-codec', licensed under the Apache-2.0, is distributed with the engine.
The license file can be found at `licenses/APACHE2.0`.
Copyright notices related to this dependency can be found in the directory `commons-codec.commons-codec-1.16.0`.
'commons-io', licensed under the Apache-2.0, is distributed with the engine.
The license information can be found along with the copyright notices.
Copyright notices related to this dependency can be found in the directory `commons-io.commons-io-2.12.0`.
@ -303,7 +308,7 @@ Copyright notices related to this dependency can be found in the directory `org.
'org.eclipse.jgit', licensed under the Eclipse Distribution License (New BSD License), is distributed with the engine.
The license file can be found at `licenses/Eclipse_Distribution_License_(New_BSD_License)`.
Copyright notices related to this dependency can be found in the directory `org.eclipse.jgit.org.eclipse.jgit-6.3.0.202209071007-r`.
Copyright notices related to this dependency can be found in the directory `org.eclipse.jgit.org.eclipse.jgit-6.7.0.202309050840-r`.
'jline', licensed under the The BSD License, is distributed with the engine.

View File

@ -1,45 +1,28 @@
/*
* Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>
* Distributed under the MIT Software License.
* MIT License
*
* Copyright (c) 2017:
* Marc Stevens
* Cryptology Group
* Centrum Wiskunde & Informatica
* P.O. Box 94079, 1090 GB Amsterdam, Netherlands
* marc@marc-stevens.nl
*
* Dan Shumow
* Microsoft Research
* danshu@microsoft.com
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
<p><b>SHA-1 UbcCheck - MIT</b></p>
<p>Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. </p>
<p>Copyright (c) 2017:</p>
<div class="ubc-name">
Marc Stevens
<p>Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. </p>
<p>Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
<ul><li>Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. </li>
<li>Redistributions in binary form must reproduce the above copyright notice,
<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<ul><li>Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. </li>
<li>Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. </li>
<ul><li>The above copyright notice and this permission notice shall be included
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Copyright (C) 2006, 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
@ -688,3 +671,23 @@ Copyright (c) 2020, Google LLC and others
Copyright (c) 2020, Google LLC and others
Copyright (c) 2021 Qualcomm Innovation Center, Inc.
Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
Redistributions in binary form must reproduce the above copyright notice,
Redistributions of source code must retain the above copyright
Redistributions of source code must retain the above copyright notice, this
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
and other copyright owners as documented in the project's IP log.
copyright notice, this list of conditions and the following
other copyright owners as documented in the project's IP log.

View File

@ -27,12 +27,14 @@ import org.enso.languageserver.vcsmanager.Git.{
}
import scala.jdk.CollectionConverters._
import java.time.Instant
import zio.ZIO.attemptBlocking
private class Git(ensoDataDirectory: Option[Path], asyncInit: Boolean)
extends VcsApi[BlockingIO] {
private class Git(
srcDirectory: Path,
ensoDataDirectory: Option[Path],
asyncInit: Boolean
) extends VcsApi[BlockingIO] {
private val gitDir = ensoDataDirectory
.map(_.resolve(VcsApi.DefaultRepoDir))
@ -92,18 +94,24 @@ private class Git(ensoDataDirectory: Option[Path], asyncInit: Boolean)
dotGit.delete()
}
}
val isDataDir =
ensoDataDirectory.contains _
val isDataDir = ensoDataDirectory.contains _
val filesToAdd =
listDirectoryFiles(root, Set(gitDir))
.filterNot(isDataDir)
.filter(p =>
ensoDataDirectory
.map(ensoDir => p.startsWith(ensoDir))
.getOrElse(p.startsWith(srcDirectory)) || p.startsWith(
srcDirectory
)
)
.map(ensureUnixPathSeparator)
if (filesToAdd.nonEmpty) {
filesToAdd
.foldLeft(jgit.add()) { case (cmd, filePath) =>
cmd.addFilepattern(filePath)
}
.setRenormalize(false)
.call()
}
@ -140,6 +148,7 @@ private class Git(ensoDataDirectory: Option[Path], asyncInit: Boolean)
// Include files that already are/were in the index
jgit
.add()
.setRenormalize(false)
.addFilepattern(".")
.setUpdate(true)
.call()
@ -151,12 +160,16 @@ private class Git(ensoDataDirectory: Option[Path], asyncInit: Boolean)
val isDataDir =
(x: String) => unixDataDir.map(dataDir => dataDir == x).getOrElse(false)
val filesToAdd = untracked.flatMap { file =>
if (!file.startsWith(unixGitDir) && !isDataDir(file)) {
if (
!file.startsWith(unixGitDir) && !isDataDir(file) && Path
.of(file)
.startsWith(srcDirectory)
) {
Some(file)
} else None
}
if (!filesToAdd.isEmpty) {
val addCmd = jgit.add()
val addCmd = jgit.add().setRenormalize(false)
filesToAdd.foreach(filePath =>
addCmd.addFilepattern(ensureUnixPathSeparator(filePath))
)
@ -345,9 +358,10 @@ private class Git(ensoDataDirectory: Option[Path], asyncInit: Boolean)
}
object Git {
private val HeadRef = "HEAD"
private val AuthorName = "Enso VCS"
private val AuthorEmail = "vcs@enso.org"
private val HeadRef = "HEAD"
private val AuthorName = "Enso VCS"
private val AuthorEmail = "vcs@enso.org"
private val SrcDirectory = Path.of("src")
private class RepoExists extends Exception
@ -359,6 +373,6 @@ object Git {
asyncInit: Boolean
): VcsApi[BlockingIO] = {
SystemReader.setInstance(new EmptyUserConfigReader)
new Git(dataDir, asyncInit)
new Git(SrcDirectory, dataDir, asyncInit)
}
}

View File

@ -78,6 +78,29 @@ class GitSpec
"dummy package json file".getBytes(StandardCharsets.UTF_8)
)
val relativeUserDataDirectory = Path.of("data")
val userDataDirectory = repoPath.resolve(relativeUserDataDirectory)
userDataDirectory.toFile.mkdir()
val relativeSomeUserDataFile =
relativeUserDataDirectory.resolve("test.csv")
val absoluteSomeUserDataFile = repoPath.resolve(relativeSomeUserDataFile)
createStubFile(absoluteSomeUserDataFile) should equal(true)
Files.write(
absoluteSomeUserDataFile,
"dummy,data,file".getBytes(StandardCharsets.UTF_8)
)
val relativeRandomDirectory = Path.of("meh")
val userRandomDirectory = repoPath.resolve(relativeRandomDirectory)
userRandomDirectory.toFile.mkdir()
val relativeRandomFile = relativeRandomDirectory.resolve("nothing.csv")
val absoluteRandomFile = repoPath.resolve(relativeRandomFile)
createStubFile(absoluteRandomFile) should equal(true)
Files.write(
absoluteRandomFile,
"dummy,data,file".getBytes(StandardCharsets.UTF_8)
)
val targetRepo =
repoPath.resolve(dataDirectory).resolve(VcsApi.DefaultRepoDir)
targetRepo.toFile shouldNot exist
@ -97,17 +120,35 @@ class GitSpec
repoPath.resolve(dataDirectory),
relativePackageJsonFile
) shouldBe true
isPathUnderVcs(
repoPath.resolve(dataDirectory),
relativeRandomFile
) shouldBe false
isPathUnderVcs(
repoPath.resolve(dataDirectory),
relativeSomeUserDataFile
) shouldBe false
}
}
"VCS save" should {
"commit to the repo" in new TestCtx with InitialRepoSetup {
createStubFile(repoPath.resolve("Foo.enso")) should equal(true)
val (srcDirRelative, _) = srcDirPaths()
val bazFile = srcDirRelative.resolve("Baz.enso")
createStubFile(repoPath.resolve(bazFile)) should equal(true)
val commitResult1 = vcs.commit(repoPath, "First").unsafeRunSync()
commitResult1.isRight shouldBe true
createStubFile(repoPath.resolve("Bar.enso")) should equal(true)
val barFile = srcDirRelative.resolve("Bar.enso")
createStubFile(repoPath.resolve(barFile)) should equal(true)
val relativeDataDirectory = Path.of("data")
val dataDirectory = repoPath.resolve(relativeDataDirectory)
dataDirectory.toFile.mkdir()
val relativeUserDataFile = relativeDataDirectory.resolve("test.csv")
val userDataFile = repoPath.resolve(relativeUserDataFile)
createStubFile(userDataFile) should equal(true)
val commitResult2 = vcs.commit(repoPath, "Second").unsafeRunSync()
commitResult2.isRight shouldBe true
@ -116,6 +157,18 @@ class GitSpec
revisions(0).getFullMessage() should equal("Second")
revisions(1).getFullMessage() should equal("First")
revisions(2).getFullMessage() should equal("Initial commit")
isPathUnderVcs(
repoPath,
Path.of("Foo.enso")
) shouldBe false
isPathUnderVcs(
repoPath,
bazFile
) shouldBe true
isPathUnderVcs(
repoPath,
relativeUserDataFile
) shouldBe false
}
"accept empty commits to the repo" in new TestCtx with InitialRepoSetup {
@ -182,9 +235,10 @@ class GitSpec
repoStatusIgnoreSha(r) should equal(
RepoStatus(false, Set(), Some(RepoCommit(null, "Initial commit")))
)
val (_, srcDir) = srcDirPaths()
createStubFile(repoPath.resolve("Foo.enso")) should equal(true)
createStubFile(repoPath.resolve("Bar.enso")) should equal(true)
createStubFile(srcDir.resolve("Foo.enso")) should equal(true)
createStubFile(srcDir.resolve("Bar.enso")) should equal(true)
val commitResult = vcs.commit(repoPath, "New files").unsafeRunSync()
commitResult.isRight shouldBe true
@ -227,9 +281,10 @@ class GitSpec
"VCS restore" should {
"reset to last saved state" in new TestCtx with InitialRepoSetup {
val fooFile = repoPath.resolve("Foo.enso")
val barFile = repoPath.resolve("Bar.enso")
val bazFile = repoPath.resolve("Baz.enso")
val (relativeSrcDir, srcDir) = srcDirPaths()
val fooFile = srcDir.resolve("Foo.enso")
val barFile = srcDir.resolve("Bar.enso")
val bazFile = srcDir.resolve("Baz.enso")
createStubFile(fooFile) should equal(true)
Files.write(
fooFile,
@ -260,8 +315,8 @@ class GitSpec
val restoreResult = vcs.restore(repoPath, commitId = None).unsafeRunSync()
restoreResult.isRight shouldBe true
restoreResult.getOrElse(Nil) shouldEqual List(
Path.of("Bar.enso"),
Path.of("Foo.enso")
relativeSrcDir.resolve("Bar.enso"),
relativeSrcDir.resolve("Foo.enso")
)
val text2 = Files.readAllLines(fooFile)
@ -273,7 +328,8 @@ class GitSpec
"reset to a named saved state while preserving original line endings" in new TestCtx
with InitialRepoSetup {
val fooFile = repoPath.resolve("Foo.enso")
val (relativeSrcDir, srcDir) = srcDirPaths()
val fooFile = srcDir.resolve("Foo.enso")
createStubFile(fooFile) should equal(true)
val text1 = "file contents\r\nand more\u0000"
Files.write(
@ -299,7 +355,9 @@ class GitSpec
val restoreResult =
vcs.restore(repoPath, Some(commitId)).unsafeRunSync()
restoreResult.isRight shouldBe true
restoreResult.getOrElse(Nil) shouldEqual List(Path.of("Foo.enso"))
restoreResult.getOrElse(Nil) shouldEqual List(
relativeSrcDir.resolve("Foo.enso")
)
val fileText2 = Files.readString(fooFile)
fileText2 should equal(text1)
@ -424,6 +482,13 @@ class GitSpec
def repoStatusIgnoreSha(r: RepoStatus) = {
r.copy(lastCommit = r.lastCommit.map(_.copy(commitId = null)))
}
def srcDirPaths(): (Path, Path) = {
val relativeSrcDIr = Path.of("src")
val srcDir = repoPath.resolve(relativeSrcDIr)
srcDir.toFile.mkdir()
(relativeSrcDIr, srcDir)
}
}
trait InitialRepoSetup { self: TestCtx =>

View File

@ -308,7 +308,10 @@ class VcsManagerTest extends BaseServerTest with RetrySpec with FlakySpec {
"force all pending saves" taggedAs Retry in withCleanRoot { client =>
this.timingsConfig.withAutoSave(10.seconds)
val fooPath = testContentRoot.file.toPath.resolve("foo_pending_save.txt")
testContentRoot.file.toPath.resolve("src").toFile.mkdir()
val fooPath = testContentRoot.file.toPath
.resolve("src")
.resolve("foo_pending_save.txt")
fooPath.toFile.createNewFile()
Files.write(
fooPath,
@ -321,7 +324,7 @@ class VcsManagerTest extends BaseServerTest with RetrySpec with FlakySpec {
"params": {
"path": {
"rootId": $testContentRootId,
"segments": [ "foo_pending_save.txt" ]
"segments": [ "src/foo_pending_save.txt" ]
}
}
}

View File

@ -1,16 +0,0 @@
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
Redistributions in binary form must reproduce the above copyright notice,
Redistributions of source code must retain the above copyright
Redistributions of source code must retain the above copyright notice, this
copyright notice, this list of conditions and the following
other copyright owners as documented in the project's IP log.
and other copyright owners as documented in the project's IP log.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
<li>Redistributions in binary form must reproduce the above copyright notice,
<ul><li>Redistributions of source code must retain the above copyright notice,
<ul><li>The above copyright notice and this permission notice shall be included
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

View File

@ -1,2 +0,0 @@
<p>Copyright (c) 2017:</p>
Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>

View File

@ -1,4 +1,10 @@
<p>Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. </p>
<p>Copyright (c) 2017:</p>
<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<ul><li>The above copyright notice and this permission notice shall be included
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Copyright (C) 2006, 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2006, 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2006, 2022, Shawn O. Pearce <spearce@spearce.org> and others
@ -32,16 +38,16 @@ Copyright (C) 2008, 2022 Google Inc. and others
Copyright (C) 2008, 2022 Marek Zawirski <marek.zawirski@gmail.com> and others
Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2008, Charles O'Farrell <charleso@charleso.org>
Copyright (C) 2008, Florian Köberle <florianskarten@web.de>
Copyright (C) 2008, Florian Köberle <florianskarten@web.de> and others
Copyright (C) 2008, Google Inc.
Copyright (C) 2008, Google Inc. and others
Copyright (C) 2008, Imran M Yousuf <imyousuf@smartitengineering.com>
Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk>
Copyright (C) 2008, Google Inc.
Copyright (C) 2008, Florian Köberle <florianskarten@web.de>
Copyright (C) 2008, Robin Rosenberg <robin.rosenberg.lists@dewire.com>
Copyright (C) 2008-2009, Google Inc. and others
Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> and others
Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk>
Copyright (C) 2008, Mike Ralphson <mike@abacus.co.uk>
Copyright (C) 2008, Robin Rosenberg <robin.rosenberg.lists@dewire.com>
Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> and others
Copyright (C) 2008, Roger C. Soares <rogersoares@intelinet.com.br>
@ -50,17 +56,63 @@ Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>,
Copyright (C) 2008, Thad Hughes <thadh@thad.corp.google.com> and others
Copyright (C) 2008-2009, Google Inc.
Copyright (C) 2008-2009, Google Inc. and others
Copyright (C) 2008-2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
Copyright (C) 2008-2009, Johannes E. Schindelin <johannes.schindelin@gmx.de> and others
Copyright (C) 2008-2009, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2008-2009, Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2008-2010, Google Inc.
Copyright (C) 2008-2010, Google Inc. and others
Copyright (C) 2008-2011, Google Inc.
Copyright (C) 2008-2009, Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2008-2011, Google Inc. and others
Copyright (C) 2008-2012, Google Inc.
Copyright (C) 2008-2011, Google Inc.
Copyright (C) 2008-2013, Google Inc.
Copyright (C) 2008, Imran M Yousuf <imyousuf@smartitengineering.com>
Copyright (C) 2021, Google Inc. and others
Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2022, Simeon Andreev and others
Copyright (C) 2022, Google Inc. and others
Copyright (C) 2022, Fabio Ponciroli <ponch78@gmail.com> and others
Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2021, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021, Google LLC. and others
Copyright (C) 2021, Fabio Ponciroli <ponch@gerritforge.com>
Copyright (C) 2021, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others.
Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021 Simeon Andreev <simeon.danailov.andreev@gmail.com> and others
Copyright (C) 2020, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2020, Michael Dardis. and others
Copyright (C) 2020, Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2020, Google LLC. and others
Copyright (C) 2020, Google LLC and others
Copyright (C) 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2019, Tim Neumann <tim.neumann@advantest.com>
Copyright (C) 2019, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2019, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2019, Marc Strapetz <marc.strapetz@syntevo.com>
Copyright (C) 2019, Google LLC. and others
Copyright (C) 2019, Google LLC and others
Copyright (C) 2019, Google Inc. and others
Copyright (C) 2022, Tencent.
Copyright (c) 2014 Konrad Kügler and others
Copyright (C) 2022, Workday Inc.
Copyright (c) 2019 Matthias Sohn <matthias.sohn@sap.com>
Copyright (c) 2019, Google LLC and others
Copyright (c) 2019, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (c) 2020, 2022 Julian Ruppel <julian.ruppel@sap.com> and others
Copyright (c) 2020, Google LLC and others
Copyright (c) 2021 Qualcomm Innovation Center, Inc.
Copyright (c) 2020, Google LLC and others
Copyright (c) 2020 Thomas Wolf <thomas.wolf@paranor.ch>
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>
Redistributions of source code must retain the above copyright
Redistributions in binary form must reproduce the above copyright notice,
Redistributions of source code must retain the above copyright notice, this
Copyright (C) 2010, Matt Fischer <matt.fischer@garmin.com> and others
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com> and others
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
Copyright (C) 2008-2013, Google Inc. and others
Copyright (C) 2008-2016, Google Inc. and others
Copyright (C) 2008-2018, Robin Rosenberg <robin.rosenberg@dewire.com>
@ -73,48 +125,49 @@ Copyright (C) 2009, Alex Blewitt <alex.blewitt@gmail.com>
Copyright (C) 2009, Christian Halstrick <christian.halstrick@sap.com>
Copyright (C) 2009, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2009, Constantine Plotnikov <constantine.plotnikov@gmail.com>
Copyright (C) 2009, Google Inc.
Copyright (C) 2009, Google Inc. and others
Copyright (C) 2009, Google, Inc.
Copyright (C) 2009, Igor Fedorenko <igor@ifedorenko.com>
Copyright (C) 2009, JetBrains s.r.o.
Copyright (C) 2009, JetBrains s.r.o. and others
Copyright (C) 2009, Mark Struberg <struberg@yahoo.de>
Copyright (C) 2009, Google Inc.
Copyright (C) 2009, Google, Inc.
Copyright (C) 2009, Robin Rosenberg
Copyright (C) 2009, Johannes Schindelin <johannes.schindelin@gmx.de> and others
Copyright (C) 2009, Mark Struberg <struberg@yahoo.de>
Copyright (C) 2009, Jonas Fonseca <fonseca@diku.dk>
Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2009, Robin Rosenberg
Copyright (C) 2009, Matthias Sohn <matthias.sohn@sap.com>
Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com>
Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> and others
Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@gmail.com>
Copyright (C) 2009, Robin Rosenberg and others
Copyright (C) 2009, Sasa Zivkov <sasa.zivkov@sap.com>
Copyright (C) 2009, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2009, Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2009-2010, Google Inc.
Copyright (C) 2009, The Android Open Source Project
Copyright (C) 2009, Vasyl' Vavrychuk <vvavrychuk@gmail.com>
Copyright (C) 2009, Vasyl' Vavrychuk <vvavrychuk@gmail.com> and others
Copyright (C) 2009, Yann Simon <yann.simon.fr@gmail.com>
Copyright (C) 2009-2010, Google Inc.
Copyright (C) 2009-2010, Google Inc. and others
Copyright (C) 2009-2022, Google Inc. and others
Copyright (C) 2010, 2012 Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2010, 2013 Google Inc. and others
Copyright (C) 2010, 2013 Marc Strapetz <marc.strapetz@syntevo.com>
Copyright (C) 2010, 2013 Marc Strapetz <marc.strapetz@syntevo.com> and others
Copyright (C) 2010, 2013 Mathias Kinzler <mathias.kinzler@sap.com>
Copyright (C) 2010, 2014, Stefan Lay <stefan.lay@sap.com>
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>,
Copyright (C) 2010, 2013 Google Inc. and others
Copyright (C) 2010, 2013 Marc Strapetz <marc.strapetz@syntevo.com> and others
Copyright (C) 2010, 2013 Sasa Zivkov <sasa.zivkov@sap.com>
Copyright (C) 2010, 2013, Google Inc. and others
Copyright (C) 2010, 2013, Mathias Kinzler <mathias.kinzler@sap.com> and others
Copyright (C) 2010, 2014, Stefan Lay <stefan.lay@sap.com>
Copyright (C) 2010, 2017 Red Hat Inc. and others
Copyright (C) 2010, 2020 Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2010, 2020 Mathias Kinzler <mathias.kinzler@sap.com> and others
Copyright (C) 2010, 2020, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2010, 2021 Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2010, 2021 Google Inc. and others
Copyright (C) 2010, 2021 Red Hat Inc. and others
Copyright (C) 2010, 2021 Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2010, 2021 Red Hat Inc. and others
Copyright (C) 2010, 2021 Google Inc. and others
Copyright (C) 2010, 2022 Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2010, 2022 Google Inc. and others
Copyright (C) 2010, 2022 JetBrains s.r.o. and others
@ -122,33 +175,26 @@ Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com>
Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com> and
Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2010, Chrisian Halstrick <christian.halstrick@sap.com> and
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com> and
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>,
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>
Copyright (C) 2010, Google Inc.
Copyright (C) 2010, Google Inc. and others
Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com> and others
Copyright (C) 2010, Marc Strapetz <marc.strapetz@syntevo.com>
Copyright (C) 2010, Marc Strapetz <marc.strapetz@syntevo.com> and others
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com> and
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com> and others
Copyright (C) 2010, Matt Fischer <matt.fischer@garmin.com> and others
Copyright (C) 2010, Matthias Sohn <matthias.sohn@sap.com>
Copyright (C) 2010, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2010, Red Hat Inc. and others
Copyright (C) 2010, Robin Rosenberg and others
Copyright (C) 2010, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com>
Copyright (C) 2010,Mathias Kinzler <mathias.kinzler@sap.com> and
Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com> and others
Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com> and
Copyright (C) 2010-2012, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2011, 2012 Google Inc. and others. and others
Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com> and others
Copyright (C) 2010,Mathias Kinzler <mathias.kinzler@sap.com> and
Copyright (C) 2010-2012, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2010-2012, Matthias Sohn <matthias.sohn@sap.com>
Copyright (C) 2010-2012, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2011, 2012 Google Inc. and others. and others
Copyright (C) 2011, 2012 IBM Corporation and others. and others
Copyright (C) 2011, 2012 Robin Rosenberg and others
Copyright (C) 2011, 2013 Christian Halstrick <christian.halstrick@sap.com> and others
@ -159,33 +205,33 @@ Copyright (C) 2011, 2019 Google Inc. and others
Copyright (C) 2011, 2020 Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2011, 2020, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2011, 2021 IBM Corporation and others
Copyright (C) 2011, 2022 Google Inc. and others
Copyright (C) 2011, 2022 Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com>
Copyright (C) 2011, 2022 Christoph Brill <egore911@egore911.de> and others
Copyright (C) 2011, Chris Aniszczyk <zx@redhat.com>
Copyright (C) 2011, 2022 Google Inc. and others
Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com>
Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2011, Chris Aniszczyk <zx@redhat.com>
Copyright (C) 2011, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2011, GitHub Inc.
Copyright (C) 2011, GEBIT Solutions and others
Copyright (C) 2011, GitHub Inc.
Copyright (C) 2011, GitHub Inc. and others
Copyright (C) 2011, Google Inc. and others
Copyright (C) 2011, Ketan Padegaonkar <ketanpadegaonkar@gmail.com> and others
Copyright (C) 2011, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2011, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2011, Roberto Tyley <roberto.tyley@gmail.com> and others
Copyright (C) 2011, Philipp Thun <philipp.thun@sap.com> and others
Copyright (C) 2011, Roberto Tyley <roberto.tyley@gmail.com> and others
Copyright (C) 2011, Robin Rosenberg and others
Copyright (C) 2011, Robin Stocker <robin@nibor.org>
Copyright (C) 2011, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2011, Shawn O. Pearce <spearce@spearce.org> and others
Copyright (C) 2011, Stefan Lay <stefan.lay@.com> and others
Copyright (C) 2011, Tomasz Zarna <Tomasz.Zarna@pl.ibm.com> and others
Copyright (C) 2011, Stefan Lay <stefan.lay@.com> and others
Copyright (C) 2011-2012, Google Inc. and others
Copyright (C) 2011-2012, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2011-2013, Chris Aniszczyk <caniszczyk@gmail.com> and others
Copyright (C) 2011-2013, Robin Rosenberg <robin.rosenberg@dewire.com> and others
Copyright (C) 2012 Google Inc. and others
Copyright (C) 2012 Christian Halstrick and others
Copyright (C) 2012 Google Inc. and others
Copyright (C) 2012, 2021 GitHub Inc. and others
Copyright (C) 2012, 2022, Robin Rosenberg and others
Copyright (C) 2012, Christian Halstrick <christian.halstrick@sap.com> and others
@ -199,14 +245,12 @@ Copyright (C) 2012, Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2012, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2012, Research In Motion Limited
Copyright (C) 2012, Research In Motion Limited and others
Copyright (C) 2012, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2012, Robin Rosenberg <robin.rosenberg@dewire.com> and others
Copyright (C) 2013, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2013, 2017 Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2012, Sasa Zivkov <sasa.zivkov@sap.com> and others
Copyright (C) 2013 Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2013, 2017 Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2013, 2020 Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2015, 2022 Obeo and others
Copyright (C) 2013, Stefan Lay <stefan.lay@sap.com> and
Copyright (C) 2013, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2013, CloudBees, Inc. and others
Copyright (C) 2013, Google Inc. and others
Copyright (C) 2013, Gunnar Wagenknecht
@ -216,6 +260,7 @@ Copyright (C) 2013, Robin Rosenberg <robin.rosenberg@dewire.com> and others
Copyright (C) 2013, Robin Rosenberg and others
Copyright (C) 2013, Robin Stocker <robin@nibor.org>
Copyright (C) 2013, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2013, Stefan Lay <stefan.lay@sap.com> and
Copyright (C) 2014 Laurent Goujon <lgoujon@twitter.com> and others
Copyright (C) 2014 Obeo. and others
Copyright (C) 2014, 2017 Andrey Loskutov <loskutov@gmx.de> and others
@ -229,33 +274,34 @@ Copyright (C) 2014, Arthur Daussy <arthur.daussy@obeo.fr>
Copyright (C) 2014, Arthur Daussy <arthur.daussy@obeo.fr> and others
Copyright (C) 2014, Google Inc. and others
Copyright (C) 2014, Gustaf Lundh <gustaf.lundh@sonymobile.com> and others
Copyright (C) 2014, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2014, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2014, Konrad Kügler and others
Copyright (C) 2015 Obeo. and others
Copyright (C) 2015 Ericsson and others
Copyright (C) 2014, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2014, Sasa Zivkov <sasa.zivkov@sap.com>, SAP AG and others
Copyright (C) 2014, Robin Stocker <robin@nibor.org> and others
Copyright (C) 2015 Ericsson and others
Copyright (C) 2015 Obeo. and others
Copyright (C) 2015, 2020 Ivan Motsch <ivan.motsch@bsiag.com> and others
Copyright (C) 2015, 2022 Ivan Motsch <ivan.motsch@bsiag.com> and others
Copyright (C) 2015, 2022 Obeo and others
Copyright (C) 2015, Andrey Loskutov <loskutov@gmx.de> and others
Copyright (C) 2015, Christian Halstrick <christian.halstrick@sap.com>
Copyright (C) 2015, Christian Halstrick <christian.halstrick@sap.com> and
Copyright (C) 2015, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2015, Google Inc.
Copyright (C) 2015, Google Inc. and others
Copyright (C) 2015, Ivan Motsch <ivan.motsch@bsiag.com>
Copyright (C) 2015, Google Inc. and others
Copyright (C) 2015, Ivan Motsch <ivan.motsch@bsiag.com>,
Copyright (C) 2015, Kaloyan Raev <kaloyan.r@zend.com> and others
Copyright (C) 2016 Ericsson and others
Copyright (C) 2016, 2020 JGit contributors
Copyright (C) 2015,Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2015, Patrick Steinhardt <ps@pks.im> and others
Copyright (C) 2016 Ericsson and others
Copyright (C) 2015,Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2016, 2020 JGit contributors
Copyright (C) 2016, 2021 Laurent Delaigue <laurent.delaigue@obeo.fr> and others
Copyright (C) 2016, Google Inc. and others
Copyright (C) 2016, Christian Halstrick <christian.halstrick@sap.com> and others
Copyright (C) 2016, Google Inc. and others
Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr> and others
Copyright (C) 2016, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2016, Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2016, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2017 Ericsson and others
Copyright (C) 2017 Google Inc. and others
Copyright (C) 2017 Two Sigma Open Source and others
@ -266,60 +312,30 @@ Copyright (C) 2017, Google Inc.
Copyright (C) 2017, Google Inc. and others
Copyright (C) 2017, Google LLC and others
Copyright (C) 2017, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2017, Obeo (mathieu.cartaud@obeo.fr)
Copyright (C) 2017, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2017, Obeo (mathieu.cartaud@obeo.fr)
Copyright (C) 2017, Two Sigma Open Source
Copyright (C) 2017, Two Sigma Open Source and others
Copyright (C) 2018, 2021 Salesforce and others
Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2018, 2022 Google LLC. and others
Copyright (C) 2018, Google LLC. and others
Copyright (C) 2018, David Pursehouse <david.pursehouse@gmail.com> and others
Copyright (C) 2018, 2022 Salesforce and others
Copyright (C) 2018, David Pursehouse <david.pursehouse@gmail.com> and others
Copyright (C) 2018, Konrad Windszus <konrad_w@gmx.de> and others
Copyright (C) 2018, Salesforce and
Copyright (C) 2018, Google LLC. and others
Copyright (C) 2018, Markus Duft <markus.duft@ssi-schaefer.com> and others
Copyright (C) 2018, Salesforce and
Copyright (C) 2018, Salesforce. and others
Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2018-2019, Tim Neumann <Tim.Neumann@advantest.com>
Copyright (C) 2018-2021, Andre Bossert <andre.bossert@siemens.com>
Copyright (C) 2019 Google LLC and others
Copyright (C) 2018-2022, Andre Bossert <andre.bossert@siemens.com> and others
Copyright (C) 2019, Google Inc. and others
Copyright (C) 2019, Google LLC and others
Copyright (C) 2018-2022, Andre Bossert <andre.bossert@siemens.com>
Copyright (C) 2019, Google LLC. and others
Copyright (C) 2019, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2020, Google LLC and others
Copyright (C) 2019, Marc Strapetz <marc.strapetz@syntevo.com>
Copyright (C) 2019, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2019, Tim Neumann <tim.neumann@advantest.com>
Copyright (C) 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2020, Google LLC. and others
Copyright (C) 2020, Matthias Sohn <matthias.sohn@sap.com> and
Copyright (C) 2020, Michael Dardis. and others
Copyright (C) 2020, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021 Simeon Andreev <simeon.danailov.andreev@gmail.com> and others
Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others.
Copyright (C) 2021, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2021, Fabio Ponciroli <ponch@gerritforge.com>
Copyright (C) 2021, Google Inc. and others
Copyright (C) 2021, Google LLC. and others
Copyright (C) 2021, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
Copyright (C) 2022, Fabio Ponciroli <ponch78@gmail.com> and others
Copyright (C) 2022, Google Inc. and others
Copyright (C) 2022, Simeon Andreev and others
Copyright (C) 2022, Tencent.
Copyright (C) 2022, Workday Inc.
Copyright (c) 2014 Konrad Kügler and others
Copyright (c) 2019 Matthias Sohn <matthias.sohn@sap.com>
Copyright (c) 2019, Google LLC and others
Copyright (c) 2019, Thomas Wolf <thomas.wolf@paranor.ch> and others
Copyright (c) 2020 Thomas Wolf <thomas.wolf@paranor.ch>
Copyright (c) 2020, 2022 Julian Ruppel <julian.ruppel@sap.com> and others
Copyright (c) 2020, Google LLC and others
Copyright (c) 2020, Google LLC and others
Copyright (c) 2021 Qualcomm Innovation Center, Inc.
Copyright (C) 2018-2022, Andre Bossert <andre.bossert@siemens.com> and others
Copyright (C) 2019 Google LLC and others
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
and other copyright owners as documented in the project's IP log.
other copyright owners as documented in the project's IP log.
copyright notice, this list of conditions and the following
Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com> and
Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com> and others

View File

@ -0,0 +1,2 @@
<li>Redistributions in binary form must reproduce the above copyright notice,
<ul><li>Redistributions of source code must retain the above copyright notice,

View File

@ -1,3 +1,3 @@
A7B91D82FF004FCBCB1F1A228BEF92FA02BA18CD867888DE6FC01069B08873C4
A4EFE999EB42A4372E8E96512AF82B689C7C5B7898E24FC93EC6F39569756DE7
BBA040F93183A17D3A861F0013540424DEBD31136C001A4653F7C6CEFC212A78
3933B106917A6381759200AEE4B93A368AE355CB8DFF87C1819A346C54D91E0E
0

View File

@ -0,0 +1 @@
tools/legal-review/license-texts/APACHE2.0