tools.linux.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH b4 0/5] Resolve some static typing errors
@ 2024-10-25 20:16 Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 1/5] Add development dependencies Tamir Duberstein
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

This series slightly improves the quality of type annotations in the
project. It also adds development dependencies so they can more easily
be installed.

Unfortunately this is only a drop in the bucket; there are still 356
errors as reported by pyright. Without minimal tooling to ensure these
don't gress, progress will be difficult.

I'd be happy to contribute such tooling, but I didn't find where to put
it - there's no obvious place from which tests are run, for example.

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
Tamir Duberstein (5):
      Add development dependencies
      Avoid file descriptor leak
      Correctly type annotate generators
      Provide overloads for git_run_command
      Add missing imports

 pyproject.toml             |  8 ++++++-
 src/b4/__init__.py         | 52 ++++++++++++++++++++++++++++++----------------
 src/b4/diff.py             |  7 ++++---
 src/b4/ez.py               |  2 ++
 src/b4/pr.py               |  2 ++
 src/b4/ty.py               |  1 +
 src/tests/test___init__.py |  1 +
 7 files changed, 51 insertions(+), 22 deletions(-)
---
base-commit: 2a6338e451a0c1e81f214f48c820c1e52d76b2f1
change-id: 20241025-better-type-annotations-e732fbdb2ff5

Best regards,
-- 
Tamir Duberstein <tamird@gmail.com>


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

* [PATCH b4 1/5] Add development dependencies
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
@ 2024-10-25 20:16 ` Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 2/5] Avoid file descriptor leak Tamir Duberstein
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
 pyproject.toml | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/pyproject.toml b/pyproject.toml
index 31bfe3033650b2b251fcdcbab0456f4a67e914df..7c65c30efdb95fa40cc1f22933bcd62073db4f26 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -22,7 +22,13 @@ classifiers = [
     "Topic :: Software Development",
     "Topic :: Utilities",
 ]
-dynamic = ["dependencies", "optional-dependencies"]
+dynamic = ["dependencies"]
+
+[project.optional-dependencies]
+dev = [
+    "pytest",
+    "types-requests",
+]
 
 [tool.setuptools.dynamic]
 dependencies = { file = ["requirements.in"] }

-- 
2.47.0


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

* [PATCH b4 2/5] Avoid file descriptor leak
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 1/5] Add development dependencies Tamir Duberstein
@ 2024-10-25 20:16 ` Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 3/5] Correctly type annotate generators Tamir Duberstein
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
 src/b4/diff.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/b4/diff.py b/src/b4/diff.py
index 63e60f2fc82c95145a897c2dd319283996ed5a8a..743127ef0a1922eace81686e27cd0366f8e42f9c 100644
--- a/src/b4/diff.py
+++ b/src/b4/diff.py
@@ -174,8 +174,8 @@ def main(cmdargs: argparse.Namespace) -> None:
         sys.exit(1)
     if cmdargs.outdiff is not None:
         logger.info('Writing %s', cmdargs.outdiff)
-        fh = open(cmdargs.outdiff, 'w')
+        with open(cmdargs.outdiff, 'w') as fh:
+            fh.write(rdiff)
     else:
         logger.info('---')
-        fh = sys.stdout
-    fh.write(rdiff)
+        sys.stdout.write(rdiff)

-- 
2.47.0


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

* [PATCH b4 3/5] Correctly type annotate generators
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 1/5] Add development dependencies Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 2/5] Avoid file descriptor leak Tamir Duberstein
@ 2024-10-25 20:16 ` Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 4/5] Provide overloads for git_run_command Tamir Duberstein
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
 src/b4/__init__.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index 5115a9cd9b8746f84eb104a2be69fe121724167e..d1f0fc5b56693d7d234bc4aced65166244928728 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -36,7 +36,7 @@ import requests
 
 from pathlib import Path
 from contextlib import contextmanager
-from typing import Optional, Tuple, Set, List, BinaryIO, Union, Sequence, Literal, Iterator, Dict
+from typing import Optional, Tuple, Set, List, BinaryIO, Union, Sequence, Literal, Iterator, Dict, overload
 
 from email import charset
 
@@ -2758,7 +2758,7 @@ def git_get_repo_status(gitdir: Optional[str] = None, untracked: bool = False) -
 
 
 @contextmanager
-def git_temp_worktree(gitdir: Optional[str] = None, commitish: Optional[str] = None) -> Optional[Iterator[Path]]:
+def git_temp_worktree(gitdir: Optional[str] = None, commitish: Optional[str] = None) -> Generator[str]:
     """Context manager that creates a temporary work tree and chdirs into it. The
     worktree is deleted when the contex manager is closed. Taken from gj_tools."""
     dfn = None
@@ -2776,7 +2776,7 @@ def git_temp_worktree(gitdir: Optional[str] = None, commitish: Optional[str] = N
 
 
 @contextmanager
-def git_temp_clone(gitdir: Optional[str] = None) -> Optional[Iterator[Path]]:
+def git_temp_clone(gitdir: Optional[str] = None) -> Generator[str]:
     """Context manager that creates a temporary shared clone."""
     if gitdir is None:
         topdir = git_get_toplevel()
@@ -2794,7 +2794,7 @@ def git_temp_clone(gitdir: Optional[str] = None) -> Optional[Iterator[Path]]:
 
 
 @contextmanager
-def in_directory(dirname: str) -> Iterator[bool]:
+def in_directory(dirname: str) -> Generator[bool]:
     """Context manager that chdirs into a directory and restores the original
     directory when closed. Taken from gj_tools."""
     cdir = os.getcwd()

-- 
2.47.0


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

* [PATCH b4 4/5] Provide overloads for git_run_command
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
                   ` (2 preceding siblings ...)
  2024-10-25 20:16 ` [PATCH b4 3/5] Correctly type annotate generators Tamir Duberstein
@ 2024-10-25 20:16 ` Tamir Duberstein
  2024-10-25 20:16 ` [PATCH b4 5/5] Add missing imports Tamir Duberstein
  2025-01-22 15:28 ` [PATCH b4 0/5] Resolve some static typing errors Konstantin Ryabitsev
  5 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

This requires explicit use of kwargs to allow decode to be a required
parameter in the negative case (which is necessary to disambiguate the
overloads).

Callers now know for certain whether they get str or bytes.

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
 src/b4/__init__.py | 37 ++++++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 11 deletions(-)

diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index d1f0fc5b56693d7d234bc4aced65166244928728..e71fbe7d8ea8d4ca19228690ce7c186cc91b81ad 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -36,7 +36,7 @@ import requests
 
 from pathlib import Path
 from contextlib import contextmanager
-from typing import Optional, Tuple, Set, List, BinaryIO, Union, Sequence, Literal, Iterator, Dict, overload
+from typing import Optional, Tuple, Set, List, BinaryIO, Union, Sequence, Literal, Iterator, Dict, TypeVar, overload
 
 from email import charset
 
@@ -2697,14 +2697,27 @@ def gpg_run_command(args: List[str], stdin: Optional[bytes] = None) -> Tuple[int
     return _run_command(cmdargs, stdin=stdin)
 
 
+@overload
+def git_run_command(gitdir: Optional[Union[str, Path]], args: List[str], stdin: Optional[bytes] = ...,
+                    *, logstderr: bool = ..., decode: Literal[False],
+                    rundir: Optional[str] = ...) -> Tuple[int, bytes]:
+    ...
+
+
+@overload
+def git_run_command(gitdir: Optional[Union[str, Path]], args: List[str], stdin: Optional[bytes] = ...,
+                    *, logstderr: bool = ..., decode: Literal[True] = ...,
+                    rundir: Optional[str] = ...) -> Tuple[int, str]:
+    ...
+
 def git_run_command(gitdir: Optional[Union[str, Path]], args: List[str], stdin: Optional[bytes] = None,
-                    logstderr: bool = False, decode: bool = True,
+                    *, logstderr: bool = False, decode: bool = True,
                     rundir: Optional[str] = None) -> Tuple[int, Union[str, bytes]]:
     cmdargs = ['git', '--no-pager']
     if gitdir:
         if os.path.exists(os.path.join(gitdir, '.git')):
             gitdir = os.path.join(gitdir, '.git')
-        cmdargs += ['--git-dir', gitdir]
+        cmdargs += ['--git-dir', str(gitdir)]
 
     # counteract some potential local settings
     if args[0] == 'log':
@@ -2714,16 +2727,18 @@ def git_run_command(gitdir: Optional[Union[str, Path]], args: List[str], stdin:
 
     ecode, out, err = _run_command(cmdargs, stdin=stdin, rundir=rundir)
 
-    if decode:
-        out = out.decode(errors='replace')
+    U = TypeVar('U', str, bytes)
+
+    def _handle(out: U, err: U) -> Tuple[int, Union[str, bytes]]:
+        if logstderr and len(err.strip()):
+            logger.debug('Stderr: %s', err)
+            out += err
 
-    if logstderr and len(err.strip()):
-        if decode:
-            err = err.decode(errors='replace')
-        logger.debug('Stderr: %s', err)
-        out += err
+        return ecode, out
 
-    return ecode, out
+    if decode:
+        return _handle(out.decode(errors='replace'), err.decode(errors='replace'))
+    return _handle(out, err)
 
 
 def git_credential_fill(gitdir: Optional[str], protocol: str, host: str, username: str) -> Optional[str]:

-- 
2.47.0


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

* [PATCH b4 5/5] Add missing imports
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
                   ` (3 preceding siblings ...)
  2024-10-25 20:16 ` [PATCH b4 4/5] Provide overloads for git_run_command Tamir Duberstein
@ 2024-10-25 20:16 ` Tamir Duberstein
  2025-01-22 15:28 ` [PATCH b4 0/5] Resolve some static typing errors Konstantin Ryabitsev
  5 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2024-10-25 20:16 UTC (permalink / raw)
  To: Kernel.org Tools; +Cc: Konstantin Ryabitsev, Tamir Duberstein

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
---
 src/b4/__init__.py         | 9 +++++----
 src/b4/diff.py             | 1 +
 src/b4/ez.py               | 2 ++
 src/b4/pr.py               | 2 ++
 src/b4/ty.py               | 1 +
 src/tests/test___init__.py | 1 +
 6 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index e71fbe7d8ea8d4ca19228690ce7c186cc91b81ad..7b1925da93e1b3feadf669cc188ab6fb030f67f4 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -8,12 +8,13 @@ import sys
 import gzip
 import os
 import fnmatch
-import email.utils
-import email.policy
-import email.parser
-import email.header
 import email.generator
+import email.header
+import email.message
+import email.parser
+import email.policy
 import email.quoprimime
+import email.utils
 import tempfile
 import pathlib
 import argparse
diff --git a/src/b4/diff.py b/src/b4/diff.py
index 743127ef0a1922eace81686e27cd0366f8e42f9c..1de3063ea0b3c73e4e3d8bfd4ec91b4c6f90cce6 100644
--- a/src/b4/diff.py
+++ b/src/b4/diff.py
@@ -11,6 +11,7 @@ import b4
 import b4.mbox
 import mailbox
 import email
+import email.message
 import email.parser
 import shutil
 import pathlib
diff --git a/src/b4/ez.py b/src/b4/ez.py
index 970631592d2139b12ee4a6a9a112081eee1de721..9494b005a4f47a7be9cb053cc6075dede29d4cb0 100644
--- a/src/b4/ez.py
+++ b/src/b4/ez.py
@@ -17,6 +17,8 @@ import datetime
 import json
 import shlex
 import email
+import email.policy
+import email.utils
 import pathlib
 import base64
 import textwrap
diff --git a/src/b4/pr.py b/src/b4/pr.py
index b6eb5d3933d7e0bb1224877f071bb19facd8dbd8..60f46f1e3fa96a52a9d667bffb43c2a75b89cc4e 100644
--- a/src/b4/pr.py
+++ b/src/b4/pr.py
@@ -13,7 +13,9 @@ import b4
 import re
 import json
 import email
+import email.message
 import email.parser
+import email.utils
 import argparse
 
 import urllib.parse
diff --git a/src/b4/ty.py b/src/b4/ty.py
index e1afb61280d2161a054d40ae78df0d4b33dbb41d..021588ff9e559cfd8aa7c6818cdeba750931e8f6 100644
--- a/src/b4/ty.py
+++ b/src/b4/ty.py
@@ -13,6 +13,7 @@ import re
 import email
 import email.message
 import email.policy
+import email.utils
 import json
 import argparse
 
diff --git a/src/tests/test___init__.py b/src/tests/test___init__.py
index 297e5120a8c8adf241660f06e9a83c1ff4a0fd3a..3e01c2f5e127cd1123d0fb8503493e396148ee73 100644
--- a/src/tests/test___init__.py
+++ b/src/tests/test___init__.py
@@ -35,6 +35,7 @@ def test_save_git_am_mbox(sampledir, tmp_path, source, regex, flags, ismbox):
             msgs = list(mbx)
         else:
             import email
+            import email.parser
             with open(f'{sampledir}/{source}.txt', 'rb') as fh:
                 msg = email.parser.BytesParser(policy=b4.emlpolicy, _class=email.message.EmailMessage).parse(fh)
             msgs = [msg]

-- 
2.47.0


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

* Re: [PATCH b4 0/5] Resolve some static typing errors
  2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
                   ` (4 preceding siblings ...)
  2024-10-25 20:16 ` [PATCH b4 5/5] Add missing imports Tamir Duberstein
@ 2025-01-22 15:28 ` Konstantin Ryabitsev
  2025-01-22 15:36   ` Konstantin Ryabitsev
  5 siblings, 1 reply; 11+ messages in thread
From: Konstantin Ryabitsev @ 2025-01-22 15:28 UTC (permalink / raw)
  To: Kernel.org Tools, Tamir Duberstein


On Fri, 25 Oct 2024 16:16:02 -0400, Tamir Duberstein wrote:
> This series slightly improves the quality of type annotations in the
> project. It also adds development dependencies so they can more easily
> be installed.
> 
> Unfortunately this is only a drop in the bucket; there are still 356
> errors as reported by pyright. Without minimal tooling to ensure these
> don't gress, progress will be difficult.
> 
> [...]

Applied, thanks!

[1/5] Add development dependencies
      commit: 66fa5e85a5768f24687f806413a6ff3774d43f8c
[2/5] Avoid file descriptor leak
      commit: d99337f1aa6ec60398539d772c5eace25d665ac8
[3/5] Correctly type annotate generators
      commit: 2801becd386bf9b3c8947421f3ef20442def2a58
[4/5] Provide overloads for git_run_command
      commit: 846254faae45c20a1c0721d8c139c0b5d26a9bf2
[5/5] Add missing imports
      commit: 21904f395d068f0b957972d148fd5d326a904920

Best regards,
-- 
Konstantin Ryabitsev <konstantin@linuxfoundation.org>


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

* Re: [PATCH b4 0/5] Resolve some static typing errors
  2025-01-22 15:28 ` [PATCH b4 0/5] Resolve some static typing errors Konstantin Ryabitsev
@ 2025-01-22 15:36   ` Konstantin Ryabitsev
  2025-01-23 20:28     ` Tamir Duberstein
  0 siblings, 1 reply; 11+ messages in thread
From: Konstantin Ryabitsev @ 2025-01-22 15:36 UTC (permalink / raw)
  To: Kernel.org Tools, Tamir Duberstein

On Wed, Jan 22, 2025 at 10:28:45AM -0500, Konstantin Ryabitsev wrote:
> > This series slightly improves the quality of type annotations in the
> > project. It also adds development dependencies so they can more easily
> > be installed.
> > 
> > Unfortunately this is only a drop in the bucket; there are still 356
> > errors as reported by pyright. Without minimal tooling to ensure these
> > don't gress, progress will be difficult.
> > 
> > [...]
> 
> Applied, thanks!

Note, that I had to do a follow-up fix for the missing Generator type import.
I should have caught that during review, but missed it.

-K

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

* Re: [PATCH b4 0/5] Resolve some static typing errors
  2025-01-22 15:36   ` Konstantin Ryabitsev
@ 2025-01-23 20:28     ` Tamir Duberstein
  2025-02-06 17:53       ` Konstantin Ryabitsev
  0 siblings, 1 reply; 11+ messages in thread
From: Tamir Duberstein @ 2025-01-23 20:28 UTC (permalink / raw)
  To: Konstantin Ryabitsev; +Cc: Kernel.org Tools

On Wed, Jan 22, 2025 at 5:36 PM Konstantin Ryabitsev
<konstantin@linuxfoundation.org> wrote:
>
> On Wed, Jan 22, 2025 at 10:28:45AM -0500, Konstantin Ryabitsev wrote:
> > > This series slightly improves the quality of type annotations in the
> > > project. It also adds development dependencies so they can more easily
> > > be installed.
> > >
> > > Unfortunately this is only a drop in the bucket; there are still 356
> > > errors as reported by pyright. Without minimal tooling to ensure these
> > > don't gress, progress will be difficult.
> > >
> > > [...]
> >
> > Applied, thanks!
>
> Note, that I had to do a follow-up fix for the missing Generator type import.
> I should have caught that during review, but missed it.
>
> -K

Cheers, thanks for that.

Would you be interested in a Github Actions config that runs the
static analyzer? As I mentioned in the cover letter I think we'll want
a regression to stop so we can make steady progress. If you're open to
it, I'll work it up.

Thanks again for creating b4!

Tamir

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

* Re: [PATCH b4 0/5] Resolve some static typing errors
  2025-01-23 20:28     ` Tamir Duberstein
@ 2025-02-06 17:53       ` Konstantin Ryabitsev
  2025-02-06 18:23         ` Tamir Duberstein
  0 siblings, 1 reply; 11+ messages in thread
From: Konstantin Ryabitsev @ 2025-02-06 17:53 UTC (permalink / raw)
  To: Tamir Duberstein; +Cc: Kernel.org Tools

On Thu, Jan 23, 2025 at 10:28:21PM +0200, Tamir Duberstein wrote:
> > Note, that I had to do a follow-up fix for the missing Generator type import.
> > I should have caught that during review, but missed it.
> >
> > -K
> 
> Cheers, thanks for that.
> 
> Would you be interested in a Github Actions config that runs the
> static analyzer? As I mentioned in the cover letter I think we'll want
> a regression to stop so we can make steady progress. If you're open to
> it, I'll work it up.

I'm pretty reluctant to introduce a hard dependency on Github, because I'm
frankly pessimistic about Microsoft's dedication to free software in the
current political climate that is settling in the US. I would love to be
proven wrong, but at this point I'd prefer not to introduce any further
integrations with large US-hosted platforms.

-K

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

* Re: [PATCH b4 0/5] Resolve some static typing errors
  2025-02-06 17:53       ` Konstantin Ryabitsev
@ 2025-02-06 18:23         ` Tamir Duberstein
  0 siblings, 0 replies; 11+ messages in thread
From: Tamir Duberstein @ 2025-02-06 18:23 UTC (permalink / raw)
  To: Konstantin Ryabitsev; +Cc: Kernel.org Tools

On Thu, Feb 6, 2025 at 12:53 PM Konstantin Ryabitsev
<konstantin@linuxfoundation.org> wrote:
>
> On Thu, Jan 23, 2025 at 10:28:21PM +0200, Tamir Duberstein wrote:
> > > Note, that I had to do a follow-up fix for the missing Generator type import.
> > > I should have caught that during review, but missed it.
> > >
> > > -K
> >
> > Cheers, thanks for that.
> >
> > Would you be interested in a Github Actions config that runs the
> > static analyzer? As I mentioned in the cover letter I think we'll want
> > a regression to stop so we can make steady progress. If you're open to
> > it, I'll work it up.
>
> I'm pretty reluctant to introduce a hard dependency on Github, because I'm
> frankly pessimistic about Microsoft's dedication to free software in the
> current political climate that is settling in the US. I would love to be
> proven wrong, but at this point I'd prefer not to introduce any further
> integrations with large US-hosted platforms.
>
> -K

Makes sense. It wouldn't be difficult to put almost all the config in
an agnostic location, with a tiny bit of glue for Github Actions (or
whatever CI platform you prefer). Does that suit?

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

end of thread, other threads:[~2025-02-06 18:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-25 20:16 [PATCH b4 0/5] Resolve some static typing errors Tamir Duberstein
2024-10-25 20:16 ` [PATCH b4 1/5] Add development dependencies Tamir Duberstein
2024-10-25 20:16 ` [PATCH b4 2/5] Avoid file descriptor leak Tamir Duberstein
2024-10-25 20:16 ` [PATCH b4 3/5] Correctly type annotate generators Tamir Duberstein
2024-10-25 20:16 ` [PATCH b4 4/5] Provide overloads for git_run_command Tamir Duberstein
2024-10-25 20:16 ` [PATCH b4 5/5] Add missing imports Tamir Duberstein
2025-01-22 15:28 ` [PATCH b4 0/5] Resolve some static typing errors Konstantin Ryabitsev
2025-01-22 15:36   ` Konstantin Ryabitsev
2025-01-23 20:28     ` Tamir Duberstein
2025-02-06 17:53       ` Konstantin Ryabitsev
2025-02-06 18:23         ` Tamir Duberstein

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).