]> git.eshelyaron.com Git - emacs.git/commitdiff
(diff-hunk-header-re-unified): Allow elided line counts.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 25 Apr 2008 02:08:43 +0000 (02:08 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 25 Apr 2008 02:08:43 +0000 (02:08 +0000)
(diff-end-of-hunk, diff-unified->context, diff-fixup-modifs)
(diff-sanity-check-hunk): Adjust code accordingly.

lisp/ChangeLog
lisp/diff-mode.el

index e2d01ec3ba0a026d826cea0559f240c002713521..5aaac0a545d5a3c814843b0c4caac869621cb6f4 100644 (file)
@@ -1,3 +1,9 @@
+2008-04-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * diff-mode.el (diff-hunk-header-re-unified): Allow elided line counts.
+       (diff-end-of-hunk, diff-unified->context, diff-fixup-modifs)
+       (diff-sanity-check-hunk): Adjust code accordingly.
+
 2008-04-23  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
        * term/mac-win.el (mac-ts-active-input-buf): Move defvar to macterm.c.
index 798f5f2e4ec44d255d801703d92dfcdd88a1055c..ecd8abae0bfeb196a0c15ee4e1599b49ed09fb88 100644 (file)
@@ -342,7 +342,7 @@ when editing big diffs)."
            (replace-match "" t t)))))))
 
 (defconst diff-hunk-header-re-unified
-  "^@@ -\\([0-9]+\\),\\([0-9]+\\) \\+\\([0-9]+\\),\\([0-9]+\\) @@")
+  "^@@ -\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)? \\+\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)? @@")
 
 (defvar diff-font-lock-keywords
   `((,(concat "\\(" diff-hunk-header-re-unified "\\)\\(.*\\)$")
@@ -402,8 +402,8 @@ See http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01990.html")
         (setq style (cdr (assq (char-after) '((?@ . unified) (?* . context))))))
       (goto-char (match-end 0))
       (when (and (not donttrustheader) (match-end 2))
-        (let* ((nold (string-to-number (match-string 2)))
-               (nnew (string-to-number (match-string 4)))
+        (let* ((nold (string-to-number (or (match-string 2) "1")))
+               (nnew (string-to-number (or (match-string 4) "1")))
                (endold
         (save-excursion
           (re-search-forward (if diff-valid-unified-empty-line
@@ -768,9 +768,9 @@ else cover the whole buffer."
                (replace-match "***" t t nil 2))
            ;; we matched a hunk header
            (let ((line1 (match-string 4))
-                 (lines1 (match-string 5))
+                 (lines1 (or (match-string 5) "1"))
                  (line2 (match-string 6))
-                 (lines2 (match-string 7)))
+                 (lines2 (or (match-string 7) "1")))
              (replace-match
               (concat "***************\n*** " line1 ","
                       (number-to-string (+ (string-to-number line1)
@@ -1005,8 +1005,12 @@ else cover the whole buffer."
                     (old2 (match-string 4))
                     (new1 (number-to-string (+ space minus)))
                     (new2 (number-to-string (+ space plus))))
-               (unless (string= new2 old2) (replace-match new2 t t nil 4))
-               (unless (string= new1 old1) (replace-match new1 t t nil 2))))
+                (if old2
+                    (unless (string= new2 old2) (replace-match new2 t t nil 4))
+                  (goto-char (match-end 4)) (insert "," new2))
+                (if old1
+                    (unless (string= new1 old1) (replace-match new1 t t nil 2))
+                  (goto-char (match-end 2)) (insert "," new1))))
             ((looking-at "--- \\([0-9]+\\),\\([0-9]*\\) ----$")
              (when (> (+ space bang plus) 0)
                (let* ((old1 (match-string 1))
@@ -1241,8 +1245,8 @@ Only works for unified diffs."
        ((eq (char-after) ?@)
         (if (not (looking-at diff-hunk-header-re-unified))
             (error "Unrecognized unified diff hunk header format")
-          (let ((before (string-to-number (match-string 2)))
-                (after (string-to-number (match-string 4))))
+          (let ((before (string-to-number (or (match-string 2) "1")))
+                (after (string-to-number (or (match-string 4) "1"))))
             (forward-line)
             (while
                 (case (char-after)