Commit 9efcb1e8 authored by Jonas Bernoulli's avatar Jonas Bernoulli

Split magit-remote.el into multiple libraries

parent bea00ff3
......@@ -74,6 +74,10 @@ ELS += magit-obsolete.el
ELS += magit-sequence.el
ELS += magit-commit.el
ELS += magit-remote.el
ELS += magit-clone.el
ELS += magit-fetch.el
ELS += magit-pull.el
ELS += magit-push.el
ELS += magit-bisect.el
ELS += magit-stash.el
ELS += magit-blame.el
......
......@@ -41,6 +41,10 @@ magit-notes.elc: magit.elc
magit-sequence.elc: magit.elc
magit-commit.elc: magit.elc magit-sequence.elc
magit-remote.elc: magit.elc
magit-clone.elc: magit.elc
magit-fetch.elc: magit.elc
magit-pull.elc: magit.elc
magit-push.elc: magit.elc
magit-bisect.elc: magit.elc
magit-stash.elc: magit.elc
magit-blame.elc: magit.elc
......
;;; magit-clone.el --- clone a repository -*- 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 clone commands.
;;; Code:
(require 'magit)
;;; Options
(defcustom magit-clone-set-remote-head nil
"Whether cloning creates the symbolic-ref `<remote>/HEAD'."
:package-version '(magit . "2.4.2")
:group 'magit-commands
:type 'boolean)
(defcustom magit-clone-set-remote.pushDefault 'ask
"Whether to set the value of `remote.pushDefault' after cloning.
If t, then set without asking. If nil, then don't set. If
`ask', then ask."
:package-version '(magit . "2.4.0")
:group 'magit-commands
:type '(choice (const :tag "set" t)
(const :tag "ask" ask)
(const :tag "don't set" nil)))
;;; Commands
;;;###autoload
(defun magit-clone (repository directory)
"Clone the REPOSITORY to DIRECTORY.
Then show the status buffer for the new repository."
(interactive
(let ((url (magit-read-string-ns "Clone repository")))
(list url (read-directory-name
"Clone to: " nil nil nil
(and (string-match "\\([^/:]+?\\)\\(/?\\.git\\)?$" url)
(match-string 1 url))))))
(setq directory (file-name-as-directory (expand-file-name directory)))
(magit-run-git-async "clone" repository
(magit-convert-filename-for-git directory))
;; Don't refresh the buffer we're calling from.
(process-put magit-this-process 'inhibit-refresh t)
(set-process-sentinel
magit-this-process
(lambda (process event)
(when (memq (process-status process) '(exit signal))
(let ((magit-process-raise-error t))
(magit-process-sentinel process event)))
(when (and (eq (process-status process) 'exit)
(= (process-exit-status process) 0))
(let ((default-directory directory))
(when (or (eq magit-clone-set-remote.pushDefault t)
(and magit-clone-set-remote.pushDefault
(y-or-n-p "Set `remote.pushDefault' to \"origin\"? ")))
(setf (magit-get "remote.pushDefault") "origin"))
(unless magit-clone-set-remote-head
(magit-remote-unset-head "origin")))
(with-current-buffer (process-get process 'command-buf)
(magit-status-internal directory))))))
;;; _
(provide 'magit-clone)
;;; magit-clone.el ends here
;;; magit-fetch.el --- download 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 fetch commands.
;;; Code:
(require 'magit)
;;; Options
(defcustom magit-fetch-modules-jobs 4
"Number of submodules to fetch in parallel.
Ignored for Git versions before v2.8.0."
:package-version '(magit . "2.12.0")
:group 'magit-commands
:type '(choice (const :tag "one at a time" nil) number))
;;; Commands
;;;###autoload (autoload 'magit-fetch-popup "magit-fetch" nil t)
(magit-define-popup magit-fetch-popup
"Popup console for fetch commands."
:man-page "git-fetch"
:switches '((?p "Prune deleted branches" "--prune"))
:actions '("Configure"
(?C "variables..." magit-branch-config-popup)
"Fetch from"
(?p magit-get-push-remote magit-fetch-from-pushremote)
(?u magit-get-remote magit-fetch-from-upstream)
(?e "elsewhere" magit-fetch-other)
(?a "all remotes" magit-fetch-all)
"Fetch"
(?o "another branch" magit-fetch-branch)
(?r "explicit refspec" magit-fetch-refspec)
(?m "submodules" magit-fetch-modules))
:default-action 'magit-fetch
:max-action-columns 1)
(defun magit-git-fetch (remote args)
(run-hooks 'magit-credential-hook)
(magit-run-git-async "fetch" remote args))
;;;###autoload
(defun magit-fetch-from-pushremote (args)
"Fetch from the push-remote of the current branch."
(interactive (list (magit-fetch-arguments)))
(--if-let (magit-get-push-remote)
(magit-git-fetch 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-fetch-from-upstream (args)
"Fetch from the upstream repository of the current branch."
(interactive (list (magit-fetch-arguments)))
(--if-let (magit-get-remote)
(magit-git-fetch it args)
(--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-fetch-other (remote args)
"Fetch from another repository."
(interactive (list (magit-read-remote "Fetch remote")
(magit-fetch-arguments)))
(magit-git-fetch remote args))
;;;###autoload
(defun magit-fetch-branch (remote branch args)
"Fetch a BRANCH from a REMOTE."
(interactive
(let ((remote (magit-read-remote-or-url "Fetch from remote or url")))
(list remote
(magit-read-remote-branch "Fetch branch" remote)
(magit-fetch-arguments))))
(magit-git-fetch remote (cons branch args)))
;;;###autoload
(defun magit-fetch-refspec (remote refspec args)
"Fetch a REFSPEC from a REMOTE."
(interactive
(let ((remote (magit-read-remote-or-url "Fetch from remote or url")))
(list remote
(magit-read-refspec "Fetch using refspec" remote)
(magit-fetch-arguments))))
(magit-git-fetch remote (cons refspec args)))
;;;###autoload
(defun magit-fetch-all (args)
"Fetch from all remotes."
(interactive (list (cl-intersection (magit-fetch-arguments)
(list "--verbose" "--prune")
:test #'equal)))
(run-hooks 'magit-credential-hook)
(magit-run-git-async "remote" "update" args))
;;;###autoload
(defun magit-fetch-all-prune ()
"Fetch from all remotes, and prune.
Prune remote tracking branches for branches that have been
removed on the respective remote."
(interactive)
(run-hooks 'magit-credential-hook)
(magit-run-git-async "remote" "update" "--prune"))
;;;###autoload
(defun magit-fetch-all-no-prune ()
"Fetch from all remotes."
(interactive)
(run-hooks 'magit-credential-hook)
(magit-run-git-async "remote" "update"))
;;;###autoload
(defun magit-fetch-modules (&optional all)
"Fetch all submodules.
Option `magit-fetch-modules-jobs' controls how many submodules
are being fetched in parallel. Also fetch the super-repository,
because `git-fetch' does not support not doing that. With a
prefix argument fetch all remotes."
(interactive "P")
(magit-with-toplevel
(magit-run-git-async
"fetch" "--verbose" "--recurse-submodules"
(and magit-fetch-modules-jobs
(version<= "2.8.0" (magit-git-version))
(list "-j" (number-to-string magit-fetch-modules-jobs)))
(and all "--all"))))
;;; _
(provide 'magit-fetch)
;;; magit-fetch.el ends here
......@@ -29,6 +29,8 @@
(require 'magit)
(declare-function magit-git-push "magit-push" (branch target args))
;;; Commands
;;;###autoload (autoload 'magit-merge-popup "magit" nil t)
......
;;; 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
This diff is collapsed.
This diff is collapsed.
......@@ -598,6 +598,10 @@ For X11 something like ~/.xinitrc should work.\n"
(require 'magit-sequence)
(require 'magit-commit)
(require 'magit-remote)
(require 'magit-clone)
(require 'magit-fetch)
(require 'magit-pull)
(require 'magit-push)
(require 'magit-bisect)
(require 'magit-stash)
(require 'magit-blame)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment