[bitbake-devel] [PATCH] fetch2: Remove unecessary code for git submodules

Paul Eggleton paul.eggleton at linux.intel.com
Mon Jul 6 15:38:14 UTC 2015


Hi Felipe,

On Monday 06 July 2015 16:13:58 eu at felipetonello.com wrote:
> From: "Felipe F. Tonello" <eu at felipetonello.com>
> 
> Only do git submodule update after upack, otherwise the branch and commit id
> will be ignored, causing to run git submodules on a wrong ref.
> 
> Since .gitmodules file is used to check if there is any submodule, we don't
> need to worry about copying .git/modules directory into the unpacked source
> tree.
> 
> Signed-off-by: Felipe F. Tonello <eu at felipetonello.com>
> ---
>  lib/bb/fetch2/gitsm.py | 73
> -------------------------------------------------- 1 file changed, 73
> deletions(-)
> 
> diff --git a/lib/bb/fetch2/gitsm.py b/lib/bb/fetch2/gitsm.py
> index c125cff..405cd87 100644
> --- a/lib/bb/fetch2/gitsm.py
> +++ b/lib/bb/fetch2/gitsm.py
> @@ -31,10 +31,8 @@ NOTE: Switching a SRC_URI from "git://" to "gitsm://"
> requires a clean of your r
> 
>  import os
>  import bb
> -from   bb    import data
>  from   bb.fetch2.git import Git
>  from   bb.fetch2 import runfetchcmd
> -from   bb.fetch2 import logger
> 
>  class GitSM(Git):
>      def supports(self, ud, d):
> @@ -52,85 +50,14 @@ class GitSM(Git):
>                  pass
>          return False
> 
> -    def _set_relative_paths(self, repopath):
> -        """
> -        Fix submodule paths to be relative instead of absolute,
> -        so that when we move the repo it doesn't break
> -        (In Git 1.7.10+ this is done automatically)
> -        """
> -        submodules = []
> -        with open(os.path.join(repopath, '.gitmodules'), 'r') as f:
> -            for line in f.readlines():
> -                if line.startswith('[submodule'):
> -                    submodules.append(line.split('"')[1])
> -
> -        for module in submodules:
> -            repo_conf = os.path.join(repopath, module, '.git')
> -            if os.path.exists(repo_conf):
> -                with open(repo_conf, 'r') as f:
> -                    lines = f.readlines()
> -                newpath = ''
> -                for i, line in enumerate(lines):
> -                    if line.startswith('gitdir:'):
> -                        oldpath = line.split(': ')[-1].rstrip()
> -                        if oldpath.startswith('/'):
> -                            newpath = '../' * (module.count('/') + 1) +
> '.git/modules/' + module -                            lines[i] = 'gitdir:
> %s\n' % newpath
> -                            break
> -                if newpath:
> -                    with open(repo_conf, 'w') as f:
> -                        for line in lines:
> -                            f.write(line)
> -
> -            repo_conf2 = os.path.join(repopath, '.git', 'modules', module,
> 'config') -            if os.path.exists(repo_conf2):
> -                with open(repo_conf2, 'r') as f:
> -                    lines = f.readlines()
> -                newpath = ''
> -                for i, line in enumerate(lines):
> -                    if line.lstrip().startswith('worktree = '):
> -                        oldpath = line.split(' = ')[-1].rstrip()
> -                        if oldpath.startswith('/'):
> -                            newpath = '../' * (module.count('/') + 3) +
> module -                            lines[i] = '\tworktree = %s\n' %
> newpath -                            break
> -                if newpath:
> -                    with open(repo_conf2, 'w') as f:
> -                        for line in lines:
> -                            f.write(line)
> -
> -    def update_submodules(self, ud, d):
> -        # We have to convert bare -> full repo, do the submodule bit, then
> convert back -        tmpclonedir = ud.clonedir + ".tmp"
> -        gitdir = tmpclonedir + os.sep + ".git"
> -        bb.utils.remove(tmpclonedir, True)
> -        os.mkdir(tmpclonedir)
> -        os.rename(ud.clonedir, gitdir)
> -        runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*true/bare
> = false/'", d) -        os.chdir(tmpclonedir)
> -        runfetchcmd(ud.basecmd + " reset --hard", d)
> -        runfetchcmd(ud.basecmd + " submodule init", d)
> -        runfetchcmd(ud.basecmd + " submodule update", d)
> -        self._set_relative_paths(tmpclonedir)
> -        runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*false/bare
> = true/'", d) -        os.rename(gitdir, ud.clonedir,)
> -        bb.utils.remove(tmpclonedir, True)
> -
>      def download(self, ud, d):
>          Git.download(self, ud, d)
> 
> -        os.chdir(ud.clonedir)
> -        submodules = self.uses_submodules(ud, d)
> -        if submodules:
> -            self.update_submodules(ud, d)
> -
>      def unpack(self, ud, destdir, d):
>          Git.unpack(self, ud, destdir, d)
> -
>          os.chdir(ud.destdir)
>          submodules = self.uses_submodules(ud, d)
>          if submodules:
> -            runfetchcmd("cp -r " + ud.clonedir + "/modules " + ud.destdir +
> "/.git/", d) runfetchcmd(ud.basecmd + " submodule init", d)
>              runfetchcmd(ud.basecmd + " submodule update", d)

So, I might have been the one that implemented the _set_relative_paths() part 
of this - I don't remember the full details, however the comment suggests that 
this is necessary for older versions of git. If we wish to remain compatible 
with those then we still need this code surely?

Here's the commit that added it:

http://cgit.openembedded.org/bitbake/commit/?id=e700d5a41deed4ee837465af526ed30c8a579933

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre



More information about the bitbake-devel mailing list