(font_check_object): Delete it.
[bpt/emacs.git] / lisp / vc-git.el
index 19e5272..4a5b7ab 100644 (file)
@@ -7,10 +7,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,9 +18,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 ;; beginning of vc.el. The current status is:
 ;; ("??" means: "figure out what to do about it")
 ;;
-;; FUNCTION NAME                                   STATUS
+;; FUNCTION NAME                        STATUS
 ;; BACKEND PROPERTIES
-;; * revision-granularity                          OK
+;; * revision-granularity                      OK
 ;; STATE-QUERYING FUNCTIONS
-;; * registered (file)                            OK
+;; * registered (file)                    OK
 ;; * state (file)                                 OK
 ;; - state-heuristic (file)                       NOT NEEDED
-;; - dir-state (dir)                              OK
-;; * working-revision (file)                      OK
-;; - latest-on-branch-p (file)                    NOT NEEDED
-;; * checkout-model (file)                        OK
+;; * working-revision (file)              OK
+;; - latest-on-branch-p (file)            NOT NEEDED
+;; * checkout-model (files)               OK
 ;; - workfile-unchanged-p (file)                  OK
 ;; - mode-line-string (file)                      OK
-;; - dired-state-info (file)                      OK
+;; - prettify-state-info (file)                   OK
 ;; STATE-CHANGING FUNCTIONS
-;; * create-repo ()                               OK
-;; * register (files &optional rev comment)       OK
+;; * create-repo ()                       OK
+;; * register (files &optional rev comment)    OK
 ;; - init-revision (file)                         NOT NEEDED
 ;; - responsible-p (file)                         OK
 ;; - could-register (file)                        NOT NEEDED, DEFAULT IS GOOD
 ;; - receive-file (file rev)                      NOT NEEDED
-;; - unregister (file)                            OK
+;; - unregister (file)                    OK
 ;; * checkin (files rev comment)                  OK
 ;; * find-revision (file rev buffer)              OK
 ;; * checkout (file &optional editable rev)       OK
 ;; * revert (file &optional contents-done)        OK
-;; - rollback (files)                             COULD BE SUPPORTED
-;; - merge (file rev1 rev2)                       It would be possible to merge changes into
-;;                                                 a single file, but when committing they
-;;                                                 wouldn't be identified as a merge by git,
-;;                                                 so it's probably not a good idea.
-;; - merge-news (file)                            see `merge'
+;; - rollback (files)                     COULD BE SUPPORTED
+;; - merge (file rev1 rev2)                   It would be possible to merge
+;;                                          changes into a single file, but when
+;;                                          committing they wouldn't
+;;                                          be identified as a merge
+;;                                          by git, so it's probably
+;;                                          not a good idea.
+;; - merge-news (file)                    see `merge'
 ;; - steal-lock (file &optional revision)         NOT NEEDED
 ;; HISTORY FUNCTIONS
 ;; * print-log (files &optional buffer)                   OK
 ;; - log-view-mode ()                             OK
 ;; - show-log-entry (revision)                    OK
-;; - wash-log (file)                              COULD BE SUPPORTED
-;; - logentry-check ()                            NOT NEEDED
 ;; - comment-history (file)                       ??
 ;; - update-changelog (files)                     COULD BE SUPPORTED
-;; * diff (file &optional rev1 rev2 buffer)       OK
+;; * diff (file &optional rev1 rev2 buffer)               OK
 ;; - revision-completion-table (files)            OK
 ;; - annotate-command (file buf &optional rev)    OK
 ;; - annotate-time ()                             OK
 ;; - annotate-current-time ()                     NOT NEEDED
-;; - annotate-extract-revision-at-line ()         OK
-;; SNAPSHOT SYSTEM
-;; - create-snapshot (dir name branchp)                   OK
-;; - assign-name (file name)                      NOT NEEDED
-;; - retrieve-snapshot (dir name update)          OK, needs to update buffers
+;; - annotate-extract-revision-at-line ()                 OK
+;; TAG SYSTEM
+;; - create-tag (dir name branchp)        OK
+;; - retrieve-tag (dir name update)       OK, needs to update buffers
 ;; MISCELLANEOUS
-;; - make-version-backups-p (file)                NOT NEEDED
-;; - repository-hostname (dirname)                NOT NEEDED
+;; - make-version-backups-p (file)        NOT NEEDED
+;; - repository-hostname (dirname)        NOT NEEDED
 ;; - previous-revision (file rev)                 OK
-;; - next-revision (file rev)                     OK
-;; - check-headers ()                             COULD BE SUPPORTED
-;; - clear-headers ()                             NOT NEEDED
-;; - delete-file (file)                                   OK
-;; - rename-file (old new)                        OK
-;; - find-file-hook ()                            NOT NEEDED
-;; - find-file-not-found-hook ()                   NOT NEEDED
+;; - next-revision (file rev)             OK
+;; - check-headers ()                     COULD BE SUPPORTED
+;; - clear-headers ()                     NOT NEEDED
+;; - delete-file (file)                           OK
+;; - rename-file (old new)                OK
+;; - find-file-hook ()                    NOT NEEDED
+;; - find-file-not-found-hook ()                NOT NEEDED
 
 (eval-when-compile
   (require 'cl)
 
 ;;; BACKEND PROPERTIES
 
-(defun vc-git-revision-granularity ()
-  'repository)
+(defun vc-git-revision-granularity () 'repository)
+(defun vc-git-checkout-model (files) 'implicit)
 
 ;;; STATE-QUERYING FUNCTIONS
 
 (defun vc-git-state (file)
   "Git-specific version of `vc-state'."
   ;; FIXME: This can't set 'ignored yet
-  (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
-  (let ((diff (vc-git--run-command-string file "diff-index" "-z" "HEAD" "--")))
-    (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
-                                diff))
-        (vc-git--state-code (match-string 1 diff))
-      (if (vc-git--empty-db-p) 'added 'up-to-date))))
+  (if (not (vc-git-registered file))
+      'unregistered
+    (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
+    (let ((diff (vc-git--run-command-string file "diff-index" "-z" "HEAD" "--")))
+      (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
+                                 diff))
+         (vc-git--state-code (match-string 1 diff))
+       (if (vc-git--empty-db-p) 'added 'up-to-date)))))
 
 (defun vc-git--ls-files-state (state &rest args)
   "Set state to STATE on all files found with git-ls-files ARGS."
          (vc-file-setprop file 'vc-state state))
        (setq start (point))))))
 
-(defun vc-git-dir-state (dir)
-  "Git-specific version of `dir-state'."
-  (vc-git--ls-files-state 'up-to-date "-c")
-  (vc-git--ls-files-state 'edited "-m")
-  (vc-git--ls-files-state 'removed "-d")
-  (vc-git--ls-files-state 'ignored "-o" "-i" "--exclude-standard")
-  (vc-git--ls-files-state nil "-o" "--exclude-standard"))
-
 (defun vc-git-working-revision (file)
   "Git-specific version of `vc-working-revision'."
   (let ((str (with-output-to-string
         (match-string 2 str)
       str)))
 
-(defun vc-git-checkout-model (file)
-  'implicit)
-
 (defun vc-git-workfile-unchanged-p (file)
   (eq 'up-to-date (vc-git-state file)))
 
@@ -568,16 +555,16 @@ or BRANCH^ (where \"^\" can be repeated)."
     (and (looking-at "[0-9a-f^][0-9a-f]+")
          (buffer-substring-no-properties (match-beginning 0) (match-end 0)))))
 
-;;; SNAPSHOT SYSTEM
+;;; TAG SYSTEM
 
-(defun vc-git-create-snapshot (dir name branchp)
+(defun vc-git-create-tag (dir name branchp)
   (let ((default-directory dir))
     (and (vc-git-command nil 0 nil "update-index" "--refresh")
          (if branchp
              (vc-git-command nil 0 nil "checkout" "-b" name)
            (vc-git-command nil 0 nil "tag" name)))))
 
-(defun vc-git-retrieve-snapshot (dir name update)
+(defun vc-git-retrieve-tag (dir name update)
   (let ((default-directory dir))
     (vc-git-command nil 0 nil "checkout" name)
     ;; FIXME: update buffers if `update' is true
@@ -709,7 +696,7 @@ This command shares argument histories with \\[rgrep] and \\[grep]."
 (defun vc-git-command (buffer okstatus file-or-list &rest flags)
   "A wrapper around `vc-do-command' for use in vc-git.el.
 The difference to vc-do-command is that this function always invokes `git'."
-  (apply 'vc-do-command buffer okstatus "git" file-or-list flags))
+  (apply 'vc-do-command (or buffer "*vc*") okstatus "git" file-or-list flags))
 
 (defun vc-git--empty-db-p ()
   "Check if the git db is empty (no commit done yet)."