From 5d7112d2b7d69c41aaec7ed8070c2668fbb66621 Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 10 Dec 2019 11:52:16 +0100 Subject: [PATCH] A way to ensure everyone is testing locally with the right version of cpython. (#1050) --- .travis.yml | 2 +- Makefile | 162 ++++++++++++++++++++++++++++------------------- requirements.txt | 1 + 3 files changed, 100 insertions(+), 65 deletions(-) create mode 100644 requirements.txt diff --git a/.travis.yml b/.travis.yml index 8cf5ccd7..db0176d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,4 +15,4 @@ script: - '[ -n "$CHANGED_FILES" ] && printf -- "- %s\n" $CHANGED_FILES ;:' - '[ -n "$CHANGED_FILES" ] && powrap --check --quiet $CHANGED_FILES || :' - '[ -n "$CHANGED_FILES" ] && pospell -p dict -l fr_FR $CHANGED_FILES || :' - - '[ -n "$CHANGED_FILES" ] && make CPYTHON_CLONE=/tmp/cpython/ COMMIT=e21aa61e96f8343200e765d119ebe778873a6bf1 || :' + - '[ -n "$CHANGED_FILES" ] && make CPYTHON_CLONE=/tmp/cpython/ || :' diff --git a/Makefile b/Makefile index 3ccec13b..e0a2ce8f 100644 --- a/Makefile +++ b/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 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..463405dc --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +poutils==0.1.2