chore: do not prompt for init when empty

Kujtim Hoxha created

Change summary

internal/config/init.go | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)

Detailed changes

internal/config/init.go 🔗

@@ -7,6 +7,8 @@ import (
 	"slices"
 	"strings"
 	"sync/atomic"
+
+	"github.com/charmbracelet/crush/internal/fsext"
 )
 
 const (
@@ -59,6 +61,15 @@ func ProjectNeedsInitialization() (bool, error) {
 		return false, nil
 	}
 
+	// If the working directory has no non-ignored files, skip initialization step
+	empty, err := dirHasNoVisibleFiles(cfg.WorkingDir())
+	if err != nil {
+		return false, fmt.Errorf("failed to check if directory is empty: %w", err)
+	}
+	if empty {
+		return false, nil
+	}
+
 	return true, nil
 }
 
@@ -90,6 +101,15 @@ func contextPathsExist(dir string) (bool, error) {
 	return false, nil
 }
 
+// dirHasNoVisibleFiles returns true if the directory has no files/dirs after applying ignore rules
+func dirHasNoVisibleFiles(dir string) (bool, error) {
+	files, _, err := fsext.ListDirectory(dir, nil, 1, 1)
+	if err != nil {
+		return false, err
+	}
+	return len(files) == 0, nil
+}
+
 func MarkProjectInitialized() error {
 	cfg := Get()
 	if cfg == nil {