์ด๊ฒ๋ค์ Tidy.py์ ์์ธ๋ก ๋์ด๋์ด ์์ง๋ง ๋๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํนํ ๋ผ์ด์ ์ค๋ ์ฐ๋ฆฌ๊ฐ ์ ์ง ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฒ์ ๋ํด ๊ฒ์ฆ๋์ด์ผ ํฉ๋๋ค.
ํ๋ซํผ ๋๋ ํ ๋ฆฌ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ฌด์๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด๋ฉด ์ด๋ ๊ฒ ํ ์ ์์ต๋๋ค.
https://github.com/servo/ ์๋์์ ํฌํฌ๊ฐ ์๋ ๊ฒ์ผ๋ก ์ ์๋ ์ ์๋ "์ฐ๋ฆฌ" ์ฝ๋ ๋ฌด๋ฆฌ๋ ๋ณ๋์ ์ ์ฅ์์ ์๊ณ ํ๋ฌผ์ ํตํด ์ฌ์ฉ๋๋ฏ๋ก tidy.py
์๋ ํ์๋์ง ์์ต๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ์๋ฃ๋์ง ์์์ผ๋ฉฐ ์ด์ ์ฐ๋ฆฌ๊ฐ Cargo๋ก ์ ํํ๊ณ ๋ชจ๋ ๊ฒ์ด ํ์ ๋ชจ๋์ด ๋๊ธฐ ์ ๋ณด๋ค ๋ ์ด๋ ต์ต๋๋ค.
๋ค๋ฅธ ๊ตฌ์ฑ์ผ๋ก ๊ฐ ์ ์ฅ์์ ๊น๋ํ๊ฒ ๋ฃ์ ์ ์์ต๋๊น? ์ด๋ฌํ ์ ์ฅ์๋ ๋ชจ๋ CI ์์คํ ์ ์์ด์ผ ๋์ผํ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์๋ tidy.py
๋ณต์ฌ๋ณธ์ด ์์ ์ ์๋ ์์ฒด ๋ณ๋์ CI๊ฐ ์์ง๋ง, ์ด๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์
๋ฐ์ดํธํ ๋ณต์ฌ๋ณธ์ด ๋ง๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ธ ๋ชจ๋๋ก ๊น๋ํ๊ฒ ์ด๋ํ์๊ฒ ์ต๋๊น? ๋ค์ด๋ก๋ํ์ฌ CI ์ค์ ์คํํ์๊ฒ ์ต๋๊น? ๊ทธ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๊ณ ๋ คํ ์ต์
: tidy
๋ฅผ PyPi์ servo_tidy
์
๋ก๋ํ๊ณ ์ ๋ฆฌํ ๋๋ง๋ค ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
ํธ์ง: ์ญ์ด ๋๋ฅผ ์ด๊ฒผ๋ค.
@frewsxcv ๊ทธ๋ฌ๋ ๋๋ Corey์ ์ ์์ ๋ํ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ๋ฒ์ ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๊ด์ฐฎ์. ๋๋ ์ด๊ฒ์ ๋ํด ์ ์ ์๊ฐํ๊ณ ๋ด๊ฐ ๋์ ํ ์ค๋น๊ฐ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ฌด์์ด๋ ๊ตฌํํ๊ธฐ ์ ์ ๋ด ์๊ฐ์ ๋ณด๊ณ ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ๊ณผ ๋์์ #6999๋ฅผ ๊ณ ์น ์ ์์์ง๋ ๋ชจ๋ฆ ๋๋ค.
๋ช ๊ฐ์ง ์๊ฐ ํ ์ ์ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
mach
๋ช
๋ น์ ์คํํ๋ฉด Python์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑ/ํ์ฑํํฉ๋๋ค( .pyenv/
๋๋ python/.pyenv/
). ๊ทธ๋ฐ ๋ค์ python/requirements.txt
ํ์ผ์ ๋ฐ๋ผ ์ข
์์ฑ์ ์ค์น/์
๋ฐ์ดํธํฉ๋๋ค. ์ด๋ฅผ ํตํด ํธ๋ฆฌ์์ ๋ค์์ ์ ๊ฑฐํ๊ณ PyPi ์๊ตฌ ์ฌํญ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.python/mozdebug
python/mozinfo
python/mozlog
dependencies/*
python/toml
์ด๊ฒ์ ๋ํ #6999๋ฅผ ์์ ํฉ๋๋ค. ๋น๋๊ฐ ๋ชจ๋ ๋น๋ ํ์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ ๋ ค ๋ฒ๋ฆด์ง ์ฌ๋ถ์ ๋ฐ๋ผ Python virtualenv๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ผ์ข ์ ์บ์ฑ ์ต์ ์ด๋ mach ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํด์ผ ํ ์๋ ์์ต๋๋ค.
tidy.py
. ์ด๊ฒ์ python/tidy/tidy.py
๋ฐ python/tidy/setup.py
์์ฑํ๋ ๊ฒ์ ์๋ฏธํ ์ ์์ต๋๋ค.tidy.py
๋ฅผ ๋ค๋ฅธ ์ ์ฅ์์ ํตํฉํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
pip install -e git+https://github.com/servo/servo.git#egg=servo_tidy&subdirectory=python/tidy
๋ค๋ฅธ ์์ด๋์ด๋ ์๊ฐ์ด ์๋ ์ฌ๋์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
์ฐ๋ฆฌ๋ ์ด๋ฏธ web-platform-tests๋ฅผ ์ํ virtualenv๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์๋ง๋ ์ด๊ฒ์ ์ํด ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ web-platform-tests๋ฅผ ์ํ virtualenv๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์๋ง๋ ์ด๊ฒ์ ์ํด ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค.
์ข์ ์๊ฐ. tests/wpt/harness
(wptrunner)๋ฅผ ํธ๋ฆฌ ๋ฐ์ผ๋ก ์ฎ๊ธฐ๊ณ pip ์ข
์์ฑ์ผ๋ก ๋ง๋ค ๊ฒ์ ์ ์ํ๋ ค๊ณ ํ์ผ๋ ํธ๋ฆฌ ๋ด ๋ณต์ฌ๋ฅผ ์ฝ๊ฐ ์์ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ๋ํ ์ ์คํธ๋ฆผ์ https://github.com/w3c/wptrunner ์ด๋ฉฐ ๋ณต์ฌ๋ณธ์์ ๋ณ๊ฒฝํ ์ฌํญ์ ์ ์คํธ๋ฆผ๋์ด์ผ ํฉ๋๋ค. ์๋ธ ๋ชจ๋์ด ์๋๊ฑฐ๋ PyPI์์ ์ค์นํ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ์ด๋ฏ๋ก ์์ ๋กญ๊ฒ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.
๋๋ ์๊ฐํ๋ค tests/wpt/_virtualenv
(์คํํ ๋ ์์ฑ ๋ ./mach test-wpt
ํ์ง) tests/wpt/harness
.
๋ํ ํด๋น _virtualenv๊ฐ ๋ ๋ง์ ์์ ์ ์ํํ ์์ ์ด๋ผ๋ฉด(๊ด์ฐฎ์ต๋๋ค) ์๋ง๋ ํธ๋ฆฌ ์๋ก ๋ ๋๊ฒ ์ด๋ํด์ผ ํฉ๋๋ค.
๋๋ tests/wpt/harness๊ฐ ์๋๋ผ tests/wpt/_virtualenv(./mach test-wpt๋ฅผ ์คํํ ๋ ์์ฑ๋จ)๋ฅผ ์๊ฐํ๊ณ ์์์ต๋๋ค.
๋ง์์. ์๋ก์ด ๊ฐ์ ํ๊ฒฝ์ ์์ฑ/ํ์ฑํํ๋ Python ์ฝ๋๋ ๊ทธ๋ฆฌ ๋ง์ง ์์ผ๋ฏ๋ก ๋ฏธ๋์ WPT ์๊ตฌ ์ฌํญ๊ณผ ๊น๋ํ โโ์๊ตฌ ์ฌํญ์ ๋ถ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ(๋นํธํ์ฑ ๋ฑ์ผ๋ก ์ธํด) ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค.
๋๋ ๋ํ virtualenv ๊ฒฝ๋ก๋ฅผ python/_virtualenv
์ ๊ฐ์ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์ฅ์๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค์, ์ญ์ด ๋ ์ด๊ฒผ์ด
python/_virtualenv
์ข์ ์ฅ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
mach๋ ์ด์ #6999์ ํด์๋ ๋๋ถ์ python/_virtualenv
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ณด ํธ๋ฆฌ์์ ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ์ด์ ์ ๊ฒฐ๊ตญ ๋ถํ ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ชจ๋ ์ ์ฅ์๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋จ์ ์ pypi์ ๋ํ ๋ ๋ค๋ฅธ ์๊ฒฉ ์ฆ๋ช ์งํฉ์ ๊ด๋ฆฌํ๊ณ ํ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํธ์๋๋๋ก ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
pypi์ ๊ฒ์ํ๋ ค๋ฉด pypi ๊ณ์ ์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ๋ค์ด ์๋ .pypirc
์ฌ๋ณธ์ ๊ฐ๊ณ ๋ค์ ๋ช
๋ น์ ์คํํ์ฌ ํจํค์ง๋ฅผ ๋ฑ๋กํ๊ณ ์
๋ก๋ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ "๋๊ตฐ๊ฐ"๊ฐ buildmaster ํธ์คํธ์ธ ๊ฒฝ์ฐ ํจํค์ง ์
๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
์ฆ, pypi ๋๋ ์ง์ ์ค์น์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. Pypi๋ ์ด์ ๋ ๋ง์ ์์ ์ ์ํํ๊ณ ์ง์ ์ค์น๋ ๋ฏธ๋์ ๋ถํ์คํ ์์ ์์ ๋ ํฐ ๋ฒ๊ฑฐ๋ก์์ด ์์ผ๋ฉฐ ๋ ๋ค ํจํค์ง๋ก ์ ๋ฆฌํด์ผ ํฉ๋๋ค.
@shinglyu , ๊น๋ํ๊ฒ ์ฎ๊ธฐ๊ณ ํ์ด์ฌ ํจํค์ง๋ก ์ค์ ํ ๊น์, ์๋๋ฉด ์ ๊ฐ ํ ๊น์?
@edunham : ํ ์ ์์ด์. :)
๋ด ๋๋ฃ @askeing ์ ์ด ๋ฌธ์ ์ ๋งค์ฐ ๊ด์ฌ์ด ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ ๊ทธ์๊ฒ ๋งก๊ธธ ๊ฒ์ ๋๋ค.
์๋
ํ์ธ์ @edunham ์
๋๋ค .
https://github.com/askeing/servo_tidy ์์ Python ํจํค์ง(ํ
์คํธ ํฌํจ)๋ก ์ค์ ํ๋ ค๊ณ ํฉ๋๋ค.
@askeing ๊ฐ์ฌํฉ๋๋ค! ๋น์ ์ ์ด๋ฏธ ๋๋ถ๋ถ์ ํ๋ ์ผ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ์ ์ผํ ์์ ์ setup()
in setup.py
๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํฌํจํ๋ ๊ฒ์ด ๋์์ด ๋๋ค๋ ๊ฒ์
๋๋ค.
entry_points={
'console_scripts': [
'servo-tidy=servo_tidy:scan',
],
},
ํจํค์ง๊ฐ ์ค์น๋๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ์ .travis.yml
์คํฌ๋ฆฝํธ ์น์
์์ ์ง์ servo-tidy
ํธ์ถํ ์ ์์ต๋๋ค.
@frewsxcv @larsbergstrom @metajack tidy
๊ฐ Servo ํธ๋ฆฌ์ ์ฌ๋ ๊ฒ๊ณผ ์์ฒด ์ ์ฅ์์ ์ฌ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ํ์ฌ ํธ๋ฆฌ์์ tidy
git ๊ธฐ๋ก์ ์ ์งํ๋ ๊ฒ์ด ํ๋ก์ ํธ์ ์ผ๋ง๋ ์ค์ํ๊ฐ์? ๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ๋ฅํ๋ฉด ์ธ์ ๋ ์ง ์ญ์ฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ ์ ํธํ์ง๋ง, ์ด ๊ฒฝ์ฐ์๋ ํ์๋ณด๋ค ์๊ฒฌ๊ณผ ๋ ๊ด๋ จ์ด ์์ต๋๋ค.
๋์๊ฒ์ ๊ฐํ ์ ํธ๊ฐ ์๋ค. tidy.py
๋ ์ผ๋ถ ์๋ก์ด ๊ธฐ์ฌ์์ ์ถ๋ฐ์ ์ธ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ํด๋น ํ์ผ์ ๋ณ๋์ ์ ์ฅ์์ ๋ณด๊ดํ๋ฉด ํด๋น ๊ธฐ์ฌ์์ ์ฅ๋ฒฝ์ด ๋์์ง ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ๊ด์ฌ์ฌ๋ ๊ฐ๋ฅํ ํ ์ต์ํ์ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ Tidy.py๋ฅผ ์์ ํ๊ณ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ด ./mach test-tidy
์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์
๋๋ค.
์ฃ์กํฉ๋๋ค. ๊ทธ PR์์ "์์ "์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์กฐ๊ธ ๋ฉ๋ฆฌ ๊ฐ๊ณ ์์ต๋๋ค. ์์๋ ์์ง CI์์ ์ค์ ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์ง๊ธ์ฏค ์ค๋จ๋์๊ฑฐ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋์ฒดํ๋ค๊ณ ํ์ ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ฅ ์ค์ํ ๊ด์ฌ์ฌ๋ ๊ฐ๋ฅํ ํ ์ต์ํ์ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ Tidy.py๋ฅผ ์์ ํ๊ณ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ด
./mach test-tidy
์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.