Skip to content

Commit d8c17e9

Browse files
committed
fix: add .gitignore entry if missing
1 parent 9a7d132 commit d8c17e9

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

pkg/commands/template/upgrade.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,20 @@ func createUpgradeCommand(
145145
return fmt.Errorf("failed to get current working directory: %w", err)
146146
}
147147

148+
// Create a gitClient for upgrade process
149+
gitClient := template.NewGitClient()
150+
151+
// Ensure .gitignore entry is present for tempExternal
152+
tempExternal := "temp_external"
153+
if err := gitClient.EnsureGitignoreEntry(".gitignore", tempExternal); err != nil {
154+
return fmt.Errorf("failed to add entry to .gitignore %s: %w", tempExternal, err)
155+
}
156+
if err := gitClient.Commit(".gitignore", fmt.Sprintf("chore: ensure %s is in .gitignore", tempExternal)); err != nil {
157+
return fmt.Errorf("failed to commit entry to .gitignore %s: %w", tempExternal, err)
158+
}
159+
148160
// Ensure parent exists
149-
tempParent := filepath.Join(absProjectPath, "temp_external")
161+
tempParent := filepath.Join(absProjectPath, tempExternal)
150162
if err := os.MkdirAll(tempParent, 0o755); err != nil {
151163
return fmt.Errorf("failed to create %s: %w", tempParent, err)
152164
}
@@ -187,7 +199,7 @@ func createUpgradeCommand(
187199

188200
// Fetch main template
189201
fetcher := &template.GitFetcher{
190-
Client: template.NewGitClient(),
202+
Client: gitClient,
191203
Logger: *progresslogger.NewProgressLogger(
192204
logger,
193205
tracker,

pkg/template/git_client.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,45 @@ func (g *GitClient) ParseCloneOutput(r io.Reader, rep Reporter, dest string, ref
239239
}
240240
return nil
241241
}
242+
243+
func (g *GitClient) EnsureGitignoreEntry(path, entry string) error {
244+
// Create .gitignore if missing
245+
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0o644)
246+
if err != nil {
247+
return fmt.Errorf("open %s: %w", path, err)
248+
}
249+
defer f.Close()
250+
251+
// Check if entry exists
252+
scanner := bufio.NewScanner(f)
253+
for scanner.Scan() {
254+
if strings.TrimSpace(scanner.Text()) == entry {
255+
return nil // already present
256+
}
257+
}
258+
if err := scanner.Err(); err != nil {
259+
return fmt.Errorf("scan %s: %w", path, err)
260+
}
261+
262+
// Append entry
263+
if _, err := f.WriteString("\n" + entry + "\n"); err != nil {
264+
return fmt.Errorf("write %s: %w", path, err)
265+
}
266+
return nil
267+
}
268+
269+
func (g *GitClient) Commit(file, msg string) error {
270+
cmds := [][]string{
271+
{"git", "add", file},
272+
{"git", "commit", "-m", msg},
273+
}
274+
275+
for _, args := range cmds {
276+
cmd := exec.Command(args[0], args[1:]...)
277+
out, err := cmd.CombinedOutput()
278+
if err != nil {
279+
return fmt.Errorf("%s failed: %v\n%s", strings.Join(args, " "), err, string(out))
280+
}
281+
}
282+
return nil
283+
}

0 commit comments

Comments
 (0)