๋ค๋ฅธ ๋ฌธ์ ์์ ์ธ๊ธํ๋ฏ์ด ํ์์คํฌํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์ธ๊ฐ๋ฅผ ๋ค์ ๋น๋ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํ์์คํฌํ๋ ํธ๋ฆฌํ๊ณ ์๋์ ์ผ๋ก ๋น ๋ฅด์ง๋ง ์ฝํ ์ธ ํด์์ ๊ฐ์ด ํ์ผ ์์ฒด์ ๊ณ ์ ํ ํน์ฑ์ ๋ํ ์ฃผ์ ๋น๋ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
๋๋ git์ ๋ง์ด ์ฌ์ฉํ๋ฉฐ ๋จ์ํ ๋ถ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ค์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ด ์ง์ฆ๋ฉ๋๋ค. ์ด์์ ์ผ๋ก๋ ํ์ฌ ์์ ๋ถ๊ธฐ์์ ๋ค๋ฅธ ๋ถ๊ธฐ๋ก ์ ํํ ์ ์๊ณ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์๋ ๋ถ๊ธฐ๋ก ๋ค์ ์ ํํ๊ณ ์๋ฌด ๊ฒ๋ ๋ค์ ๋น๋ํ ํ์๊ฐ ์์ต๋๋ค. ๋ด๊ฐ ์๋ ํ ๋น๋ ์์คํ ์ด ํ์์คํฌํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์ผ ํด์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ํ์ผ ํด์ ๋๋ ๊ธฐํ ๊ณ ์ ํ ํ์ผ ํน์ฑ์ ์ฌ์ฉํ๋ฉด Ninja๊ฐ ๋๋ ค์ง ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ต์ ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค.
ccache
๋๋ ๋ค๋ฅธ ์๋ฃจ์
์ฒ๋ผ ๋๋ฆด ์ ์์ต๋๋ค. ๋ํ ๋น๋ ์ ์๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋๋ก ์ด๊ฒ์ด ๋ช
๋ น์ค ํ๋๊ทธ์ฌ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.ํด์ฑ์ด ๋ชจ๋ ๊ท์น์ ์ ์ฉ๋๋ฏ๋ก ๋ช ๋ น์ค ํ๋๊ทธ๊ฐ ๋ ์ ์์ต๋๋ค(๋๋ ์ ์ด๋ ํด์๋ ์ ๋จ). ์๋ฅผ ๋ค์ด ๋งํฌ ๊ท์น์ ๋ชจ๋ ์ ๋ ฅ์ ํด์ฑํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ์์ง๋ง ์์ค ํ์ผ๊ณผ ์๋ ค์ง ์ข ์์ฑ์ ์ข์ ํ๋ณด์ ๋๋ค. ์ด๋ฌํ ๊ตฌ๋ถ์ ์ํด์๋ ๋น๋ ์ค๋ช ์ ์ผ๋ถ์ฌ์ผ ํฉ๋๋ค. ๋ํ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ํญ์ ํ๋๊ทธ๋ฅผ ์ผ๊ด๋๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ฐ๋์ด ์๋๋๋ค.
๋จ์ผ ์ค๋ ๋ ์ธ์์ ์๋ต: ์, ๋จ์ผ ์ค๋ ๋ ๋ฃจํ์ ๋ช ๋ น์ ์ถ๊ฐํฉ๋๋ค. ์ค์ ๋ก๋ ๋จ์ผ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ์๋ง ์ค์ํฉ๋๋ค(์ฆ, ํ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๊ท์น์ด ์๋ฃ๋จ(depslog+hashlog+...)). ๊ทธ๋์ผ๋ง ํด์ฑ์ด ์ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋จ์ผ ์ค๋ ๋ ๋ฃจํ๊ฐ ์ด์จ๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. -j1000 ์คํ์ ํด๋ ํด์ฑ์ผ๋ก ๋ฐ์ ๋์๋ฅผ ๋ณธ ์ ์ด ์์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ๋น ๋ฅธ ๋ง๋ฌด๋ฆฌ ๊ท์น์ ๊ฒฝ์ฐ ํด์ฑ์ ์ด์จ๋ ์์ ํ ์๊ฐ์ ํฅ๋ฏธ๋กญ์ง ์์ต๋๋ค.)
๋ํ ๊ณ ๋ คํ์ญ์์ค: murmur ํด์๋ฅผ ์ฌ์ฉํ ํด์๋ ์๋นํ ๋น ๋ฅด๋ฉฐ ํฐ ์์ค ํ์ผ๋ ํด์ํ๋ ๋ฐ ๋ช ๋ฐ๋ฆฌ์ด๋ง ๊ฑธ๋ฆฝ๋๋ค. ๋ํ ํด์ฑ์ ์ปดํ์ผ๋ฌ์์ ์์ค ํ์ผ(๋ฐ ์ข
์์ฑ)์ ํ์ธํ ์งํ์ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก ํ์ผ ์์คํ
์บ์์์ ์ฝ์ต๋๋ค.
(์คํ๋ ๊ท์น๊ณผ ๋ณํํ์ฌ) ๋น๋ ์ค์ ํด์ฑ์ด ๋ฐ์ํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ๋น๋ ์๊ฐ์ ์ธก์ ๊ฐ๋ฅํ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก #929์ ๊ตฌํ์ ์ตํธ์ธ์ด๋ฉฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ์ฌ๋๋ค์ ์ํด ๋ฌด๋ฃ๋ก ์ ๊ณต๋ฉ๋๋ค(if-๋ฌธ ์ ์ธ).
์๋ฅผ ๋ค์ด ๋งํฌ ๊ท์น์ ๋ชจ๋ ์ ๋ ฅ์ ํด์ฑํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ์์ง๋ง ์์ค ํ์ผ๊ณผ ์๋ ค์ง ์ข ์์ฑ์ ์ข์ ํ๋ณด์ ๋๋ค.
๋ง์ปค์ ๋ํ ์ ๋ ฅ์ ํด์ฑ์ ์ข ์ข ์ฐ๊ฒฐ์ ์์ ํ ๊ฑด๋๋ธ ์ ์๊ธฐ ๋๋ฌธ์ ํนํ ๋ฐ๋์งํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(์: ํ์ ๋ณ๊ฒฝ ๋๋ ์ฃผ์์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ). ๊ฐ์ฒด ํ์ผ์ ์ปดํ์ผ์ด ํ๋์ฉ ์๋ฃ๋๋ฉด ๋น๋๊ฐ ์คํ๋๋ ๋์ ํด์ ๊ณ์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค(์ง์ํ ๋๋ก).
๋๋ฌด ๋๋ฆฐ ๊ฒฝ์ฐ(์: ํฐ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ) ์ค๊ฐ ํ์ผ์ด ์๋ ์์ํ ์ ๋ ฅ์ ๋ํด์๋ง ํด์๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ต์ํ "Git ๋ถ๊ธฐ๋ฅผ ์ ํํ๋ฉด ์ ์ฒด ์ฌ๊ตฌ์ถ์ด ๋ฐ์ํฉ๋๋ค"๋ผ๋ ๊ฒฝ์ฐ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
๋ํ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ํญ์ ํ๋๊ทธ๋ฅผ ์ผ๊ด๋๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ฐ๋์ด ์๋๋๋ค.
๊ทธ๊ฒ์ด ์ฅ์ ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋จ์ผ ์ง์ ์์ ์์ ํ๊ณ ์๊ณ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ๊ณ ์ถ๋ค๋ฉด ํด์๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๊ธฐ๋ฅ ๋ถ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฒฝ์ฐ ํด์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ํ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ํญ์ ํ๋๊ทธ๋ฅผ ์ผ๊ด๋๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ฐ๋์ด ์๋๋๋ค.
๊ทธ๊ฒ์ด ์ฅ์ ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋จ์ผ ์ง์ ์์ ์์ ํ๊ณ ์๊ณ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ๊ณ ์ถ๋ค๋ฉด ํด์๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๊ธฐ๋ฅ ๋ถ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฒฝ์ฐ ํด์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋นํด์ฑ์์ ํด์ฑ์ผ๋ก ์ ํํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ์ฆ, ํ์ผ์ ํ์ฌ ์ํ๋ฅผ ํด์ํด์ผ ํ๋ฏ๋ก ๋ค์ ์ฌ๊ตฌ์ถ์์ ํด์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(์๋ง๋ ์กด์ฌํ์ง ์๊ฑฐ๋ ๊น๋ฐ์ ํต๊ณผํ์ง ๋ชปํ ๊ฒฝ์ฐ ๋ ์ง).
ํด์๋ ์ฌ์ ํ ํ์์คํฌํ๋ฅผ ๋จผ์ ์ฌ์ฉํ๋ฏ๋ก ํ์์คํฌํ๊ฐ ์ผ์นํ๋ฉด ํด์๋ฅผ ๋น๊ตํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ ์ฒ์ ๋ช ๊ฐ์ ๋น๋๊ฐ ์ผ๋ถ ํ์ผ์ ๋ถํ์ํ๊ฒ ๋ค์ ์ปดํ์ผํ ์ ์์ง๋ง ์์ฃผ ๋ฐ์ํ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ์์คํฌํ ํด๋ฆฌ์คํฑ์ด ์ณ์ต๋๋ค).
๋ํ ์ง์ฅ์์ ํด์ฑ์ ์ฌ์ฉํ์ฌ ํฐ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. #929๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง https://github.com/moroten/ninja/commits/hashed์์ ๋ณผ ์ ์๋ฏ์ด ๋ง์ ํจ์น๊ฐ ์์ต๋๋ค. ์ ํํ ๊ท์น์ hash_input = 1
๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๋ด ์ง์ ์๋ ์ฌ์ ํ O(n)
O(n^2)
stat
์ด ๋๋ฌด ์์ฃผ ์๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๋ฒ๊ทธ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ์ ๊ด๋ จ์ด ์์ต๋๋ค.
ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํค๋ ํ์ผ์ ๊ทธ๋ฃนํํ๊ธฐ ์ํด ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋ด ๊ตฌํ์ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ํตํด ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณต๋ฉ๋๋ค. ์ด๊ฒ์ #1021์ ๋ฒ๊ทธ์๋ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์๊ฐ์ ํด์ฑ์ ๋์์ ์ผ๊ธ ๋ฉค๋ฒ๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ฆ, ํด์๋ฅผ ๋น๋ ๋ก๊ทธ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋๋ค. SHA256์ ์ฌ์ฉํ๋ ๊ฒ์ Bazel์ ์๊ฒฉ ์คํ API์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ํ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค. C++ ๊ตฌํ์ https://gitlab.com/bloomberg/recc/์์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฝค ์ข์ง ์์๊น์?
๋ถํํ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ์ ๋ํ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ถ๋ฅํ๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ๊นจ์ง ์ ์์ต๋๋ค.
ํํธ ์ ๋ Chromium์์ ๋ถ๊ธฐ๋ฅผ ์ ํํ๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์๋ฃจ์ ์ ๊ตฌ์ฑํ์ต๋๋ค(ํนํ ๊ณ ํต์ค๋ฝ์ต๋๋ค). ๋ด๊ฐ ์ฌ์ฉํ๋ ์์ Go ํ๋ก๊ทธ๋จ๊ณผ ์คํฌ๋ฆฝํธ๋ ์ฌ๊ธฐ: https://github.com/bromite/mtool
Chromium์์ ์๋ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ ์ฌ๋ก์ ์์ ๋กญ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. ์๊ท๋ชจ ๋น๋ ํ๋ก์ ํธ์์๋ ์๋ํ ๊ฒ์
๋๋ค(๋ด ์คํ์๋ ๋ฌด์ํ ์ ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค). ์ ์ผํ ๋จ์ ์ ๋ด๊ฐ ๊ฒ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๊ฐ git ์ ์ฅ์ ์์ ๋๋ ํ ๋ฆฌ์ .mtool
ํ์ผ์ด ํฉ์ด์ง์ง๋ง ์ ์ญ gitignore
๋ก๋ ์น๋ฃํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
ํด์ฑ ์๊ตฌ ์ฌํญ์ ๋ํด git ls-files --stage
์ถ๋ ฅ์ ์ฌ์ฉํ๋ค๋ ์ ์ ํฅ๋ฏธ๋กญ์ต๋๋ค. ๋น๋๊ฐ ํด๋น ํ์ผ์ ์์กดํ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋์ง ์์ ํ์ผ๋ ํด์ํ๋๋ก git์ ์์ฒญํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๋ ํจ์จ์ ์
๋๋ค.
๊ธฐ๋ฅ ์ธก๋ฉด์์ ์ฌ๊ธฐ์์ ๋ ผ์๋๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋์๋ ๋ด๋ถ์ ์ผ๋ก(git์ ์์กดํ์ง ์๊ณ ) ์ ์ฌํ ์ฑ๋ฅ ๊ฒฐ๊ณผ๋ก ๋์ผํ ์์ ์ ์ํํ ์ ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
๋น ๋ฅธ ์ดํด๋ณด๊ธฐ ํ์ ํด๋น ๋์ ํจ์น๋ ์ ๋ ฅ ํ์ผ ์ธ์ ์ปดํ์ผ๋ฌ ๋ช ๋ น์ค์ ํด์ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
๋ช ๋ น์ค์ ์ด๋ฏธ ninja์ ์ํด ํด์๋์ด ๋น๋ ๋ก๊ทธ์ ์ ์ฅ๋ฉ๋๋ค.
ํด์๋ ์ฌ์ ํ ํ์์คํฌํ๋ฅผ ๋จผ์ ์ฌ์ฉํ๋ฏ๋ก ํ์์คํฌํ๊ฐ ์ผ์นํ๋ฉด ํด์๋ฅผ ๋น๊ตํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ ์ฒ์ ๋ช ๊ฐ์ ๋น๋๊ฐ ์ผ๋ถ ํ์ผ์ ๋ถํ์ํ๊ฒ ๋ค์ ์ปดํ์ผํ ์ ์์ง๋ง ์์ฃผ ๋ฐ์ํ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ์์คํฌํ ํด๋ฆฌ์คํฑ์ด ์ณ์ต๋๋ค).
๊ทธ๊ฒ์ ๋งค์ฐ ์๋ชป๋ ๊ฒ์ ๋๋ค. ํ์์คํฌํ๊ฐ ์ผ์น ํ์ง ์์ผ๋ฉด ํด์ ๋น๊ต๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. ๋น๋ ์์คํ ์ ์ข ์์ฑ์ด ์์ ๋์๋ค๊ณ ๊ฐ์ ํ ์ ์์ผ๋ฉฐ ์ค์ ๋ก ์์ ๋์ง ์์ ๊ฒฝ์ฐ(๋ง์ง ๊ฒฝ์ฐ) ๋น๋๋ ์ฐจ์ ์ฑ ์ด์ง๋ง ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์์คํฌํ๊ฐ ์ผ์นํ๋ฉด ์ข ์์ฑ์ด ์์ ๋๊ณ ํ์์คํฌํ๊ฐ ๊ฐ์ ๋ก ์ฌ์ค์ ๋์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค(EDIT: ๋๋ ๋์์ด ํฐ์น๋์ด ์ข ์์ฑ๋ณด๋ค ์ต์ ์ํ๊ฐ ๋จ). ํด์๋ฅผ ๋น๊ตํ์ฌ ์ด์ค ํ์ธํ์ง ์์ผ๋ฉด ์๋ชป๋ ๋น๋๊ฐ ๋ฐ์ํฉ๋๋ค.
Ninja๋ ํ์์คํฌํ๊ฐ ์ผ์นํ ๋ ์ด๋ฏธ ๋ชจ๋ ์์ ์ ๊ฐ์ ํ๊ณ ๊ฑด๋๋๋๋ค. ๋ฐ๋ผ์ ๊ทํ์ ์์์๋ ์ด์จ๋ ์๋ชป๋ ๋น๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ถ๋ ฅ์ ์์ฑํ๊ณ ์ด์ ํ์์คํฌํ๋ฅผ ์ ์งํ๋ ๋๊ตฌ๋ฅผ ์์ง ๋ชปํฉ๋๋ค(๋ด ๋ฌด์ง๋ก ์ธํด). ์ ๊ทธ๋ด๊น์?
IMHO, ํ์์คํฌํ๊ฐ ์ผ์นํ ๋ ํด์ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์ ๋งค์ฐ ์ ํจํ ์ต์ ํ์ ๋๋ค.
ํด์ ๊ฒ์ฌ๋ Ninja๊ฐ ์ด๋ฏธ ์ ๊ณตํ ๊ธฐ์กด ์๋ฏธ๋ฅผ ์ ์งํ๋ฉด์ ๋จ์ํ "๊ฑฐ์ง ๋๋ฌ์ด" ์ฌ๋น๋๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๋ฌธ์ ๋ false-dirty ์ฌ๋น๋๊ฐ ์๋๋ผ false-clean non-rebuilds์ ๋๋ค. git checkout์ ๋ฎ์ด์ฐ๋ ๋ชจ๋ ํญ๋ชฉ์ ํฐ์นํฉ๋๋ค. ์ข ์์ฑ๋ณด๋ค ์๋ก์ด ๋์์ ๋ง๋ค ์ ์์ต๋๋ค(์, ์ฌ๋๋ค์ ๋ค์ํ ์ ํจํ ์ด์ ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ปค๋ฐํฉ๋๋ค). ํด์ ๊ฒ์ฌ๋ ์ด ๊ฒฝ์ฐ ๊ฑฐ์ง ์ฒญ์ ๋น ์ฌ๊ตฌ์ถ์ ๋ฐฉ์งํฉ๋๋ค.
@rulatir ๋๋ ๋น์ ์ด ๋งํ๋ ๊ฒ์ ๋๋ถ๋ถ ์ดํดํ๋ค๊ณ ์๊ฐํฉ๋๋ค. :) ์ด๊ฒ์ด Bazel ๋ฐ ํด์ ๊ฒ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ค๋ฅธ ๋น๋ ์์คํ ์ด ์ค์ ๋ก ํธ๋ฆฌ ๋ด ๋์ ์ถ๋ ฅ์ ๋ฐ๋๋๋ ์ด์ ์ค ํ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋น๋ ์์คํ ์ด ๋์์ด ์ด์ ์ ์๋ ค์ง ์๊ฐ๋ณด๋ค ์ต์ ์ธ์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๋น๋ํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๊น์?
@rulatir ๋๋ ๋น์ ์ด ๋งํ๋ ๊ฒ์ ๋๋ถ๋ถ ์ดํดํ๋ค๊ณ ์๊ฐํฉ๋๋ค. :) ์ด๊ฒ์ด Bazel ๋ฐ ํด์ ๊ฒ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ค๋ฅธ ๋น๋ ์์คํ ์ด ์ค์ ๋ก ํธ๋ฆฌ ๋ด ๋์ ์ถ๋ ฅ์ ๋ฐ๋๋๋ ์ด์ ์ค ํ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํด์๋ ํ์ผ์ ์์น์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์?
๊ทธ๋ฌ๋ ๋น๋ ์์คํ ์ด ๋์์ด ์ด์ ์ ์๋ ค์ง ์๊ฐ๋ณด๋ค ์ต์ ์ธ์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๋น๋ํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๊น์?
ํ์์คํฌํ ์ฌ์ฉ์ ์ฃผ์ ์ด์ ์ "์ด์ ์ ์๋ ค์ง" ๋ฒ์ ์๋ช ์ ์ถ์ ํ๋ ๋ณ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ง ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค๋ ์ ์ ๋๋ค. ๊ทธ ํํ์ ๊ธฐ๊บผ์ด ํฌ๊ธฐํ๋ค๋ฉด ์ ๊ทธ ์๋ช ์ด ํด์๊ฐ ์๋์ด์ผ ํฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ํ ์ง์ฅ์์ ํด์ฑ์ ์ฌ์ฉํ์ฌ ํฐ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. #929๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง https://github.com/moroten/ninja/commits/hashed์์ ๋ณผ ์ ์๋ฏ์ด ๋ง์ ํจ์น๊ฐ ์์ต๋๋ค. ์ ํํ ๊ท์น์
hash_input = 1
๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๋ด ์ง์ ์๋ ์ฌ์ ํO(n)
O(n^2)
stat
์ด ๋๋ฌด ์์ฃผ ์๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๋ฒ๊ทธ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ์ ๊ด๋ จ์ด ์์ต๋๋ค.ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํค๋ ํ์ผ์ ๊ทธ๋ฃนํํ๊ธฐ ์ํด ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋ด ๊ตฌํ์ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ๋ฅผ ํตํด ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณต๋ฉ๋๋ค. ์ด๊ฒ์ #1021์ ๋ฒ๊ทธ์๋ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์๊ฐ์ ํด์ฑ์ ๋์์ ์ผ๊ธ ๋ฉค๋ฒ๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ฆ, ํด์๋ฅผ ๋น๋ ๋ก๊ทธ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋๋ค. SHA256์ ์ฌ์ฉํ๋ ๊ฒ์ Bazel์ ์๊ฒฉ ์คํ API์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ํ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค. C++ ๊ตฌํ์ https://gitlab.com/bloomberg/recc/์์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฝค ์ข์ง ์์๊น์?
๋ถํํ๋ ๊ฐ์ง ๊ฐ์ฅ์๋ฆฌ์ ๋ํ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ถ๋ฅํ๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ๊นจ์ง ์ ์์ต๋๋ค.