public inbox for linux-spdx@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo
@ 2025-04-09 20:04 Ricardo Ribalda
  2025-04-09 20:39 ` Gon Solo
  0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Ribalda @ 2025-04-09 20:04 UTC (permalink / raw)
  To: Thomas Gleixner, Greg Kroah-Hartman
  Cc: linux-spdx, linux-kernel, Duje Mihanović, Andreas Wendleder,
	Ricardo Ribalda

If the git.Repo object's scope extends to the Python interpreter's
shutdown phase, its destructor may fail due to the interpreter's state.

Exception ignored in: <function Git.AutoInterrupt.__del__ at 0x7f1941dd5620>
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/git/cmd.py", line 565, in __del__
  File "/usr/lib/python3/dist-packages/git/cmd.py", line 546, in _terminate
  File "/usr/lib/python3.13/subprocess.py", line 2227, in terminate
ImportError: sys.meta_path is None, Python is likely shutting down

Make repo a variable of the function read_spdxdata() and scan_git_tree()
to limit the scope of git.Repo and ensure proper resource management.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
Changes in v2:
- Make repo a local variable
- Link to v1: https://lore.kernel.org/r/20250225-spx-v1-1-e935b27eb80d@chromium.org
---
 scripts/spdxcheck.py | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/scripts/spdxcheck.py b/scripts/spdxcheck.py
index 8d608f61bf371647e7ca0129f583e94e535b6193..d5c4c37f1b068486af28110261f74c67301618a9 100755
--- a/scripts/spdxcheck.py
+++ b/scripts/spdxcheck.py
@@ -45,7 +45,9 @@ class dirinfo(object):
                 self.files.append(fname)
 
 # Read the spdx data from the LICENSES directory
-def read_spdxdata(repo):
+def read_spdxdata():
+    repo = git.Repo(os.getcwd())
+    assert not repo.bare
 
     # The subdirectories of LICENSES in the kernel source
     # Note: exceptions needs to be parsed as last directory.
@@ -295,7 +297,15 @@ def exclude_file(fpath):
             return True
     return False
 
-def scan_git_tree(tree, basedir, dirdepth):
+def scan_git_tree(basedir, dirdepth):
+    repo = git.Repo(os.getcwd())
+    tree = repo.head.commit.tree
+
+    basedir = basedir.strip('/')
+    if basedir != '.':
+        for p in basedir.split('/'):
+            tree = tree[p]
+
     parser.set_dirinfo(basedir, dirdepth)
     for el in tree.traverse():
         if not os.path.isfile(el.path):
@@ -306,11 +316,6 @@ def scan_git_tree(tree, basedir, dirdepth):
         with open(el.path, 'rb') as fd:
             parser.parse_lines(fd, args.maxlines, el.path)
 
-def scan_git_subtree(tree, path, dirdepth):
-    for p in path.strip('/').split('/'):
-        tree = tree[p]
-    scan_git_tree(tree, path.strip('/'), dirdepth)
-
 def read_exclude_file(fname):
     rules = []
     if not fname:
@@ -348,12 +353,8 @@ if __name__ == '__main__':
         sys.exit(1)
 
     try:
-        # Use git to get the valid license expressions
-        repo = git.Repo(os.getcwd())
-        assert not repo.bare
-
         # Initialize SPDX data
-        spdx = read_spdxdata(repo)
+        spdx = read_spdxdata()
 
         # Initialize the parser
         parser = id_parser(spdx)
@@ -389,14 +390,13 @@ if __name__ == '__main__':
                     if os.path.isfile(p):
                         parser.parse_lines(open(p, 'rb'), args.maxlines, p)
                     elif os.path.isdir(p):
-                        scan_git_subtree(repo.head.reference.commit.tree, p,
-                                         args.depth)
+                        scan_git_tree(p, args.depth)
                     else:
                         sys.stderr.write('path %s does not exist\n' %p)
                         sys.exit(1)
             else:
                 # Full git tree scan
-                scan_git_tree(repo.head.commit.tree, '.', args.depth)
+                scan_git_tree('.', args.depth)
 
             ndirs = len(parser.spdx_dirs)
             dirsok = 0

---
base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
change-id: 20250225-spx-382cf543370e

Best regards,
-- 
Ricardo Ribalda <ribalda@chromium.org>


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo
  2025-04-09 20:04 [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo Ricardo Ribalda
@ 2025-04-09 20:39 ` Gon Solo
  2025-04-10  5:34   ` Ricardo Ribalda
  0 siblings, 1 reply; 5+ messages in thread
From: Gon Solo @ 2025-04-09 20:39 UTC (permalink / raw)
  To: Ricardo Ribalda
  Cc: Thomas Gleixner, Greg Kroah-Hartman, linux-spdx, linux-kernel,
	Duje Mihanović

Am Wed, Apr 09, 2025 at 08:04:19PM +0000 schrieb Ricardo Ribalda:
> Changes in v2:
> - Make repo a local variable
> - Link to v1: https://lore.kernel.org/r/20250225-spx-v1-1-e935b27eb80d@chromium.org

This is not necessary as it was Python's fault and is fixed by 3.13.3
which came out yesterday. I just checked.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo
  2025-04-09 20:39 ` Gon Solo
@ 2025-04-10  5:34   ` Ricardo Ribalda
  2025-04-10  6:21     ` Gon Solo
  0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Ribalda @ 2025-04-10  5:34 UTC (permalink / raw)
  To: Gon Solo
  Cc: Thomas Gleixner, Greg Kroah-Hartman, linux-spdx, linux-kernel,
	Duje Mihanović

On Wed, 9 Apr 2025 at 22:40, Gon Solo <gonsolo@gmail.com> wrote:
>
> Am Wed, Apr 09, 2025 at 08:04:19PM +0000 schrieb Ricardo Ribalda:
> > Changes in v2:
> > - Make repo a local variable
> > - Link to v1: https://lore.kernel.org/r/20250225-spx-v1-1-e935b27eb80d@chromium.org
>
> This is not necessary as it was Python's fault and is fixed by 3.13.3
> which came out yesterday. I just checked.

It will take some time before this reaches all distributions. This
patch is relatively simple.

I might be biased, but I think the benefits outweigh the cons.

>


-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo
  2025-04-10  5:34   ` Ricardo Ribalda
@ 2025-04-10  6:21     ` Gon Solo
  2025-04-10  7:05       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 5+ messages in thread
From: Gon Solo @ 2025-04-10  6:21 UTC (permalink / raw)
  To: Ricardo Ribalda
  Cc: Thomas Gleixner, Greg Kroah-Hartman, linux-spdx, linux-kernel,
	Duje Mihanović

> > This is not necessary as it was Python's fault and is fixed by 3.13.3
> > which came out yesterday. I just checked.
> 
> It will take some time before this reaches all distributions. This
> patch is relatively simple.
> 
> I might be biased, but I think the benefits outweigh the cons.

3.13.3 is in Arch core-testing and Debian unstable, Debian stable's 3.11
is not affected by this bug. But I agree, it's annoying to be hit by
it. :/

g


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo
  2025-04-10  6:21     ` Gon Solo
@ 2025-04-10  7:05       ` Greg Kroah-Hartman
  0 siblings, 0 replies; 5+ messages in thread
From: Greg Kroah-Hartman @ 2025-04-10  7:05 UTC (permalink / raw)
  To: Gon Solo
  Cc: Ricardo Ribalda, Thomas Gleixner, linux-spdx, linux-kernel,
	Duje Mihanović

On Thu, Apr 10, 2025 at 08:21:09AM +0200, Gon Solo wrote:
> > > This is not necessary as it was Python's fault and is fixed by 3.13.3
> > > which came out yesterday. I just checked.
> > 
> > It will take some time before this reaches all distributions. This
> > patch is relatively simple.
> > 
> > I might be biased, but I think the benefits outweigh the cons.
> 
> 3.13.3 is in Arch core-testing and Debian unstable, Debian stable's 3.11
> is not affected by this bug. But I agree, it's annoying to be hit by
> it. :/

As this is a bug in python, let's not work around it in our scripts but
rather rely on the proper fix in python instead.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-04-10  7:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-09 20:04 [PATCH v2] scripts/spdxcheck: Limit the scope of git.Repo Ricardo Ribalda
2025-04-09 20:39 ` Gon Solo
2025-04-10  5:34   ` Ricardo Ribalda
2025-04-10  6:21     ` Gon Solo
2025-04-10  7:05       ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox