• Bug#1075993: dpkg: Please allow merge requests on Salsa (1/2)

    From Guillem Jover@1:229/2 to All on Thu Jul 11 12:10:01 2024
    XPost: linux.debian.bugs.dist
    From: guillem@debian.org

    Hi!

    On Wed, 2024-07-10 at 22:45:01 -0700, Otto Kekäläinen wrote:
    Please allow Merge Requests at https://salsa.debian.org/dpkg-team/dpkg
    so that it is easier for others to contribute to the package.

    These repos are just mirrors (I've updated the repo descriptions there now), like the ones on Codeberg, where stuff gets «git push --mirror»'ed into them. So enabling MR could cause accidental diverging history which would be messy, and given how --mirror works and how I think GitLab
    tracks MRs, my assumption has been that those MR branches would be
    deleted on mirror push anyway.

    It would also spread where to look for changes, currently already
    the BTS and the mailing list.

    So, thanks for the request, but I think I'm going to decline it.

    Git is a distributed version control system. You can perfectly fine
    have multiple repositories and then sync between them.

    Well dpkg already has multiple repos, and they are being kept in sync,
    by having a main instance and then replicas! I think doing this
    automatically without a merge-based workflow, for multiple pushers,
    would either be racy, or not possible at all w/o making a mess of it.

    Under no situation would a sync of the mirror overwrite the Merge
    Requests. If I for example file a Merge Request at https://salsa.debian.org/dpkg-team/dpkg from a source branch in my own
    fork, there is no way for you to overwrite that merge request branch.

    Your own fork should indeed be safe from overwrites, but that was not
    my point :), AFAIUI GitLab based forges store MRs against that project
    as refs under the refs/nerge-requests hierarchy, that's why you can
    fetch them remotely by adding something like this in your local tree
    under .git/config:

    [remote "some-name"]
    url = git@gitlab-url:repo/repo.git
    fetch = +refs/heads/*:refs/remotes/some-name/*
    fetch = +refs/merge-requests/*/head:refs/remotes/some-name/mr/*

    Then when you fetch, you'll see the MRs as those branches for that
    remote. A «git push --mirror» will forcibly add, update or delete
    remote branches to match the local (on the git server) bare repo, and
    my assumption has always been that this would remove those refs, but
    perhaps GitLab protects them someway and does not let you remove them
    even by force, or when mirroring. TBH have never bother to test that,
    but I think that's a bit besides the point as I mentioned.

    It is true that if you accept Merge Requests, then you would have to
    read email notifications from both patches submitted via
    bugs.debian.org as well as via salsa.debian.org. However that is very
    minor extra work. The benefit of accepting Merge Requests on
    salsa.debian.org is that you can see that the CI you are using is
    passing and the submission didn't regress anything testable.

    One of the concerns is that this spreads this information for the
    project, so that others will have a harder time seeing where things
    are happening, and stores that information in a place where it will
    be harder to extract (once, not if) Salsa goes away. With git being
    distributed as you point out, people are in general not even checking
    where most of my WIP work is happening, which to me seems to confirm
    this being a problem already.

    As mentioned, Salsa is one of the several mirrors for the project, and
    its CI system is being used for some of the checks, but I also use the
    CI from GitHub for Coverity, CodeQL and ports build checks. In the
    same way there was a separate Jenkins instance doing package builds
    up to recently (when it got decommissioned).

    I think you were very quick to jump to the conclusion that accepting
    Merge Requests is somehow a burden or extra work. I am confident that
    if you give it a try, and more people contribute to improving dpkg,
    the overall benefit far outweighs the minor inconvenience of getting
    email notifications of patches from two systems.

    I mange projects that live entirely in a GitLab instance as their
    primary hosting site, and there that makes perfect sense. Although
    GitLab or GitHub review capabilities are not very ideal compared to
    either mail based workflows or even Gerrit. Salsa is also very slow,
    which is quite frustrating.

    Also most of the work and time consumption with dpkg IME, involves
    change planning and design, analyzing what will break, how, preparing transitions, coordination with multiple involved parties, etc. I don't
    think whether there are MRs enabled in a forge would help with any of
    that.

    But in any case, just to wrap up, this is not about not knowing how
    these forges work, or their potential advantages, etc. I'm open to
    reconsider this in general, and I've also been pondering for a while
    whether to make dpkg a non-native project (for example to get
    downstreams to use proper patch management instead of a mess of changes
    over a native release of their own, and to get properly signed
    tarballs that are usable by downstream). And as part of that perhaps
    moving its entire development into some forge, either locally hosted
    (but I don't really fancy having to do random user and spam management),
    or into an existing one, but then my thinking has been that if this was
    to happen the most likely candidate would be Codeberg, and not Salsa.
    But then I'm also not very confident Codeberg (like Alioth, and I
    expect Salsa) are long-term options, that will not disappear at some
    point. :/ And if this happened the Debian BTS and mailing list would
    still not go away, and migrating the data out from those is kind of
    out of the question, so it looks like a massive mess in the making.

    Thanks,
    Guillem

    --- SoupGate-Win32 v1.05
    * Origin: you cannot sedate... all the things you hate (1:229/2)