declare smobs in alloc.c
[bpt/emacs.git] / admin / bzrmerge.el
index e174312..924033b 100644 (file)
@@ -1,6 +1,6 @@
 ;;; bzrmerge.el --- help merge one Emacs bzr branch to another
 
-;; Copyright (C) 2010-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: maint
@@ -45,17 +45,24 @@ The list returned is sorted by oldest-first."
     (erase-buffer)
     ;; We generally want to make sure we start with a clean tree, but we also
     ;; want to allow restarts (i.e. with some part of FROM already merged but
-    ;; not yet committed).
+    ;; not yet committed).  Unversioned (unknown) files in the tree
+    ;; are also ok.
     (call-process "bzr" nil t nil "status" "-v")
     (goto-char (point-min))
     (when (re-search-forward "^conflicts:\n" nil t)
-      (error "You still have unresolved conflicts"))
-    (let ((merges ()))
+      (user-error "You still have unresolved conflicts"))
+    (let ((merges ())
+          found)
       (if (not (re-search-forward "^pending merges:\n" nil t))
           (when (save-excursion
                   (goto-char (point-min))
-                  (re-search-forward "^[a-z ]*:\n" nil t))
-            (error "You still have uncommitted changes"))
+                  (while (and
+                          (re-search-forward "^\\([a-z ]*\\):\n" nil t)
+                          (not
+                           (setq found
+                                 (not (equal "unknown" (match-string 1)))))))
+                  found)
+            (user-error "You still have uncommitted changes"))
         ;; This is really stupid, but it seems there's no easy way to figure
         ;; out which revisions have been merged already.  The only info I can
         ;; find is the "pending merges" from "bzr status -v", which is not
@@ -164,7 +171,7 @@ Type `y' to skip this revision,
                                  (enable-local-eval nil))
                              (find-file-noselect file))
         (if (buffer-modified-p)
-            (error "Unsaved changes in %s" (current-buffer)))
+            (user-error "Unsaved changes in %s" (current-buffer)))
         (save-excursion
           (cond
            ((derived-mode-p 'change-log-mode)
@@ -313,10 +320,10 @@ Does not make other difference."
                   ;; bzrmerge-add-metadata does not work when there
                   ;; are conflicts.
                   (display-warning 'bzrmerge "Resolve conflicts manually.
-ยกBEWARE!  Important metadata is kept in this Emacs session!
+BEWARE!  Important metadata is kept in this Emacs session!
 Do not commit without re-running `M-x bzrmerge' first!"
                                    :warning bzrmerge-warning-buffer))
-              (error "Resolve conflicts manually")))))
+              (user-error "Resolve conflicts manually")))))
         (cons merge skip)))))
 
 (defun bzrmerge (from)