Глоссарий
Набор правок (patch set)
Набор правок это упорядоченный список изменений исходников, которые накладываются на чужое дерево до всякой компиляции.
Выполняется список, а не папка
Папка с правками это ещё не набор. Сборщик читает один список сверху вниз и накладывает ровно то, что в нём названо, а всё остальное в папке для него не существует.
- 1
Сперва приходят новые файлы
Наши собственные файлы, которых у проекта нет, распаковываются в дерево до того, как тронут существующее.
- 2
Изменения ложатся по порядку
Позднее изменение может опираться на то, что завело раннее, поэтому порядок несёт собственный смысл.
- 3
Имени нет в списке значит его нет нигде
Файл, лежащий рядом со списком, описывает место работы и сам по себе до дерева не доходит.
Насколько велик этот набор
Набор меняет 39 файлов дерева Chromium и приносит 10 своих собственных.
Оба числа считаются по списку, а не по папке, поэтому изменение, которое описано и не наложено, не считается вовсе.
Наложено значит снимается обратно
Код возврата у средства наложения доказывает немного: дерево продолжает меняться и после того, как правка легла, и до того, как началась компиляция.
Поэтому спрашивают другое: снимается ли изменение с дерева целиком. Кусок, который не снимается, целиком там и не лежал.
Считается каждый кусок
Изменение судится целиком, и один недостающий в дереве кусок валит его так же, как недостающий файл.
Пустой список это провал
Нечего проверять обязано читаться как беда, а не как чистый итог, иначе проверка стережёт пустоту.
Заглушка останавливает сборку
Пропущенное изменение оставило бы обычный браузер под нашим именем, и он сошёл бы за наш.
У файла один хозяин
Два изменения, дотянувшихся до одного файла, оставляют второе неспособным лечь, как только поправят первое. Правило держит каждый файл делом одного изменения.
Тонкая строка в чужом файле
Там, где изменению приходится тронуть чужой код, оно оставляет один вызов, а тело правила живёт в нашем файле.
Снять временный слой это тоже работа
Когда движок берёт поверхность на себя, временный слой над ней убирают, а не оставляют спорить с движком.
Почему перенос и есть настоящая цена
Изменение дёшево, а пересборка нет. Каждая веха Chromium двигает строки, к которым изменение привязано, и каждая система компилируется заново целиком.
Поэтому набор держат маленьким, и каждая прибавка обязана заслужить в нём место. Поверхность, которую страница читает редко, этого места не стоит.
Часто путают с этим
Ключ запуска
Ключ меняет то, как стартует готовый браузер, и стоит на виду в командной строке процесса.
Расширение
Расширение идёт внутри уже собранного браузера и достаёт только до того, что браузер ему отдал.
Настройка сборки
Настройка выбирает, как исходники скомпилировать. Изменение выбирает, что в исходниках написано.
Чего это не делает
- Это не меняет браузер, который у вас уже стоит. Работа идёт до компиляции, поэтому достаётся она только тому, что собрано из этих исходников.
- Это не закрывает поверхность, которая не названа. Чего нет в списке, того нет и в браузере, что бы ни описывал соседний файл.
- Это не переносит себя на новую веху. Новым исходникам набор накладывают заново, а изменение, которое не ложится, останавливает сборку, а не выпадает молча.
- Это не прячет настоящую опись шрифтов от поиска по уникальному имени. Замер там урезан списком профиля, а закрыть сам поиск можно только новым изменением.
Проверить
За каждой строкой выше файл, который можно открыть, и стенд, который держит её честной.
- Список, который сборщик выполняет по порядку
- engine/patches/series
- Заглушка в списке отвергается, а не пропускается
- apps/desktop/test/engine-patches-real.js
- Изменение считается лёгшим, только если дерево отдаёт его обратно целиком
- engine/scripts/сверка-правок.sh
- Каждое объявленное умение снимается из правленого дерева
- engine/scripts/опись-умений.js · apps/desktop/test/опись-умений-снимается.js
Вопросы
- Почему не поменять браузер после сборки?
- Потому что ответ, который читает страница, рождается в скомпилированном коде. Значение, подменённое над этим кодом, само становится значением, и страница, спросившая дважды, получает два рассказа.
- Как узнать, что изменение действительно легло?
- Каждое умение, которое движок объявляет, снимается из правленого дерева по признаку, оставленному самим изменением. Умение без признака не объявляется вовсе.
- Что будет, если изменение не ложится?
- Сборка останавливается на этом месте. Пойти дальше без него значит собрать браузер, похожий на наш, и показать сайту настоящую машину.
- Больший набор значит лучший браузер?
- Нет. Каждое изменение приходится переносить на новые исходники при каждой вехе, поэтому набор растёт только там, где страница читает разницу.
- Можно посмотреть список самому?
- Можно. Это обычный текстовый файл в хранилище, и блок проверки ниже называет его вместе со стендом, который держит заглушки снаружи.
Рядом с этим
Форк Chromium
Чем становится браузер, когда такой набор к нему приложен.
Build flags
Вторая половина сборки: как компилируются правленые исходники.
Наш движок
Сборка, которая едет сегодня, и поверхности, которые она объявляет закрытыми.
Каждое обещание и его сторож
Реестр обещаний, где за каждым стоит файл и стенд.
Посмотрите набор в сборке, которая едет
Страница движка перечисляет каждую поверхность набора и называет стенд, который её меряет.