Skip to content

Commit

Permalink
Use --no-prefix to generate diff
Browse files Browse the repository at this point in the history
It fixes the issue #176 and the PR #177.

PR #177 was almost fine. The idea of the PR was to force src and dst
prefix. The problem was that, to generate patch for new files, we diff
the new file against /dev/null. git does not like prefix for out of
repository files.

The simple fix is to always force --no-prefix. To make it work, git
apply must use -p0 option: this option tells that there is no prefix in
the src dst files paths.
  • Loading branch information
jreybert committed Jul 24, 2019
1 parent e892fb6 commit 94762b1
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions autoload/magit/git.vim
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,11 @@ function! magit#git#git_dir()
return b:magit_git_dir
endfunction

" Use explicit prefixes to avoid issues when the user has configured the
" diff.noprefix option. The actual prefix values are arbitrary and just
" stripped internally by the commands invoking diff / show.
let s:diff_prefix = "--src-prefix a/ --dst-prefix b/"

" magit#git#git_diff: helper function to get diff of a file
" nota: when git fail (due to misformated patch for example), an error
" message is raised.
" WARNING: diff is generated without prefix. To apply this diff, git apply
" must use the option -p0.
" param[in] filemane: it must be quoted if it contains spaces
" param[in] status: status of the file (see g:magit_git_status_code)
" param[in] mode: can be staged or unstaged
Expand All @@ -120,8 +117,7 @@ function! magit#git#git_diff(filename, status, mode)
let dev_null = ( a:status == '?' ) ? "/dev/null " : ""
let staged_flag = ( a:mode == 'staged' ) ? "--staged" : ""
let git_cmd=g:magit_git_cmd . " diff --no-ext-diff " . staged_flag .
\ " " . s:diff_prefix .
\ " --no-color -p -U" . b:magit_diff_context .
\ " --no-prefix --no-color -p -U" . b:magit_diff_context .
\ " -- " . dev_null . " " . a:filename

if ( a:status != '?' )
Expand Down Expand Up @@ -237,7 +233,7 @@ function! magit#git#git_apply(header, selection)
if ( selection[-1] !~ '^$' )
let selection += [ '' ]
endif
let git_cmd=g:magit_git_cmd . " apply --recount --no-index --cached -"
let git_cmd=g:magit_git_cmd . " apply --recount --no-index --cached -p0 -"
try
silent let git_result=magit#sys#system(git_cmd, selection)
catch 'shell_error'
Expand Down Expand Up @@ -265,8 +261,8 @@ function! magit#git#git_unapply(header, selection, mode)
endif
try
silent let git_result=magit#sys#system(
\ g:magit_git_cmd . " apply --recount --no-index " . cached_flag . " --reverse - ",
\ selection)
\ g:magit_git_cmd . " apply --recount --no-index -p0 --reverse " .
\ cached_flag . " - ", selection)
catch 'shell_error'
call magit#sys#print_shell_error()
echom "Tried to unaply this"
Expand Down Expand Up @@ -323,8 +319,7 @@ endfunction
function! magit#git#get_commit_subject(ref)
try
return magit#utils#strip(magit#sys#system(g:magit_git_cmd . " show " .
\ " " . s:diff_prefix .
\" --no-patch --format=\"%s\" " . a:ref))
\" --no-prefix --no-patch --format=\"%s\" " . a:ref))
catch 'shell_error'
return ""
endtry
Expand Down

0 comments on commit 94762b1

Please sign in to comment.