summaryrefslogtreecommitdiff
path: root/internal/api
diff options
context:
space:
mode:
authorClaude Sonnet 4.6 <noreply@anthropic.com>2026-03-14 18:11:44 +0000
committerClaude Sonnet 4.6 <noreply@anthropic.com>2026-03-14 18:11:44 +0000
commit43440200facf9f7c51ba4f4638e69e7d651dd50d (patch)
tree5984798cb6ba0038e17c0e175ab35054276b38cf /internal/api
parent5ad88bfc08584585b56ac8eee9cde95ed20b7b43 (diff)
feat(Phase4): add file changes for changestats executor wiring
Files changed: CLAUDE.md, internal/api/changestats.go, internal/executor/executor.go, internal/executor/executor_test.go, internal/task/changestats.go (new) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/api')
-rw-r--r--internal/api/changestats.go48
1 files changed, 7 insertions, 41 deletions
diff --git a/internal/api/changestats.go b/internal/api/changestats.go
index 0b70105..4f18f7f 100644
--- a/internal/api/changestats.go
+++ b/internal/api/changestats.go
@@ -1,49 +1,15 @@
package api
-import (
- "bufio"
- "os"
- "regexp"
- "strconv"
- "strings"
+import "github.com/thepeterstone/claudomator/internal/task"
- "github.com/thepeterstone/claudomator/internal/task"
-)
-
-// gitDiffStatRe matches git diff --stat summary lines, e.g.:
-//
-// "3 files changed, 50 insertions(+), 10 deletions(-)"
-// "1 file changed, 5 insertions(+)"
-// "1 file changed, 3 deletions(-)"
-var gitDiffStatRe = regexp.MustCompile(`(\d+) files? changed(?:, (\d+) insertions?\(\+\))?(?:, (\d+) deletions?\(-\))?`)
-
-// parseChangestatFromOutput scans text for git diff --stat summary lines and
-// returns the first match as a Changestats value. Returns nil if no match found.
+// parseChangestatFromOutput delegates to task.ParseChangestatFromOutput.
+// Kept as a package-local wrapper for use within the api package.
func parseChangestatFromOutput(output string) *task.Changestats {
- scanner := bufio.NewScanner(strings.NewReader(output))
- for scanner.Scan() {
- line := scanner.Text()
- if m := gitDiffStatRe.FindStringSubmatch(line); m != nil {
- cs := &task.Changestats{}
- cs.FilesChanged, _ = strconv.Atoi(m[1])
- if m[2] != "" {
- cs.LinesAdded, _ = strconv.Atoi(m[2])
- }
- if m[3] != "" {
- cs.LinesRemoved, _ = strconv.Atoi(m[3])
- }
- return cs
- }
- }
- return nil
+ return task.ParseChangestatFromOutput(output)
}
-// parseChangestatFromFile reads a log file and extracts the first git diff stat
-// summary it finds. Returns nil if the file cannot be read or contains no match.
+// parseChangestatFromFile delegates to task.ParseChangestatFromFile.
+// Kept as a package-local wrapper for use within the api package.
func parseChangestatFromFile(path string) *task.Changestats {
- data, err := os.ReadFile(path)
- if err != nil {
- return nil
- }
- return parseChangestatFromOutput(string(data))
+ return task.ParseChangestatFromFile(path)
}