guluo created HBASE-29388:
-----------------------------
Summary: mvn spotless:apply changes line endings (CRLF to LF) on
Windows
Key: HBASE-29388
URL: https://issues.apache.org/jira/browse/HBASE-29388
Project: HBase
Issue Type: Bug
Environment: hbase master
Reporter: guluo
For master branch, after executing `mvn spotless:apply` on Windows, executing
`git diff` commands would display warnings message: "warning: LF will be
replaced by CRLF in **", as fallow.
warning: LF will be replaced by CRLF in CHANGES.txt.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in LICENSE.txt.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in NOTICE.txt.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
...
And core.autolf = true or unset core.autolf in my .gitconfig, the results are
all the same.
This issue doesn't exist on Linux, I'm unsure if it occurs on macOS.
I checked the commit history and found that this might have been caused by
HBASE-29344
The reason.
spotless may change line endings (CRLF to LF)
spotless introduce a feature in version 2.40.0 : Set the default line endings
to be GIT_ATTRIBUTES_FAST_ALLSAME.
Details see:
[https://github.com/diffplug/spotless/commit/54c0af2bb701fc1b0756b8ff1bfd568d0c43bf65]
[https://github.com/diffplug/spotless/pull/1838/files]
// spotless
// GitAttributesLineEndings.LazyAllTheSame.calculateState()
protected String calculateState() throws Exception {
var files = toFormat.get().iterator();
if (files.hasNext()) {
Runtime runtime = new RuntimeInit(projectDir).atRuntime();
return runtime.getEndingFor(files.next());
} else {
// I suspect this code might convert some CRLF files to LF format after
executing 'mvn spotless:apply' on Windows
return LineEnding.UNIX.str();
}
}
My solution:
Introduce a tag in Spotless's configuration while still using the previously
default LineEnding.GIT_ATTRIBUTES
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless.version}</version>
<configuration>
<lineEndings>GIT_ATTRIBUTES</lineEndings>
</configuration>
</plugin>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)