-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moved internal/tools duplicated findRepoRoot function to common packa…
…ge (#1978) * Moved internal/tools duplicated findRepoRoot function to common package Created a package under "go.opentelemetry.io/otel/internal/tools/common" with func FindRepoRoot() to return string. Added a line in crosslink to convert outputted string to type repo. * Removed debugging line Co-authored-by: Anthony Mirabella <a9@aneurysm9.com> * Added changelog stub * Update CHANGELOG.md * Removed change log entry * Updated docstring for FindRepoPath() * Change tools/common package to tools * Added back "errors" import to generator.go Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
- Loading branch information
1 parent
cdf67dd
commit 135ac4b
Showing
3 changed files
with
65 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
// Package tools provides helper functions used in scripts within the | ||
// internal/tools module, as well as imports needed for a build with the | ||
// "tools" build tag. | ||
package tools | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
"os" | ||
"path/filepath" | ||
"strings" | ||
) | ||
|
||
// FindRepoRoot retrieves the root of the repository containing the current working directory. | ||
// Beginning at the current working directory (dir), the algorithm checks if joining the ".git" | ||
// suffix, such as "dir.get", is a valid file. Otherwise, it will continue checking the dir's | ||
// parent directory until it reaches the repo root or returns an error if it cannot be found. | ||
func FindRepoRoot() (string, error) { | ||
start, err := os.Getwd() | ||
if err != nil { | ||
return "", err | ||
} | ||
|
||
dir := start | ||
for { | ||
_, err := os.Stat(filepath.Join(dir, ".git")) | ||
if errors.Is(err, os.ErrNotExist) { | ||
dir = filepath.Dir(dir) | ||
// From https://golang.org/pkg/path/filepath/#Dir: | ||
// The returned path does not end in a separator unless it is the root directory. | ||
if strings.HasSuffix(dir, string(filepath.Separator)) { | ||
return "", fmt.Errorf("unable to find git repository enclosing working dir %s", start) | ||
} | ||
continue | ||
} | ||
|
||
if err != nil { | ||
return "", err | ||
} | ||
|
||
return dir, nil | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters