unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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
 

  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).