[Buildroot] [autobuild v2 3/3] autobuild-run: allow to change default git uri and branch on the command line

Samuel Martin s.martin49 at gmail.com
Thu Apr 30 05:20:29 UTC 2015


Hi Andre, all,

Thanks a lot for your review.

On Thu, Apr 30, 2015 at 12:25 AM, André Erdmann <dywi at mailerd.de> wrote:
> 2015/4/29 Samuel Martin <s.martin49 at gmail.com>:
>> This is useful when hacking the autobuild-run script on some specific
>> Buildroot tree, or to run the script with custom tree.
>>
>> Result upload is automatically disable when one of these setting are not
>> the default ones.
>>
>> Cc: Matt Weber <Matthew.Weber at rockwellcollins.com>
>> Cc: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
>> Signed-off-by: Samuel Martin <s.martin49 at gmail.com>
>>
>> ---
>> changes v1->v2:
>> - use cmdline options instead of env. vars.
>> ---
>>  scripts/autobuild-run | 41 +++++++++++++++++++++++++++++++++--------
>>  1 file changed, 33 insertions(+), 8 deletions(-)
>>
>> diff --git a/scripts/autobuild-run b/scripts/autobuild-run
>> index 01e3265..427d333 100755
>> --- a/scripts/autobuild-run
>> +++ b/scripts/autobuild-run
>> @@ -57,6 +57,9 @@
>>
>>  from __future__ import print_function
>>
>> +BUILDROOT_GIT_REPO_URI = "git://git.busybox.net/buildroot"
>> +BUILDROOT_GIT_BRANCH = "master"
>> +
>>  # Don't tell docopt about the defaults, as it would not allow the following
>>  # priority hierarchy for arguments: command-line > config file > defaults
>>  defaults = {
>> @@ -64,6 +67,8 @@ defaults = {
>>      '--njobs': '1',
>>      '--submitter': 'N/A',
>>      '--make-opts': '',
>> +    '--br-git-uri': BUILDROOT_GIT_REPO_URI,
>> +    '--br-git-branch': BUILDROOT_GIT_BRANCH,
>>  }
>>
>>  doc = """autobuild-run - run Buildroot autobuilder
>> @@ -84,6 +89,14 @@ Options:
>>    --make-opts OPTSTRING          string of extra options to pass to Buildroot
>>                                   make, such as specific command wrappers
>>                                   [default: ]
>> +  --br-git-uri GIT_REPO_URI      Buildroot git repository uri used from the instances.
>> +                                 When an alternative git repo uri is set, result uplaod
>> +                                 is disabled.
>> +                                 [default: the official Buildroot repository]
>
> Don't add "[default: <sth>]" here - <sth> will end up in the config ("args" variable),
> and has higher priority than any other configuration method (config file, defaults).
>
> The result is that if you run autobuild-run without "--br-git-uri ...", it will try
> to fetch from "the official Buildroot repository" and not "git://..." (BUILDROOT_GIT_REPO_URI).
>

So, we cannot document the defaults in the doc if we also want to make
them available in the config file... :-/

So the options are:
- either we correctly set the default git uri/branch in the doc
string, but we cannot set them via the config file;
- or we remove them from the doc, and we can still set them via the config file.
Inputs on this point from actual users will be helpful.

>> +  --br-git-branch GIT_BRANCH     Buildroot git branch used for the instance
>> +                                 When an alternative git branch is set, result uplaod
>> +                                 is disabled.
>> +                                 [default: master]
>
> The same applies here.
>
>>    -c, --config CONFIG            path to configuration file
>>
>>  Format of the configuration file:
>> @@ -98,6 +111,8 @@ Format of the configuration file:
>>     http-login = <value>
>>     http-password = <value>
>>     submitter = <value>
>> +   br-git-uri = <value>
>> +   br-git-branch = <value>
>>
>>  Default values for the arguments are:
>>
>> @@ -296,17 +311,17 @@ def prepare_build(**kwargs):
>>
>>      # Clone Buildroot. This only happens if the source directory
>>      # didn't exist already.
>> -    srcdir = os.path.join(idir, "buildroot")
>> +    srcdir = os.path.abspath(os.path.join(idir, "buildroot"))
>>      if not os.path.exists(srcdir):
>> -        ret = subprocess.call(["git", "clone", "git://git.busybox.net/buildroot", srcdir],
>> +        ret = subprocess.call(["git", "clone", "-b", kwargs['br_git_branch'],
>> +                              kwargs['br_git_repo_uri'], srcdir],
>>                                stdout=log, stderr=log)
>>          if ret != 0:
>>              log_write(log, "ERROR: could not clone Buildroot sources")
>>              return -1
>>
>>      # Update the Buildroot sources.
>> -    abssrcdir = os.path.abspath(srcdir)
>> -    ret = subprocess.call(["git", "pull"], cwd=abssrcdir, stdout=log, stderr=log)
>> +    ret = subprocess.call(["git", "pull"], cwd=srcdir, stdout=log, stderr=log)
>
> --br-git-{uri,branch} are ignored if srcdir already exists,
> which should be documented or changed code-wise.
>
> I'd add a note to the help message for now
> ("applies to new instance directories" or so).

I figured that too, but forgot to mention it :-/
I also prefer handling this in another patch ;-)

Another solution (not tested, btw) could be emptying the instance
directories at the beginning of the script, how about this?

>
>
>>      if ret != 0:
>>          log_write(log, "ERROR: could not pull Buildroot sources")
>>          return -1
>> @@ -794,14 +809,22 @@ def main():
>>
>>      # http_login/password could theoretically be allowed as empty, so check
>>      # explicitly on None.
>> -    upload = (args['--http-login'] is not None) \
>> -             and (args['--http-password'] is not None)
>> +    upload = True
>> +    if args['--http-login'] is None or args['--http-password'] is None:
>> +        print("WARN: due to the lack of http login/password details, results will not be submitted")
>> +        upload = False
>> +    # disable result upload when using alternative git repository and/or branch
>> +    if args['--br-git-uri'] != BUILDROOT_GIT_REPO_URI \
>> +            or args['--br-git-branch'] != BUILDROOT_GIT_BRANCH:
>> +        print("WARN: using alternative git repository and/or branch, results will not be submitted")
>> +        upload = False
>> +
>>      if upload:
>>          sysinfo.needed_progs.append("curl")
>>      else:
>> -        print("WARN: due to the lack of http login/password details, results will not be submitted")
>>          print("WARN: tarballs of results will be kept locally only")
>>
>> +
>>      if not sysinfo.check_requirements():
>>          sys.exit(1)
>>
>> @@ -844,7 +867,9 @@ def main():
>>                  submitter = args['--submitter'],
>>                  make_opts = args['--make-opts'],
>>                  upload = upload,
>> -                buildpid = buildpid
>> +                buildpid = buildpid,
>> +                br_git_repo_uri = args['--br-git-uri'],
>> +                br_git_branch = args['--br-git-branch']
>>              ))
>>          p.start()
>>          processes.append(p)
>>
>
> --
> André
>

Regards,

-- 
Samuel



More information about the buildroot mailing list