Skip to content

Commit eadc69c

Browse files
authored
Merge pull request #494 from bborn/cli-non-git-project-support
Add --no-git/--git flags to CLI project commands
2 parents 21e587a + 0cbced2 commit eadc69c

File tree

1 file changed

+56
-16
lines changed

1 file changed

+56
-16
lines changed

cmd/task/main.go

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2232,16 +2232,18 @@ Examples:
22322232
color, _ := cmd.Flags().GetString("color")
22332233
aliases, _ := cmd.Flags().GetString("aliases")
22342234
claudeConfigDir, _ := cmd.Flags().GetString("claude-config-dir")
2235+
noGit, _ := cmd.Flags().GetBool("no-git")
22352236
outputJSON, _ := cmd.Flags().GetBool("json")
22362237

2237-
createProjectCLI(args[0], path, instructions, color, aliases, claudeConfigDir, outputJSON)
2238+
createProjectCLI(args[0], path, instructions, color, aliases, claudeConfigDir, noGit, outputJSON)
22382239
},
22392240
}
22402241
projectsCreateCmd.Flags().StringP("path", "p", "", "Project directory path (required)")
22412242
projectsCreateCmd.Flags().StringP("instructions", "i", "", "Project-specific AI instructions")
22422243
projectsCreateCmd.Flags().StringP("color", "c", "", "Hex color for display (e.g., #61AFEF)")
22432244
projectsCreateCmd.Flags().StringP("aliases", "a", "", "Comma-separated aliases for lookup")
22442245
projectsCreateCmd.Flags().String("claude-config-dir", "", "Override CLAUDE_CONFIG_DIR for this project")
2246+
projectsCreateCmd.Flags().Bool("no-git", false, "Disable git worktrees (for non-git projects)")
22452247
projectsCreateCmd.Flags().Bool("json", false, "Output in JSON format")
22462248
projectsCreateCmd.MarkFlagRequired("path")
22472249
projectsCmd.AddCommand(projectsCreateCmd)
@@ -2268,8 +2270,25 @@ Examples:
22682270
claudeConfigDir, _ := cmd.Flags().GetString("claude-config-dir")
22692271
projectContext, _ := cmd.Flags().GetString("context")
22702272
outputJSON, _ := cmd.Flags().GetBool("json")
2273+
noGit, _ := cmd.Flags().GetBool("no-git")
2274+
git, _ := cmd.Flags().GetBool("git")
22712275

2272-
updateProjectCLI(args[0], name, path, instructions, color, aliases, claudeConfigDir, projectContext, outputJSON)
2276+
if noGit && git {
2277+
fmt.Fprintln(os.Stderr, errorStyle.Render("Error: --no-git and --git are mutually exclusive"))
2278+
os.Exit(1)
2279+
}
2280+
2281+
// Determine git mode: nil means not specified
2282+
var useWorktrees *bool
2283+
if noGit {
2284+
v := false
2285+
useWorktrees = &v
2286+
} else if git {
2287+
v := true
2288+
useWorktrees = &v
2289+
}
2290+
2291+
updateProjectCLI(args[0], name, path, instructions, color, aliases, claudeConfigDir, projectContext, useWorktrees, outputJSON)
22732292
},
22742293
}
22752294
projectsUpdateCmd.Flags().StringP("name", "n", "", "New project name")
@@ -2279,6 +2298,8 @@ Examples:
22792298
projectsUpdateCmd.Flags().StringP("aliases", "a", "", "Comma-separated aliases for lookup")
22802299
projectsUpdateCmd.Flags().String("claude-config-dir", "", "Override CLAUDE_CONFIG_DIR for this project")
22812300
projectsUpdateCmd.Flags().String("context", "", "Cached project context summary")
2301+
projectsUpdateCmd.Flags().Bool("no-git", false, "Disable git worktrees (for non-git projects)")
2302+
projectsUpdateCmd.Flags().Bool("git", false, "Enable git worktrees (default)")
22822303
projectsUpdateCmd.Flags().Bool("json", false, "Output in JSON format")
22832304
projectsCmd.AddCommand(projectsUpdateCmd)
22842305

@@ -4817,13 +4838,14 @@ func showProjectCLI(name string, outputJSON bool) {
48174838

48184839
if outputJSON {
48194840
output := map[string]interface{}{
4820-
"id": project.ID,
4821-
"name": project.Name,
4822-
"path": project.Path,
4823-
"color": project.Color,
4824-
"aliases": project.Aliases,
4825-
"task_count": taskCount,
4826-
"created_at": project.CreatedAt.Time.Format(time.RFC3339),
4841+
"id": project.ID,
4842+
"name": project.Name,
4843+
"path": project.Path,
4844+
"color": project.Color,
4845+
"aliases": project.Aliases,
4846+
"use_worktrees": project.UseWorktrees,
4847+
"task_count": taskCount,
4848+
"created_at": project.CreatedAt.Time.Format(time.RFC3339),
48274849
}
48284850
if project.Instructions != "" {
48294851
output["instructions"] = project.Instructions
@@ -4864,6 +4886,9 @@ func showProjectCLI(name string, outputJSON bool) {
48644886
if project.ClaudeConfigDir != "" {
48654887
fmt.Printf("%s %s\n", dimStyle.Render("Claude Config:"), project.ClaudeConfigDir)
48664888
}
4889+
if !project.UseWorktrees {
4890+
fmt.Printf("%s %s\n", dimStyle.Render("Git Worktrees:"), "disabled (non-git project)")
4891+
}
48674892

48684893
if project.Instructions != "" {
48694894
fmt.Println()
@@ -4892,7 +4917,7 @@ func showProjectCLI(name string, outputJSON bool) {
48924917
}
48934918

48944919
// createProjectCLI creates a new project.
4895-
func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir string, outputJSON bool) {
4920+
func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir string, noGit bool, outputJSON bool) {
48964921
// Validate name
48974922
if strings.TrimSpace(name) == "" {
48984923
fmt.Fprintln(os.Stderr, errorStyle.Render("Error: project name cannot be empty"))
@@ -4943,6 +4968,7 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49434968
Color: color,
49444969
Aliases: aliases,
49454970
ClaudeConfigDir: claudeConfigDir,
4971+
UseWorktrees: !noGit,
49464972
}
49474973

49484974
if err := database.CreateProject(project); err != nil {
@@ -4952,10 +4978,11 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49524978

49534979
if outputJSON {
49544980
output := map[string]interface{}{
4955-
"id": project.ID,
4956-
"name": project.Name,
4957-
"path": project.Path,
4958-
"created_at": project.CreatedAt.Time.Format(time.RFC3339),
4981+
"id": project.ID,
4982+
"name": project.Name,
4983+
"path": project.Path,
4984+
"use_worktrees": project.UseWorktrees,
4985+
"created_at": project.CreatedAt.Time.Format(time.RFC3339),
49594986
}
49604987
if project.Color != "" {
49614988
output["color"] = project.Color
@@ -4966,12 +4993,16 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49664993
jsonBytes, _ := json.Marshal(output)
49674994
fmt.Println(string(jsonBytes))
49684995
} else {
4969-
fmt.Println(successStyle.Render(fmt.Sprintf("Created project '%s' at %s", name, absPath)))
4996+
suffix := ""
4997+
if !project.UseWorktrees {
4998+
suffix = " (non-git, worktrees disabled)"
4999+
}
5000+
fmt.Println(successStyle.Render(fmt.Sprintf("Created project '%s' at %s%s", name, absPath, suffix)))
49705001
}
49715002
}
49725003

49735004
// updateProjectCLI updates an existing project.
4974-
func updateProjectCLI(currentName, newName, path, instructions, color, aliases, claudeConfigDir, projectContext string, outputJSON bool) {
5005+
func updateProjectCLI(currentName, newName, path, instructions, color, aliases, claudeConfigDir, projectContext string, useWorktrees *bool, outputJSON bool) {
49755006
dbPath := db.DefaultPath()
49765007
database, err := db.Open(dbPath)
49775008
if err != nil {
@@ -5044,6 +5075,15 @@ func updateProjectCLI(currentName, newName, path, instructions, color, aliases,
50445075
changes = append(changes, "claude_config_dir")
50455076
}
50465077

5078+
if useWorktrees != nil {
5079+
project.UseWorktrees = *useWorktrees
5080+
if *useWorktrees {
5081+
changes = append(changes, "git worktrees enabled")
5082+
} else {
5083+
changes = append(changes, "git worktrees disabled")
5084+
}
5085+
}
5086+
50475087
if len(changes) == 0 && projectContext == "" {
50485088
fmt.Fprintln(os.Stderr, errorStyle.Render("Error: no changes specified"))
50495089
os.Exit(1)

0 commit comments

Comments
 (0)