update packages
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
;;; magit-apply.el --- apply Git diffs -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2010-2021 The Magit Project Contributors
|
||||
;; Copyright (C) 2010-2022 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.
|
||||
@@ -8,6 +8,8 @@
|
||||
;; Author: Jonas Bernoulli <jonas@bernoul.li>
|
||||
;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
|
||||
|
||||
;; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
;; 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)
|
||||
@@ -30,9 +32,6 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile
|
||||
(require 'subr-x))
|
||||
|
||||
(require 'magit-core)
|
||||
(require 'magit-diff)
|
||||
(require 'magit-wip)
|
||||
@@ -40,8 +39,8 @@
|
||||
(require 'transient) ; See #3732.
|
||||
|
||||
;; For `magit-apply'
|
||||
(declare-function magit-am "magit-sequence" ())
|
||||
(declare-function magit-patch-apply "magit-files" ())
|
||||
(declare-function magit-am "magit-sequence" () t)
|
||||
(declare-function magit-patch-apply "magit-patch" () t)
|
||||
;; For `magit-discard-files'
|
||||
(declare-function magit-checkout-stage "magit-merge" (file arg))
|
||||
(declare-function magit-checkout-read-stage "magit-merge" (file))
|
||||
@@ -56,6 +55,11 @@
|
||||
(declare-function borg-assimilate "borg" (package url &optional partially))
|
||||
(defvar borg-user-emacs-directory)
|
||||
|
||||
(cl-eval-when (compile load)
|
||||
(when (< emacs-major-version 26)
|
||||
(defalias 'smerge-keep-upper 'smerge-keep-mine)
|
||||
(defalias 'smerge-keep-lower 'smerge-keep-other)))
|
||||
|
||||
;;; Options
|
||||
|
||||
(defcustom magit-delete-by-moving-to-trash t
|
||||
@@ -178,7 +182,7 @@ adjusted as \"@@ -10,6 +10,7 @@\" and \"@@ -18,6 +19,7 @@\"."
|
||||
(offset (if (string-match diff-hunk-header-re-unified first-hunk)
|
||||
(- (string-to-number (match-string 3 first-hunk))
|
||||
(string-to-number (match-string 1 first-hunk)))
|
||||
(error "Hunk does not have expected header"))))
|
||||
(error "Header hunks have to be applied individually"))))
|
||||
(if (= offset 0)
|
||||
hunks
|
||||
(mapcar (lambda (hunk)
|
||||
@@ -208,10 +212,15 @@ adjusted as \"@@ -10,6 +10,7 @@\" and \"@@ -18,6 +19,7 @@\"."
|
||||
(defun magit-apply-hunk (section &rest args)
|
||||
(when (string-match "^diff --cc" (magit-section-parent-value section))
|
||||
(user-error "Cannot un-/stage resolution hunks. Stage the whole file"))
|
||||
(magit-apply-patch (oref section parent) args
|
||||
(concat (magit-diff-file-header section)
|
||||
(magit-apply--adjust-hunk-new-start
|
||||
(magit-apply--section-content section)))))
|
||||
(let* ((header (car (oref section value)))
|
||||
(header (and (symbolp header) header))
|
||||
(content (magit-apply--section-content section)))
|
||||
(magit-apply-patch
|
||||
(oref section parent) args
|
||||
(concat (magit-diff-file-header section (not (eq header 'rename)))
|
||||
(if header
|
||||
content
|
||||
(magit-apply--adjust-hunk-new-start content))))))
|
||||
|
||||
(defun magit-apply-region (section &rest args)
|
||||
(when (string-match "^diff --cc" (magit-section-parent-value section))
|
||||
@@ -232,7 +241,7 @@ adjusted as \"@@ -10,6 +10,7 @@\" and \"@@ -18,6 +19,7 @@\"."
|
||||
(ignore-context (magit-diff-ignore-any-space-p)))
|
||||
(unless (magit-diff-context-p)
|
||||
(user-error "Not enough context to apply patch. Increase the context"))
|
||||
(when (and magit-wip-before-change-mode (not inhibit-magit-refresh))
|
||||
(when (and magit-wip-before-change-mode (not magit-inhibit-refresh))
|
||||
(magit-wip-commit-before-change files (concat " before " command)))
|
||||
(with-temp-buffer
|
||||
(insert patch)
|
||||
@@ -240,7 +249,7 @@ adjusted as \"@@ -10,6 +10,7 @@\" and \"@@ -18,6 +19,7 @@\"."
|
||||
"apply" args "-p0"
|
||||
(and ignore-context "-C0")
|
||||
"--ignore-space-change" "-"))
|
||||
(unless inhibit-magit-refresh
|
||||
(unless magit-inhibit-refresh
|
||||
(when magit-wip-after-apply-mode
|
||||
(magit-wip-commit-after-apply files (concat " after " command)))
|
||||
(magit-refresh))))
|
||||
@@ -445,6 +454,8 @@ without requiring confirmation."
|
||||
(defun magit-unstage-all ()
|
||||
"Remove all changes from the staging area."
|
||||
(interactive)
|
||||
(unless (magit-anything-staged-p)
|
||||
(user-error "Nothing to unstage"))
|
||||
(when (or (magit-anything-unstaged-p)
|
||||
(magit-untracked-files))
|
||||
(magit-confirm 'unstage-all-changes))
|
||||
@@ -455,7 +466,11 @@ without requiring confirmation."
|
||||
;;;; Discard
|
||||
|
||||
(defun magit-discard ()
|
||||
"Remove the change at point."
|
||||
"Remove the change at point.
|
||||
|
||||
On a hunk or file with unresolved conflicts prompt which side to
|
||||
keep (while discarding the other). If point is within the text
|
||||
of a side, then keep that side without prompting."
|
||||
(interactive)
|
||||
(--when-let (magit-apply--get-selection)
|
||||
(pcase (list (magit-diff-type) (magit-diff-scope))
|
||||
@@ -474,7 +489,10 @@ without requiring confirmation."
|
||||
|
||||
(defun magit-discard-hunk (section)
|
||||
(magit-confirm 'discard "Discard hunk")
|
||||
(magit-discard-apply section 'magit-apply-hunk))
|
||||
(let ((file (magit-section-parent-value section)))
|
||||
(pcase (cddr (car (magit-file-status file)))
|
||||
(`(?U ?U) (magit-smerge-keep-current))
|
||||
(_ (magit-discard-apply section 'magit-apply-hunk)))))
|
||||
|
||||
(defun magit-discard-apply (section apply)
|
||||
(if (eq (magit-diff-type section) 'unstaged)
|
||||
@@ -483,7 +501,7 @@ without requiring confirmation."
|
||||
nil (if (magit-file-section-p section)
|
||||
(oref section value)
|
||||
(magit-section-parent-value section)))
|
||||
(progn (let ((inhibit-magit-refresh t))
|
||||
(progn (let ((magit-inhibit-refresh t))
|
||||
(funcall apply section "--reverse" "--cached")
|
||||
(funcall apply section "--reverse" "--reject"))
|
||||
(magit-refresh))
|
||||
@@ -503,7 +521,7 @@ without requiring confirmation."
|
||||
nil (if (magit-file-section-p section)
|
||||
(oref section value)
|
||||
(magit-section-parent-value section)))
|
||||
(progn (let ((inhibit-magit-refresh t))
|
||||
(progn (let ((magit-inhibit-refresh t))
|
||||
(funcall apply sections "--reverse" "--cached")
|
||||
(funcall apply sections "--reverse" "--reject"))
|
||||
(magit-refresh))
|
||||
@@ -541,7 +559,7 @@ without requiring confirmation."
|
||||
(`(?Y ,_ ?D ) (push file resurrect))
|
||||
(`(?X ?R ,(or ? ?M ?D)) (push file rename)))))
|
||||
(unwind-protect
|
||||
(let ((inhibit-magit-refresh t))
|
||||
(let ((magit-inhibit-refresh t))
|
||||
(magit-wip-commit-before-change files " before discard")
|
||||
(when resolve
|
||||
(magit-discard-files--resolve (nreverse resolve)))
|
||||
@@ -731,6 +749,60 @@ a separate commit. A typical workflow would be:
|
||||
(interactive)
|
||||
(magit-reverse (cons "--cached" args)))
|
||||
|
||||
;;; Smerge Support
|
||||
|
||||
(defun magit-smerge-keep-current ()
|
||||
"Keep the current version of the conflict at point."
|
||||
(interactive)
|
||||
(magit-call-smerge #'smerge-keep-current))
|
||||
|
||||
(defun magit-smerge-keep-upper ()
|
||||
"Keep the upper/our version of the conflict at point."
|
||||
(interactive)
|
||||
(magit-call-smerge #'smerge-keep-upper))
|
||||
|
||||
(defun magit-smerge-keep-base ()
|
||||
"Keep the base version of the conflict at point."
|
||||
(interactive)
|
||||
(magit-call-smerge #'smerge-keep-base))
|
||||
|
||||
(defun magit-smerge-keep-lower ()
|
||||
"Keep the lower/their version of the conflict at point."
|
||||
(interactive)
|
||||
(magit-call-smerge #'smerge-keep-lower))
|
||||
|
||||
(defun magit-call-smerge (fn)
|
||||
(pcase-let* ((file (magit-file-at-point t t))
|
||||
(keep (get-file-buffer file))
|
||||
(`(,buf ,pos)
|
||||
(let ((magit-diff-visit-jump-to-change nil))
|
||||
(magit-diff-visit-file--noselect file))))
|
||||
(with-current-buffer buf
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(unless (<= (point-min) pos (point-max))
|
||||
(widen))
|
||||
(goto-char pos)
|
||||
(condition-case nil
|
||||
(smerge-match-conflict)
|
||||
(error
|
||||
(if (eq fn 'smerge-keep-current)
|
||||
(when (eq this-command 'magit-discard)
|
||||
(re-search-forward smerge-begin-re nil t)
|
||||
(setq fn
|
||||
(magit-read-char-case "Keep side: " t
|
||||
(?o "[o]urs/upper" #'smerge-keep-upper)
|
||||
(?b "[b]ase" #'smerge-keep-base)
|
||||
(?t "[t]heirs/lower" #'smerge-keep-lower))))
|
||||
(re-search-forward smerge-begin-re nil t))))
|
||||
(funcall fn)))
|
||||
(when (and keep (magit-anything-unmerged-p file))
|
||||
(smerge-start-session))
|
||||
(save-buffer))
|
||||
(unless keep
|
||||
(kill-buffer buf))
|
||||
(magit-refresh)))
|
||||
|
||||
;;; _
|
||||
(provide 'magit-apply)
|
||||
;;; magit-apply.el ends here
|
||||
|
||||
Reference in New Issue
Block a user