[poky] [PATCH 10/11] bb.fetch2: add git unpack

Bruce Ashfield bruce.ashfield at gmail.com
Wed Jan 26 07:01:28 PST 2011


On Wed, Jan 26, 2011 at 3:25 AM, Yu Ke <ke.yu at intel.com> wrote:
> On Jan 25, 23:43, Bruce Ashfield wrote:
>> On Tue, Jan 25, 2011 at 11:41 PM, Yu Ke <ke.yu at intel.com> wrote:
>> > "git clone" is my first try when cooking the patch, unfortunately I meet one issue here. the git clone target dir is ${WORKDIR}, while git requires the target dir to be empty, which is not true for ${WORKDIR}, so git clone will fail. so I fall back to cp approach.
>> >
>> > But I agree that git clone is better. So I'd like use this apprach: git clone to {WORKDIR}/git/, and modify the kernel-yocto.bbclass:do_kernel_checkout() to use the new layout.
>> > I will revise the patch accordingly for review.
>> > Regards
>> > Ke
>>
>> This may be problematic. The kernel checkout needs to be done in a very
>> specific way. After the clone, you must have all branches local (no origin/)
>> and in the 'linux' directory. There are other tools that depend on
>> this particular
>> layout.
>>
>> The most efficient way to do this has proven to be to do a bare clone
>> and then forcibly convert it to a non-bare clone. That gets you the
>> instantiation
>> and local branches in a single clone + minor fix ups to the directory.
>>
>> Just some things to consider, I'll wait to see the patches before commenting
>> further.
>>
>> Bruce
>
> Bruce, thanks for the comments. You are right. I realize that kernel checkout need to output a specific layout, so I only change the input layout of kernel checkout. more specificly, change the input dir from ${WORKDIR}/.git to ${WORKDIR}/git/.git. and the output layout is unchanged.
>
> please see if the revised patch works for you:

I haven't actually tried the patch, but just by having a look at it, it looks
fine. No harm in the directory shuffling at all, and it makes more sense
this way.

Cheers,

Bruce

>
> git unpack patch - http://git.pokylinux.org/cgit/cgit.cgi/poky-contrib/commit/?h=kyu3/git-unpack&id=e654e3d75550282c4d112f1050465cde850c93e9
>
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index 08daa20..eadbf33 100644
> --- a/bitbake/lib/bb/fetch2/git.py
> +++ b/bitbake/lib/bb/fetch2/git.py
> @@ -194,6 +194,31 @@ class Git(Fetch):
>         os.chdir(ud.clonedir)
>         bb.utils.prunedir(codir)
>
> +    def unpack(self, ud, destdir, d):
> +        """ unpack the downloaded src to destdir"""
> +
> +        subdir = ud.parm.get("subpath", "")
> +        if subdir != "":
> +            readpathspec = ":%s" % (subdir)
> +        else:
> +            readpathspec = ""
> +
> +        destdir = os.path.join(destdir, "git/")
> +        if os.path.exists(destdir):
> +            bb.utils.prunedir(destdir)
> +
> +        if 'fullclone' in ud.parm:
> +            runfetchcmd("git clone -l -n %s %s" % (ud.clonedir, destdir), d)
> +            if os.path.exists("%s/.git/refs/remotes/origin" % ud.clonedir):
> +                runfetchcmd("cp -af %s/.git/refs/remotes/origin/* %s/.git/refs/remotes/origin/" %(ud.clonedir, destdir), d)
> +            if os.path.exists("%s/.git/packed-refs" % ud.clonedir):
> +                runfetchcmd("cp -af %s/.git/packed-refs %s/.git/" %(ud.clonedir, destdir), d)
> +        else:
> +            os.chdir(ud.clonedir)
> +            runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.tag, readpathspec), d)
> +            runfetchcmd("%s checkout-index -q -f --prefix=%s -a" % (ud.basecmd, destdir), d)
> +        return True
> +
>     def supports_srcrev(self):
>         return True
>
> kernel checkout patch - http://git.pokylinux.org/cgit/cgit.cgi/poky-contrib/commit/?h=kyu3/git-unpack&id=b1916da1f1a8b7e3c4b50d540918aa72be704d9a
>
> diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
> index 8479b39..ca1fb15 100644
> --- a/meta/classes/kernel-yocto.bbclass
> +++ b/meta/classes/kernel-yocto.bbclass
> @@ -89,11 +89,11 @@ do_patch() {
>  }
>
>  do_kernel_checkout() {
> -       if [ -d ${WORKDIR}/.git/refs/remotes/origin ]; then
> +       if [ -d ${WORKDIR}/git/.git/refs/remotes/origin ]; then
>                echo "Fixing up git directory for ${LINUX_KERNEL_TYPE}/${KMACHINE}"
>                rm -rf ${S}
>                mkdir ${S}
> -               mv ${WORKDIR}/.git ${S}
> +               mv ${WORKDIR}/git/.git ${S}
>
>                if [ -e ${S}/.git/packed-refs ]; then
>                        cd ${S}
>
>
>>
>> >
>> >>
>> >> >
>> >> > The idea would be one central checkout with the references in and then
>> >> > the subcomponents would all just reference the one local clone saving
>> >> > diskspace and time.
>> >>
>> >> Absolutely. And if someone does something to the central checkout,
>> >> minor errors ensue, but that can be recovered as well.
>> >>
>> >> Cheers,
>> >>
>> >> Bruce
>> >>
>> >> >
>> >> > Cheers,
>> >> >
>> >> > Richard
>> >> >
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > poky mailing list
>> >> > poky at yoctoproject.org
>> >> > https://lists.yoctoproject.org/listinfo/poky
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> "Thou shalt not follow the NULL pointer, for chaos and madness await
>> >> thee at its end"
>> >> _______________________________________________
>> >> poky mailing list
>> >> poky at yoctoproject.org
>> >> https://lists.yoctoproject.org/listinfo/poky
>> >
>>
>>
>>
>> --
>> "Thou shalt not follow the NULL pointer, for chaos and madness await
>> thee at its end"
>> _______________________________________________
>> poky mailing list
>> poky at yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/poky
>



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end"



More information about the poky mailing list