From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id 6J5CCdImmWILlgAAbAwnHQ (envelope-from ) for ; Thu, 02 Jun 2022 23:08:34 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id eEgOCdImmWLzVQEAauVa8A (envelope-from ) for ; Thu, 02 Jun 2022 23:08:34 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 959A6CEB2 for ; Thu, 2 Jun 2022 23:08:33 +0200 (CEST) Received: from localhost ([::1]:54272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nws3U-0006sf-Mt for larch@yhetil.org; Thu, 02 Jun 2022 17:08:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56372) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nws3K-0006s4-K6 for guix-devel@gnu.org; Thu, 02 Jun 2022 17:08:22 -0400 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]:41537) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nws3I-0003nM-LI for guix-devel@gnu.org; Thu, 02 Jun 2022 17:08:22 -0400 Received: by mail-qt1-x834.google.com with SMTP id x20so4299237qtp.8 for ; Thu, 02 Jun 2022 14:08:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heykimo-com.20210112.gappssmtp.com; s=20210112; h=references:user-agent:from:to:cc:subject:date:in-reply-to :message-id:mime-version:content-transfer-encoding; bh=G89GBUSYcZD4pfZCxuY/OaqkZZKExefh30eWUTqeWJM=; b=YcZGi/kwAbJyvYuGflvn2x/4sVE7fI9n0gr79PYc08wMpyAIG+wTC3IYUZVGbrrNO5 aFenh7aS1lmD6PLxnVI94dcnXrErPbE8W6J+sc2zNHBZakTT1tyF3q1LN5bldyRkybvY 577PlrfS1/7dXYsJ7ag+92qo6jxs3X9q4OBCyDPW4TNhNf9CRj9jxkSXcS7zKAM1Jsp1 MCnkQWXlp9zK3+BsmmcKd8pJGUtkaNM0XoXkm7tbVg+kKJijiuqpm4njs5IaLbDC2oE5 E+S3xygDtVE/ELqHdueku/4OQYfkr2KKxd9itzXHUdq4+CBv/nsVcL93UeH1vbzuOUox XDgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:references:user-agent:from:to:cc:subject:date :in-reply-to:message-id:mime-version:content-transfer-encoding; bh=G89GBUSYcZD4pfZCxuY/OaqkZZKExefh30eWUTqeWJM=; b=VKWVzkkPAyKarV3l9xfjmG7hLUxsiHEUDWgHXfz4wABG+y/hXzsHRsH0Nx7gGXa9dm PRsf0ZZjRnqRIo/FQB4AaSfmqKEK4d5HlYDGEEenF8V2xionaRZVuRZM+xryNM7tiVnZ x9IXwS0p9OosaimlgJadtrTrzioZWBUoQe+oWpgcHQNoRW/ytMOtk0xiep0m4/BBvJvr l1RwXuqPuyVKkbmfPLw/85+XmAZy03od4GgxxWZ/otUObAZ2GeccxaYS9PMaT2wJgY54 u2jj7CmlpVXYlkpLypktJSeybWY+oYV2qiD1K/NFcrVMwMGomZkbdZECfysqeXTC1Loc a5Ng== X-Gm-Message-State: AOAM530ZAC3URSMDuytHf4JfG/70tWktOQcwKrwsmcLDYC562onT6LiU Otl+sO3Oo/2qSiVFFUiloMAM/rwTO6TYg2+y X-Google-Smtp-Source: ABdhPJzHc1V4reKUGkvpSYpyCifPxXe+yHdf9texfy4sWHa/Ry10Wn5cM/NzE3dLedwxMAwZId/4DA== X-Received: by 2002:ac8:5ad2:0:b0:304:c8f1:fc46 with SMTP id d18-20020ac85ad2000000b00304c8f1fc46mr5236670qtd.595.1654204098505; Thu, 02 Jun 2022 14:08:18 -0700 (PDT) Received: from localhost (bras-base-mtrlpq0407w-grc-08-216-208-90-205.dsl.bell.ca. [216.208.90.205]) by smtp.gmail.com with ESMTPSA id e185-20020a3769c2000000b006a5d4f32e5dsm3968054qkc.128.2022.06.02.14.08.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jun 2022 14:08:17 -0700 (PDT) References: <87ee07m77w.fsf@gnu.org> User-agent: mu4e 1.6.10; emacs 28.1.50 From: Pier-Hugues Pellerin To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: GNU Guix maintainers , guix-devel@gnu.org Subject: Re: On commit access, patch review, and remaining healthy Date: Thu, 02 Jun 2022 16:32:42 -0400 In-reply-to: <87ee07m77w.fsf@gnu.org> Message-ID: <87wndy6af2.fsf@heykimo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2607:f8b0:4864:20::834; envelope-from=ph@heykimo.com; helo=mail-qt1-x834.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1654204113; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=G89GBUSYcZD4pfZCxuY/OaqkZZKExefh30eWUTqeWJM=; b=H1V9I+rrA7KMQ0LDeUjnu3srAhrCfmoW6CLdGD6zzUJU1MZjX/Dz8dQWlu3mCCSWxKkUpO 6ljO5CCrK2oCJZlBANZQr34+jwR8RQzNaX84wIaA4z1utRD23mns3O42qojrW8rX7M1zjX AMR7mT9FQY+mdM3p5KS7DsEEDV1uaZQ/WM5THy/QF3S12PidyepOpkgHSve1APFVnam909 cZbLM0uzLmpGSJptcjw31eI/XaBSQQqVzErRcbH58dFNR/iTwhMs+lJa+Z68S3UgIUNzsp wFfeRli03+S/S8E7J4cqejTdeyeqi6qr3BgYZqys5bbCoGvAMh+YODm+0BcAXQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1654204113; a=rsa-sha256; cv=none; b=svTub4jvmLUSIqpd1SrAii+FKhIlGHz8TTLcLB/UWdHaENdacloryT3iYNm0ae8ZvKIwiL pf8R2lxBgW6xbnwTiQ5Kgrg4/jcs+1Eoe6C1ffbn/nILZFR3DvUnrD4NVwWX63lGph7D2r hnt3FS9TDpCe/ypMPgYeNgs7U05RQPcOe5/xwQduJcR/eioZli4fKHSD+wU2L5xOwu+KFU AG27VQJev3mAC3wMxzMwMHjFMP96D7mjotM0RwUeG51qX6cXme9fxT9xPtr4rgMiTdLtkY DI/EIgwzdt21rNlmzmJuj3KXD3FP5UklGyO1jUZ8vQCnYzK2gLWv7zX3aY2+Tw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=heykimo-com.20210112.gappssmtp.com header.s=20210112 header.b="YcZGi/kw"; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.53 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=heykimo-com.20210112.gappssmtp.com header.s=20210112 header.b="YcZGi/kw"; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 959A6CEB2 X-Spam-Score: -3.53 X-Migadu-Scanner: scn1.migadu.com X-TUID: ICkmLjlsoY+c Hello, As a new-new Guix user, I did find the review process or the time=20 it takes really long. Maybe I've tackle too complex updates[0], I don't know but I don't=20 have a clear path how to push it. As a dev, I am not super used to the email-patches workflow, I am=20 more used to the pull-request git{hub|lab} process and do work on large open source project and=20 reviewing code is a tedious but necessary task. Also, I don't want to say that one workflow is superior to the=20 other but one thing that shines with theses forge is the automation and the simplicity to add tooling on pull=20 request to reduce the burden to the reviewer: - linting - checks - commits log formatting check - CI jobs - codeowner assignment - build packages (partial or complete rebuild the world if needed) - license check - notification for stable pull request. All theses are useful quality of life improvement for reviewers=20 and reduce some of the friction and remove some of the non glamourous-task. Maybe it could be added to Mumi? Maybe a bot=20 like Ofborg in NixOS could take care of some of the operation. I haven't watched Arun presentation, I will search the list if the=20 recording is up somewhere. Guix is cool project, I am super happy to use it and would like to=20 help more. ph [0]: https://issues.guix.gnu.org/55210 Ludovic Court=C3=A8s writes: > Hello Guix! > > Following on the theme of patch review, I did some stats with=20 > the > attached tools on commits since 1.3.0: > > =E2=80=A2 20,489 commits were made since then; > > =E2=80=A2 4,476 were commits pushed on behalf of a non-committer; > > =E2=80=A2 of these, half were pushed by 2 committers, out of 40ish. > > Some conclusions we can draw: > > =E2=80=A2 We have a strong core development team, which I think is=20 > great > compared to many free software projects. > > Perhaps the flip side of this is that we make too little=20 > space to > newcomers. (I feel we=E2=80=99re almost the opposite of a typical > Git{Hub,Lab}-hosted project where drive-by contributions are=20 > common > and long-term commitment is rare.) > > =E2=80=A2 Review work is severely lacking. The manual reads (info=20 > "(guix) > Commit Access"): > > [=E2=80=A6] the project keeps moving forward because committers=20 > not only push > their own awesome changes, but also offer some of their=20 > time > _reviewing_ and pushing other people=E2=80=99s changes. As a=20 > committer, > you=E2=80=99re welcome to use your expertise and commit rights to=20 > help > other contributors, too! > > Yet, most committers don=E2=80=99t allocate time to review and push=20 > other > people=E2=80=99s changes. > > Why aren=E2=80=99t we, committers, not doing more review/apply work?= =20 > Is it > too intimidating? Would having a documented review=20 > checklist help? > > If you=E2=80=99re not using Emacs, what actionable steps should we=20 > take with > mumi and other tools to help you (Arun made several=20 > proposals in > their Guix Days talk)? If you are using Emacs, does=20 > debbugs.el have > shortcomings that make it a problem to review patches? > > =E2=80=A2 We need to be able to renew committers. There=E2=80=99s a pr= ocess=20 > in place > to remove, at least temporarily, committers that have been=20 > inactive > for a year or more, and I think it=E2=80=99s good (info "(guix)=20 > Commit > Access"). > > Maybe we should also encourage committers who have =E2=80=9Cmoved=20 > on=E2=80=9D to let > the project know so we have a clearer picture of who=E2=80=99s=20 > in=E2=80=94meaning > available not just to commit their own occasional patches,=20 > but also > to help other contributors. > > In addition to that, we need to encourage contributors who=20 > are not > committers yet, which obviously means reviewing and applying=20 > their > contributions in a timely fashion. We need to grow prolific > contributors into leadership positions to they can become=20 > committers > and take part into this whole process. > > In short, we need to break out of a potentially vicious circle=20 > where > active members don=E2=80=99t make the work that would allow newcomers to= =20 > get > more involved, at the risk of burning out themselves. > > Let=E2=80=99s make sure this project keeps striving for decades to come!= =20 > :-) > > Thoughts? > > Ludo=E2=80=99. > > (use-modules (git) > (git repository) > (git reference) > (git oid) > (git tag) > (git commit) > (git structs)=20 > ;signature-email, etc. > (guix git) > (srfi srfi-1) > (srfi srfi-26) > (ice-9 match) > (ice-9 vlist)) > > (define commit-author* > (compose signature-name commit-author)) > (define commit-committer* > (compose signature-name commit-committer)) > > (define-syntax-rule (false-if-git-error exp) > (catch 'git-error > (lambda () exp) > (const #f))) > > (define* (fold-commits proc seed repo > #:key > (start (reference-target > (repository-head repo))) > end) > "Call PROC on each commit of REPO, starting at START (an OID),=20 > and until > END if specified." > (let loop ((commit (commit-lookup repo start)) > (result seed)) > (let ((parent (false-if-git-error (commit-parent commit)))) > (if parent > (if (and end (oid=3D? (commit-id parent) end)) > (proc parent result) > (loop parent (proc parent result))) > result)))) > > (define (reviewers repo commits) > "Return a list of review count/committer pairs." > (define vhash > (fold (lambda (commit result) > (if (string=3D? (commit-author* commit) > (commit-committer* commit)) > result > (vhash-cons (commit-committer* commit) #t > result))) > vlist-null > commits)) > > (define committers > (delete-duplicates > (fold-commits (lambda (commit result) > (cons (commit-committer* commit) > result)) > '() > repo))) > > (map (lambda (committer) > (cons (vhash-fold* (lambda (_ count) > (+ 1 count)) > 0 > committer > vhash) > committer)) > committers)) > > (define (reviewer< r1 r2) > (match r1 > ((count1 . name1) > (match r2 > ((count2 . name2) > (< count1 count2)))))) > > (define repo > (repository-open ".")) > > (define commits > (commit-difference (commit-lookup repo > (reference-target=20 > (repository-head repo))) > (commit-lookup > repo > (tag-target-id > (tag-lookup > repo > (reference-target > (reference-lookup repo=20 > "refs/tags/v1.3.0"))))))) -- --- Thanks ph