On 03/07/2018 06:11 PM, Carlos O'Donell wrote:
On 03/07/2018 04:46 AM, Florian Weimer wrote:
> On 07/07/2017 11:04 PM, Florian Weimer wrote:
>> Would it concern you if the source RPM size grew to about 110 MiB?
It would not concern me.
>> This data would not have to be uploaded with a “fedpkg
>> new-sources” command for every upstream import, only once per
>> Fedora release cycle.
OK.
> I don't think anyone has replied to this question so far.
I must have missed this, sorry, or I would have responded.
What really matters to our users is the size of the binary rpms, and
so things like locale-archive growing +80MiB is a more serious issue,
but we thankfully can combat that easily because we have split the
language packs and glibc-all-langpacks is the only thing that grew,
not the default glibc package.
> We can probably bring it down a bit (to ~95 MiB or thereabouts), but
> it obviously will grow again.
>
> The background of my question is whether we can ship the entire
> upstream Git history in the SRPM, and add a Git bundle on top of that
> with the Fedora changes (which can contain merges from the upstream
> release branch, among other things). There would not be any patch
> files anymore, just a baseline bundle (unchanged after the upstream
> release) and an updates bundle.
Is your idea to have a stand-alone SRPM that can be self-hosting
e.g. generate it's own files without external tooling?
The goal is to have the complete development history in the SRPM, so you
could use it for future development if you wanted. I would keep the
actual scripts external.
The source Git repository contains a glibc.spec file. All changes to
the actual SRPM glibc.spec originate from there, with the help of the
sync script.
The sync script would do something like this:
* Get the head commit from the base bundle in some way (we could put
that into glibc.spec if anything else fails).
* Generate a new incremental bundle from that commit to the current HEAD
(or more likely the matching branch under origin/, to encourage that
changes have been pushed to the source repository).
* Enforce some syntax regarding commit messages (excluding content which
comes in through merges from upstream release branches for Fedora).
Downstream will probably reject merges altogether, except perhaps for
hotfix branches.
* Find the last commit which changed the %changelog tail in glibc.spec.
* Synthesize an ever-increasing number on top of that (something like
“git log --pretty=oneline | wc -l”) and use that to generate a release
number which is strictly monotonically increasing.
* Summarize the commits since the last %changelog edit, maybe with the
help of some headers in the new commits. Add this to the %changelog as
a synthesized entry. (From the destination Git, this will patch the
existing top-most entry.)
* Summarize the commits since the last sync commit to the destination
repository and put that into the commit message, including bug numbers
required to get past policy receive hooks which are present in some
dist-git implementations, and finally commit to the destination dist-git
repository.
It's not completely trivial to implement this, but it's probably of
higher long-term value than any polishing of the existing two-way sync
scripts I've developed. 8-/
I encourage this kind of self-sufficient hosting of the SRPM, any
non-self-hosting makes things harder for us and users.
It's self-sufficient, perhaps except for the policy check against the
upstream repository (for recognizing merge commits which do not need
specially formatted commit messages).
The alternative is that we have external tooling in
glibc-maintainer-scripts
which takes as input all of the source trees (in git) we need to
regenerate the tree right?
I would strongly suggest to have that part of the tooling externally, so
that fixes become available immediately on all branches. At least in
Fedora, the script could perhaps copy itself into the source RPM
automatically, though, but it might not be entirely straightforward to
recognize if the local version is indeed newer than the version being
replaced.
> This is peripherally related to Carlos' ABI checking efforts.
Once
> we follow that model, we could simply put the ABI definitions as
> plain XML files in a subdirectory in the non-dist-git repository.
> Changes to the ABI definitions could be reviewed along other changes
> to it.
Would we create an upstream Fedora branch that is based on the
glibc release, and then layer the ABI baselines there?
Yes, we could have an abi/ directory tree with those files there. Any
ABI change would also have to update the baseline files. That may not
work so well for rawhide, though.
Thanks,
Florian