From nobody Tue Aug 11 17:12:24 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hKJ8S2XWsz6p2CZ for ; Tue, 11 Aug 2026 17:12:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hKJ8S18tnz3V0l for ; Tue, 11 Aug 2026 17:12:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786468344; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=570JySPXdKebroBHSJKbhi9z5sESwr8VV2v9jYs9o28=; b=aSDA/K5RB36fRyVmj3KVG5LuJDAA6m2SF0nfiaN981Uezg+hEGnOjUj/EWdEOpj4utzCJ2 +B01kOlNbyvdXATAqB520LUMQdmbMjTbWkb4SnEWohqcycKC6+Kuvk4W58YGBJjBiCprW4 CFsZb0bvDAWkKC+XOgGAYukQm10AtmxwGvkI8PLV7H+OtL57ism1d5zI/uh84g5A+bLWZY Qxxth8VpdqcewFaDvl1uYEVelR2IrA9URT37O6vUuaSsPPOyDe+zbQ/m+dftfZVtbaKqPl B8+XBIC2gXHY6iRvFelX82UVoLrAo6+wSBkWl3Tr72ZxXRRPUsk0lShjl0ngsw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786468344; a=rsa-sha256; cv=none; b=Wwf3B+18lqsG5KI2lgAtRiFvDOoqzIm8wiE5p4kKY5DaycwJJm5ljRHUXlOLVzSZUbWSel KtqDy2/mPz1cp8/YO9RxSPu9n44LmFtnNss5Rl1aQwtpKcMQAJp8CYPVtVIgFagSkhGoRv LrdxocX1Hl7Ssk6ARL4hP4zg4b2dXtyCMBD/d+xFSEtuY5vbLTuQ4nDyPCM9PlkRXwqfi1 vxLik4qrUVqPk4iNCyild5aExBQoO3x5Hg83AgOmJieXz87yyF87Wj0MyX4ds71iLvY5PE 0h48sYBcnbvUWYMAq63TAHAPHIUL7dRKiPiozZW6LI6kgU1mTCvvN8T5kQsbVQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786468344; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=570JySPXdKebroBHSJKbhi9z5sESwr8VV2v9jYs9o28=; b=J4bVXhIRgTyG0yqNNtzaejPDB6DWIVUOGVDt4TZOwycZBM7wInDooVeD85N3FsFGCN1YS2 JhqpkZHMJwmSofSYDqIRjbCvVwTDAgGh3V2rnSYNKTjIC9/vis68cHmQXB3BLr5QT27UhZ B7WRctOKGNDOEMYeeONBTyYwnffnIrULcLr4LtBqKJN9FN1Iak+9NyRB9kR2MkBr/IWjIS Jxvw7wp4FxRCVpgbVzba/g+m+GAh31xI1Krqz8m0S3q6HoPj2ysXpqeckx3OeiyBg/twSI I/LgEzh/TWn0mLCh+0cmWYtE1zqAD9BKl8PWEVV68XiMJM1SDG7OnPONB7OXMA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hKJ8S030bz12xX for ; Tue, 11 Aug 2026 17:12:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3ec3b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 11 Aug 2026 17:12:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: b7b73d0fc1f0 - main - git-mfc: Make --pending work with releng branches List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b7b73d0fc1f0969e7e53d1a967d4ecc8aef2d35d Auto-Submitted: auto-generated Date: Tue, 11 Aug 2026 17:12:24 +0000 Message-Id: <6a7b57f8.3ec3b.3bee10d8@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=b7b73d0fc1f0969e7e53d1a967d4ecc8aef2d35d commit b7b73d0fc1f0969e7e53d1a967d4ecc8aef2d35d Author: Mark Johnston AuthorDate: 2026-08-07 17:31:29 +0000 Commit: Mark Johnston CommitDate: 2026-08-11 17:02:38 +0000 git-mfc: Make --pending work with releng branches There is no timeout period for merging from stable to releng branches, so we should ignore "MFC after" tags. While here, lift some uses of re.compile() out of loops. Reported by: des --- tools/tools/git/git-mfc | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc index 391ef4117ed7..573fcfca657e 100755 --- a/tools/tools/git/git-mfc +++ b/tools/tools/git/git-mfc @@ -61,6 +61,10 @@ def origin_branch(): err(1, "this is a CURRENT tree, we do not MFC to CURRENT") if branch == "STABLE" or branch == "PRERELEASE": return "main" + if re.match(r'^BETA\d+$', branch) or re.match(r'^ALPHA\d+$', branch): + if revision is None: + err(1, f"could not determine REVISION from {newvers}") + return "stable/" + revision.split('.')[0] if re.match(r'^RELEASE(-p\d+)?$', branch): if revision is None: err(1, f"could not determine REVISION from {newvers}") @@ -153,8 +157,9 @@ def reverts(commit): Look at the commit's log message and return the hash of the commit it reverts, or None. """ + regexp = re.compile(r'^This reverts commit ([0-9a-f]{40})') for line in commit.message.splitlines(): - m = re.match(r'^This reverts commit ([0-9a-f]{40})', line) + m = regexp.match(line) if m: return m.group(1) return None @@ -263,8 +268,9 @@ def mfc_origins(repo, commit, warn=False): return [repo.commit(s) for s in special[commit.hexsha]] origins = [] + regexp = re.compile(r'^\(cherry picked from commit ([0-9a-f]{40})') for line in commit.message.splitlines(): - m = re.match(r'^\(cherry picked from commit ([0-9a-f]{40})', line) + m = regexp.match(line) if m: try: origins.append(repo.commit(m.group(1))) @@ -346,8 +352,9 @@ def mfc_after(commit): 'week': 7, 'weeks': 7, 'month': 30, 'months': 30, } + regexp = re.compile(r'^MFC[ -]after:\s*(\d+)\s+(\w+)', re.IGNORECASE) for line in commit.message.splitlines(): - m = re.match(r'^MFC[ -]after:\s*(\d+)\s+(\w+)', line, re.IGNORECASE) + m = regexp.match(line) if m: count = int(m.group(1)) unit = m.group(2).lower() @@ -375,6 +382,8 @@ def pending(repo, upstream, author=None, committer=None, baking=False): results = {} + mfs = re.match(r'.*/stable/\d+$', upstream) is not None + now = datetime.datetime.now(datetime.timezone.utc) revlist = list(repo.iter_commits(base.hexsha + '..' + upstream)) revlist.reverse() @@ -389,21 +398,27 @@ def pending(repo, upstream, author=None, committer=None, baking=False): # Don't report commits that have already been cherry-picked. continue - delta = mfc_after(commit) - if delta is None: - # Not yet eligible for MFC. - continue - if not commit_match(commit, author, committer): continue - committed = datetime.datetime.fromtimestamp( - commit.committed_date, tz=datetime.timezone.utc) - ready_date = committed + delta - ready = now >= ready_date + # If this is a merge-from-stable then there's no timeout, any + # unmerged commit is eligible. + if mfs: + ready_date = now + ready = True + else: + delta = mfc_after(commit) + if delta is None: + # Not yet eligible for MFC. + continue - if not baking and not ready: - continue + committed = datetime.datetime.fromtimestamp( + commit.committed_date, tz=datetime.timezone.utc) + ready_date = committed + delta + ready = now >= ready_date + + if not baking and not ready: + continue results[commit.hexsha] = (commit, ready_date, ready)