Comment 12 for bug 1830096

Revision history for this message
In , Dtownsend (dtownsend) wrote :

(In reply to Olivier Tilloy from comment #3)
> It seems unfortunate that firefox uses MOZ_BUILD_DATE as its build ID (if I followed correctly the code path, see https://hg.mozilla.org/mozilla-central/file/tip/build/variables.py#l15).

My apologies, I hadn't noticed that this was the case.

> The official build from Mozilla might not be affected by that bug, but on Ubuntu we build firefox for each supported release (at present that's 16.04, 18.04, 18.10, 19.04 and the development series, 19.10), which means that the same package of firefox for two different Ubuntu releases will be getting different build IDs, and there's no way to guarantee that the build ID for release X will be < the build ID for release Y, where X < Y (other than building the packages sequentially, instead of in parallel).

If the builds for each release are from the same source then I don't think it would be an issue for the Firefox build ID to match across those builds, though I also imagine that sharing profiles between different Ubuntu releases is going to be rare.

The chief thing that we care about is that if the Firefox code is newer then it should have a larger compatibility version than previously. The compatibility version is defined as `<version>_<appbuildid>/<platformbuildid>` (the latter two are the same in Mozilla builds). We compare as if the string is a valid toolkit version (https://developer.mozilla.org/en-US/docs/Mozilla/Toolkit_version_format), and to make that the case we do some special parsing in the case where the buildid is the expected number of characters that are generated from Mozilla builds, otherwise we just use the literal compatibility version for comparison.

I am not sure about other uses of the build ID in Firefox, but I think one viable option is just to set the build ID to your "build2". This would lead to a compatibility version like `67.0_build2/build2`. This would fall back to just interpreting that as a full version string which looks like it compares correctly:

```
"67.0_build1/build1" < "67.0_build2/build2"
"67.0_build3/build3" > "67.0_build2/build2"
"67.0_build3/build3" < "67.1_build2/build2"
"67.0.1_build1/build1" < "67.1_build2/build2"
"67.0.1_build1/build1" > "67.0_build2/build2"
```

What do you think of that?