From: Adrian Neftali Sanchez <lutgaru@gmail.com>
To: tools@linux.kernel.org
Cc: konstantin@linuxfoundation.org,
Adrian Neftali Sanchez <lutgaru@gmail.com>
Subject: [RFC PATCH 03/13] b4: add cross-platform username resolution in _setup_user_config
Date: Sat, 25 Apr 2026 12:49:31 -0700 [thread overview]
Message-ID: <20260425194943.1499-4-lutgaru@gmail.com> (raw)
In-Reply-To: <20260425194943.1499-1-lutgaru@gmail.com>
On Unix-like systems, obtain the user's display name from pwd.getpwuid()
when GIT_COMMITTER_NAME and GIT_AUTHOR_NAME are not set. Parse pw_gecos
to extract only the full name field (before the first comma) per POSIX
conventions.
On Windows, where pwd and os.getuid() are unavailable, fall back to the
USERNAME environment variable. Use explicit sys.platform != 'win32' guards
so static type checkers (mypy, pyright, ruff) correctly recognize platform-
specific APIs without 'possibly unbound' or 'attr-defined' diagnostics.
This enables b4 to initialize USER_CONFIG['name'] reliably across all
supported platforms without raising ImportError or AttributeError.
Signed-off-by: Adrian Neftali Sanchez <lutgaru@gmail.com>
---
src/b4/__init__.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index 0530fec..e878d34 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -17,7 +17,6 @@ import logging
import mailbox
import os
import pathlib
-import pwd
import re
import shlex
import shutil
@@ -4007,9 +4006,15 @@ def _setup_user_config(cmdargs: argparse.Namespace) -> None:
USER_CONFIG['name'] = os.environ['GIT_COMMITTER_NAME']
elif 'GIT_AUTHOR_NAME' in os.environ:
USER_CONFIG['name'] = os.environ['GIT_AUTHOR_NAME']
- else:
+ elif sys.platform != 'win32':
+ # Unix-like: pwd and os.getuid() are guaranteed in this branch
+ import pwd
udata = pwd.getpwuid(os.getuid())
- USER_CONFIG['name'] = udata.pw_gecos.strip(',')
+ # pw_gecos is typically "Full Name,Office,Phone,...". Extract just the name.
+ USER_CONFIG['name'] = udata.pw_gecos.split(',', 1)[0].strip()
+ else:
+ # Windows fallback
+ USER_CONFIG['name'] = os.environ.get('USERNAME', 'unknown')
if 'email' not in USER_CONFIG:
if 'GIT_COMMITTER_EMAIL' in os.environ:
USER_CONFIG['email'] = os.environ['GIT_COMMITTER_EMAIL']
--
2.45.0.windows.1
next prev parent reply other threads:[~2026-04-25 19:50 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-25 19:49 [RFC PATCH 00/13] b4: add native Windows support Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 01/13] tests: specify UTF-8 encoding when opening files in text mode Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 02/13] tests: use os.path.join/normpath for portable path assertions Adrian Neftali Sanchez
2026-04-25 19:49 ` Adrian Neftali Sanchez [this message]
2026-04-25 19:49 ` [RFC PATCH 04/13] b4: resolve platform-native data and cache directories Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 05/13] b4: normalise git-reported absolute paths with os.path.normpath Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 06/13] b4: select platform-appropriate default pager Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 07/13] ez: use portable uid/gid accessors in write_to_tar Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 08/13] tui: The _suspend_to_shell function assumes a POSIX environment, relying on $SHELL and shell-specific arguments (e.g., --rcfile) that are invalid on Windows Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 09/13] tests: replace NamedTemporaryFile with tmp_path in patatt fixture Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 10/13] pyproject: add Windows operating-system classifier Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 11/13] ci: add ci.ps1 for running the quality-gate pipeline on Windows Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 12/13] review_tui: write git tracking commit before updating DB Adrian Neftali Sanchez
2026-04-25 19:49 ` [RFC PATCH 13/13] review_tui: guard against unmounted diff-viewer In certain asynchronous contexts or during rapid UI transitions, _show_content may be invoked before the diff-viewer widget has been fully mounted in the DOM. This is particularly reproducible in headless test environments and on platforms with slower console I/O initialization Adrian Neftali Sanchez
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260425194943.1499-4-lutgaru@gmail.com \
--to=lutgaru@gmail.com \
--cc=konstantin@linuxfoundation.org \
--cc=tools@linux.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.