Skip to content

Commit

Permalink
Moved internal/tools duplicated findRepoRoot function to common packa…
Browse files Browse the repository at this point in the history
…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
eddyleelin and Aneurysm9 authored Jun 10, 2021
1 parent cdf67dd commit 135ac4b
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 57 deletions.
57 changes: 57 additions & 0 deletions internal/tools/common.go
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
}
}
33 changes: 5 additions & 28 deletions internal/tools/crosslink/crosslink.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,37 +35,12 @@ import (
"path/filepath"
"strings"
"text/tabwriter"

"go.opentelemetry.io/otel/internal/tools"
)

type repo string

func findRepoRoot() (repo, 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 repo(dir), nil
}
}

type mod struct {
filePath string
importPath string
Expand Down Expand Up @@ -157,11 +132,13 @@ func (m mods) crossLink() error {
}

func main() {
repoRoot, err := findRepoRoot()
repoRootStr, err := tools.FindRepoRoot()
if err != nil {
log.Fatalf("unable to find repo root: %v", err)
}

repoRoot := repo(repoRootStr)

mods, err := repoRoot.findModules()
if err != nil {
log.Fatalf("unable to list modules: %v", err)
Expand Down
32 changes: 3 additions & 29 deletions internal/tools/semconv-gen/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ import (
"os"
"os/exec"
"path"
"path/filepath"
"regexp"
"sort"
"strings"

flag "github.com/spf13/pflag"
"golang.org/x/mod/semver"

"go.opentelemetry.io/otel/internal/tools"
)

func main() {
Expand Down Expand Up @@ -102,7 +103,7 @@ func validateConfig(cfg config) (config, error) {
}

if !path.IsAbs(cfg.outputPath) {
root, err := findRepoRoot()
root, err := tools.FindRepoRoot()
if err != nil {
return config{}, err
}
Expand Down Expand Up @@ -257,33 +258,6 @@ func checkoutSpecToDir(cfg config, toDir string) (doneFunc func(), err error) {
return doneFunc, nil
}

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
}
}

var capitalizations = []string{
"ACL",
"AIX",
Expand Down

0 comments on commit 135ac4b

Please sign in to comment.