Dne čt 7. kvě 2020 12:19 uživatel Vít Ondruch <vondr...@redhat.com> napsal:
> > Dne 06. 05. 20 v 20:39 clime napsal(a): > > On Wed, 6 May 2020 at 13:21, Fabio Valentini <decatho...@gmail.com> > wrote: > >> On Wed, May 6, 2020 at 10:37 AM Vít Ondruch <vondr...@redhat.com> > wrote: > >>> > >>> Dne 05. 05. 20 v 18:37 Fabio Valentini napsal(a): > >>>> On Mon, May 4, 2020 at 5:06 PM Tomas Tomecek <ttome...@redhat.com> > wrote: > >>>> > >>>> Hi Tomas, > >>>> > >>>> I'll respond below with some of my experiences and opinions ... > >>>> > >>>>> Let’s talk about dist-git, as a place where we work. For us, > >>>>> packagers, it’s a well-known place. Yet for newcomers, it may take a > >>>>> while to learn all the details. Even though we operate with projects > >>>>> in a dist-git repository, the layout doesn’t resemble the respective > >>>>> upstream project. > >>>>> > >>>>> There is a multitude of tasks we tend to perform in a dist-git repo: > >>>>> * Bumping a release field for sake of a rebuild. > >>>>> * Updating to the latest upstream release. > >>>>> * Resolving CVEs. > >>>>> * Fixing bugs by… > >>>>> * Changing a spec file. > >>>>> * Pulling a commit from upstream. > >>>>> * Or even backporting a commit. > >>>>> * And more... > >>>>> > >>>>> For some tasks, the workflow is just fine and pretty straightforward. > >>>>> But for the other, it’s very gruesome - the moment you need to touch > >>>>> patch files, the horror comes in. The fact that we operate with patch > >>>>> files, in a git repository, is just mind-boggling to me. > >>>>> > >>>>> Luckily, we have tooling which supports the repository layout - > >>>>> `fedpkg prep`, `srpm` or `mockbuild` are such handy commands - you > can > >>>>> easily inspect the source tree or make sure your local change builds. > >>>>> > >>>>> Where am I getting with this? > >>>>> > >>>>> Over the years there have been multiple tools created to improve the > >>>>> development experience: > >>>>> rdopkg [r], rpkg-util [ru], tito [t] and probably much much more > (e.g. > >>>>> the way Fedora kernel developers work on kernel [k]). > >>>> (snip) > >>>> > >>>>> In the packit project, we work in source-git repositories. These are > >>>>> pretty much upstream repositories combined with Fedora downstream > >>>>> packaging files. An example: I recently added a project called > nyancat > >>>>> [n] to Fedora. I have worked [w] on packaging the project in the > >>>>> GitHub repo and then just pushed the changes to dist-git using packit > >>>>> tooling. These source-git repositories can live anywhere: we have > >>>>> support for GitHub right now and are working on supporting pagure. > >>>>> > >>>>> Would there be an interest within the community, as opt-in, to have > >>>>> such source-git repositories created for respective dist-git > >>>>> repositories? The idea is that you would work in the source-git repo > >>>>> and then let packit handle synchronization with a respective dist-git > >>>>> repo. Our aim is to provide the contribution experience you have in > >>>>> GitHub when working on your packages. Dist-git would still be the > >>>>> authoritative source and a place where official builds are done - the > >>>>> source-git repo would work as a way to collaborate. We also don’t > have > >>>>> plans right now to integrate packit into fedpkg. > >>>> So, in my experience, source-git might be a workable solution for > >>>> packages with *big* downstream modifications. However, for everything > >>>> else, I think it's a way to make it easy to accrue technical debt and > >>>> to do cargo-culting with downstream patches. > >>>> > >>>> The vast majority of packages has *no patches* (or at most, one or two > >>>> of them) > >> (snip) > >> > >>> I don't really want to argue with this point, I tend to agree. Just out > >>> of interest, do we have some statistics to support this? O:-) > >> I did not have any stats when I wrote this, but now I do. > >> Parsing the rawhide spec files from [0] for lines matching > >> "^Patch[0-9]*:[ \t]*.*$", I get the following distribution: > >> > >> number of patches: number of packages > >> total: 21970 > >> 0: 15638 > >> 1: 3287 > >> 2: 1232 > >> 3: 598 > >> 4: 325 > >> 5: 221 > >> 6: 154 > >> 7: 97 > >> 8: 83 > >> 9: 57 > >> 10: 41 > >> 11: 27 > >> 12: 26 > >> 13: 25 > >> 14: 13 > >> 15: 13 > >> 16: 14 > >> 17: 15 > >> 18: 5 > >> 19: 8 > >> 20: 2 > >> 21: 11 > >> 22: 2 > >> 23: 4 > >> 24: 4 > >> 25: 5 > >> 26: 3 > >> 27: 4 > >> 28: 5 > >> 29: 5 > >> 30: 2 > >> 31: 6 > >> 32: 4 > >> 33: 3 > >> 34: 1 > >> 35: 4 > >> 37: 2 > >> 38: 1 > >> 41: 1 > >> 42: 2 > >> 46: 1 > >> 47: 1 > >> 48: 3 > >> 49: 1 > >> 50: 2 > >> 51: 1 > >> 53: 1 > >> 54: 1 > >> 66: 1 > >> 68: 1 > >> 71: 1 > >> 75: 1 > >> 78: 1 > >> 79: 1 > >> 85: 1 > >> 127: 1 > >> 170: 1 > >> > >> In relative terms: > >> > >> - 71% of packages have ZERO patches > >> - 15% have ONE patch > >> - 5% have TWO patches > >> - 3% have THREE patches > >> - 5% have MORE than THREE patches > >> > >> Most packages have none (71%) - or at most two - patches (91%, my > >> original "guess" for "vast majority"), some have 3-5 patches (5%), and > >> a minority (4%) has six patches or more. So it seems this backs up my > >> claim :) > > These are some great stats! > > > > But I would like to note that exploded repos (or source-git repos) > > have at least two other advantages. > > > > 1) they consume less space than tarballs for each version because > > objects in git repo are deduplicated > > 2) instead of downloading/uploading tarballs, you can just do > > something like: git pull --rebase upstream master; git push > > > You still need to have tarballs for SRPM. Therefore the exploded sources > > actually consumes more space, because you still have tarballs and on top > of that you have git repo. > Can the tarballs for srpms be generated dynamically in build system from the exploded sources? > > Vít > > > > > > So they are imho more convenient to work with even if you don't have > > any patches. > > > > Continuing of communication with upstream should not be imposed by > > crappy experience when maintaining patches. > > It should be a question of work ethics and avoiding future conflicts > > with upstream. > > > > clime > > > >> Fabio > >> > >> [0]: https://pkgs.fedoraproject.org/repo/rpm-specs-latest.tar.xz > >> > >>>> , and uses *unmodified upstream sources / tarballs*. > >>>> I never want to deal with exploded upstream sources, unless I'm > >>>> creating a patch for something. > >>>> > >>>> When it's an upstream commit that applies cleanly to the latest > >>>> sources, I'll just add it in the .spec file, and let the tooling > >>>> handle the rest. It's pretty neat to directly link to upstream commits > >>>> (it works with github and gitlab and pagure, as far as I know), and > >>>> let our tooling (spectool, fedpkg) do everything else. I don't have to > >>>> download, patch, or touch sources myself in any way for that. > >>> > >>> Unfortunately, in Ruby world, this unfortunately works less and less, > >>> because the released packages does not contain test suite these days. > So > >>> if there is fix for some feature and associated test, then the patch > has > >>> to be modified (the test part has to be stripped or split out). > >>> Otherwise I like this approach as well. > >>> > >>> > >>>> When I need to make changes that I am able to push back upstream, I > >>>> don't do that in packaging, but fork upstream, do my changes, create a > >>>> pull request, and again point my .spec file to the patches from there. > >>>> No need to touch dist-git there, instead I'm working closely with > >>>> upstream. > >>>> > >>>> In the rare occasion that I need to make downstream-only changes with > >>>> patches, I usually just explode the upstream tarball, run "git init", > >>>> then "git add .", "git commit -m import", apply my changes, and then > >>>> do "git diff --patch > ../00-my-changes.patch" (if it's just one > >>>> commit), or "git format-patch -o ../" if there are multiple commits, > >>>> and then delete the exploded sources again. > >>> > >>> Having infrastructure for exploding sources from the package would be > >>> very interesting. > >>> > >>> Vít > >>> > >>> > >>> > >>>> I maintain ~400 packages in fedora, and the only one with substantial > >>>> downstream modifications (about 10 patches on top of upstream) is > >>>> Jekyll (rubygem-jekyll), where I primarily disable tests for features > >>>> that are not enabled in fedora anyway (if I didn't want to run any > >>>> tests, I could just drop the number of patches to 1 or 2, making the > >>>> fork unnecessary - but I like running the tests). > >>>> > >>>> So while I agree that for *some* packages with *huge*, > >>>> non-upstreamable diffs between upstream and fedora the source-git > >>>> approach might work, I doubt that it would help in 99% of cases, or > >>>> even make it too easy for packagers to make more and more > >>>> downstream-only changes. > >>>> > >>>> Fabio > >>>> > >>>>> The main reason I am sending this is to gather feedback from all of > >>>>> you whether there is an interest in such a workflow. We don’t have > >>>>> concrete plans for Fedora right now but based on your feedback we > >>>>> could. > >>>>> > >>>>> > >>>>> [r] https://github.com/softwarefactory-project/rdopkg > >>>>> [ru] https://pagure.io/rpkg-util > >>>>> [t] https://github.com/rpm-software-management/tito > >>>>> [k] > https://lists.fedoraproject.org/archives/list/infrastruct...@lists.fedoraproject.org/thread/JW4P7FINXXXTOEAHMDTZBVGYZUZMVTWX/#3MLMOTUG5B4F32XIM2YRL3FKVUJNYVRF > >>>>> [n] https://github.com/TomasTomecek/nyancat > >>>>> [w] https://github.com/TomasTomecek/nyancat/pull/2 > >>>>> > >>>>> > >>>>> Cheers, > >>>>> Tomas > >>>>> _______________________________________________ > >>>>> devel mailing list -- devel@lists.fedoraproject.org > >>>>> To unsubscribe send an email to devel-le...@lists.fedoraproject.org > >>>>> Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > >>>>> List Guidelines: > https://fedoraproject.org/wiki/Mailing_list_guidelines > >>>>> List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org > >>>> _______________________________________________ > >>>> devel mailing list -- devel@lists.fedoraproject.org > >>>> To unsubscribe send an email to devel-le...@lists.fedoraproject.org > >>>> Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > >>>> List Guidelines: > https://fedoraproject.org/wiki/Mailing_list_guidelines > >>>> List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org > >>> _______________________________________________ > >>> devel mailing list -- devel@lists.fedoraproject.org > >>> To unsubscribe send an email to devel-le...@lists.fedoraproject.org > >>> Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > >>> List Guidelines: > https://fedoraproject.org/wiki/Mailing_list_guidelines > >>> List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org > >> _______________________________________________ > >> devel mailing list -- devel@lists.fedoraproject.org > >> To unsubscribe send an email to devel-le...@lists.fedoraproject.org > >> Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > >> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines > >> List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org > > _______________________________________________ > > devel mailing list -- devel@lists.fedoraproject.org > > To unsubscribe send an email to devel-le...@lists.fedoraproject.org > > Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines > > List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org > _______________________________________________ > devel mailing list -- devel@lists.fedoraproject.org > To unsubscribe send an email to devel-le...@lists.fedoraproject.org > Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines > List Archives: > https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org >
_______________________________________________ devel mailing list -- devel@lists.fedoraproject.org To unsubscribe send an email to devel-le...@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org