git.el: Fix git-amend-commit to support amending an initial commit.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
maint
Alexandre Julliard 2008-08-02 20:35:20 +02:00
parent ef5133df7c
commit db18a182a2
1 changed files with 7 additions and 3 deletions

View File

@ -389,11 +389,12 @@ the process output as a string, or nil if the git command failed."
(defun git-update-ref (ref newval &optional oldval reason) (defun git-update-ref (ref newval &optional oldval reason)
"Update a reference by calling git-update-ref." "Update a reference by calling git-update-ref."
(let ((args (and oldval (list oldval)))) (let ((args (and oldval (list oldval))))
(push newval args) (when newval (push newval args))
(push ref args) (push ref args)
(when reason (when reason
(push reason args) (push reason args)
(push "-m" args)) (push "-m" args))
(unless newval (push "-d" args))
(apply 'git-call-process-display-error "update-ref" args))) (apply 'git-call-process-display-error "update-ref" args)))


(defun git-read-tree (tree &optional index-file) (defun git-read-tree (tree &optional index-file)
@ -1329,7 +1330,7 @@ Return the list of files that haven't been handled."
"Retrieve the list of files modified by COMMIT." "Retrieve the list of files modified by COMMIT."
(let (files) (let (files)
(with-temp-buffer (with-temp-buffer
(git-call-process t "diff-tree" "-m" "-r" "-z" "--name-only" "--no-commit-id" commit) (git-call-process t "diff-tree" "-m" "-r" "-z" "--name-only" "--no-commit-id" "--root" commit)
(goto-char (point-min)) (goto-char (point-min))
(while (re-search-forward "\\([^\0]*\\)\0" nil t 1) (while (re-search-forward "\\([^\0]*\\)\0" nil t 1)
(push (match-string 1) files))) (push (match-string 1) files)))
@ -1343,7 +1344,10 @@ amended version of it."
(when (git-empty-db-p) (error "No commit to amend.")) (when (git-empty-db-p) (error "No commit to amend."))
(let* ((commit (git-rev-parse "HEAD")) (let* ((commit (git-rev-parse "HEAD"))
(files (git-get-commit-files commit))) (files (git-get-commit-files commit)))
(when (git-call-process-display-error "reset" "--soft" "HEAD^") (when (if (git-rev-parse "HEAD^")
(git-call-process-display-error "reset" "--soft" "HEAD^")
(and (git-update-ref "ORIG_HEAD" commit)
(git-update-ref "HEAD" nil commit)))
(git-update-status-files (copy-sequence files) 'uptodate) (git-update-status-files (copy-sequence files) 'uptodate)
(git-mark-files git-status files) (git-mark-files git-status files)
(git-refresh-files) (git-refresh-files)