Проверки с окном не трогают чужой редактор и не врут о поломке

genrestart.sh закрывал все окна редактора разом, включая работу
пользователя на рабочем экране. Закрывает теперь только свои — те, что
живут на экране проверки.

Он же падал по всем случаям, потому что съёмки, на которую смотрит его
монтаж, на диске больше нет: ffmpeg открывать нечего, и прерывать нечего.
Теперь сразу называет ненайденные файлы и не притворяется ни пройденной,
ни сломанной.

zoomanchor.py не передавал XAUTHORITY своим командам: экран, поднятый
через xvfb-run, пускает только по своему файлу доступа.
This commit is contained in:
4aiman 2026-10-15 23:33:46 +03:00
commit 6c81fd0907
2 changed files with 31 additions and 2 deletions

View file

@ -32,8 +32,32 @@ LOG=$(dirname "$BIN")/nlve.log
[ -f "$PROJ" ] || { echo "нет проекта для проверки: $PROJ"; exit 2; }
# Проверка настоящая: ffmpeg действительно сводит кусок из настоящего
# файла. Нет съёмки — нет и работы, которую можно прервать или не
# прерывать, и все случаи «падают» не из-за кода. Говорим об этом прямо.
python3 - "$PROJ" <<'PY' || exit 2
import json, os, sys
нет = [m['path'] for m in json.load(open(sys.argv[1])).get('pool', [])
if not os.path.exists(m['path'])]
if нет:
print('нет исходников, проверять нечего. Не найдено файлов: %d, первый:'
% len(нет))
print(' ' + нет[0])
raise SystemExit(1)
PY
# Закрываем только свои окна — те, что живут на экране проверки. Простой
# pkill -x nlve уносит и редактор пользователя на рабочем экране вместе с
# несохранённой работой.
killmine() {
for p in $(pgrep -x nlve); do
tr '\0' '\n' < /proc/$p/environ 2>/dev/null |
grep -qx "DISPLAY=$DISP" && kill $p
done
}
start() {
pkill -x nlve 2>/dev/null || true
killmine
# Закрытая программа не уносит с собой свой ffmpeg: дочерний процесс
# остаётся и продолжает писать в кэш. Убираем только его — по пути
# этого самого проекта, чтобы не задеть чужую работу.
@ -117,7 +141,7 @@ else
BAD=$((BAD + 1))
fi
pkill -x nlve 2>/dev/null || true
killmine
pkill -f "длинный-фейд.nlve-cache" 2>/dev/null || true
rm -f "$PROJ.autosave"

View file

@ -28,6 +28,11 @@ from PIL import Image
DISP = os.environ.get('ЭКРАН', ':99')
ENV = {'DISPLAY': DISP, 'PATH': '/usr/bin:/bin'}
# Невидимый экран, поднятый через xvfb-run, пускает только по своему файлу
# доступа. Без него ни xdotool, ни import не видят ни одного окна, и
# проверка падает на первом же движении мыши.
if os.environ.get('XAUTHORITY'):
ENV['XAUTHORITY'] = os.environ['XAUTHORITY']
# Один щелчок колеса. Должен совпадать с ZoomStep в uTimelineCtrl.
STEP = 1.25
# Полоса окна, по которой всё и меряется: линейка и первая дорожка.