Skip to content

Commit 2e1442f

Browse files
authored
Relax project-dir validation to not require .gradle/ (#13)
The .gradle/ directory only exists when Gradle writes configuration-cache or other project-level state into the project root. Builds invoked with -p (e.g. -p plugins, -p build-logic) place .gradle/ in the subdir instead, so requiring it at the project root causes save and save-delta to fail for those cache keys. ProjectDirSources already handles the missing .gradle/ case gracefully, so the validation just needs to check the directory itself exists.
1 parent 08b2158 commit 2e1442f

2 files changed

Lines changed: 14 additions & 23 deletions

File tree

gradlecache/gradlecache_test.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -862,25 +862,24 @@ func TestSaveDeltaDefaultsProjectDirToWorkingDirectory(t *testing.T) {
862862
}
863863
}
864864

865-
func TestSaveDeltaErrorsWhenProjectDirHasNoDotGradle(t *testing.T) {
865+
func TestSaveDeltaErrorsWhenProjectDirDoesNotExist(t *testing.T) {
866866
ctx := context.Background()
867867
gradleHome := t.TempDir()
868868
must(t, os.MkdirAll(filepath.Join(gradleHome, "caches"), 0o755))
869869
must(t, touchMarkerFile(filepath.Join(gradleHome, ".cache-restore-marker")))
870870

871-
projectDir := t.TempDir()
872871
err := SaveDelta(ctx, SaveDeltaConfig{
873872
CachewURL: "http://example.invalid",
874873
CacheKey: "test-cache",
875874
Branch: "feature/test",
876875
GradleUserHome: gradleHome,
877-
ProjectDir: projectDir,
876+
ProjectDir: filepath.Join(t.TempDir(), "does-not-exist"),
878877
})
879878
if err == nil {
880-
t.Fatal("expected SaveDelta to fail when project dir has no .gradle directory")
879+
t.Fatal("expected SaveDelta to fail when project dir does not exist")
881880
}
882-
if !strings.Contains(err.Error(), "missing .gradle/") {
883-
t.Fatalf("expected missing .gradle error, got %v", err)
881+
if !strings.Contains(err.Error(), "does not exist") {
882+
t.Fatalf("expected 'does not exist' error, got %v", err)
884883
}
885884
}
886885

@@ -926,31 +925,24 @@ func TestSaveDeltaReturnsMarkerStatErrors(t *testing.T) {
926925
}
927926
}
928927

929-
func TestSaveErrorsWhenWorkingDirectoryHasNoDotGradle(t *testing.T) {
928+
func TestSaveErrorsWhenProjectDirDoesNotExist(t *testing.T) {
930929
ctx := context.Background()
931930
gradleHome := t.TempDir()
932931
must(t, os.MkdirAll(filepath.Join(gradleHome, "caches"), 0o755))
933932

934-
projectDir := t.TempDir()
935-
origWD, err := os.Getwd()
936-
must(t, err)
937-
must(t, os.Chdir(projectDir))
938-
defer func() {
939-
must(t, os.Chdir(origWD))
940-
}()
941-
942-
err = Save(ctx, SaveConfig{
933+
err := Save(ctx, SaveConfig{
943934
CachewURL: "http://example.invalid",
944935
CacheKey: "test-cache",
945936
Commit: strings.Repeat("a", 40),
946937
GradleUserHome: gradleHome,
938+
ProjectDir: filepath.Join(t.TempDir(), "does-not-exist"),
947939
SkipWarm: true,
948940
})
949941
if err == nil {
950-
t.Fatal("expected Save to fail when working directory has no .gradle directory")
942+
t.Fatal("expected Save to fail when project dir does not exist")
951943
}
952-
if !strings.Contains(err.Error(), "missing .gradle/") {
953-
t.Fatalf("expected missing .gradle error, got %v", err)
944+
if !strings.Contains(err.Error(), "does not exist") {
945+
t.Fatalf("expected 'does not exist' error, got %v", err)
954946
}
955947
}
956948

gradlecache/save.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,13 +1045,12 @@ func validateProjectDir(projectDir string) error {
10451045
if projectDir == "" {
10461046
return errors.New("project directory is required")
10471047
}
1048-
dotGradle := filepath.Join(projectDir, ".gradle")
1049-
info, err := os.Stat(dotGradle)
1048+
info, err := os.Stat(projectDir)
10501049
if err != nil {
1051-
return errors.Errorf("project directory %q is missing .gradle/: %w", projectDir, err)
1050+
return errors.Errorf("project directory %q does not exist: %w", projectDir, err)
10521051
}
10531052
if !info.IsDir() {
1054-
return errors.Errorf("project directory %q has non-directory .gradle path", projectDir)
1053+
return errors.Errorf("project directory %q is not a directory", projectDir)
10551054
}
10561055
return nil
10571056
}

0 commit comments

Comments
 (0)