Hi,

The current situation with the m-c vendoring for stylo is to put all of
stylo in-tree and have an autolander dance between homu (or at least Servo
buildbot) and the Gecko autolander that ensures that changes to servo/servo
or m-c are always mirrored and fully tested, on both ends.

There are a lot of issues with this. It increases cycle times for Servo
PRs. We'd need to move wpt out of tree, which discourages people from
writing tests (see the thread about tests/). Backouts on m-c tip may cause
worse problems.

An alternate solution is to break style/, tests/unit/style, and
style_traits/ (and perhaps util/) into a separate git repo, used in servo
as a git dep (We could publish on crates.io, but I don't think we need to).

It gets vendored into m-c using the same plan as servo; using autolander
voodoo to keep github.com/servo/style and m-c/some-dir/style up to date.
The downsides get limited to style, and the tests/ issue goes away. The
voodoo is also significantly less voodoo-y -- style has a smaller set of
tests which could be run in-tree from m-c itself.

(An alternate way of syncing is to use the wpt-like manually-initiated
two-way sync for style, which would further improve cycle times, but would
shift the collective burden to the person doing the sync. I'm open to this
too.)

The downsides of this model are:


   - Servo has to periodically sync with style and resolve conflicts. I
   volunteer as tribute to do these. I suspect they won't be too bad, and once
   stylo settles down a bit there won't be many breaking changes.
   - Landing simultaneous changes to style/ and layout/ becomes harder. We
   have path deps to simplify working on these, and landing them is two-step
   now, something we're already used to for other crates (and it's easier for
   style because it will be a git dep, not crates.io). There is the issue
   of changes to style and layout that change style's public API or otherwise
   break m-c. I'd like to avoid forcing style contributors to have an m-c
   clone handy to work on these. A simple solution is to temporarily fork into
   a branch on the style repo, and have it dealt with in the next sync. While
   this is pretty bad it's not much worse than the situation for contributing
   to style in the frankenbuild world anyway.
   - We may need to frankenbuild anyway for layout if gecko ever wants to
   use that. Though afaict that's in the far future if it ever happens, and
   the solution space will probably have changed by then. Layout could
   probably be split out if necessary (the layout logic, not the RPC/IPC
   glue), since it mainly only talks to style.
   - Style can no longer pin to deps -- it's possible that Servo's lockfile
   and Gecko's vendoring diverge. As long as semver gets followed in the deps,
   this won't be an issue. This is probably not going to be the case, but it
   shouldn't be something which we can't handle.


I personally feel that the downsides aren't that bad, compared to the
frankenbuild. It also isolates the downsides to one crate, a crate which
would anyway be tricky to work with in the frankenbuild world.

What do you think?
Thanks,
-Manish
_______________________________________________
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo

Reply via email to