A way to ensure everyone is testing locally with the right version of cpython. (#1050)
This commit is contained in:
parent ff1f732b5b
commit 5d7112d2b7
3 changed files with 100 additions and 65 deletions
162 Makefile
162
Makefile | | @ -4,59 +4,94 @@ | |||
# | ||||
# - make # Automatically build an html local version | ||||
# - make todo # To list remaining tasks | ||||
# - make verifs # To check for correctness: wrapping, spelling | ||||
# - make wrap # To check for wrapping | ||||
# - make spell # To check for spelling | ||||
# - make verifs # To check for correctness: wrapping, spelling | ||||
# - make wrap # To check for wrapping | ||||
# - make spell # To check for spelling | ||||
# - make merge # To merge pot from upstream | ||||
# - make fuzzy # To find fuzzy strings | ||||
# - make progress # To compute current progression | ||||
# - make upgrade_venv # To upgrade the venv that compiles the doc | ||||
# | ||||
# Modes are: autobuild-stable, autobuild-dev, and autobuild-html, | ||||
# documented in gen/src/3.6/Doc/Makefile as we're only delegating the | ||||
# real work to the Python Doc Makefile. | ||||
| ||||
CPYTHON_CLONE := $(realpath ../cpython/) | ||||
SPHINX_CONF := $(CPYTHON_CLONE)/Doc/conf.py | ||||
# Configuration | ||||
| ||||
# The CPYTHON_CURRENT_COMMIT is the commit, in the cpython repository, | ||||
# from which we generated our po files. We use it here so when we | ||||
# test build, we're building with the .rst files that generated our | ||||
# .po files. | ||||
CPYTHON_CURRENT_COMMIT := e21aa61e96f8343200e765d119ebe778873a6bf1 | ||||
| ||||
CPYTHON_PATH := $(realpath ../cpython/) | ||||
| ||||
LANGUAGE := fr | ||||
BRANCH := 3.8 | ||||
| ||||
| ||||
# Internal variables | ||||
| ||||
UPSTREAM := https://github.com/python/cpython | ||||
VENV := $(shell pwd)/venv/ | ||||
PYTHON := $(shell which python3) | ||||
MODE := html | ||||
BRANCH = 3.8 | ||||
COMMIT = | ||||
JOBS = auto | ||||
WORKTREES := $(VENV)/worktrees/ | ||||
WORKTREE := $(WORKTREES)/$(CPYTHON_CURRENT_COMMIT)/ | ||||
JOBS := auto | ||||
| ||||
| ||||
.PHONY: all | ||||
all: $(SPHINX_CONF) $(VENV)/bin/activate | ||||
ifneq "$(shell cd $(CPYTHON_CLONE) 2>/dev/null && git describe --contains --all HEAD)" "$(BRANCH)" | ||||
$(warning "Your ../cpython checkout may be on the wrong branch, got $(shell cd $(CPYTHON_CLONE) 2>/dev/null && git describe --contains --all HEAD) expected $(BRANCH)") | ||||
endif | ||||
mkdir -p $(CPYTHON_CLONE)/locales/$(LANGUAGE)/ | ||||
ln -nfs $(shell $(PYTHON) -c 'import os; print(os.path.realpath("."))') $(CPYTHON_CLONE)/locales/$(LANGUAGE)/LC_MESSAGES | ||||
$(MAKE) -C $(CPYTHON_CLONE)/Doc/ VENVDIR=$(VENV) PYTHON=$(PYTHON) \ | ||||
SPHINXOPTS='-qW -j$(JOBS) -D locale_dirs=../locales -D language=$(LANGUAGE) -D gettext_compact=0 -D latex_engine=xelatex -D latex_elements.inputenc= -D latex_elements.fontenc=' \ | ||||
$(MODE) && echo "Build success, open file://$(CPYTHON_CLONE)/Doc/build/html/index.html or run 'make serve' to see them." | ||||
all: setup | ||||
mkdir -p $(WORKTREE)/locales/$(LANGUAGE)/LC_MESSAGES/ | ||||
cp --parents *.po */*.po $(WORKTREE)/locales/$(LANGUAGE)/LC_MESSAGES/ | ||||
$(MAKE) -C $(WORKTREE)/Doc/ VENVDIR=$(WORKTREE)/Doc/venv/ PYTHON=$(PYTHON) \ | ||||
SPHINXOPTS='-qW -j$(JOBS) \ | ||||
-D locale_dirs=../locales \ | ||||
-D language=$(LANGUAGE) \ | ||||
-D gettext_compact=0 \ | ||||
-D latex_engine=xelatex \ | ||||
-D latex_elements.inputenc= \ | ||||
-D latex_elements.fontenc=' \ | ||||
$(MODE) && echo "Build success, open file://$(WORKTREE)/Doc/build/html/index.html or run 'make serve' to see them." | ||||
| ||||
| ||||
.PHONY: setup | ||||
setup: venv | ||||
# Setup the main clone | ||||
if ! [ -d $(CPYTHON_PATH) ]; then \ | ||||
git clone --depth 16 --branch $(BRANCH) $(UPSTREAM) $(CPYTHON_PATH); \ | ||||
fi | ||||
| ||||
# Setup the current worktree | ||||
if ! [ -d $(WORKTREE) ]; then \ | ||||
rm -fr $(WORKTREES); \ | ||||
git -C $(CPYTHON_PATH) worktree prune; \ | ||||
mkdir -p $(WORKTREES); \ | ||||
if [ -n "$(CPYTHON_CURRENT_COMMIT)" ]; \ | ||||
then \ | ||||
depth=32; \ | ||||
while ! git -C $(CPYTHON_PATH) rev-parse $(CPYTHON_CURRENT_COMMIT); \ | ||||
do \ | ||||
depth=$$((depth * 2)); \ | ||||
git -C $(CPYTHON_PATH) fetch --depth $$depth $(UPSTREAM); \ | ||||
done \ | ||||
else \ | ||||
git -C $(CPYTHON_PATH) fetch --depth 1 $(UPSTREAM); \ | ||||
fi; \ | ||||
git -C $(CPYTHON_PATH) worktree add $(WORKTREE)/ $(CPYTHON_CURRENT_COMMIT); \ | ||||
$(MAKE) -C $(WORKTREE)/Doc/ VENVDIR=$(WORKTREE)/Doc/venv/ PYTHON=$(PYTHON) venv; \ | ||||
fi | ||||
| ||||
| ||||
.PHONY: venv | ||||
venv: | ||||
if [ ! -d $(VENV) ]; then $(PYTHON) -m venv --prompt python-docs-fr $(VENV); fi | ||||
$(VENV)/bin/pip install -q -U -r requirements.txt | ||||
| ||||
| ||||
.PHONY: serve | ||||
serve: | ||||
$(MAKE) -C $(CPYTHON_CLONE)/Doc/ serve | ||||
| ||||
| ||||
$(SPHINX_CONF): | ||||
git clone --depth 1 --branch $(BRANCH) https://github.com/python/cpython.git $(CPYTHON_CLONE) | ||||
[ -n "$(COMMIT)" ] && (i=1; while ! $$(git -C $(CPYTHON_CLONE) checkout $(COMMIT)); do i=$$((i * 2)); git -C $(CPYTHON_CLONE) fetch --depth $$i; done) || true | ||||
| ||||
| ||||
.PHONY: upgrade_venv | ||||
upgrade_venv: | ||||
$(MAKE) -C $(CPYTHON_CLONE)/Doc/ VENVDIR=$(VENV) PYTHON=$(PYTHON) venv | ||||
$(VENV)/bin/pip install -U pip potodo powrap pospell | ||||
| ||||
| ||||
$(VENV)/bin/activate: $(SPHINX_CONF) | ||||
$(MAKE) -C $(CPYTHON_CLONE)/Doc/ VENVDIR=$(VENV) PYTHON=$(PYTHON) venv | ||||
$(MAKE) -C $(WORKTREE)/Doc/ serve | ||||
| ||||
| ||||
.PHONY: progress | ||||
| | @ -66,41 +101,37 @@ progress: | |||
$(shell msgcat *.po */*.po | grep -c '^msgid') | ||||
| ||||
| ||||
$(VENV)/bin/potodo: $(VENV)/bin/activate | ||||
$(VENV)/bin/pip install potodo | ||||
| ||||
$(VENV)/bin/powrap: $(VENV)/bin/activate | ||||
$(VENV)/bin/pip install powrap | ||||
| ||||
$(VENV)/bin/pospell: $(VENV)/bin/activate | ||||
$(VENV)/bin/pip install pospell | ||||
| ||||
.PHONY: todo | ||||
todo: $(VENV)/bin/potodo | ||||
todo: venv | ||||
$(VENV)/bin/potodo | ||||
| ||||
.PHONY: wrap | ||||
wrap: venv | ||||
$(VENV)/bin/powrap --check --quiet *.po **/*.po | ||||
| ||||
.PHONY: spell | ||||
spell: venv | ||||
$(VENV)/bin/pospell -p dict -l fr_FR *.po **/*.po | ||||
| ||||
.PHONY: fuzzy | ||||
fuzzy: venv | ||||
$(VENV)/bin/potodo -f | ||||
| ||||
.PHONY: verifs | ||||
verifs: wrap spell | ||||
| ||||
.PHONY: wrap | ||||
wrap: $(VENV)/bin/powrap | ||||
$(VENV)/bin/powrap --check --quiet *.po **/*.po | ||||
| ||||
.PHONY: spell | ||||
spell: $(VENV)/bin/pospell | ||||
$(VENV)/bin/pospell -p dict -l fr_FR *.po **/*.po | ||||
| ||||
.PHONY: merge | ||||
merge: upgrade_venv | ||||
ifneq "$(shell cd $(CPYTHON_CLONE) 2>/dev/null && git describe --contains --all HEAD)" "$(BRANCH)" | ||||
$(error "You're merging from a different branch:" "$(shell cd $(CPYTHON_CLONE) 2>/dev/null && git describe --contains --all HEAD)" vs "$(BRANCH)") | ||||
endif | ||||
(cd $(CPYTHON_CLONE)/Doc; rm -f build/NEWS) | ||||
(cd $(CPYTHON_CLONE); $(VENV)/bin/sphinx-build -Q -b gettext -D gettext_compact=0 Doc pot/) | ||||
find $(CPYTHON_CLONE)/pot/ -name '*.pot' |\ | ||||
merge: setup | ||||
git -C $(CPYTHON_PATH) fetch $(UPSTREAM) | ||||
rm -fr $(WORKTREES)/$(BRANCH) | ||||
git -C $(CPYTHON_PATH) worktree prune | ||||
git -C $(CPYTHON_PATH) worktree add $(WORKTREES)/$(BRANCH) $(word 1,$(shell git -C $(CPYTHON_PATH) remote -v | grep python/cpython))/$(BRANCH) | ||||
$(MAKE) -C $(WORKTREES)/$(BRANCH)/Doc/ VENVDIR=$(WORKTREES)/$(BRANCH)/Doc/venv/ PYTHON=$(PYTHON) venv; | ||||
(cd $(WORKTREES)/$(BRANCH); $(WORKTREES)/$(BRANCH)/Doc/venv/bin/sphinx-build -Q -b gettext -D gettext_compact=0 Doc pot/) | ||||
find $(WORKTREES)/$(BRANCH) -name '*.pot' |\ | ||||
while read -r POT;\ | ||||
do\ | ||||
PO="./$$(echo "$$POT" | sed "s#$(CPYTHON_CLONE)/pot/##; s#\.pot\$$#.po#")";\ | ||||
PO="./$$(echo "$$POT" | sed "s#$(WORKTREES)/$(BRANCH)/pot/##; s#\.pot\$$#.po#")";\ | ||||
mkdir -p "$$(dirname "$$PO")";\ | ||||
if [ -f "$$PO" ];\ | ||||
then\ | ||||
| | @ -112,8 +143,11 @@ endif | |||
msgcat -o "$$PO" "$$POT";\ | ||||
fi\ | ||||
done | ||||
sed -i 's/^CPYTHON_CURRENT_COMMIT :=.*/CPYTHON_CURRENT_COMMIT := $(shell git -C $(WORKTREES)/$(BRANCH) rev-parse HEAD)/' Makefile | ||||
rm -fr $(WORKTREES)/$(BRANCH) | ||||
git -C $(CPYTHON_PATH) worktree prune | ||||
| ||||
| ||||
.PHONY: fuzzy | ||||
fuzzy: $(VENV)/bin/potodo | ||||
$(VENV)/bin/potodo -f | ||||
.PHONY: clean | ||||
clean: | ||||
rm -fr venv | ||||
find -name '*.mo' -delete | ||||
| | | |||
Loading…
Add table
Add a link
Reference in a new issue