Apa yang dimaksud dengan 'tambalan yang secara tak terduga berakhir di tengah garis'?

14

Ini adalah output dari perintah patch saya:

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

Perintahnya adalah

patch -d ~/SOME_DIR -p1 --merge --verbose -u

Patch diproduksi menggunakan git:

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

Apa patch unexpectedly ends in middle of linemaksudnya, dan apakah itu masalah? Apakah ini mengacu pada sebongkah 16 atau 17? Apa yang bisa saya cari di file tambalan untuk mencari tahu apa yang menyebabkan ini?

Paul Biggar
sumber

Jawaban:

11

Pesan mengacu pada Hunk 16.

Ini diskusi GitHub mungkin terkait dengan masalah Anda.

Ini tentang patch yang tiba-tiba berakhir di tengah-tengah pesan baris karena masalah CRLF (carriage-return, linefeed) ketika git yang dihasilkan diffs digunakan dengan patch.

Mengutip kesimpulannya:

[..] git bisa sangat pilih-pilih soal akhir baris. Apakah Anda di windows atau tidak? Bagaimanapun, Anda mungkin harus mengatur autocrlf di konfigurasi git. Jika Anda menggunakan windows, Anda menginginkan "true", jika Anda menggunakan mac atau linux, Anda harus menggunakan "input" [..]

Dalam artikel Berurusan dengan akhiran baris, GitHub merinci pernyataan di atas.

maxschlepzig
sumber
1
Perlu dicatat, penanya menanyakan hal ini buruk - berakhir di tengah garis bukanlah masalah - hanya peringatan.
Ross
3

Jika Anda tidak menggunakan git(komentar @ maxslepzig tentang penggunaan tambalan dalam konteks git), coba tambahkan carriage return di akhir file Anda. Saya melakukan itu dan patchmenerima tambalan saya.

Avery Chan
sumber
2

Untuk menambah diskusi yang sangat lama ini:

Masalah yang mengarah pada peringatan yang dicatat OP umumnya disebabkan oleh masalah dengan akhiran garis.

patch ingin feed garis trailing (LF) untuk menentukan akhir file (dan memperingatkan diff terpadu yang mungkin telah terpotong secara tidak sengaja)

  1. Tambahkan linefeed yang tepat tanpa membuka file untuk diedit (yang mungkin memodifikasi akhir baris Anda atau menghapus garis / spasi tergantung pada pengaturan editor Anda) Anda dapat melakukan sesuatu yang sederhana seperti:

    echo -e "\n" >> YOURPATCHFILE

    Ini menambahkan karakter linefeed ke akhir file tanpa membuat perubahan lain.

  2. Jika file tambalan Anda sudah aneh atau Anda ingin melalui beberapa kemungkinan perbaikan sekaligus, Anda dapat memperbaiki banyak masalah dengan penyandian (ke ascii) termasuk akhiran baris (CR atau CRLF ke LF):

    dos2unix -k YOURPATCHFILE

    Anda mungkin harus menginstal biner dos2unix dari manajer paket OS Anda; yaitu

    • Berbasis Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (dengan minuman): brew install dos2unix
ChrisN
sumber