-
Notifications
You must be signed in to change notification settings - Fork 206
Fix repos get/update/delete for Git-CLI-enabled folders #6122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Fixed `databricks repos get/update/delete` failing with `object at path "..." is not a repo` for Git-CLI-enabled folders, which the workspace API reports as directories rather than repos. Git CLI is a preview feature; as an alternative mitigation it can be turned off in the workspace admin previews settings. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,3 @@ | ||
|
|
||
| >>> [CLI] repos get /Repos/me@databricks.com/doesnotexist -o json | ||
| Error: failed to look up repo by path: Path (/Repos/me@databricks.com/doesnotexist) doesn't exist. | ||
|
|
||
| >>> [CLI] repos get /not-a-repo -o json | ||
| Error: object at path "/not-a-repo" is not a repo |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1 @@ | ||
| musterr trace $CLI repos get /Repos/me@databricks.com/doesnotexist -o json | ||
|
|
||
| $CLI workspace mkdirs /not-a-repo | ||
| musterr trace $CLI repos get /not-a-repo -o json |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| { | ||
| "method": "GET", | ||
| "path": "/.well-known/databricks-config" | ||
| } | ||
|
Comment on lines
+1
to
+4
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need this request?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed it's not needed for the test — nothing here asserts on it, and it's unrelated to the repos behavior under test. But it can't be excluded today. It's the SDK's host-metadata discovery during config init, so it fires before any command logic runs (the testserver registers a default handler for it at So the choices are keep it, turn off If you'd like the harness to skip discovery/boilerplate endpoints from recordings, that seems worth doing on its own — it'd clean up all ~62 snapshots at once, and the change would be localized to
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. feel free to use print_requests.py in the script |
||
| { | ||
| "method": "POST", | ||
| "path": "/api/2.0/repos", | ||
| "body": { | ||
| "path": "/Workspace/Users/me@databricks.com/test-repo", | ||
| "provider": "gitHub", | ||
| "url": "https://github.com/databricks/databricks-empty-ide-project.git" | ||
| } | ||
| } | ||
| { | ||
| "method": "GET", | ||
| "path": "/api/2.0/workspace/get-status", | ||
| "q": { | ||
| "path": "/Workspace/Users/me@databricks.com/test-repo" | ||
| } | ||
| } | ||
| { | ||
| "method": "GET", | ||
| "path": "/api/2.0/repos/[NUMID]" | ||
| } | ||
| { | ||
| "method": "GET", | ||
| "path": "/api/2.0/workspace/get-status", | ||
| "q": { | ||
| "path": "/Workspace/Users/me@databricks.com/test-repo" | ||
| } | ||
| } | ||
| { | ||
| "method": "PATCH", | ||
| "path": "/api/2.0/repos/[NUMID]", | ||
| "body": { | ||
| "branch": "update-by-path" | ||
| } | ||
| } | ||
| { | ||
| "method": "GET", | ||
| "path": "/api/2.0/workspace/get-status", | ||
| "q": { | ||
| "path": "/Workspace/Users/me@databricks.com/test-repo" | ||
| } | ||
| } | ||
| { | ||
| "method": "DELETE", | ||
| "path": "/api/2.0/repos/[NUMID]" | ||
| } | ||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
|
|
||
| >>> [CLI] repos create https://github.com/databricks/databricks-empty-ide-project.git gitHub --path /Workspace/Users/me@databricks.com/test-repo | ||
| [NUMID] | ||
|
|
||
| === Get by path resolves a Git CLI folder | ||
| >>> [CLI] repos get /Workspace/Users/me@databricks.com/test-repo -o json | ||
| { | ||
| "branch": "main", | ||
| "id": [NUMID], | ||
| "path": "/Workspace/Users/me@databricks.com/test-repo", | ||
| "provider": "gitHub", | ||
| "url": "https://github.com/databricks/databricks-empty-ide-project.git" | ||
| } | ||
|
|
||
| === Update by path resolves a Git CLI folder | ||
| >>> [CLI] repos update /Workspace/Users/me@databricks.com/test-repo --branch update-by-path | ||
|
|
||
| === Delete by path resolves a Git CLI folder | ||
| >>> [CLI] repos delete /Workspace/Users/me@databricks.com/test-repo |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| url=https://github.com/databricks/databricks-empty-ide-project.git | ||
| provider=gitHub | ||
| # A Git-CLI-enabled folder lives outside /Repos and get-status reports it as a | ||
| # DIRECTORY, not a REPO. Path-based commands must still resolve it to a repo ID. | ||
| path=/Workspace/Users/me@databricks.com/test-repo | ||
|
|
||
| trace $CLI repos create $url $provider --path $path | jq .id -r | ||
|
|
||
| title "Get by path resolves a Git CLI folder" | ||
| trace $CLI repos get $path -o json | ||
|
|
||
| title "Update by path resolves a Git CLI folder" | ||
| trace $CLI repos update $path --branch update-by-path | ||
|
|
||
| title "Delete by path resolves a Git CLI folder" | ||
| trace $CLI repos delete $path |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -418,7 +418,14 @@ func (s *FakeWorkspace) WorkspaceGetStatus(requestPath string) Response { | |
| } else if entry, ok := s.files[cleaned]; ok { | ||
| info = entry.Info | ||
| } else if repoId, ok := s.repoIdByPath[cleaned]; ok { | ||
| info = workspace.ObjectInfo{ObjectType: "REPO", Path: cleaned, ObjectId: repoId} | ||
| // Control-plane repos (under /Repos) report the REPO object type, while | ||
| // Git-CLI-enabled folders elsewhere are materialized as plain DIRECTORY | ||
| // nodes. Both resolve to a valid repo ID via the repos API. | ||
|
Comment on lines
+421
to
+423
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why determine the object type based on path? Not a big deal really I guess because but maybe a little misleading
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you have a recommendation for how else is best to distinguish between CP or DP in the fake? (i need to test both behaviors from the fake). The path is my only input parameter.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this seems fine for a testserver as it mimics the backend |
||
| objectType := workspace.ObjectTypeRepo | ||
| if !strings.HasPrefix(cleaned, "/Repos/") { | ||
| objectType = workspace.ObjectTypeDirectory | ||
| } | ||
|
Comment on lines
+421
to
+427
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a weird fake.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i wasnt entirely sure how else to fake a CP git folder vs DP so i told it just to fake the CP git folder in /Repos/ paths. |
||
| info = workspace.ObjectInfo{ObjectType: objectType, Path: cleaned, ObjectId: repoId} | ||
| } else { | ||
| // Match the real Workspace API wording, which echoes the requested path. | ||
| return Response{ | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't think we need this in the changelog
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a given user who reads this may not know what git cli is is my main thing