From John Wiegly.
Defines a number of seconds, after which magit will automatically
popup the magit-process buffer so the user can see what git is up to.
Off by default. I use this because sometimes when a commit or push
takes more than an expected amount of time, I start to wonder what
happened.
This is different from regular stashing because there is no prompting for a
name, and the stash is immediately re-applied. It's just a way of taking a
quick snapshot of your working tree, so you can come back to later if need
be.
For example, if you had just made a lot of changes to your project, and then
needed to make another sweeping change before you could commit again, this
would let you safely store your changes without having to resort to a branch.
The other day I hacked some file, and all changes obviously split in
two commits logically, but I can't do that because changes from
"different commits" were to close to each other and diff shows them
ina single hunk. There's possibility in git add -i to split current
hunk into smaller ones in such situations. I wanted to do this without
leaving emacs.
Now magit have control over -U<n> option to git-diff.
It was imposible to see what was staged for a first commit on a fresh
git repository. The only visible lines was fatal error messages from
git. Now diff against null tree object is shown in magit status buffer
if nothing was yet commited to the repository. The cost is 15-byte
object added to the repo, but it shuld disappear on first call to git
gc.
The usual behavior of committing all unstaged changes when there are
no staged changes makes it impossible to amend a commit just to fix
the commit message, which is a quite common thing to do.
* magit.el (magit-log-edit-commit): Do not pass "--all" to git commit
when amending.
* magit.el (magit-section-lineage, magit-section-show-level, magit-show-level,
magit-define-level-shower-1): New.
(magit-mode-map): Bind the digits and M-digits to magit-show-level-N
and magit-show-level-N-all.
* magit.texi: Document it in a new chapter for Sections.
* magit.el (magit-status): Only read the top directory with e prefix
argument or when we are not inside a Git repository.
* magit.texi, NEWS: Document the new behavior.
* magit.el (magit-show-stash): New.
(magit-visit-item): Use it and pop to the buffer for stashes.
(magit-show-item-or-scroll-up, magit-show-item-or-scroll-down): Handle
stashes.
* magit.el (magit-read-rev-range): Don't do anything special when
current-prefix-arg is set.
(magit-log): Use magit-read-rev-range instead of read-string.
(magit-log-long): Likewise.
On non-existent directiories magit-get-top-dir was failing returning
garbage string like "zsh: cd: no such file or directory: ...". Now it
returns nil in such cases.
Signed-off-by: John Wiegley <johnw@newartisans.com>
* magit.el (magit-insert-section): Revert earlier change: first
argument is used as the section title and the section type is usually
nil. When the first argument is a pair, it specvifies both the title
and the type.
* magit.el (magit-section-hidden-default): New.
(magit-new-section): Only expect type as argument, not a general list
of slots. Take 'hidden' value from magit-section-hidden-default.
(magit-with-section): Likewise.
(magit-wash-diff): Adapted.
* magit.el (magit-refresh-commit-buffer): Use nil as type for outer
section so that the highlight is not used for it.
(magit-refresh-log-buffer): Likewise.
* magit.el (magit-with-section): Check that args is a list before
accessing its car.
(magit-insert-section): Set the title of the section from the real
title, and the txpe from the real type.
If branch or tag name is the same as some file in repository, git log
was reporting that as "ambiguous argument 'test': both revision and
filename. Use '--' to separate filenames from revisions".
* magit.el (magit-correct-point-after-command): New.
(magit-post-command-hook): New, to collect all post-command activitiy.
(magit-mode): Use it instead of magit-highlight-section.
(magit-section-set-hidden): Don't touch the rear-stickyness.
Visiting commit does not always work well when default git log format
was changed. This change makes git log explicitly use "medium" format,
which is out of the box default value.
commit buffer.
* magit.el (magit-show-commit): don't shadow "commit" parameter in let
form
* magit.el (magit-show-commit): accept both string and section struct
as "commit" parameter
* magit.el (magit-push): Always push the current branch and nothing
else. Ask for a remote when none is configured yet and set it. Also
ask when given a prefix argument, but don't set it as default in that
case.
* magit.texi (Pushing and Pulling): Document this.
* magit.el (magit-tag, magit-annotated-tag): New.
(magit-log-edit-commit): Run "git tag" when tag field is set.
(magit-mode-map): Add them to 't' and 'T', respectively.
(magit-mode-menu): Add them as well.
(magit-pop-to-log-edit): New.
(magit-log-edit): Use it after removing the tag field.
* magit.el (magit-insert-unpulled-commits,
magit-insert-unpushed-commits): Don't pass "--graph" to git log.
(magit-have-graph, magit-configure-have-graph): New.
(magit-refresh-log-buffer): Use them to only pass --graph to git log
when it will work.
* magit.el (magit-insert-region, magit-insert-current-line): New.
(magit-insert-hunk-item-region-patch): New.
(magit-run*): Added 'input' parameter.
(magit-run-with-input): New.
(magit-diff-item-insert-header, magit-insert-diff-item-patch,
magit-insert-hunk-item-patch, magit-apply-diff-item): Rewritten to
use *magit-tmp* buffer instead of a file.
(magit-apply-hunk-item): Likewise, and also restrict the patch to the
region when appropriate.
(magit-discard-item): Make sure that diff items that are not in the
staged or unstaged sections can not be discarded.
* magit.texi: Document it all.
* magit.el (magit-expand-collapse-section): New.
(magit-mode-map): Bind TAB to magit-toggle-section and S-TAB to
magit-expand-collapse-section.
* magit.texi: Document it.
* magit.el (magit-wash-untracked-file, magit-wash-untracked-files,
magit-insert-untracked-files): New.
(magit-insert-unstaged-changes): Don't include other files in output.
(magit-mode-map): '1' jumps to untracked files instead of unpulled
changes.
(magit-stage-item, magit-discard-item, magit-visit-item):
Handle untracked files.
(magit-ignore-file): New.
(magit-ignore-item): Use it.
(magit-ignore-item-locally): New.
(magit-mode-map): Bind it to "I".
* magit.texi: Document it all.
* magit.el (magit-show-commit): When showing a new section, make sure
point is at the beginning.
(magit-goto-previous-section, magit-goto-next-section): Show section
when in a log or reflog buffer.
* magit.el (magit-log-fill-paragraph, magit-log-edit-mode): New, for
better paragraph filling.
(magit-log-edit): Use it.
(magit-add-log): Add entries also for diffs. Be more careful when
inserting new function sub-entries into existing file entries.
* magit.el (magit-new-section): Collect children in reverse.
(magit-with-section): Reverse them when done.
(magit-refresh-log-buffer): Limit to 1000 commits.
(magit-refresh-reflog-buffer): Likewise.
* magit.el (magit-refresh-buffer): Renamed from magit-refresh, made
non-interactive.
(magit-need-refresh): New. Call it whenever needed and instead of
magit-refresh and magit-revert-buffers.
(magit-with-refresh): New.
(magit-refresh): Reimplemented using these two.
(magit-section-action): New. Use it instead of magit-section-case in
commands.
(magit-run*, magit-cherry-pick-commit): Removed norefresh argument.
(magit-run, magit-run-shell): Use magit-with-refresh.
* magit.el (magit-shell, magit-shell-lines, magit-shell-exit-code,
magit-run-shell) Escape all format arguments when constructing the
command. Updated all callers.
* magit.el: Don't move point in refresh functions.
(magit-refresh): Try to keep point where it was.
(magit-run*): Call magit-refresh outside of the save-excursion so that
it can move point.
* magit.el (magit-apply-item, magit-cherry-pick, magit-revert-item):
Don't bother to check return value of magit-apply-commit, it either
succeeds or throws an error.
* magit.el (magit-run-command): Changed parameters to allow for
arguments to the continuation. Changed all callers.
(magit-process-sentinel): Allow quitting when calling the
continuation.
(magit-refresh): Added optional buffer parameter.
* magit.el (magit-refresh, magit-refresh-all): New. Bind to "g" and
"G". Replaced all calls to magit-update-status with magit-refresh.
(magit-mode-init): Added refresh-func and refresh-args,
remember them for magit-refresh and call magit-refresh at the end.
Updated all users.
(magit-set-mode-line-process): Put process indicator into the mode
line of all magit-mode buffers.
* magit.el (magit-run-command): Added erase and cont parameters.
Construct logline from cmd and args when nil.
(magit-process-sentinel): Call magit-process-continuation when set.
* magit.el (magit-wash-diffs, magit-wash-log, magit-wash-commit):
Don't go to point-min, it's redundant for magit-insert-section now
and harmful when used in other contexts.