* [PATCH v4] fetch/hg: support submodules
@ 2015-05-12 3:25 Dan McGregor
2015-05-18 8:26 ` Robert Yang
0 siblings, 1 reply; 3+ messages in thread
From: Dan McGregor @ 2015-05-12 3:25 UTC (permalink / raw)
To: bitbake-devel
From: Daniel McGregor <daniel.mcgregor@vecima.com>
Use hg clone and hg pull to copy the source into the build
directory rather than taring up the cloned repository and
untarring in the destination.
This allows submodules to be cloned. While here, make the default
behaviour keep the hg scm data to match the behaviour of the git
fetcher.
Signed-off-by: Daniel McGregor <daniel.mcgregor@vecima.com>
---
lib/bb/fetch2/hg.py | 55 +++++++++++++++++++++++++++++++++++------------------
1 file changed, 36 insertions(+), 19 deletions(-)
diff --git a/lib/bb/fetch2/hg.py b/lib/bb/fetch2/hg.py
index 81592f6..6547cca 100644
--- a/lib/bb/fetch2/hg.py
+++ b/lib/bb/fetch2/hg.py
@@ -64,7 +64,9 @@ class Hg(FetchMethod):
elif not ud.revision:
ud.revision = self.latest_revision(ud, d)
- ud.localfile = data.expand('%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision), d)
+ ud.localfile = ud.moddir
+
+ ud.basecmd = data.getVar("FETCHCMD_hg", d, True) or "/usr/bin/env hg"
def need_update(self, ud, d):
revTag = ud.parm.get('rev', 'tip')
@@ -80,8 +82,6 @@ class Hg(FetchMethod):
command is "fetch", "update", "info"
"""
- basecmd = data.expand('${FETCHCMD_hg}', d)
-
proto = ud.parm.get('protocol', 'http')
host = ud.host
@@ -98,7 +98,7 @@ class Hg(FetchMethod):
hgroot = ud.user + "@" + host + ud.path
if command == "info":
- return "%s identify -i %s://%s/%s" % (basecmd, proto, hgroot, ud.module)
+ return "%s identify -i %s://%s/%s" % (ud.basecmd, proto, hgroot, ud.module)
options = [];
@@ -111,22 +111,22 @@ class Hg(FetchMethod):
if command == "fetch":
if ud.user and ud.pswd:
- cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
+ cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
else:
- cmd = "%s clone %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
+ cmd = "%s clone %s %s://%s/%s %s" % (ud.basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
elif command == "pull":
# do not pass options list; limiting pull to rev causes the local
# repo not to contain it and immediately following "update" command
# will crash
if ud.user and ud.pswd:
- cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (basecmd, ud.user, ud.pswd, proto)
+ cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto)
else:
- cmd = "%s pull" % (basecmd)
+ cmd = "%s pull" % (ud.basecmd)
elif command == "update":
if ud.user and ud.pswd:
- cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options))
+ cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options))
else:
- cmd = "%s update -C %s" % (basecmd, " ".join(options))
+ cmd = "%s update -C %s" % (ud.basecmd, " ".join(options))
else:
raise FetchError("Invalid hg command %s" % command, ud.url)
@@ -163,15 +163,6 @@ class Hg(FetchMethod):
logger.debug(1, "Running %s", updatecmd)
runfetchcmd(updatecmd, d)
- scmdata = ud.parm.get("scmdata", "")
- if scmdata == "keep":
- tar_flags = ""
- else:
- tar_flags = "--exclude '.hg' --exclude '.hgrags'"
-
- os.chdir(ud.pkgdir)
- runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.module), d, cleanup = [ud.localpath])
-
def supports_srcrev(self):
return True
@@ -191,3 +182,29 @@ class Hg(FetchMethod):
Return a unique key for the url
"""
return "hg:" + ud.moddir
+
+ def localpath(self, ud, d):
+ return ud.moddir
+
+ def unpack(self, ud, destdir, d):
+ """
+ Make a local clone or export for the url
+ """
+
+ revflag = "-r %s" % ud.revision
+ subdir = ud.parm.get("destsuffix", ud.module)
+ codir = "%s/%s" % (destdir, subdir)
+
+ scmdata = ud.parm.get("scmdata", "")
+ if scmdata != "nokeep":
+ if not os.access(os.path.join(codir, '.hg'), os.R_OK):
+ logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'")
+ runfetchcmd("%s init %s" % (ud.basecmd, codir), d)
+ logger.debug(2, "Unpack: updating source in '" + codir + "'")
+ os.chdir(codir)
+ runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d)
+ runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d)
+ else:
+ logger.debug(2, "Unpack: extracting source to '" + codir + "'")
+ os.chdir(ud.moddir)
+ runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d)
--
2.4.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v4] fetch/hg: support submodules
2015-05-12 3:25 [PATCH v4] fetch/hg: support submodules Dan McGregor
@ 2015-05-18 8:26 ` Robert Yang
2015-05-18 15:14 ` Dan McGregor
0 siblings, 1 reply; 3+ messages in thread
From: Robert Yang @ 2015-05-18 8:26 UTC (permalink / raw)
To: Dan McGregor, bitbake-devel
Hello,
This patches breaks the BB_GENERATE_MIRROR_TARBALLS, it doesn't generate
or untar the local tarball any more, the local tarball's mirror doesn't
work any more.
// Robert
On 05/12/2015 11:25 AM, Dan McGregor wrote:
> From: Daniel McGregor <daniel.mcgregor@vecima.com>
>
> Use hg clone and hg pull to copy the source into the build
> directory rather than taring up the cloned repository and
> untarring in the destination.
>
> This allows submodules to be cloned. While here, make the default
> behaviour keep the hg scm data to match the behaviour of the git
> fetcher.
>
> Signed-off-by: Daniel McGregor <daniel.mcgregor@vecima.com>
> ---
> lib/bb/fetch2/hg.py | 55 +++++++++++++++++++++++++++++++++++------------------
> 1 file changed, 36 insertions(+), 19 deletions(-)
>
> diff --git a/lib/bb/fetch2/hg.py b/lib/bb/fetch2/hg.py
> index 81592f6..6547cca 100644
> --- a/lib/bb/fetch2/hg.py
> +++ b/lib/bb/fetch2/hg.py
> @@ -64,7 +64,9 @@ class Hg(FetchMethod):
> elif not ud.revision:
> ud.revision = self.latest_revision(ud, d)
>
> - ud.localfile = data.expand('%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision), d)
> + ud.localfile = ud.moddir
> +
> + ud.basecmd = data.getVar("FETCHCMD_hg", d, True) or "/usr/bin/env hg"
>
> def need_update(self, ud, d):
> revTag = ud.parm.get('rev', 'tip')
> @@ -80,8 +82,6 @@ class Hg(FetchMethod):
> command is "fetch", "update", "info"
> """
>
> - basecmd = data.expand('${FETCHCMD_hg}', d)
> -
> proto = ud.parm.get('protocol', 'http')
>
> host = ud.host
> @@ -98,7 +98,7 @@ class Hg(FetchMethod):
> hgroot = ud.user + "@" + host + ud.path
>
> if command == "info":
> - return "%s identify -i %s://%s/%s" % (basecmd, proto, hgroot, ud.module)
> + return "%s identify -i %s://%s/%s" % (ud.basecmd, proto, hgroot, ud.module)
>
> options = [];
>
> @@ -111,22 +111,22 @@ class Hg(FetchMethod):
>
> if command == "fetch":
> if ud.user and ud.pswd:
> - cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
> + cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
> else:
> - cmd = "%s clone %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
> + cmd = "%s clone %s %s://%s/%s %s" % (ud.basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
> elif command == "pull":
> # do not pass options list; limiting pull to rev causes the local
> # repo not to contain it and immediately following "update" command
> # will crash
> if ud.user and ud.pswd:
> - cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (basecmd, ud.user, ud.pswd, proto)
> + cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto)
> else:
> - cmd = "%s pull" % (basecmd)
> + cmd = "%s pull" % (ud.basecmd)
> elif command == "update":
> if ud.user and ud.pswd:
> - cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options))
> + cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options))
> else:
> - cmd = "%s update -C %s" % (basecmd, " ".join(options))
> + cmd = "%s update -C %s" % (ud.basecmd, " ".join(options))
> else:
> raise FetchError("Invalid hg command %s" % command, ud.url)
>
> @@ -163,15 +163,6 @@ class Hg(FetchMethod):
> logger.debug(1, "Running %s", updatecmd)
> runfetchcmd(updatecmd, d)
>
> - scmdata = ud.parm.get("scmdata", "")
> - if scmdata == "keep":
> - tar_flags = ""
> - else:
> - tar_flags = "--exclude '.hg' --exclude '.hgrags'"
> -
> - os.chdir(ud.pkgdir)
> - runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.module), d, cleanup = [ud.localpath])
> -
> def supports_srcrev(self):
> return True
>
> @@ -191,3 +182,29 @@ class Hg(FetchMethod):
> Return a unique key for the url
> """
> return "hg:" + ud.moddir
> +
> + def localpath(self, ud, d):
> + return ud.moddir
> +
> + def unpack(self, ud, destdir, d):
> + """
> + Make a local clone or export for the url
> + """
> +
> + revflag = "-r %s" % ud.revision
> + subdir = ud.parm.get("destsuffix", ud.module)
> + codir = "%s/%s" % (destdir, subdir)
> +
> + scmdata = ud.parm.get("scmdata", "")
> + if scmdata != "nokeep":
> + if not os.access(os.path.join(codir, '.hg'), os.R_OK):
> + logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'")
> + runfetchcmd("%s init %s" % (ud.basecmd, codir), d)
> + logger.debug(2, "Unpack: updating source in '" + codir + "'")
> + os.chdir(codir)
> + runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d)
> + runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d)
> + else:
> + logger.debug(2, "Unpack: extracting source to '" + codir + "'")
> + os.chdir(ud.moddir)
> + runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d)
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v4] fetch/hg: support submodules
2015-05-18 8:26 ` Robert Yang
@ 2015-05-18 15:14 ` Dan McGregor
0 siblings, 0 replies; 3+ messages in thread
From: Dan McGregor @ 2015-05-18 15:14 UTC (permalink / raw)
To: Robert Yang; +Cc: bitbake-devel
[-- Attachment #1: Type: text/plain, Size: 6962 bytes --]
Thanks for the heads up, I'll poke at it this evening.
On 18 May 2015 1:26 am, "Robert Yang" <liezhi.yang@windriver.com> wrote:
>
> Hello,
>
> This patches breaks the BB_GENERATE_MIRROR_TARBALLS, it doesn't generate
> or untar the local tarball any more, the local tarball's mirror doesn't
> work any more.
>
> // Robert
>
> On 05/12/2015 11:25 AM, Dan McGregor wrote:
>
>> From: Daniel McGregor <daniel.mcgregor@vecima.com>
>>
>> Use hg clone and hg pull to copy the source into the build
>> directory rather than taring up the cloned repository and
>> untarring in the destination.
>>
>> This allows submodules to be cloned. While here, make the default
>> behaviour keep the hg scm data to match the behaviour of the git
>> fetcher.
>>
>> Signed-off-by: Daniel McGregor <daniel.mcgregor@vecima.com>
>> ---
>> lib/bb/fetch2/hg.py | 55
>> +++++++++++++++++++++++++++++++++++------------------
>> 1 file changed, 36 insertions(+), 19 deletions(-)
>>
>> diff --git a/lib/bb/fetch2/hg.py b/lib/bb/fetch2/hg.py
>> index 81592f6..6547cca 100644
>> --- a/lib/bb/fetch2/hg.py
>> +++ b/lib/bb/fetch2/hg.py
>> @@ -64,7 +64,9 @@ class Hg(FetchMethod):
>> elif not ud.revision:
>> ud.revision = self.latest_revision(ud, d)
>>
>> - ud.localfile = data.expand('%s_%s_%s_%s.tar.gz' %
>> (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'),
>> ud.revision), d)
>> + ud.localfile = ud.moddir
>> +
>> + ud.basecmd = data.getVar("FETCHCMD_hg", d, True) or
>> "/usr/bin/env hg"
>>
>> def need_update(self, ud, d):
>> revTag = ud.parm.get('rev', 'tip')
>> @@ -80,8 +82,6 @@ class Hg(FetchMethod):
>> command is "fetch", "update", "info"
>> """
>>
>> - basecmd = data.expand('${FETCHCMD_hg}', d)
>> -
>> proto = ud.parm.get('protocol', 'http')
>>
>> host = ud.host
>> @@ -98,7 +98,7 @@ class Hg(FetchMethod):
>> hgroot = ud.user + "@" + host + ud.path
>>
>> if command == "info":
>> - return "%s identify -i %s://%s/%s" % (basecmd, proto,
>> hgroot, ud.module)
>> + return "%s identify -i %s://%s/%s" % (ud.basecmd, proto,
>> hgroot, ud.module)
>>
>> options = [];
>>
>> @@ -111,22 +111,22 @@ class Hg(FetchMethod):
>>
>> if command == "fetch":
>> if ud.user and ud.pswd:
>> - cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (basecmd, ud.user,
>> ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
>> + cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (ud.basecmd, ud.user,
>> ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
>> else:
>> - cmd = "%s clone %s %s://%s/%s %s" % (basecmd, "
>> ".join(options), proto, hgroot, ud.module, ud.module)
>> + cmd = "%s clone %s %s://%s/%s %s" % (ud.basecmd, "
>> ".join(options), proto, hgroot, ud.module, ud.module)
>> elif command == "pull":
>> # do not pass options list; limiting pull to rev causes the
>> local
>> # repo not to contain it and immediately following "update"
>> command
>> # will crash
>> if ud.user and ud.pswd:
>> - cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" pull" % (basecmd, ud.user, ud.pswd, proto)
>> + cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto)
>> else:
>> - cmd = "%s pull" % (basecmd)
>> + cmd = "%s pull" % (ud.basecmd)
>> elif command == "update":
>> if ud.user and ud.pswd:
>> - cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" update -C %s" % (basecmd, ud.user, ud.pswd,
>> proto, " ".join(options))
>> + cmd = "%s --config auth.default.prefix=* --config
>> auth.default.username=%s --config auth.default.password=%s --config
>> \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd,
>> proto, " ".join(options))
>> else:
>> - cmd = "%s update -C %s" % (basecmd, " ".join(options))
>> + cmd = "%s update -C %s" % (ud.basecmd, " ".join(options))
>> else:
>> raise FetchError("Invalid hg command %s" % command, ud.url)
>>
>> @@ -163,15 +163,6 @@ class Hg(FetchMethod):
>> logger.debug(1, "Running %s", updatecmd)
>> runfetchcmd(updatecmd, d)
>>
>> - scmdata = ud.parm.get("scmdata", "")
>> - if scmdata == "keep":
>> - tar_flags = ""
>> - else:
>> - tar_flags = "--exclude '.hg' --exclude '.hgrags'"
>> -
>> - os.chdir(ud.pkgdir)
>> - runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath,
>> ud.module), d, cleanup = [ud.localpath])
>> -
>> def supports_srcrev(self):
>> return True
>>
>> @@ -191,3 +182,29 @@ class Hg(FetchMethod):
>> Return a unique key for the url
>> """
>> return "hg:" + ud.moddir
>> +
>> + def localpath(self, ud, d):
>> + return ud.moddir
>> +
>> + def unpack(self, ud, destdir, d):
>> + """
>> + Make a local clone or export for the url
>> + """
>> +
>> + revflag = "-r %s" % ud.revision
>> + subdir = ud.parm.get("destsuffix", ud.module)
>> + codir = "%s/%s" % (destdir, subdir)
>> +
>> + scmdata = ud.parm.get("scmdata", "")
>> + if scmdata != "nokeep":
>> + if not os.access(os.path.join(codir, '.hg'), os.R_OK):
>> + logger.debug(2, "Unpack: creating new hg repository in
>> '" + codir + "'")
>> + runfetchcmd("%s init %s" % (ud.basecmd, codir), d)
>> + logger.debug(2, "Unpack: updating source in '" + codir + "'")
>> + os.chdir(codir)
>> + runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d)
>> + runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d)
>> + else:
>> + logger.debug(2, "Unpack: extracting source to '" + codir +
>> "'")
>> + os.chdir(ud.moddir)
>> + runfetchcmd("%s archive -t files %s %s" % (ud.basecmd,
>> revflag, codir), d)
>>
>>
[-- Attachment #2: Type: text/html, Size: 8800 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-05-18 15:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-12 3:25 [PATCH v4] fetch/hg: support submodules Dan McGregor
2015-05-18 8:26 ` Robert Yang
2015-05-18 15:14 ` Dan McGregor
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.