aplicando um arquivo de correção criado por git-diff

0

Eu fiz um git-diff para gerar um arquivo de patch:

cd
git diff --no-prefix ~/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim  ~/compiler.vim > ~/vimlatex.patch

O patch resultante é

diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim
index 65cd33a..abfcff7 100644
--- home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
+++ home/rudra/compiler.vim
@@ -434,7 +434,8 @@ function! Tex_ForwardSearchLaTeX()
        else
            " We must be using a generic UNIX viewer
            " syntax is: viewer TARGET_FILE LINE_NUMBER SOURCE_FILE
-
+           let mainfnameRelative = fnameescape(fnamemodify(Tex_GetMainFileName(), ':p:.:r'))
+           let target_file = mainfnameRelative . "." . s:target
            let execString .= join([viewer, target_file, linenr, sourcefile])

        endif

Eu quero aplicar este patch a /home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

Mas quando estou tentando aplicar o patch, está dando:

patch -p0 < vimlatex.patch 
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim
|index 65cd33a..abfcff7 100644
|--- home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
|+++ home/rudra/compiler.vim
--------------------------
File to patch: /home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
patching file /home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

O problema é que, enquanto está funcionando bem, eu quero que ele entenda qual arquivo ele deve corrigir, sem me perguntar Arquivo para corrigir:

Como posso conseguir isso?

    
por BaRud 28.04.2017 / 00:51

1 resposta

1

Por padrão, patch retira caminhos dos arquivos de destino, para que você possa aplicar o patch usando

patch < vimlatex.patch

(assumindo que exista um arquivo compiler.vim no diretório atual).

Especificar -p0 instrui o usuário a usar todo o caminho de destino, portanto, espera encontrar um arquivo chamado home/rudra/compiler.vim a partir do diretório atual. A explicação para isso é que o comando que você usou para criar o patch foi transformado antes que diff fosse executado; o comando realmente usado para criar o patch é registrado como a primeira linha do patch (basicamente, ~ se torna /home/rudra e o primeiro / é retirado):

diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim

Como resultado, patch -p0 , por padrão, espera encontrar um arquivo correspondente a home/rudra/compiler.vim (o arquivo de destino), conforme explicado acima.

Eu não acho que haja uma maneira confiável de produzir o tipo de patch que você procura, porque patch ignora explicitamente os caminhos absolutos. Eu recomendaria usar apenas diff simples com caminhos relativos:

cd
diff -u .vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim  compiler.vim > vimlatex.patch

e aplicando o patch no diretório apropriado.

    
por 28.04.2017 / 10:02