mirror of https://github.com/databricks/cli.git
Compare commits
No commits in common. "1e7d06cc3e1cd0c28b1d0e83cc7f0a52f18f4311" and "8b5bb37019f13d191a8aee5b1e584824c40fe48f" have entirely different histories.
1e7d06cc3e
...
8b5bb37019
|
@ -2,8 +2,6 @@ package mutator
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/databricks/cli/bundle"
|
"github.com/databricks/cli/bundle"
|
||||||
|
@ -26,9 +24,7 @@ func (m *loadGitDetails) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagn
|
||||||
var diags diag.Diagnostics
|
var diags diag.Diagnostics
|
||||||
info, err := git.FetchRepositoryInfo(ctx, b.BundleRoot.Native(), b.WorkspaceClient())
|
info, err := git.FetchRepositoryInfo(ctx, b.BundleRoot.Native(), b.WorkspaceClient())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.Is(err, os.ErrNotExist) {
|
diags = append(diags, diag.WarningFromErr(err)...)
|
||||||
diags = append(diags, diag.WarningFromErr(err)...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.WorktreeRoot == "" {
|
if info.WorktreeRoot == "" {
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"github.com/databricks/cli/libs/env"
|
"github.com/databricks/cli/libs/env"
|
||||||
"github.com/databricks/cli/libs/filer"
|
"github.com/databricks/cli/libs/filer"
|
||||||
"github.com/databricks/cli/libs/flags"
|
"github.com/databricks/cli/libs/flags"
|
||||||
"github.com/databricks/cli/libs/folders"
|
"github.com/databricks/cli/libs/git"
|
||||||
"github.com/databricks/cli/libs/template"
|
"github.com/databricks/cli/libs/template"
|
||||||
"github.com/databricks/databricks-sdk-go"
|
"github.com/databricks/databricks-sdk-go"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -144,7 +144,7 @@ func getBundleRemoteRootPath(w *databricks.WorkspaceClient, t *testing.T, unique
|
||||||
}
|
}
|
||||||
|
|
||||||
func blackBoxRun(t *testing.T, root string, args ...string) (stdout string, stderr string) {
|
func blackBoxRun(t *testing.T, root string, args ...string) (stdout string, stderr string) {
|
||||||
gitRoot, err := folders.FindDirWithLeaf(".", ".git")
|
gitRoot, err := git.FindLeafInTree(".", ".git")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Setenv("BUNDLE_ROOT", root)
|
t.Setenv("BUNDLE_ROOT", root)
|
||||||
|
|
|
@ -101,7 +101,7 @@ func TestAccFetchRepositoryInfoAPI_FromNonRepo(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
} else {
|
} else {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.ErrorContains(t, err, test.msg)
|
assert.Contains(t, err.Error(), test.msg)
|
||||||
}
|
}
|
||||||
assertEmptyGitInfo(t, info)
|
assertEmptyGitInfo(t, info)
|
||||||
})
|
})
|
||||||
|
@ -151,7 +151,7 @@ func TestAccFetchRepositoryInfoDotGit_FromNonGitRepo(t *testing.T) {
|
||||||
for _, input := range tests {
|
for _, input := range tests {
|
||||||
t.Run(input, func(t *testing.T) {
|
t.Run(input, func(t *testing.T) {
|
||||||
info, err := git.FetchRepositoryInfo(ctx, input, wt.W)
|
info, err := git.FetchRepositoryInfo(ctx, input, wt.W)
|
||||||
assert.ErrorIs(t, err, os.ErrNotExist)
|
assert.NoError(t, err)
|
||||||
assertEmptyGitInfo(t, info)
|
assertEmptyGitInfo(t, info)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,6 @@ import (
|
||||||
// FindDirWithLeaf returns the first directory that holds `leaf`,
|
// FindDirWithLeaf returns the first directory that holds `leaf`,
|
||||||
// traversing up to the root of the filesystem, starting at `dir`.
|
// traversing up to the root of the filesystem, starting at `dir`.
|
||||||
func FindDirWithLeaf(dir string, leaf string) (string, error) {
|
func FindDirWithLeaf(dir string, leaf string) (string, error) {
|
||||||
dir, err := filepath.Abs(dir)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
for {
|
for {
|
||||||
_, err := os.Stat(filepath.Join(dir, leaf))
|
_, err := os.Stat(filepath.Join(dir, leaf))
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,15 @@ package git
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
|
"io/fs"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/databricks/cli/libs/dbr"
|
"github.com/databricks/cli/libs/dbr"
|
||||||
"github.com/databricks/cli/libs/folders"
|
|
||||||
"github.com/databricks/cli/libs/log"
|
"github.com/databricks/cli/libs/log"
|
||||||
"github.com/databricks/cli/libs/vfs"
|
"github.com/databricks/cli/libs/vfs"
|
||||||
"github.com/databricks/databricks-sdk-go"
|
"github.com/databricks/databricks-sdk-go"
|
||||||
|
@ -102,7 +105,7 @@ func ensureWorkspacePrefix(p string) string {
|
||||||
func fetchRepositoryInfoDotGit(ctx context.Context, path string) (RepositoryInfo, error) {
|
func fetchRepositoryInfoDotGit(ctx context.Context, path string) (RepositoryInfo, error) {
|
||||||
result := RepositoryInfo{}
|
result := RepositoryInfo{}
|
||||||
|
|
||||||
rootDir, err := folders.FindDirWithLeaf(path, GitDirectoryName)
|
rootDir, err := FindLeafInTree(path, GitDirectoryName)
|
||||||
if rootDir == "" {
|
if rootDir == "" {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
@ -131,3 +134,31 @@ func fetchRepositoryInfoDotGit(ctx context.Context, path string) (RepositoryInfo
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FindLeafInTree(p string, leafName string) (string, error) {
|
||||||
|
p, err := filepath.Abs(p)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
for i := 0; i < 10000; i++ {
|
||||||
|
_, err = os.Stat(filepath.Join(p, leafName))
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
// Found [leafName] in p
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrNotExist means we continue traversal up the tree.
|
||||||
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
|
parent := filepath.Dir(p)
|
||||||
|
if parent == p {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
p = parent
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
package git
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestFindLeafInTree(t *testing.T) {
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
root := filepath.Join(wd, "..", "..")
|
||||||
|
|
||||||
|
// Find from working directory should work.
|
||||||
|
{
|
||||||
|
out, err := FindLeafInTree(wd, ".git")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, root, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find from project root itself should work.
|
||||||
|
{
|
||||||
|
out, err := FindLeafInTree(root, ".git")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, root, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find for something that doesn't exist should work.
|
||||||
|
{
|
||||||
|
out, err := FindLeafInTree(root, "this-leaf-doesnt-exist-anywhere")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "", out)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue