[bitbake-devel] [PATCH v2] fetch2/gitsm.py: Change the URI construction logic

Mark Hatle mark.hatle at windriver.com
Tue Jan 8 21:24:35 UTC 2019


On 1/8/19 3:19 PM, Mark Hatle wrote:
> Upon further work, I'm getting this:
> 
> [git-submodule-test]$ git submodule add git at git.yoctoproject.org/bitbake-gitsm-test3
> repo URL: 'git at git.yoctoproject.org/bitbake-gitsm-test3' must be absolute or
> begin with ./|../
> 
> This tells me that the format mentioned below is not actually valid.
> 
> I'm getting the message from git versions:
> 
> git version 1.8.3.1
> git version 2.16.0.rc2
> 
> If I change it to the following, it does work -- and this is the format we're
> already expecting...
> 
> git submodule add git at git.yoctoproject.org:/bitbake-gitsm-test3
> 
> I'll try to manually modify the .gitmodules for this format, but technically
> speaking it doesn't appear to be legal.

I did finally try it.  Without the ':' git is looking at the local hard disk and
assuming that is a path and failing:


fatal: repository 'git at git.yoctoproject.org/bitbake-gitsm-test3' does not exist
Clone of 'git at git.yoctoproject.org/bitbake-gitsm-test3' into submodule path
'bitbake-gitsm-test3' failed

So I'm not sure how the stuff below is even valid.  I need a reproducer to be
able to code for it and test things.  Until then, everything I see says that
it's one of three formats:

proto://user:pass@host/path  (url style)
user at host:path (ssh style)
/path or ./path or ../path  (local path)

--Mark

> --Mark
> 
> On 1/8/19 10:35 AM, Linus Ziegert wrote:
>> Hello people,
>>
>> I am working as well on fetch2/gitsm.py. We have a privat repo with submodules
>> but the current gitsm.py does not support ssh.
>>
>> I tested the patch by Krystian but it did not worked for me. I got the following
>> ERROR:
>>
>>     ERROR: <recipe> do_fetch: The URL:
>>     'gitsm:git at github.com/<user>/<submodule_name1>.git;protocol=ssh;name=<submodule_name2>;bareclone=1;nocheckout=1;nobranch=1'
>>     is invalid and cannot be interpreted
>>
>>
>> The .gitmodules file used looks like this:
>>
>> [submodule "submodule_name1"]
>> path = submodule_name1
>>         url = git at github.com/<user>/<submodule_name1>.git 
>> [submodule "submodule_name2"]
>> path = submodule_name2
>>         url = git at github.com/<user>/<submodule_name2>.git 
>>
>> Attached you find my proposal.
>>
>>
>> Am Di., 8. Jan. 2019 um 08:48 Uhr schrieb Krystian Garliński
>> <krystian.garlinski at comarch.pl>:
>>
>>     Git allows to use both the proper URI's and SCP-like short style syntax
>>     for the SSH protocol. This commit changes construction logic to detect which
>>     one of the two is used in the submodule specification and to build a correct
>>     URI out of it.
>>
>>     Signed-off-by: Krystian Garliński <krystian.garlinski at comarch.pl
>>     <mailto:krystian.garlinski at comarch.pl>>
>>     ---
>>      lib/bb/fetch2/gitsm.py | 16 ++++++++++++++--
>>      1 file changed, 14 insertions(+), 2 deletions(-)
>>
>>     diff --git a/lib/bb/fetch2/gitsm.py b/lib/bb/fetch2/gitsm.py
>>     index 35729dbc..95d5f652 100644
>>     --- a/lib/bb/fetch2/gitsm.py
>>     +++ b/lib/bb/fetch2/gitsm.py
>>     @@ -32,6 +32,7 @@ NOTE: Switching a SRC_URI from "git://" to "gitsm://"
>>     requires a clean of your r
>>      import os
>>      import bb
>>      import copy
>>     +import re
>>      from   bb.fetch2.git import Git
>>      from   bb.fetch2 import runfetchcmd
>>      from   bb.fetch2 import logger
>>     @@ -39,6 +40,8 @@ from   bb.fetch2 import Fetch
>>      from   bb.fetch2 import BBFetchException
>>
>>      class GitSM(Git):
>>     +    scp_regex = re.compile(r'^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.+)$')
>>     +
>>          def supports(self, ud, d):
>>              """
>>              Check to see if a given url can be fetched with git.
>>     @@ -88,8 +91,17 @@ class GitSM(Git):
>>                  module_hash = module_hash.split()[2]
>>
>>                  # Build new SRC_URI
>>     -            proto = uris[module].split(':', 1)[0]
>>     -            url = uris[module].replace('%s:' % proto, 'gitsm:', 1)
>>     +            uri = uris[module]
>>     +            match = GitSM.scp_regex.match(uri)
>>     +
>>     +            if match:
>>     +                # this URI follows the short SCP-like syntax
>>     +                url = 'gitsm://{}@{}/{}'.format(match.group(1),
>>     match.group(2), match.group(3))
>>     +                proto = 'ssh'
>>     +            else:
>>     +                proto = uri.split(':', 1)[0]
>>     +                url = 'gitsm' + uri[len(proto):]
>>     +
>>                  url += ';protocol=%s' % proto
>>                  url += ";name=%s" % module
>>                  url += ";bareclone=1;nocheckout=1;nobranch=1"
>>     -- 
>>     2.19.1
>>
>>     -- 
>>     _______________________________________________
>>     bitbake-devel mailing list
>>     bitbake-devel at lists.openembedded.org
>>     <mailto:bitbake-devel at lists.openembedded.org>
>>     http://lists.openembedded.org/mailman/listinfo/bitbake-devel
>>
>>
>>
>> -- 
>>
>> Cheers, 
>> Linus
>>
> 



More information about the bitbake-devel mailing list