From 20846fb71c5710e6001dae88e974cc62abcc0e56 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Mon, 5 May 2025 12:54:30 -0400 Subject: [PATCH 1/2] =?UTF-8?q?Takin'=20a=20=20walk=20to=20get=20the=20git?= =?UTF-8?q?=20data=20=F0=9F=9A=B6=E2=80=8D=E2=99=82=EF=B8=8F=E2=80=8D?= =?UTF-8?q?=E2=9E=A1=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/cloud.go | 2 +- internal/deployer/metadata.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/cmd/cloud.go b/cmd/cloud.go index c0df9e46..c00b5066 100644 --- a/cmd/cloud.go +++ b/cmd/cloud.go @@ -372,7 +372,7 @@ Examples: IsRepo: true, } } else { - info, err := deployer.GetGitInfo(logger, dir) + info, err := deployer.GetGitInfoRecursive(logger, dir) if err != nil { logger.Debug("Failed to get git info: %v", err) } diff --git a/internal/deployer/metadata.go b/internal/deployer/metadata.go index 3bb18127..40db267d 100644 --- a/internal/deployer/metadata.go +++ b/internal/deployer/metadata.go @@ -99,3 +99,37 @@ func GetGitInfo(logger logger.Logger, dir string) (*GitInfo, error) { return info, nil } + +// GetGitInfoRecursive walks up directories until it finds a git repo and returns its info +func GetGitInfoRecursive(logger logger.Logger, startDir string) (*GitInfo, error) { + dir := startDir + for { + info, err := GetGitInfo(logger, dir) + if err != nil { + return nil, err + } + if info != nil && info.IsRepo { + return info, nil + } + + parent := parentDir(dir) + if parent == dir { + break + } + dir = parent + } + return &GitInfo{}, nil +} + +// parentDir returns the parent directory of the given path +func parentDir(path string) string { + if path == "/" { + return path + } + cleaned := strings.TrimRight(path, "/") + idx := strings.LastIndex(cleaned, "/") + if idx <= 0 { + return "/" + } + return cleaned[:idx] +} From 5d39ef5c4613bf72d253236963b4720bfafb52a9 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Mon, 5 May 2025 13:36:48 -0400 Subject: [PATCH 2/2] max depth --- internal/deployer/metadata.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/deployer/metadata.go b/internal/deployer/metadata.go index 40db267d..a6b64514 100644 --- a/internal/deployer/metadata.go +++ b/internal/deployer/metadata.go @@ -102,8 +102,13 @@ func GetGitInfo(logger logger.Logger, dir string) (*GitInfo, error) { // GetGitInfoRecursive walks up directories until it finds a git repo and returns its info func GetGitInfoRecursive(logger logger.Logger, startDir string) (*GitInfo, error) { + depth := 0 dir := startDir for { + if depth >= 100 { + logger.Warn("Max depth reached while trying to find git dir") + return &GitInfo{}, nil + } info, err := GetGitInfo(logger, dir) if err != nil { return nil, err @@ -117,6 +122,7 @@ func GetGitInfoRecursive(logger logger.Logger, startDir string) (*GitInfo, error break } dir = parent + depth++ } return &GitInfo{}, nil }