#title The Perfect Patch 이 문서의 최근 버전은 다음의 위치에서 찾을 수 있다. http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt 1. 패치 전달 방법 a.#1 패치는 email로만 전달해야 한다. 다른 서버에서 다운로드 받는 것은 정말 고통스럽다. a. 한개의 email에는 한개의 패치만 들어있어야 하며, changelog (무엇이 어떻게 바뀌었는지에 대한 기록)와 함께 email의 본문에 있어야 한다. (즉, 첨부파일로 넣어서 보내지 말라는 말이다.) 1. 메일 제목 a. #1 이메일의 제목으로 사용되는 Subject: 란은 이메일에 포함된 패치가 어떤 내용인지를 정확히 나타내야 한다. Subject: 란이 파일 이름이어서는 안된다. 여러 개의 패치로 나뉘었을 경우 Subject: 란을 완전히 같은 내용을 채워서 보내면 안된다. 여러분이 보낸 이메일의 Subject: 란은 그 패치를 나타내는 유일한 이름이 된다는 것을 명심해야 한다. 여러분의 패치는 BitKeeper를 통해 전파된다. 제목은 나중에 개발자들의 토의를 위해 사용된다. 사람들은 이 제목을 이용해서 여러분의 패치에 대한 논의들을 검색할 것이므로 패치 이름을 정하는데 많은 주의를 기울여주기를 바란다. a. 여러개의 패치로 분할하여 보낼 경우 제목란에 순서를 나타내는 번호를 꼭 넣어주기 바란다. a. 제목에는 해당하는 서브시스템의 이름을 나타내 주는 것이 좋다. 밑의 예제를 보라. a. Subject: 란의 예제 {{{ [patch 2/5] ext2: improve scalability of bitmap searching }}} a. 여러 개발자들 패치 다운로드 스크립트는 제목에서 브래킷 내의 문자들을 제거하도록 만들어졌다. 즉, 장기적으로 보았을 때 의미 없는 정보를 브래킷 내에 넣어놓으면 좋을 것이다. 예를 들자면 패치번호 2/5 와 같은 부분이나 patch라는 말 등이 여기에 속할 것이다. 그러나 ext2와 같은 중요한 말은 브래킷 내에 들어가면 안된다. 1. 변경내역 ( Changelog ) a.#1 여러분이 기록하는 제목 및 변경내역은 영구적으로 보관되는 커널 기록들로 전파된다. 다른 개발자들은 수년후 여러분의 패치 및 변경내역을 읽고 이해하고 싶을 것이다. 따라서 변경내역은 패치 내용을 상세히 기록해야만 한다. * 어째서 커널이 패치되어야만 했는가. * 패치를 제작한 전반적인 설계 방향. * 자세한 구현 방법 * 테스트 결과 a. 커널 패치가 어떤 버전에 적용되는지를 나타내기 위해서 고민하지는 않아도 된다. 이것은 별로 필요 없는 정보다. 패치가 BitKeeper에 들어가면, (즉, 패치가 적용되면) 여러분이 패치를 작성한 커널보다 나중에 나오는 커널들에 포함될 것이다. a. 새 버전의 패치를 작성하면 이전 버전의 패치 이야기를 하면 안된다. BitKeeper의 변경내역에 "이 패치는 당신이 어제 말한 문제에 대해 수정한 것이다." 같은 사항이 있어봐야 아무런 도움이 안될 것은 확실하지 않은가? 각각의 패치는 각각의 변경내역이 기록되어야 한다. 이 말은 간접적으로는 여러분에게 변경내역들을 관리해주는 패치 관리 시스템이 필요하다는 것을 뜻한다. 아래를 보라. a. Signed-off-by: 항목을 추가하라. a. 대부분의 패치 다운로드 스크립트는 --- 로 시작하는 문자열을 변경 내역과 패치 그 자체를 분리하는 기준으로 처리한다. 여러분은 바로 이점을 이용하여 실제로 패치를 적용할 때 기타 정보들을 적절히 무시하도록 할 수 있을 것이다. {{{ Another few #if/#ifdef cleanupds, this time for the PPC architecture. Signed-off-by: <valdis.lketnieks@vt.edu> Signed-off-by: Andrew Morton <akpm@osdl.org> --- 25-akpm/arch/ppc/kernel/process.c | 2 +- 25-akpm/arch/ppc/platforms/85xx/mpc85xx_cds_common.c | 2 +- 25-akpm/arch/ppc/syslib/ppc85xx_setup.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) --- 25/arch/ppc/kernel/process.c +++ 25/arch/ppc/kernel/process.c @@ -667,7 +667,7 @@ void show_stack(struct tack_struct *tsk, .... .... }}} 1. 패치 내용 a.#1 패치는 'patch -p1' 형태여야 한다. {{{ --- a/kernel/sched.c +++ b/kernel/sched.c }}} a. 패치가 최신 커널 트리에 적용되는지 확인하라. (BitKeeper에서 직접 받거나 다음의 주소를 참조하라.) ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/ a. -mm 혹은 -ac 쪽의 패치를 제작한 경우 Linux쪽의 커널에 기반하여 패치하는 것이 좋다. 여러분의 패치가 -mm, -ac 소스에 적용이 잘 되지 않을 경우 각 담당자가 직접 해결하려 노력할 것이다. 물론, 예외는 있다. a. 여러분의 패치가 새로운 공백문자를 (끝쪽에) 추가하지 않도록 확실히 해주기 바란다. 아래의 script는 공백을 제거하여 여러분의 패치를 고쳐줄 것이다. {{{ #!/bin/sh strip1() { TMP=$(mktemp /tmp/XXXXXX) cp $1 $TMP sed -e '/^+/s/[ ]*$//' < $TMP > $1 rm $TMP } for i in $* do strip1 $i done }}} 1. 맺음말 a.#1 MIME이나 첨부파일은 되도록 넣지 않도록 한다. a. 이메일 프로그램이 자동으로 wordwrap 하지 않도록 설정하라. (역주: wordwrap은 한줄이 너무 길다고 판단하여 자동으로 다음행으로 넘기는 행위를 말한다. 이렇게 되는 경우 patch가 깨질 수 있다. ) a. 이메일 프로그램이 tab 문자를 공백 분자로 자동 변경하지 않도록 설정하라. a. 여러분 자신에게 적절한 크기의 패치를 보내서 패치가 적용되는지 확인하라. 패치 관리 스크립트는 http://www.zip.com.au/~akpm/linux/patches/ 에서 찾을 수 있으며 위에 적힌 모든 부분에 대해서 관리를 해 준다. https://savannah.nongnu.org/projects/quilt/ 의 패치 관리툴도 위의 모든 부분을 해결해 준다. ---- See also DiffAndPatch