From 75eee3e40760c3e0897bcdf62627dc22e3caa552 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Wed, 20 Apr 2016 11:19:34 +0100 Subject: [PATCH] Enable diffing against any commit. Closes #309. --- README.mkd | 12 ++++++++++++ autoload/gitgutter/diff.vim | 9 +++++---- doc/gitgutter.txt | 9 +++++++++ plugin/gitgutter.vim | 1 + 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/README.mkd b/README.mkd index 9713fdb..8b64cff 100644 --- a/README.mkd +++ b/README.mkd @@ -9,6 +9,7 @@ Features: * Ensures signs are always as up to date as possible (but without running more than necessary). * Quick jumping between blocks of changed lines ("hunks"). * Stage/revert/preview individual hunks. +* Diffs against index (default) or any commit. * Handles line endings correctly, even with repos that do CRLF conversion. * Optional line highlighting. * Fully customisable (signs, sign column, line highlights, mappings, extra git-diff arguments, etc). @@ -178,6 +179,7 @@ You can customise: * Whether or not the sign column is shown when there aren't any signs (defaults to no) * The signs' colours and symbols * Line highlights +* The base of the diff * Extra arguments for `git diff` * Key mappings * Whether or not vim-gitgutter is on initially (defaults to on) @@ -244,6 +246,16 @@ GitGutterDeleteLine " default: links to DiffDelete GitGutterChangeDeleteLine " default: links to GitGutterChangeLineDefault, i.e. DiffChange ``` + +#### The base of the diff + +By default buffers are diffed against the index. However you can diff against any commit by setting: + +```viml +let g:gitgutter_diff_base = '' +``` + + #### Extra arguments for `git diff` If you want to pass extra arguments to `git diff`, for example to ignore whitespace, do so like this: diff --git a/autoload/gitgutter/diff.vim b/autoload/gitgutter/diff.vim index 3f146a6..11cd34c 100644 --- a/autoload/gitgutter/diff.vim +++ b/autoload/gitgutter/diff.vim @@ -63,7 +63,7 @@ function! gitgutter#diff#run_diff(realtime, preserve_full_diff) endif if a:realtime - let blob_name = ':'.gitgutter#utility#shellescape(gitgutter#utility#file_relative_to_repo_root()) + let blob_name = g:gitgutter_diff_base.':'.gitgutter#utility#shellescape(gitgutter#utility#file_relative_to_repo_root()) let blob_file = s:temp_index let buff_file = s:temp_buffer let extension = gitgutter#utility#extension() @@ -88,11 +88,12 @@ function! gitgutter#diff#run_diff(realtime, preserve_full_diff) call setpos("']", op_mark_end) endif - let cmd .= 'git -c "diff.autorefreshindex=0" diff --no-ext-diff --no-color -U0 '.g:gitgutter_diff_args.' -- ' + let cmd .= 'git -c "diff.autorefreshindex=0" diff --no-ext-diff --no-color -U0 '.g:gitgutter_diff_args.' ' + if a:realtime - let cmd .= blob_file.' '.buff_file + let cmd .= ' -- '.blob_file.' '.buff_file else - let cmd .= gitgutter#utility#shellescape(gitgutter#utility#filename()) + let cmd .= g:gitgutter_diff_base.' -- '.gitgutter#utility#shellescape(gitgutter#utility#filename()) endif if !a:preserve_full_diff && s:grep_available diff --git a/doc/gitgutter.txt b/doc/gitgutter.txt index 10b6eef..741820b 100644 --- a/doc/gitgutter.txt +++ b/doc/gitgutter.txt @@ -117,6 +117,7 @@ You can customise: - The sign column's colours - The signs' colours and symbols - Line highlights +- The base of the diff - Extra arguments for git-diff - Key mappings - The grep executable used @@ -185,6 +186,14 @@ colorscheme or |vimrc|: GitGutterChangeDeleteLine " default: links to GitGutterChangeLineDefault < +THE BASE OF THE DIFF + +By default buffers are diffed against the index. To diff against a commit +instead: +> + let g:gitgutter_diff_base = '' +< + EXTRA ARGUMENTS FOR GIT-DIFF To pass extra arguments to git-diff, add this to your |vimrc|: diff --git a/plugin/gitgutter.vim b/plugin/gitgutter.vim index 3de582d..d42c304 100644 --- a/plugin/gitgutter.vim +++ b/plugin/gitgutter.vim @@ -46,6 +46,7 @@ endtry call s:set('g:gitgutter_sign_modified_removed', '~_') call s:set('g:gitgutter_diff_args', '') +call s:set('g:gitgutter_diff_base', '') call s:set('g:gitgutter_map_keys', 1) call s:set('g:gitgutter_avoid_cmd_prompt_on_windows', 1)