;;; 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 ;; Maintainer: Jonas Bernoulli ;; 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) "")) '("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