Skip to content

Commit ee379d2

Browse files
committed
all: treat all files as binary, but check in .bat with CRLF
This is a followup to CL 96495. It should be simpler and more robust to achieve .bat files having CRLF line endings by treating it as a binary file, like all other files, and checking it in with the desired CRLF line endings. A test is used to check the entire Go tree, short of directories starting with "." and named "testdata", for any .bat files that have anything other than strict CRLF line endings. This will help catch any accidental modifications to existing .bat files or check ins of new .bat files. Importantly, this is compatible with how Gerrit serves .tar.gz files, making it so that CRLF line endings are preserved. The Go project is supported on many different environments, some of which may have limited git implementations available, or none at all. Relying on fewer git features and special rules makes it easier to have confidence in the exact content of all files. Additionally, Go development started in Subversion, moved to Perforce, then Mercurial, and now uses Git.¹ Reducing its reliance on git-specific features will help if there will be another transition in the project's future. There are only 5 .bat files in the entire Go source tree, so a new one being added is a rare event, and we prefer to do things in Go instead. We still have the option of improving the experience for developers by adding a pre-commit converter for .bat files to the git-codereview tool. ¹ https://groups.google.com/d/msg/golang-dev/sckirqOWepg/YmyT7dWJiocJ Fixes golang#39391. For golang#37791. Change-Id: I6e202216322872f0307ac96f1b8d3f57cb901e6b Reviewed-on: https://go-review.googlesource.com/c/go/+/236437 Reviewed-by: Bryan C. Mills <[email protected]>
1 parent 5c6b2b1 commit ee379d2

File tree

7 files changed

+377
-340
lines changed

7 files changed

+377
-340
lines changed

.gitattributes

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# Treat all files in the Go repo as binary, with no git magic updating
2-
# line endings. Windows users contributing to Go will need to use a
3-
# modern version of git and editors capable of LF line endings.
2+
# line endings. This produces predictable results in different environments.
3+
#
4+
# Windows users contributing to Go will need to use a modern version
5+
# of git and editors capable of LF line endings.
6+
#
7+
# Windows .bat files are known to have multiple bugs when run with LF
8+
# endings, and so they are checked in with CRLF endings, with a test
9+
# in test/winbatch.go to catch problems. (See golang.org/issue/37791.)
410
#
511
# We'll prevent accidental CRLF line endings from entering the repo
6-
# via the git-review gofmt checks.
12+
# via the git-codereview gofmt checks and tests.
713
#
8-
# See golang.org/issue/9281
14+
# See golang.org/issue/9281.
915

1016
* -text
11-
12-
# The only exception is Windows files that must absolutely be CRLF or
13-
# might not work. Batch files are known to have multiple bugs when run
14-
# with LF endings. See golang.org/issue/37791 for more information.
15-
16-
*.bat text eol=crlf

src/all.bat

+27-27
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
:: Copyright 2012 The Go Authors. All rights reserved.
2-
:: Use of this source code is governed by a BSD-style
3-
:: license that can be found in the LICENSE file.
4-
5-
@echo off
6-
7-
setlocal
8-
9-
if exist make.bat goto ok
10-
echo all.bat must be run from go\src
11-
:: cannot exit: would kill parent command interpreter
12-
goto end
13-
:ok
14-
15-
set OLDPATH=%PATH%
16-
call make.bat --no-banner --no-local
17-
if %GOBUILDFAIL%==1 goto end
18-
call run.bat --no-rebuild --no-local
19-
if %GOBUILDFAIL%==1 goto end
20-
:: we must restore %PATH% before running "dist banner" so that the latter
21-
:: can get the original %PATH% and give suggestion to add %GOROOT%/bin
22-
:: to %PATH% if necessary.
23-
set PATH=%OLDPATH%
24-
"%GOTOOLDIR%/dist" banner
25-
26-
:end
27-
if x%GOBUILDEXIT%==x1 exit %GOBUILDFAIL%
1+
:: Copyright 2012 The Go Authors. All rights reserved.
2+
:: Use of this source code is governed by a BSD-style
3+
:: license that can be found in the LICENSE file.
4+
5+
@echo off
6+
7+
setlocal
8+
9+
if exist make.bat goto ok
10+
echo all.bat must be run from go\src
11+
:: cannot exit: would kill parent command interpreter
12+
goto end
13+
:ok
14+
15+
set OLDPATH=%PATH%
16+
call make.bat --no-banner --no-local
17+
if %GOBUILDFAIL%==1 goto end
18+
call run.bat --no-rebuild --no-local
19+
if %GOBUILDFAIL%==1 goto end
20+
:: we must restore %PATH% before running "dist banner" so that the latter
21+
:: can get the original %PATH% and give suggestion to add %GOROOT%/bin
22+
:: to %PATH% if necessary.
23+
set PATH=%OLDPATH%
24+
"%GOTOOLDIR%/dist" banner
25+
26+
:end
27+
if x%GOBUILDEXIT%==x1 exit %GOBUILDFAIL%

src/clean.bat

+32-32
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
:: Copyright 2012 The Go Authors. All rights reserved.
2-
:: Use of this source code is governed by a BSD-style
3-
:: license that can be found in the LICENSE file.
4-
5-
@echo off
6-
7-
setlocal
8-
9-
set GOBUILDFAIL=0
10-
11-
go tool dist env -w -p >env.bat
12-
if errorlevel 1 goto fail
13-
call env.bat
14-
del env.bat
15-
echo.
16-
17-
if exist %GOTOOLDIR%\dist.exe goto distok
18-
echo cannot find %GOTOOLDIR%\dist; nothing to clean
19-
goto fail
20-
:distok
21-
22-
"%GOBIN%\go" clean -i std
23-
"%GOBIN%\go" tool dist clean
24-
"%GOBIN%\go" clean -i cmd
25-
26-
goto end
27-
28-
:fail
29-
set GOBUILDFAIL=1
30-
31-
:end
32-
if x%GOBUILDEXIT%==x1 exit %GOBUILDFAIL%
1+
:: Copyright 2012 The Go Authors. All rights reserved.
2+
:: Use of this source code is governed by a BSD-style
3+
:: license that can be found in the LICENSE file.
4+
5+
@echo off
6+
7+
setlocal
8+
9+
set GOBUILDFAIL=0
10+
11+
go tool dist env -w -p >env.bat
12+
if errorlevel 1 goto fail
13+
call env.bat
14+
del env.bat
15+
echo.
16+
17+
if exist %GOTOOLDIR%\dist.exe goto distok
18+
echo cannot find %GOTOOLDIR%\dist; nothing to clean
19+
goto fail
20+
:distok
21+
22+
"%GOBIN%\go" clean -i std
23+
"%GOBIN%\go" tool dist clean
24+
"%GOBIN%\go" clean -i cmd
25+
26+
goto end
27+
28+
:fail
29+
set GOBUILDFAIL=1
30+
31+
:end
32+
if x%GOBUILDEXIT%==x1 exit %GOBUILDFAIL%

0 commit comments

Comments
 (0)