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 2A19EJDTmGJWFQEAbAwnHQ (envelope-from ) for ; Thu, 02 Jun 2022 17:13:20 +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 OKxgEJDTmGIZLwAAauVa8A (envelope-from ) for ; Thu, 02 Jun 2022 17:13:20 +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 EF2543A097 for ; Thu, 2 Jun 2022 17:13:19 +0200 (CEST) Received: from localhost ([::1]:42294 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nwmVi-0007nI-PT for larch@yhetil.org; Thu, 02 Jun 2022 11:13:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nwmTI-0005aA-VP for guix-devel@gnu.org; Thu, 02 Jun 2022 11:10:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nwmTI-0005AA-Ho; Thu, 02 Jun 2022 11:10:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to: references; bh=onDH2JjEc99sB8I2ONfHYF8UaYEB0b1pUsU3P3If12M=; b=qJrPnph97cqvEI 35gmu0L9m/hJdEd1rUAmJc2Rz/jsOxzsaGCLSCmetJRqYP5dUD4DV3khvaQgQuvKupxWxS/sgkqVU iLVCIhH0aj7l/1AE9x6Q2TxfjqzSmTIF3/1LVT08V4ohQqpffn/WZLdtLxqsQOGPeJq7nGm6hPJ1I mqfWGycy6PyEIdSTkmwxXKtim8oLVIp9tW5l2Q8tXqfg6Mt56eWgY89FoZuVjSpRlOPmQk2++Mg/s ABYaynj9tiLZmJXsft0uGyiuNGoI3t4EgN8ObBmG6gkswzsoVY8j9iox6LpJd1kySQXqeNztByyFM TsFW7fH8Uh9wUGz2TXTw==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:52185 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nwmTG-0008Qb-9m; Thu, 02 Jun 2022 11:10:48 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Guix Devel Subject: On commit access, patch review, and remaining healthy CC: GNU Guix maintainers X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: Quartidi 14 Prairial an 230 de la =?utf-8?Q?R=C3=A9v?= =?utf-8?Q?olution=2C?= jour de l'Acacia X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Thu, 02 Jun 2022 17:10:43 +0200 Message-ID: <87ee07m77w.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" 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=1654182800; 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:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=onDH2JjEc99sB8I2ONfHYF8UaYEB0b1pUsU3P3If12M=; b=jVhUE/onKw3vx8pEz36FYFEi6cShEEBc3AL/0R+wXWRrvYs9Epwx8vxZaVvZ+qVTD/zjQQ LJ8211izA8JcAbg66FDrYp/vmHAMAgeMO6iwbLEKQK0jD6GWvXt9TxSgBB20SYKRs0BAJf YsH6tx7mshUFf/S7uqvZOXrUL3ELDq8b6Bh0I5OFUEJk/u77w8mxwJWc6ILdb5OmZXaId5 pmF3DE12EQ9+PcRVRukV4sBheiIOa2YvngPFd6TEmu1+9TuPfo9VS58mvnk4n1OKyWF3u1 OFXGrsbMbjGIV97QkTSH8SFbKMuWbleNMOyUOo0nU0enZYo8TWVqe1HolZOrQg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1654182800; a=rsa-sha256; cv=none; b=h7MvXrwnbk62N9fDto5KFOLye2/58+4Oqy+LieDDHt+dbMRX4InZcox15v6nnnrrvbL/7j qLMXQBxZ6rrIsjXIvW7o/JvrZl/C1iiRboBGewdiRUdUm1jId4qRwpxF2ObjdZBZOkNA/c 0x5BynQFN/4RMAhX/3eoCLOx0UjLyR2YuEakblUT6NbDOCARzgkVmLqgF+d8o0qGb3dqNw GGxUbJtvVYP0pFzr9F3r5Rtc8hJryM5Fw/jHdtuIt3uDU9GRReKV7zmeYy52XBkan0Qtx/ 1g1tlkhmq4QWh0yyAVMWajSkePFvAJWs8Nnte87ap2SdksN/PZIc8ElHp/zKGQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gnu.org header.s=fencepost-gnu-org header.b=qJrPnph9; dmarc=pass (policy=none) header.from=gnu.org; 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: -9.22 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gnu.org header.s=fencepost-gnu-org header.b=qJrPnph9; dmarc=pass (policy=none) header.from=gnu.org; 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: EF2543A097 X-Spam-Score: -9.22 X-Migadu-Scanner: scn0.migadu.com X-TUID: 7O+Mku7x4OPU --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Guix! Following on the theme of patch review, I did some stats with 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 great compared to many free software projects. Perhaps the flip side of this is that we make too little 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 common and long-term commitment is rare.) =E2=80=A2 Review work is severely lacking. The manual reads (info "(guix) Commit Access"): [=E2=80=A6] the project keeps moving forward because committers not o= nly push their own awesome changes, but also offer some of their time _reviewing_ and pushing other people=E2=80=99s changes. As a committ= er, you=E2=80=99re welcome to use your expertise and commit rights to help other contributors, too! Yet, most committers don=E2=80=99t allocate time to review and push oth= er people=E2=80=99s changes. Why aren=E2=80=99t we, committers, not doing more review/apply work? I= s it too intimidating? Would having a documented review checklist help? If you=E2=80=99re not using Emacs, what actionable steps should we take= with mumi and other tools to help you (Arun made several proposals in their Guix Days talk)? If you are using Emacs, does 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 proc= ess in place to remove, at least temporarily, committers that have been inactive for a year or more, and I think it=E2=80=99s good (info "(guix) Commit Access"). Maybe we should also encourage committers who have =E2=80=9Cmoved on=E2= =80=9D to let the project know so we have a clearer picture of who=E2=80=99s in=E2=80= =94meaning available not just to commit their own occasional patches, but also to help other contributors. In addition to that, we need to encourage contributors who are not committers yet, which obviously means reviewing and applying their contributions in a timely fashion. We need to grow prolific contributors into leadership positions to they can become committers and take part into this whole process. In short, we need to break out of a potentially vicious circle where active members don=E2=80=99t make the work that would allow newcomers to get more involved, at the risk of burning out themselves. Let=E2=80=99s make sure this project keeps striving for decades to come! := -) Thoughts? Ludo=E2=80=99. --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=reviewers.scm Content-Description: the code (use-modules (git) (git repository) (git reference) (git oid) (git tag) (git commit) (git structs) ;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), 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=? (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=? (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 (repository-head repo))) (commit-lookup repo (tag-target-id (tag-lookup repo (reference-target (reference-lookup repo "refs/tags/v1.3.0"))))))) --=-=-=--