fetch2/git: Simplify the validation of SHA-1 revisions

Message ID 20220414154207.25999-1-pkj@axis.com
State Accepted, archived
Commit 98cad8636e9c82bc40a033bb83633ec994758eb0
Headers show
Series fetch2/git: Simplify the validation of SHA-1 revisions | expand

Commit Message

Peter Kjellerstedt April 14, 2022, 3:42 p.m. UTC
Also correct two comments.

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---
 bitbake/lib/bb/fetch2/git.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

Richard Purdie April 14, 2022, 4:27 p.m. UTC | #1
On Thu, 2022-04-14 at 17:42 +0200, Peter Kjellerstedt wrote:
> Also correct two comments.
> 
> Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
> ---
>  bitbake/lib/bb/fetch2/git.py | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index b3eb8248d0..90104ac383 100644
> --- a/bitbake/lib/bb/fetch2/git.py
> +++ b/bitbake/lib/bb/fetch2/git.py
> @@ -248,9 +248,10 @@ class Git(FetchMethod):
>  
>          ud.setup_revisions(d)
>  
> +        sha1_re = re.compile(r'^[0-9a-f]{40}$')


re.compile() is expensive so in general we should cache that or do it at the
module top level...


Cheers,

Richard
Peter Kjellerstedt April 14, 2022, 8:20 p.m. UTC | #2
> -----Original Message-----
> From: Richard Purdie <richard.purdie@linuxfoundation.org>
> Sent: den 14 april 2022 18:28
> To: Peter Kjellerstedt <peter.kjellerstedt@axis.com>; bitbake-
> devel@lists.openembedded.org
> Subject: Re: [bitbake-devel] [PATCH] fetch2/git: Simplify the validation
> of SHA-1 revisions
> 
> On Thu, 2022-04-14 at 17:42 +0200, Peter Kjellerstedt wrote:
> > Also correct two comments.
> >
> > Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
> > ---
> >  bitbake/lib/bb/fetch2/git.py | 11 ++++++-----
> >  1 file changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> > index b3eb8248d0..90104ac383 100644
> > --- a/bitbake/lib/bb/fetch2/git.py
> > +++ b/bitbake/lib/bb/fetch2/git.py
> > @@ -248,9 +248,10 @@ class Git(FetchMethod):
> >
> >          ud.setup_revisions(d)
> >
> > +        sha1_re = re.compile(r'^[0-9a-f]{40}$')
> 
> re.compile() is expensive so in general we should cache that or do it at
> the module top level...

Sure, I can move it to the module top level.

I based the use of re.compile() in that class on how it was done in 
the _revision_key() function. Do you want me to move its slash_re as 
well?

> Cheers,
> 
> Richard

//Peter

Patch

diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index b3eb8248d0..90104ac383 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -248,9 +248,10 @@  class Git(FetchMethod):
 
         ud.setup_revisions(d)
 
+        sha1_re = re.compile(r'^[0-9a-f]{40}$')
         for name in ud.names:
-            # Ensure anything that doesn't look like a sha256 checksum/revision is translated into one
-            if not ud.revisions[name] or len(ud.revisions[name]) != 40  or (False in [c in "abcdef0123456789" for c in ud.revisions[name]]):
+            # Ensure any revision that doesn't look like a SHA-1 is translated into one
+            if not sha1_re.match(ud.revisions[name] or ''):
                 if ud.revisions[name]:
                     ud.unresolvedrev[name] = ud.revisions[name]
                 ud.revisions[name] = self.latest_revision(ud, d, name)
@@ -259,10 +260,10 @@  class Git(FetchMethod):
         if gitsrcname.startswith('.'):
             gitsrcname = gitsrcname[1:]
 
-        # for rebaseable git repo, it is necessary to keep mirror tar ball
-        # per revision, so that even the revision disappears from the
+        # For a rebaseable git repo, it is necessary to keep a mirror tar ball
+        # per revision, so that even if the revision disappears from the
         # upstream repo in the future, the mirror will remain intact and still
-        # contains the revision
+        # contain the revision
         if ud.rebaseable:
             for name in ud.names:
                 gitsrcname = gitsrcname + '_' + ud.revisions[name]