Several branch-related commands and options

This commit is contained in:
oscar 2010-05-17 21:43:57 +02:00
parent 9c63409cc1
commit b2c0fcb7b8

View file

@ -1392,6 +1392,21 @@ FUNC should leave point at the end of the modified region"
'("Log" ?H "Reflog head" magit-reflog-head) '("Log" ?H "Reflog head" magit-reflog-head)
'("Log" ?a "All branches" "--all" magit-true) '("Log" ?a "All branches" "--all" magit-true)
'("Log" ?R "Restrict to path" "--relative=" read-directory-name) '("Log" ?R "Restrict to path" "--relative=" read-directory-name)
'("Branch" ?b "Switch" magit-checkout)
'("Branch" ?B "Create" magit-create-branch)
'("Branch" ?V "Show branches" magit-show-branches)
'("Branch" ?k "Delete" magit-delete-branch)
'("Branch" ?m "Move/Rename" magit-move-branch)
'("Branch" ?w "Wazzup" magit-wazzup)
'("Branch" ?T "Do not track remote parent branch"
"--no-track" magit-true)
'("Branch" ?R "Consider remote-tracking branches" "-r" magit-true)
'("Branch" ?C "Only branches that contains the given commit"
"--contains" magit-read-rev)
'("Branch" ?M "Only branches merged into the given commit"
"--merged" magit-read-rev)
'("Branch" ?N "Only branches not merged into the given commit"
"--no-merged" magit-read-rev)
)) ))
(defun magit-get-menu-options (group) (defun magit-get-menu-options (group)
@ -1608,7 +1623,7 @@ FUNC should leave point at the end of the modified region"
(define-key map (kbd "a") 'magit-apply-item) (define-key map (kbd "a") 'magit-apply-item)
(define-key map (kbd "A") 'magit-cherry-pick-item) (define-key map (kbd "A") 'magit-cherry-pick-item)
(define-key map (kbd "v") 'magit-revert-item) (define-key map (kbd "v") 'magit-revert-item)
(define-key map (kbd "b") 'magit-checkout) (define-key map (kbd "b") 'magit-branch-menu)
(define-key map (kbd "B") 'magit-create-branch) (define-key map (kbd "B") 'magit-create-branch)
(define-key map (kbd "m") 'magit-manual-merge) (define-key map (kbd "m") 'magit-manual-merge)
(define-key map (kbd "M") 'magit-automatic-merge) (define-key map (kbd "M") 'magit-automatic-merge)
@ -2671,6 +2686,10 @@ With prefix argument, add remaining untracked files as well.
;;; Branches ;;; Branches
(defun magit-branch-menu (&optional arg)
(interactive "P")
(magit-menu "Branch" arg))
(defun magit-maybe-create-local-tracking-branch (rev) (defun magit-maybe-create-local-tracking-branch (rev)
(if (string-match "^refs/remotes/\\([^/]+\\)/\\(.+\\)" rev) (if (string-match "^refs/remotes/\\([^/]+\\)/\\(.+\\)" rev)
(let ((remote (match-string 1 rev)) (let ((remote (match-string 1 rev))
@ -2690,7 +2709,8 @@ If REVISION is a remote branch, offer to create a local tracking branch.
(interactive (list (magit-read-rev "Switch to" (magit-default-rev)))) (interactive (list (magit-read-rev "Switch to" (magit-default-rev))))
(if rev (if rev
(if (not (magit-maybe-create-local-tracking-branch rev)) (if (not (magit-maybe-create-local-tracking-branch rev))
(magit-run-git "checkout" (magit-rev-to-git rev))))) (apply 'magit-run-git "checkout" magit-custom-options
(magit-rev-to-git rev)))))
(defun magit-read-create-branch-args () (defun magit-read-create-branch-args ()
(let* ((cur-branch (magit-get-current-branch)) (let* ((cur-branch (magit-get-current-branch))
@ -2705,9 +2725,32 @@ Fails if working tree or staging area contain uncommitted changes.
(interactive (magit-read-create-branch-args)) (interactive (magit-read-create-branch-args))
(if (and branch (not (string= branch "")) (if (and branch (not (string= branch ""))
parent) parent)
(magit-run-git "checkout" "-b" (apply 'magit-run-git "checkout" "-b"
branch magit-custom-options
(magit-rev-to-git parent)))) branch
(magit-rev-to-git parent))))
(defun magit-delete-branch (branch)
"Asks for a branch and deletes it.
If the branch is the current one, offers to switch to `master' first.
\('git branch -d BRANCH')."
(interactive (list (magit-read-rev "Branch to delete" (magit-default-rev))))
(when (and branch (string= branch (magit-get-current-branch)))
(if (y-or-n-p "Cannot delete current branch. Switch to master first?")
(magit-checkout "master")
(setq branch nil)))
(when branch
(apply 'magit-run-git "branch" "-d" magit-custom-options
(magit-rev-to-git branch))))
(defun magit-move-branch (old new)
"Renames or moves a branch.
If the branch is the current one, offers to switch to `master' first.
\('git branch -m OLD NEW')."
(interactive (list (magit-read-rev "Old name" (magit-default-rev))
(magit-read-rev "New name" (magit-default-rev))))
(when branch
(magit-run-git "branch" "-m" (magit-rev-to-git branch) new)))
;;; Merging ;;; Merging
@ -4116,7 +4159,8 @@ With prefix force the removal even it it hasn't been merged."
(setq default-directory topdir))) (setq default-directory topdir)))
(let ((inhibit-read-only t) (let ((inhibit-read-only t)
(branches (mapcar 'magit--branch-view-details (branches (mapcar 'magit--branch-view-details
(magit-git-lines "branch" "-va")))) (apply 'magit-git-lines "branch" "-va"
magit-custom-options))))
(erase-buffer) (erase-buffer)
(insert (insert
(mapconcat (mapconcat