Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions cmd/entire/cli/checkpoint/remote/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,22 @@ func ResolveFetchTarget(ctx context.Context, target string) (string, error) {
return url, nil
}

// ResolveFilteredFetchTarget returns a fetch target suitable for an explicit
// filtered fetch. Remote names are resolved to URLs even when the repo-level
// filtered_fetches setting is disabled, because callers that pass
// --filter=blob:none must not let git persist promisor settings onto a named
// remote like origin.
func ResolveFilteredFetchTarget(ctx context.Context, target string) (string, error) {
if target == "" || IsURL(target) || isLocalPath(target) {
return target, nil
}
url, err := GetRemoteURL(ctx, target)
if err != nil {
return "", fmt.Errorf("get remote URL: %w", err)
}
return url, nil
}

// newCommand creates an exec.Cmd for a git operation that may need
// checkpoint token authentication. If ENTIRE_CHECKPOINT_TOKEN is set:
// - if the target in args is (or resolves to) an SSH remote, the target is
Expand Down
30 changes: 30 additions & 0 deletions cmd/entire/cli/checkpoint/remote/git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,36 @@ func TestResolveFetchTarget(t *testing.T) {
})
}

// Not parallel: uses t.Chdir()
func TestResolveFilteredFetchTarget_AlwaysResolvesRemoteName(t *testing.T) {
ctx := context.Background()

tmpDir := t.TempDir()
testutil.InitRepo(t, tmpDir)
testutil.WriteFile(t, tmpDir, "f.txt", "init")
testutil.GitAdd(t, tmpDir, "f.txt")
testutil.GitCommit(t, tmpDir, "init")

cmd := exec.CommandContext(ctx, "git", "remote", "add", "origin", "https://github.com/org/repo.git")
cmd.Dir = tmpDir
cmd.Env = testutil.GitIsolatedEnv()
require.NoError(t, cmd.Run())

t.Chdir(tmpDir)

target, err := ResolveFilteredFetchTarget(ctx, "origin")
require.NoError(t, err)
assert.Equal(t, "https://github.com/org/repo.git", target)

target, err = ResolveFilteredFetchTarget(ctx, "https://github.com/org/repo.git")
require.NoError(t, err)
assert.Equal(t, "https://github.com/org/repo.git", target)

target, err = ResolveFilteredFetchTarget(ctx, "../repo.git")
require.NoError(t, err)
assert.Equal(t, "../repo.git", target)
}

func TestAppendCheckpointTokenEnv(t *testing.T) {
t.Parallel()

Expand Down
Loading
Loading