From: Juri Linkov <juri@linkov.net>
To: Filipp Gunbin <fgunbin@fastmail.fm>
Cc: 50344@debbugs.gnu.org, Lars Ingebrigtsen <larsi@gnus.org>,
Dmitry Gutov <dgutov@yandex.ru>
Subject: bug#50344: C-x v keybinding for vc-print-branch-log
Date: Tue, 05 Oct 2021 20:43:35 +0300 [thread overview]
Message-ID: <878rz72wqg.fsf@mail.linkov.net> (raw)
In-Reply-To: <m24kajutb1.fsf@fastmail.fm> (Filipp Gunbin's message of "Fri, 17 Sep 2021 18:15:46 +0300")
[-- Attachment #1: Type: text/plain, Size: 1303 bytes --]
>>> Maybe I should express this wish in a separate bug, but:
>>>
>>> It would be nice if vc-create-tag allowed to specify start-point
>>> conveniently:
>>>
>>> git checkout -b new-branch-name START-POINT
>>>
>>> Currently I do this in shell.
>>
>> Perhaps we could do that with 'C-u C-u'.
>>
>> Yes, a separate feature request is preferable.
>
> I'm also thinking of a separate command for branch creation, wrote all
> that in bug#50643. Thanks.
The following patch adds two new branch commands.
> However, I don't use tags much (besides creation - only "git fetch
> --tags"), so I cannot add anything meaningful here.
> Otherwise, the plan for C-x v b prefix looks great.
> Other commands, like maybe "C-x v b r" - rename, could be added then.
I can't find the existing vc API method for renaming tags/branches.
> The command could have a mode for specifying START-POINT, so for Git the
> command becomes "git checkout -b new-branch-name START-POINT". This
> could be on C-u (unless there're other frequent "customization" cases).
The existing API method has no argument for START-POINT.
Maybe every backend could handle its prefix arg directly
from current-prefix-arg? For example,
(defun vc-git-create-tag (dir name branchp)
(if current-prefix-arg (completion-read "Start point: ") ...
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: vc-switch-branch.patch --]
[-- Type: text/x-diff, Size: 3911 bytes --]
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index b7760e3bba..2b6ebdfb74 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -865,6 +865,9 @@ vc-prefix-map
(let ((map (make-sparse-keymap)))
(define-key map "a" #'vc-update-change-log)
(define-key map "b" #'vc-switch-backend)
+ (define-key map "Bc" #'vc-create-branch)
+ (define-key map "Bl" #'vc-print-branch-log)
+ (define-key map "Bs" #'vc-switch-branch)
(define-key map "d" #'vc-dir)
(define-key map "g" #'vc-annotate)
(define-key map "G" #'vc-ignore)
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index edc4169465..cdebf4a3d3 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -2350,7 +2372,23 @@ vc-create-tag
(message "Making %s... done" (if branchp "branch" "tag")))
;;;###autoload
-(defun vc-retrieve-tag (dir name)
+(defun vc-create-branch (dir name)
+ "Descending recursively from DIR, make a branch called NAME.
+After a new branch is made, the files are checked out in that new branch.
+Uses `vc-create-tag' with the non-nil arg `branchp'."
+ (interactive
+ (let ((granularity
+ (vc-call-backend (vc-responsible-backend default-directory)
+ 'revision-granularity)))
+ (list
+ (if (eq granularity 'repository)
+ default-directory
+ (read-directory-name "Directory: " default-directory default-directory t))
+ (read-string "New branch name: " nil 'vc-revision-history))))
+ (vc-create-tag dir name t))
+
+;;;###autoload
+(defun vc-retrieve-tag (dir name &optional branchp)
"For each file in or below DIR, retrieve their tagged version NAME.
NAME can name a branch, in which case this command will switch to the
named branch in the directory DIR.
@@ -2375,15 +2413,21 @@ vc-retrieve-tag
(read-directory-name "Directory: " default-directory nil t))))
(list
dir
- (vc-read-revision (format-prompt "Tag name to retrieve" "latest revisions")
+ (vc-read-revision (format-prompt
+ (if current-prefix-arg
+ "Branch name to retrieve"
+ "Tag name to retrieve")
+ "latest revisions")
(list dir)
- (vc-responsible-backend dir)))))
+ (vc-responsible-backend dir))
+ current-prefix-arg)))
(let* ((backend (vc-responsible-backend dir))
(update (when (vc-call-backend backend 'update-on-retrieve-tag)
(yes-or-no-p "Update any affected buffers? ")))
(msg (if (or (not name) (string= name ""))
(format "Updating %s... " (abbreviate-file-name dir))
- (format "Retrieving tag %s into %s... "
+ (format "Retrieving %s %s into %s... "
+ (if branchp "branch" "tag")
name (abbreviate-file-name dir)))))
(message "%s" msg)
(vc-call-backend backend 'retrieve-tag dir name update)
@@ -2391,6 +2435,25 @@ vc-retrieve-tag
(run-hooks 'vc-retrieve-tag-hook)
(message "%s" (concat msg "done"))))
+;;;###autoload
+(defun vc-switch-branch (dir name)
+ "Switch to the branch NAME in the directory DIR.
+If NAME is empty, it refers to the latest revisions of the current branch.
+Uses `vc-retrieve-tag' with the non-nil arg `branchp'."
+ (interactive
+ (let* ((granularity
+ (vc-call-backend (vc-responsible-backend default-directory)
+ 'revision-granularity))
+ (dir
+ (if (eq granularity 'repository)
+ (expand-file-name (vc-root-dir))
+ (read-directory-name "Directory: " default-directory nil t))))
+ (list
+ dir
+ (vc-read-revision (format-prompt "Branch name to retrieve" "latest revisions")
+ (list dir)
+ (vc-responsible-backend dir)))))
+ (vc-retrieve-tag dir name t))
;; Miscellaneous other entry points
next prev parent reply other threads:[~2021-10-05 17:43 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-02 18:43 bug#50344: C-x v keybinding for vc-print-branch-log Juri Linkov
2021-09-02 23:24 ` Dmitry Gutov
2021-09-03 8:15 ` Juri Linkov
2021-09-03 12:26 ` Dmitry Gutov
2021-09-03 16:18 ` Juri Linkov
2021-09-03 16:41 ` Dmitry Gutov
2021-09-04 6:33 ` Lars Ingebrigtsen
2021-09-05 16:28 ` Juri Linkov
2021-09-06 8:25 ` Lars Ingebrigtsen
2021-09-06 15:19 ` Juri Linkov
2021-09-07 15:05 ` Lars Ingebrigtsen
2021-09-08 2:58 ` Dmitry Gutov
2021-09-08 8:00 ` Lars Ingebrigtsen
2021-09-08 11:59 ` Dmitry Gutov
2021-09-09 17:39 ` Juri Linkov
2021-09-09 23:18 ` Dmitry Gutov
2021-09-10 6:46 ` Juri Linkov
2021-09-10 11:27 ` Dmitry Gutov
2021-09-10 10:32 ` Lars Ingebrigtsen
2021-09-10 11:26 ` Dmitry Gutov
2021-09-13 7:47 ` Juri Linkov
2021-10-07 7:21 ` Juri Linkov
2021-10-07 7:47 ` Eli Zaretskii
2021-10-07 7:58 ` Juri Linkov
2021-10-07 8:28 ` Eli Zaretskii
2021-10-07 11:12 ` Dmitry Gutov
2021-10-07 12:56 ` Eli Zaretskii
2021-10-07 13:06 ` Dmitry Gutov
2021-10-07 13:21 ` Eli Zaretskii
2021-10-07 13:26 ` Dmitry Gutov
2021-10-07 13:50 ` Eli Zaretskii
2021-10-07 17:36 ` Juri Linkov
2021-10-07 18:22 ` Eli Zaretskii
2021-10-07 21:49 ` Dmitry Gutov
2021-10-12 12:48 ` Filipp Gunbin
2021-10-13 1:45 ` Dmitry Gutov
2021-10-13 10:12 ` Filipp Gunbin
2021-10-13 23:37 ` Dmitry Gutov
2021-12-24 11:56 ` Philip Kaludercic
2021-12-24 12:03 ` Dmitry Gutov
2021-12-24 13:57 ` Philip Kaludercic
2021-12-24 23:45 ` Dmitry Gutov
2021-12-25 11:37 ` Philip Kaludercic
2021-12-25 12:08 ` Dmitry Gutov
2022-09-09 5:46 ` Sean Whitton
2022-09-09 6:29 ` Juri Linkov
2022-09-09 17:09 ` Lars Ingebrigtsen
2022-09-11 15:10 ` Juri Linkov
2022-09-11 15:25 ` Lars Ingebrigtsen
2022-09-12 18:07 ` Juri Linkov
2022-09-12 18:21 ` Eli Zaretskii
2022-09-12 19:13 ` Juri Linkov
2022-09-13 12:24 ` Eli Zaretskii
2022-09-12 18:57 ` Sean Whitton
2021-10-07 13:11 ` Robert Pluim
2021-10-07 13:51 ` Filipp Gunbin
2021-10-07 9:57 ` Gregory Heytings
2021-10-07 11:14 ` Dmitry Gutov
2021-10-07 11:25 ` Gregory Heytings
2021-10-07 11:35 ` Dmitry Gutov
2021-10-07 11:42 ` Gregory Heytings
2021-10-07 12:25 ` Kévin Le Gouguec
2021-10-07 12:42 ` Filipp Gunbin
2021-10-07 12:53 ` Dmitry Gutov
2021-10-07 13:11 ` Eli Zaretskii
2021-10-07 12:51 ` Eli Zaretskii
2021-10-07 17:30 ` Juri Linkov
2021-10-07 18:25 ` Eli Zaretskii
2021-09-16 11:46 ` Filipp Gunbin
2021-09-16 11:54 ` Dmitry Gutov
2021-09-17 15:15 ` Filipp Gunbin
2021-09-18 0:09 ` bug#50643: " Dmitry Gutov
2021-09-18 19:03 ` Juri Linkov
2021-09-19 0:01 ` Dmitry Gutov
2021-09-19 17:04 ` bug#50643: " Juri Linkov
2021-09-20 0:33 ` Dmitry Gutov
2021-09-20 6:49 ` bug#50643: " Juri Linkov
2021-09-20 16:53 ` Dmitry Gutov
2021-09-20 17:31 ` Filipp Gunbin
2021-09-20 15:59 ` bug#50643: " Filipp Gunbin
2021-10-05 17:43 ` Juri Linkov [this message]
2021-10-06 0:37 ` Dmitry Gutov
2021-10-06 7:29 ` Juri Linkov
2021-10-07 0:57 ` Dmitry Gutov
2021-10-06 16:28 ` Juri Linkov
2021-10-07 0:47 ` Dmitry Gutov
2021-10-07 12:46 ` Filipp Gunbin
2021-10-07 12:55 ` Robert Pluim
2021-10-07 17:27 ` Juri Linkov
2021-09-08 2:50 ` Dmitry Gutov
2021-09-08 7:53 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878rz72wqg.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=50344@debbugs.gnu.org \
--cc=dgutov@yandex.ru \
--cc=fgunbin@fastmail.fm \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).