From: Dan Nicolaescu Date: Wed, 9 Jun 2010 07:47:14 +0000 (-0700) Subject: Improve VC create/retrieve tag/branch. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~98 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5f4f2ae4f967a5a135b95e135c8b29de43ec71b2;p=emacs.git Improve VC create/retrieve tag/branch. * lisp/vc.el (vc-create-tag): Do not read the directory name for VCs with repository revision granularity. Adjust the tag/branch prompt. Reset VC properties. (vc-retrieve-tag): Do not read the directory name for VCs with repository revision granularity. Reset VC properties. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 39a70fc387f..7a47b2f3586 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2010-06-09 Dan Nicolaescu + + Improve VC create/retrieve tag/branch. + * vc.el (vc-create-tag): Do not read the directory name for VCs + with repository revision granularity. Adjust the tag/branch + prompt. Reset VC properties. + (vc-retrieve-tag): Do not read the directory name for VCs + with repository revision granularity. Reset VC properties. + 2010-06-09 Julien Danjou * net/notifications.el: New file. diff --git a/lisp/vc.el b/lisp/vc.el index 3d991a21a61..1e52a3ca66f 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -580,9 +580,6 @@ ;; display the branch name in the mode-line. Replace ;; vc-cvs-sticky-tag with that. ;; -;; - vc-create-tag and vc-retrieve-tag should update the -;; buffers that might be visiting the affected files. -;; ;;;; Internal cleanups: ;; ;; - backends that care about vc-stay-local should try to take it into @@ -1896,14 +1893,22 @@ the named configuration. If the prefix argument BRANCHP is given, the tag is made as a new branch and the files are checked out in that new branch." (interactive - (list (read-file-name "Directory: " default-directory default-directory t) - (read-string "New tag name: ") - current-prefix-arg)) + (let ((granularity + (vc-call-backend (vc-responsible-backend default-directory) + 'revision-granularity))) + (list + (if (eq granularity 'repository) + ;; For VC's that do not work at file level, it's pointless + ;; to ask for a directory, branches are created at repository level. + default-directory + (read-file-name "Directory: " default-directory default-directory t)) + (read-string (if current-prefix-arg "New branch name: " "New tag name: ")) + current-prefix-arg))) (message "Making %s... " (if branchp "branch" "tag")) (when (file-directory-p dir) (setq dir (file-name-as-directory dir))) (vc-call-backend (vc-responsible-backend dir) 'create-tag dir name branchp) - (vc-resynch-buffer dir t t) + (vc-resynch-buffer dir t t t) (message "Making %s... done" (if branchp "branch" "tag"))) ;;;###autoload @@ -1914,8 +1919,16 @@ If locking is used for the files in DIR, then there must not be any locked files at or below DIR (but if NAME is empty, locked files are allowed and simply skipped)." (interactive - (list (read-file-name "Directory: " default-directory default-directory t) - (read-string "Tag name to retrieve (default latest revisions): "))) + (let ((granularity + (vc-call-backend (vc-responsible-backend default-directory) + 'revision-granularity))) + (list + (if (eq granularity 'repository) + ;; For VC's that do not work at file level, it's pointless + ;; to ask for a directory, branches are created at repository level. + default-directory + (read-file-name "Directory: " default-directory default-directory t)) + (read-string "Tag name to retrieve (default latest revisions): ")))) (let ((update (yes-or-no-p "Update any affected buffers? ")) (msg (if (or (not name) (string= name "")) (format "Updating %s... " (abbreviate-file-name dir)) @@ -1924,9 +1937,10 @@ allowed and simply skipped)." (message "%s" msg) (vc-call-backend (vc-responsible-backend dir) 'retrieve-tag dir name update) - (vc-resynch-buffer dir t t) + (vc-resynch-buffer dir t t t) (message "%s" (concat msg "done")))) + ;; Miscellaneous other entry points ;; FIXME: this should be a defcustom