Personal emacs config
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
6.0 KiB

;;; magit-pull.el --- update local objects and refs -*- lexical-binding: t -*-
;; Copyright (C) 2008-2018 The Magit Project Contributors
;;
;; You should have received a copy of the AUTHORS.md file which
;; lists all contributors. If not, see http://magit.vc/authors.
;; Author: Jonas Bernoulli <jonas@bernoul.li>
;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
;; Magit 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.
;;
;; Magit is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
;; License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Magit. If not, see http://www.gnu.org/licenses.
;;; Commentary:
;; This library implements pull commands.
;;; Code:
(require 'magit)
;;; Commands
;;;###autoload (autoload 'magit-pull-popup "magit-pull" nil t)
(magit-define-popup magit-pull-popup
"Popup console for pull commands."
:man-page "git-pull"
:variables '("Configure"
(?r "branch.%s.rebase"
magit-cycle-branch*rebase
magit-pull-format-branch*rebase)
(?C "variables..." magit-branch-config-popup))
:actions '((lambda ()
(--if-let (magit-get-current-branch)
(concat
(propertize "Pull into " 'face 'magit-popup-heading)
(propertize it 'face 'magit-branch-local)
(propertize " from" 'face 'magit-popup-heading))
(propertize "Pull from" 'face 'magit-popup-heading)))
(?p magit-get-push-branch magit-pull-from-pushremote)
(?u magit-get-upstream-branch magit-pull-from-upstream)
(?e "elsewhere" magit-pull-branch))
:default-action 'magit-pull
:max-action-columns 1)
;;;###autoload (autoload 'magit-pull-and-fetch-popup "magit-pull" nil t)
(magit-define-popup magit-pull-and-fetch-popup
"Popup console for pull and fetch commands.
This popup is intended as a replacement for the separate popups
`magit-pull-popup' and `magit-fetch-popup'. To use it, add this
to your init file:
(with-eval-after-load \\='magit-remote
(define-key magit-mode-map \"f\" \\='magit-pull-and-fetch-popup)
(define-key magit-mode-map \"F\" nil))
The combined popup does not offer all commands and arguments
available from the individual popups. Instead of the argument
`--prune' and the command `magit-fetch-all' it uses two commands
`magit-fetch-prune' and `magit-fetch-no-prune'. And the commands
`magit-fetch-from-pushremote' and `magit-fetch-from-upstream' are
missing. To add them use something like:
(with-eval-after-load \\='magit-remote
(magit-define-popup-action \\='magit-pull-and-fetch-popup ?U
\\='magit-get-upstream-branch
\\='magit-fetch-from-upstream-remote ?F)
(magit-define-popup-action \\='magit-pull-and-fetch-popup ?P
\\='magit-get-push-branch
\\='magit-fetch-from-push-remote ?F))"
:man-page "git-pull"
:variables '("Configure"
(?r "branch.%s.rebase"
magit-cycle-branch*rebase
magit-pull-format-branch*rebase)
(?C "variables..." magit-branch-config-popup))
:actions '((lambda ()
(--if-let (magit-get-current-branch)
(concat
(propertize "Pull into " 'face 'magit-popup-heading)
(propertize it 'face 'magit-branch-local)
(propertize " from" 'face 'magit-popup-heading))
(propertize "Pull from" 'face 'magit-popup-heading)))
(?p magit-get-push-branch magit-pull-from-pushremote)
(?u magit-get-upstream-branch magit-pull-from-upstream)
(?e "elsewhere" magit-pull-branch)
"Fetch from"
(?f "remotes" magit-fetch-all-no-prune)
(?F "remotes and prune" magit-fetch-all-prune)
"Fetch"
(?o "another branch" magit-fetch-branch)
(?s "explicit refspec" magit-fetch-refspec)
(?m "submodules" magit-fetch-modules))
:default-action 'magit-fetch
:max-action-columns 1)
(defun magit-pull-format-branch*rebase ()
(magit--format-popup-variable:choices
(format "branch.%s.rebase" (or (magit-get-current-branch) "<name>"))
'("true" "false")
"false" "pull.rebase"))
(defun magit-git-pull (source args)
(run-hooks 'magit-credential-hook)
(pcase-let ((`(,remote . ,branch)
(magit-split-branch-name source)))
(magit-run-git-with-editor "pull" args remote branch)))
;;;###autoload
(defun magit-pull-from-pushremote (args)
"Pull from the push-remote of the current branch."
(interactive (list (magit-pull-arguments)))
(--if-let (magit-get-push-branch)
(magit-git-pull it args)
(--if-let (magit-get-current-branch)
(user-error "No push-remote is configured for %s" it)
(user-error "No branch is checked out"))))
;;;###autoload
(defun magit-pull-from-upstream (args)
"Pull from the upstream of the current branch."
(interactive (list (magit-pull-arguments)))
(--if-let (magit-get-upstream-branch)
(progn (run-hooks 'magit-credential-hook)
(magit-run-git-with-editor
"pull" args (car (magit-split-branch-name it))))
(--if-let (magit-get-current-branch)
(user-error "No upstream is configured for %s" it)
(user-error "No branch is checked out"))))
;;;###autoload
(defun magit-pull-branch (source args)
"Pull from a branch read in the minibuffer."
(interactive (list (magit-read-remote-branch "Pull" nil nil nil t)
(magit-pull-arguments)))
(magit-git-pull source args))
;;; _
(provide 'magit-pull)
;;; magit-pull.el ends here