Проверки с окном не трогают чужой редактор и не врут о поломке
genrestart.sh закрывал все окна редактора разом, включая работу пользователя на рабочем экране. Закрывает теперь только свои — те, что живут на экране проверки. Он же падал по всем случаям, потому что съёмки, на которую смотрит его монтаж, на диске больше нет: ffmpeg открывать нечего, и прерывать нечего. Теперь сразу называет ненайденные файлы и не притворяется ни пройденной, ни сломанной. zoomanchor.py не передавал XAUTHORITY своим командам: экран, поднятый через xvfb-run, пускает только по своему файлу доступа.
This commit is contained in:
parent
3bfd8bc688
commit
6c81fd0907
2 changed files with 31 additions and 2 deletions
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
# Полоса окна, по которой всё и меряется: линейка и первая дорожка.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue