branch: elpa/aidermacs
commit 5b812f26e5a7b28db679620b57cef5ebf5920d19
Author: Mingde (Matthew) Zeng <[email protected]>
Commit: Mingde (Matthew) Zeng <[email protected]>
Check udiff cases
---
aidermacs-backends.el | 25 +++++++++++++++++++++++--
aidermacs.el | 24 ++++++++++++++++++++++--
2 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/aidermacs-backends.el b/aidermacs-backends.el
index 4a4879e1fb..d401343172 100644
--- a/aidermacs-backends.el
+++ b/aidermacs-backends.el
@@ -108,7 +108,9 @@ Remove any files that don't exist."
"Parse OUTPUT for files and add them to `aidermacs--tracked-files'."
(when output
(let ((lines (split-string output "\n"))
- (last-line ""))
+ (last-line "")
+ (in-udiff nil)
+ (current-udiff-file nil))
(dolist (line lines)
(cond
;; Applied edit to <filename>
@@ -153,7 +155,26 @@ Remove any files that don't exist."
;; <file> is already in the chat as an editable file
((string-match "\\(\\./\\)?\\(.+\\) is already in the chat as an
editable file" line)
(when-let ((file (match-string 2 line)))
- (add-to-list 'aidermacs--tracked-files file))))
+ (add-to-list 'aidermacs--tracked-files file)))
+
+ ;; Handle udiff format
+ ;; Detect start of udiff with "--- filename"
+ ((string-match "^--- \\(\\./\\)?\\(.+\\)" line)
+ (setq in-udiff t
+ current-udiff-file (match-string 2 line)))
+
+ ;; Confirm udiff file with "+++ filename" line
+ ((and in-udiff
+ current-udiff-file
+ (string-match "^\\+\\+\\+ \\(\\./\\)?\\(.+\\)" line))
+ (let ((plus-file (match-string 2 line)))
+ ;; Only add if the filenames match (ignoring ./ prefix)
+ (when (string= (file-name-nondirectory current-udiff-file)
+ (file-name-nondirectory plus-file))
+ (add-to-list 'aidermacs--tracked-files current-udiff-file)
+ (setq in-udiff nil
+ current-udiff-file nil)))))
+
(setq last-line line))
;; Verify all tracked files exist
diff --git a/aidermacs.el b/aidermacs.el
index 9c3936c12d..5b292468ad 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -388,7 +388,9 @@ Returns a list of files that have been modified according
to the output."
(output aidermacs--current-output))
(when output
(let ((lines (split-string output "\n"))
- (last-line ""))
+ (last-line "")
+ (in-udiff nil)
+ (current-udiff-file nil))
(dolist (line lines)
(cond
;; Case 1: Look for "Applied edit to <filename>" pattern
@@ -400,7 +402,25 @@ Returns a list of files that have been modified according
to the output."
((string-match "^```" line)
(let ((potential-file (string-trim last-line)))
(when (not (string-empty-p potential-file))
- (push potential-file edited-files)))))
+ (push potential-file edited-files))))
+
+ ;; Case 3: Handle udiff format
+ ;; Detect start of udiff with "--- filename"
+ ((string-match "^--- \\(\\./\\)?\\(.+\\)" line)
+ (setq in-udiff t
+ current-udiff-file (match-string 2 line)))
+
+ ;; Confirm udiff file with "+++ filename" line
+ ((and in-udiff
+ current-udiff-file
+ (string-match "^\\+\\+\\+ \\(\\./\\)?\\(.+\\)" line))
+ (let ((plus-file (match-string 2 line)))
+ ;; Only add if the filenames match (ignoring ./ prefix)
+ (when (string= (file-name-nondirectory current-udiff-file)
+ (file-name-nondirectory plus-file))
+ (push current-udiff-file edited-files)
+ (setq in-udiff nil
+ current-udiff-file nil)))))
(setq last-line line))))