From 336aae8fc9e287402d16f12d72a0f226fb591aee Mon Sep 17 00:00:00 2001 From: Arjen Brouwer Date: Thu, 27 Oct 2022 09:58:34 +0200 Subject: [PATCH] Support Golang major versions --- pre_commit/languages/golang.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/golang.py b/pre_commit/languages/golang.py index a5f9dba0..a9aff514 100644 --- a/pre_commit/languages/golang.py +++ b/pre_commit/languages/golang.py @@ -2,6 +2,7 @@ from __future__ import annotations import contextlib import os.path +import re import sys from typing import Generator from typing import Sequence @@ -11,6 +12,7 @@ from pre_commit import git from pre_commit.envcontext import envcontext from pre_commit.envcontext import PatchesT from pre_commit.envcontext import Var +from pre_commit.errors import FatalError from pre_commit.hook import Hook from pre_commit.languages import helpers from pre_commit.prefix import Prefix @@ -55,6 +57,18 @@ def guess_go_dir(remote_url: str) -> str: return 'unknown_src_dir' +def find_go_mod_dir(repo_src_dir): + # First the root + if os.path.exists(os.path.join(repo_src_dir, 'go.mod')): + return repo_src_dir + # Check if there are any major version directories + for each in os.scandir(repo_src_dir): + if each.is_dir() and re.fullmatch('v[0-9]+', each.name) \ + and os.path.exists(os.path.join(each.path, 'go.mod')): + return each.path + raise FatalError("could not find a go.mod file in this git repository") + + def install_environment( prefix: Prefix, version: str, @@ -80,7 +94,8 @@ def install_environment( gopath = directory env = dict(os.environ, GOPATH=gopath) env.pop('GOBIN', None) - cmd_output_b('go', 'install', './...', cwd=repo_src_dir, env=env) + go_root_dir = find_go_mod_dir(repo_src_dir) + cmd_output_b('go', 'install', './...', cwd=go_root_dir, env=env) for dependency in additional_dependencies: cmd_output_b( 'go', 'install', dependency, cwd=repo_src_dir, env=env,