Generate stringer files automatically

Added `stringer` annotations to `git.go` for `ErrorClass` and
`ErrorCode`. Added `generate` rule for `Makefile` to generate
string representations for these types (first building cgo files
in `_obj` dir to get C constants). Finally, updated `ci` actions
workflow to check that generated files are up to date.

Ticket: 
This commit is contained in:
Kirill 2021-10-14 18:02:04 +03:00
parent 9b155184fe
commit f633706986
No known key found for this signature in database
GPG Key ID: 91CCC23DB8680D12
3 changed files with 32 additions and 0 deletions
.github/workflows
Makefilegit.go

View File

@ -105,3 +105,19 @@ jobs:
sudo ./script/build-libgit2.sh --static --system
- name: Test
run: go test --count=1 --tags "static,system_libgit2" ./...
check-generate:
name: Check generated files were not modified
runs-on: ubuntu-20.04
steps:
- name: Set up Go
uses: actions/setup-go@v1
with:
go-version: '1.17'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v2
- name: Generate files
run: make generate
- name: Check nothing changed
run: git diff --quiet --exit-code || (echo "detected changes after generate" && exit 1)

View File

@ -53,3 +53,17 @@ test-static: static-build/install/lib/libgit2.a
install-static: static-build/install/lib/libgit2.a
go install --tags "static" ./...
define _gen_file
rm -fr _obj
go tool cgo $(1)
find ./_obj -type f ! -name '*.go' -exec rm {} \;
mv ./_obj/_cgo_gotypes.go ./_obj/cgo_gotypes.go
cd ./_obj && go generate ./...
find ./_obj -type f -name '*_string.go' -exec mv -v {} . \;
rm -fr ./_obj
endef
generate:
$(call _gen_file,diff.go)
$(call _gen_file,git.go)

2
git.go
View File

@ -14,6 +14,7 @@ import (
"unsafe"
)
//go:generate stringer -type ErrorClass -trimprefix ErrorClass -tags static
type ErrorClass int
const (
@ -48,6 +49,7 @@ const (
ErrorClassPatch ErrorClass = C.GIT_ERROR_PATCH
)
//go:generate stringer -type ErrorCode -trimprefix ErrorCode -tags static
type ErrorCode int
const (