git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC] best way to show diff of commit

From
Pierre Habouzit <madcoder@debian.org>
Date
Nov 26, 2007, 08:42 UTC
Message-ID
<20071126084239.GA23373@artemis.corp>
In-Reply-To
<20071126002519.GA11133@efreet.light.src>
On Mon, Nov 26, 2007 at 12:25:19AM +0000, Jan Hudec wrote:
Show 6 quoted lines
> On Sun, Nov 25, 2007 at 22:18:31 +0100, Pierre Habouzit wrote:
> >   My question is: what do you think is the best way to do that, and
> > where ?
> 
> Are you talking about the ftplugins/git.vim script from vim-scripts package,
> right?
  Yes, its author.
> All it needs to do is call 'git diff --cached'. The below patch seems to work
> here (tried commit, commit -a, commit --amend, commit -a --amend and commit
> from subdirectory and they seemed to all work).
  Damn if that's so simple, I really feel like a big fool now.
Show 6 quoted lines
> >   [0] the issue with this approach is that it's completely broken in
> >       amending mode (does not shows the proper thing), and the generated
> 
> I didn't find any issue with amending mode (showed incremental diff for me
> all right). The problem was when a file was being touched by the commit but
> work tree had unstaged changes. Such changes were shown when they shouldn't.
  Yep, that's the point.
Show 7 quoted lines
> >       diffs aren't excellent, because as an editor plugin, it's hard to
> >       treat renames and copies easily, so I generate really really nasty
> >       diffs in that case too.
> 
> With --cached, detecting copies is just a matter of adding -C. In the patch
> below I added only one -C, but it should probably be user-configurable to use
> no, one or two (equivalent of --find-copies-harder).
  Sure, I'll do that obviously.
  Thanks a lot for the tip.
Show 67 quoted lines
> 
> -- 
> 						 Jan 'Bulb' Hudec <bulb@ucw.cz>
> 
> ---8<---
> --- vim-scripts/ftplugin/git.vim.orig	2007-07-24 09:46:19.000000000 +0200
> +++ vim-scripts/ftplugin/git.vim	2007-11-26 01:01:59.000000000 +0100
> @@ -14,41 +14,6 @@
>  "{{{ function Git_diff_windows
>  
>  function! Git_diff_windows(vertsplit, auto)
> -    let i = 0
> -    let list_of_files = ''
> -
> -    " drop everything until '#  (will commit)' and the next empty line
> -    while i <= line('$')
> -        let line = getline(i)
> -        if line == '# Changes to be committed:'
> -            let i = i + 3
> -            break
> -        endif
> -
> -        let i = i + 1
> -    endwhile
> -
> -    " read file names until we have EOF or an empty line
> -    while i <= line('$')
> -        let line = getline(i)
> -        if line =~ '^#\s*[a-z ]*:.*->.*$'
> -            let file = substitute(line, '^#[^:]*:.*->\s*\(.*\)\s*$', '\1', '')
> -            let list_of_files = list_of_files . ' '.file
> -            let file = substitute(line, '^#[^:]*:\s*\(.*\)\s*->.*$', '\1', '')
> -            let list_of_files = list_of_files . ' '.file
> -        elseif line =~ '^#\s*[a-z ]*:'
> -            let file = substitute(line, '^#[^:]*:\s*\(.*\)\s*$', '\1', '')
> -            let list_of_files = list_of_files . ' '.file
> -        elseif line =~ '^#\s*$'
> -            break
> -        endif
> -
> -        let i = i + 1
> -    endwhile
> -
> -    if list_of_files == ""
> -        return
> -    endif
>  
>      if a:vertsplit
>          rightbelow vnew
> @@ -56,15 +21,8 @@
>          rightbelow new
>      endif
>      silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile
> -    let gitDir = system('git rev-parse --git-dir 2>/dev/null')
> -    let gitDir = substitute(gitDir, '.git\n', '', '')
> -    let wd = getcwd()
> -    if gitDir != ''
> -        exe 'cd '.gitDir
> -    endif
> -    exe 'normal :r!LANG=C git diff HEAD -- ' . list_of_files . "\n1Gdd"
> -    exe 'normal :r!LANG=C git diff --stat HEAD -- ' . list_of_files . "\no\<esc>1GddO\<esc>"
> -    exe 'cd '.wd
> +    exe "normal :r!LANG=C git diff --cached -C\n1Gdd"
> +    exe "normal :r!LANG=C git diff --stat --cached -C\no\<esc>1GddO\<esc>"
>      setlocal nomodifiable
>      noremap <buffer> q :bw<cr>
>      if a:auto
-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org
Previous: Jan HudecNext: Pierre Habouzit
Message 10 of 14 in “[RFC] best way to show diff of commit”
  1. Pierre HabouzitNov 25, 2007
  2. J. Bruce FieldsNov 25, 2007
  3. Pierre HabouzitNov 25, 2007
  4. Junio C HamanoNov 25, 2007
  5. Pierre HabouzitNov 25, 2007
  6. Junio C HamanoNov 25, 2007
  7. Pierre HabouzitNov 25, 2007
  8. David BrownNov 25, 2007
  9. Jan HudecNov 26, 2007
  10. Pierre HabouzitNov 26, 2007
  11. Pierre HabouzitNov 26, 2007
  12. Make builtin-commit.c export GIT_INDEX_FILE for launch_editor as well.Pierre Habouzit, Nov 26, 2007
  13. Pierre HabouzitNov 26, 2007
  14. Kristian HøgsbergNov 26, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.