autobuild 1.21.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +25 -0
  3. data/.github/workflows/test.yml +30 -0
  4. data/.rubocop.yml +14 -7
  5. data/autobuild.gemspec +1 -1
  6. data/bin/autobuild +1 -1
  7. data/lib/autobuild/build_logfile.rb +1 -2
  8. data/lib/autobuild/config.rb +5 -5
  9. data/lib/autobuild/environment.rb +28 -45
  10. data/lib/autobuild/exceptions.rb +11 -5
  11. data/lib/autobuild/import/archive.rb +31 -22
  12. data/lib/autobuild/import/cvs.rb +6 -6
  13. data/lib/autobuild/import/darcs.rb +4 -4
  14. data/lib/autobuild/import/git-lfs.rb +4 -4
  15. data/lib/autobuild/import/git.rb +139 -66
  16. data/lib/autobuild/import/hg.rb +7 -7
  17. data/lib/autobuild/import/svn.rb +15 -9
  18. data/lib/autobuild/importer.rb +33 -37
  19. data/lib/autobuild/mail_reporter.rb +5 -2
  20. data/lib/autobuild/package.rb +14 -12
  21. data/lib/autobuild/packages/autotools.rb +3 -8
  22. data/lib/autobuild/packages/cmake.rb +11 -8
  23. data/lib/autobuild/packages/dummy.rb +0 -4
  24. data/lib/autobuild/packages/gnumake.rb +1 -1
  25. data/lib/autobuild/packages/orogen.rb +11 -4
  26. data/lib/autobuild/packages/pkgconfig.rb +2 -2
  27. data/lib/autobuild/packages/python.rb +1 -2
  28. data/lib/autobuild/packages/ruby.rb +5 -5
  29. data/lib/autobuild/parallel.rb +7 -16
  30. data/lib/autobuild/pkgconfig.rb +1 -0
  31. data/lib/autobuild/progress_display.rb +5 -9
  32. data/lib/autobuild/rake_task_extension.rb +6 -0
  33. data/lib/autobuild/reporting.rb +7 -7
  34. data/lib/autobuild/subcommand.rb +24 -23
  35. data/lib/autobuild/timestamps.rb +3 -3
  36. data/lib/autobuild/utility.rb +3 -3
  37. data/lib/autobuild/version.rb +1 -1
  38. data/lib/autobuild.rb +0 -3
  39. metadata +5 -4
  40. data/.travis.yml +0 -21
@@ -10,7 +10,7 @@ module Autobuild
10
10
  # Autobuild.programs['cvs'] = 'my_cvs_tool'
11
11
  def initialize(root_name, options = {})
12
12
  cvsopts, common = Kernel.filter_options options,
13
- module: nil, cvsup: '-dP', cvsco: '-P'
13
+ module: nil, cvsup: '-dP', cvsco: '-P'
14
14
  @root = root_name
15
15
  @module = cvsopts[:module]
16
16
  raise ArgumentError, "no module given" unless @module
@@ -41,7 +41,7 @@ module Autobuild
41
41
 
42
42
  unless File.exist?("#{package.srcdir}/CVS/Root")
43
43
  raise ConfigException.new(package, 'import'),
44
- "#{package.srcdir} is not a CVS working copy"
44
+ "#{package.srcdir} is not a CVS working copy"
45
45
  end
46
46
 
47
47
  root = File.open("#{package.srcdir}/CVS/Root", &:read).chomp
@@ -56,8 +56,8 @@ module Autobuild
56
56
 
57
57
  if root != expected_root || mod != @module
58
58
  raise ConfigException.new(package, 'import'),
59
- "checkout in #{package.srcdir} is from #{root}:#{mod}, "\
60
- "was expecting #{expected_root}:#{@module}"
59
+ "checkout in #{package.srcdir} is from #{root}:#{mod}, "\
60
+ "was expecting #{expected_root}:#{@module}"
61
61
  end
62
62
  package.run(:import, Autobuild.tool(:cvs), 'up', *@options_up,
63
63
  retry: true, working_directory: package.importdir)
@@ -72,8 +72,8 @@ module Autobuild
72
72
 
73
73
  FileUtils.mkdir_p(head) unless File.directory?(head)
74
74
  package.run(:import, Autobuild.tool(:cvs), '-d', cvsroot, 'co',
75
- '-d', tail, *@options_co, modulename,
76
- retry: true, working_directory: head)
75
+ '-d', tail, *@options_co, modulename,
76
+ retry: true, working_directory: head)
77
77
  end
78
78
  end
79
79
 
@@ -28,12 +28,12 @@ module Autobuild
28
28
  end
29
29
  unless File.directory?(File.join(package.srcdir, '_darcs'))
30
30
  raise ConfigException.new(package, 'import'),
31
- "#{package.srcdir} is not a Darcs repository"
31
+ "#{package.srcdir} is not a Darcs repository"
32
32
  end
33
33
 
34
34
  package.run(:import, @program, 'pull', '--all',
35
- "--repodir=#{package.srcdir}", '--set-scripts-executable',
36
- @source, *@pull, retry: true)
35
+ "--repodir=#{package.srcdir}", '--set-scripts-executable',
36
+ @source, *@pull, retry: true)
37
37
  true # no easy to know if package was updated, keep previous behavior
38
38
  end
39
39
 
@@ -42,7 +42,7 @@ module Autobuild
42
42
  FileUtils.mkdir_p(basedir) unless File.directory?(basedir)
43
43
 
44
44
  package.run(:import, @program, 'get', '--set-scripts-executable',
45
- @source, package.srcdir, *@get, retry: true)
45
+ @source, package.srcdir, *@get, retry: true)
46
46
  end
47
47
  end
48
48
 
@@ -10,26 +10,26 @@ module Autobuild
10
10
  if includes.empty?
11
11
  begin
12
12
  importer.run_git_bare(package, 'config', '--local',
13
- '--unset', 'lfs.fetchinclude')
13
+ '--unset', 'lfs.fetchinclude')
14
14
  rescue SubcommandFailed => e
15
15
  raise if e.status != 5
16
16
  end
17
17
  else
18
18
  importer.run_git_bare(package, 'config', '--local',
19
- 'lfs.fetchinclude', includes)
19
+ 'lfs.fetchinclude', includes)
20
20
  end
21
21
 
22
22
  excludes = importer.options.fetch(:lfs_exclude, '')
23
23
  if excludes.empty?
24
24
  begin
25
25
  importer.run_git_bare(package, 'config', '--local',
26
- '--unset', 'lfs.fetchexclude')
26
+ '--unset', 'lfs.fetchexclude')
27
27
  rescue SubcommandFailed => e
28
28
  raise if e.status != 5
29
29
  end
30
30
  else
31
31
  importer.run_git_bare(package, 'config', '--local',
32
- 'lfs.fetchexclude', excludes)
32
+ 'lfs.fetchexclude', excludes)
33
33
  end
34
34
 
35
35
  if importer.options[:lfs] != false
@@ -7,6 +7,9 @@ require 'English'
7
7
 
8
8
  module Autobuild
9
9
  class Git < Importer
10
+ # Exception raised when a network access is needed while only_local is true
11
+ class NetworkAccessNeeded < RuntimeError; end
12
+
10
13
  class << self
11
14
  # Sets the default alternates path used by all Git importers
12
15
  #
@@ -54,7 +57,7 @@ module Autobuild
54
57
  def self.version
55
58
  version = Subprocess.run('git', 'setup', Autobuild.tool(:git), '--version').
56
59
  first
57
- if version =~ /^git version (\d[\d\.]+)/
60
+ if version =~ /^git version (\d[\d.]+)/
58
61
  $1.split(".").map { |i| Integer(i) }
59
62
  else
60
63
  raise ArgumentError, "cannot parse git version string #{version}, "\
@@ -139,16 +142,16 @@ module Autobuild
139
142
  end
140
143
 
141
144
  gitopts, common = Kernel.filter_options options,
142
- push_to: nil,
143
- branch: nil,
144
- local_branch: nil,
145
- remote_branch: nil,
146
- tag: nil,
147
- commit: nil,
148
- repository_id: nil,
149
- source_id: nil,
150
- with_submodules: false,
151
- single_branch: false
145
+ push_to: nil,
146
+ branch: nil,
147
+ local_branch: nil,
148
+ remote_branch: nil,
149
+ tag: nil,
150
+ commit: nil,
151
+ repository_id: nil,
152
+ source_id: nil,
153
+ with_submodules: false,
154
+ single_branch: false
152
155
  if gitopts[:branch] && branch
153
156
  raise ConfigException, "git branch specified with both the option hash "\
154
157
  "and the explicit parameter"
@@ -293,6 +296,66 @@ module Autobuild
293
296
  git_dir(package, true)
294
297
  end
295
298
 
299
+ # Return the remote head branch from local copy if exists, if not return nil
300
+ #
301
+ # @param [Package] package
302
+ def try_resolve_remote_head_from_local(package)
303
+ ls_local_string = run_git(package, 'symbolic-ref',
304
+ "refs/remotes/#{@remote_name}/HEAD").first.strip
305
+ local_remote_head = ls_local_string.match("refs/remotes/#{@remote_name}/(.*)")
306
+ local_remote_head ? local_remote_head[1] : nil
307
+ rescue Autobuild::SubcommandFailed # rubocop:disable Lint/SuppressedException
308
+ end
309
+
310
+ # Return the remote head branch from server if exists, if not return 'master'
311
+ #
312
+ # @param [Package] package
313
+ def try_resolve_remote_head_from_server(package)
314
+ ls_remote_string = package.run(
315
+ :import,
316
+ Autobuild.tool('git'), 'ls-remote', '--symref', repository
317
+ ).first.strip
318
+ server_remote_head =
319
+ ls_remote_string.match("ref:[^A-z]refs/heads/(.*)[^A-z]HEAD")
320
+ server_remote_head ? server_remote_head[1] : 'master'
321
+ end
322
+
323
+ # Return default local branch if exists, if not return the default remote branch
324
+ #
325
+ # @param [Package] package
326
+ def resolve_remote_head(package, only_local: false)
327
+ try_resolve_remote_head_from_local(package) ||
328
+ (!only_local && try_resolve_remote_head_from_server(package))
329
+ end
330
+
331
+ # Whether both the local and remote branches are known
332
+ #
333
+ # See documentation of {#resolve_all_branches}
334
+ def has_all_branches?
335
+ remote_branch && local_branch
336
+ end
337
+
338
+ # Resolve branches based on the remote's HEAD
339
+ #
340
+ # Since GitHub (and others) decided to change the name of the "default"
341
+ # branch, we can't assume that master is ... well ... master.
342
+ #
343
+ # For this reason, a Git importer does not have a built-in default.
344
+ # If the branch(es) are not provided explicitly, the importer will
345
+ # call this method to guess the name of the default branch instead.
346
+ #
347
+ # Call {#has_all_branches?} to determine whether it is necessary
348
+ def resolve_all_branches(package, only_local: false)
349
+ default_branch = resolve_remote_head(package, only_local: only_local)
350
+ unless default_branch
351
+ raise NetworkAccessNeeded,
352
+ "determining the remote branch would require access to "\
353
+ "the network, and only_local is true"
354
+ end
355
+
356
+ relocate(repository, default_branch: default_branch)
357
+ end
358
+
296
359
  # @api private
297
360
  #
298
361
  # Resolves the git directory associated with path, and tells whether it
@@ -366,12 +429,12 @@ module Autobuild
366
429
  def self.validate_git_dir(package, require_working_copy, _dir, style)
367
430
  if !style
368
431
  raise ConfigException.new(package, 'import', retry: false),
369
- "while importing #{package.name}, #{package.importdir} "\
370
- "does not point to a git repository"
432
+ "while importing #{package.name}, #{package.importdir} "\
433
+ "does not point to a git repository"
371
434
  elsif require_working_copy && (style == :bare)
372
435
  raise ConfigException.new(package, 'import', retry: false),
373
- "while importing #{package.name}, #{package.importdir} "\
374
- "points to a bare git repository but a working copy was required"
436
+ "while importing #{package.name}, #{package.importdir} "\
437
+ "points to a bare git repository but a working copy was required"
375
438
  end
376
439
  end
377
440
 
@@ -477,21 +540,24 @@ module Autobuild
477
540
  #
478
541
  # Set a remote up in the repositorie's configuration
479
542
  def setup_remote(package, remote_name, repository, push_to = repository)
543
+ resolve_all_branches(package, only_local: true) unless has_all_branches?
544
+
480
545
  run_git_bare(package, 'config', '--replace-all',
481
- "remote.#{remote_name}.url", repository)
546
+ "remote.#{remote_name}.url", repository)
482
547
  run_git_bare(package, 'config', '--replace-all',
483
- "remote.#{remote_name}.pushurl", push_to || repository)
548
+ "remote.#{remote_name}.pushurl", push_to || repository)
484
549
  run_git_bare(package, 'config', '--replace-all',
485
- "remote.#{remote_name}.fetch",
486
- "+refs/heads/*:refs/remotes/#{remote_name}/*")
550
+ "remote.#{remote_name}.fetch",
551
+ "+refs/heads/*:refs/remotes/#{remote_name}/*")
487
552
 
488
553
  if remote_branch && local_branch
554
+ remote_ref = remote_branch_to_ref(remote_branch)
489
555
  run_git_bare(package, 'config', '--replace-all',
490
- "remote.#{remote_name}.push",
491
- "refs/heads/#{local_branch}:#{remote_branch_to_ref(remote_branch)}")
556
+ "remote.#{remote_name}.push",
557
+ "refs/heads/#{local_branch}:#{remote_ref}")
492
558
  else
493
559
  run_git_bare(package, 'config', '--replace-all',
494
- "remote.#{remote_name}.push", "refs/heads/*:refs/heads/*")
560
+ "remote.#{remote_name}.push", "refs/heads/*:refs/heads/*")
495
561
  end
496
562
  end
497
563
 
@@ -517,16 +583,17 @@ module Autobuild
517
583
 
518
584
  if local_branch
519
585
  run_git_bare(package, 'config', '--replace-all',
520
- "branch.#{local_branch}.remote", remote_name)
586
+ "branch.#{local_branch}.remote", remote_name)
521
587
  run_git_bare(package, 'config', '--replace-all',
522
- "branch.#{local_branch}.merge", remote_branch_to_ref(local_branch))
588
+ "branch.#{local_branch}.merge",
589
+ remote_branch_to_ref(local_branch))
523
590
  end
524
591
  end
525
592
 
526
593
  # Resolve a commit ref to a tag or commit ID
527
594
  def describe_rev(package, rev)
528
595
  tag = run_git_bare(package, 'describe',
529
- '--tags', '--exact-match', rev).first.strip
596
+ '--tags', '--exact-match', rev).first.strip
530
597
  [true, tag.encode('UTF-8')]
531
598
  rescue Autobuild::SubcommandFailed
532
599
  commit = rev_parse(package, rev)
@@ -584,7 +651,7 @@ module Autobuild
584
651
  refspec.zip(fetched_commits).each do |spec, commit_id|
585
652
  if spec =~ %r{^refs/heads/(.*)$}
586
653
  run_git_bare(package, 'update-ref', "-m", "updated by autobuild",
587
- "refs/remotes/#{remote_name}/#{$1}", commit_id)
654
+ "refs/remotes/#{remote_name}/#{$1}", commit_id)
588
655
  end
589
656
  end
590
657
 
@@ -641,7 +708,7 @@ module Autobuild
641
708
  run_git_bare(package, 'show-ref', '-s', refspec).first.strip
642
709
  rescue SubcommandFailed
643
710
  raise PackageException.new(package, "import"),
644
- "cannot resolve #{refspec}"
711
+ "cannot resolve #{refspec}"
645
712
  end
646
713
  else
647
714
  refspec =
@@ -650,7 +717,7 @@ module Autobuild
650
717
  remote_branch_to_ref(remote_branch)
651
718
  begin fetch_remote(package, refspec: refspec)
652
719
  rescue Exception => e
653
- return fallback(e, package, :status, package, only_local)
720
+ fallback(e, package, :status, package, only_local)
654
721
  end
655
722
  end
656
723
  end
@@ -666,6 +733,8 @@ module Autobuild
666
733
  end
667
734
 
668
735
  validate_importdir(package)
736
+ resolve_all_branches(package, only_local: only_local) unless has_all_branches?
737
+
669
738
  _pinned_state, target_commit, = determine_target_state(
670
739
  package, only_local: only_local)
671
740
 
@@ -696,7 +765,7 @@ module Autobuild
696
765
 
697
766
  def has_branch?(package, branch_name)
698
767
  run_git_bare(package, 'show-ref', '-q', '--verify',
699
- remote_branch_to_ref(branch_name))
768
+ remote_branch_to_ref(branch_name))
700
769
  true
701
770
  rescue SubcommandFailed => e
702
771
  if e.status == 1
@@ -706,7 +775,7 @@ module Autobuild
706
775
  end
707
776
 
708
777
  def has_local_branch?(package)
709
- has_branch?(package, local_branch)
778
+ has_branch?(package, local_branch) if local_branch
710
779
  end
711
780
 
712
781
  def detached_head?(package)
@@ -714,6 +783,8 @@ module Autobuild
714
783
  end
715
784
 
716
785
  private def remote_branch_to_ref(branch)
786
+ return unless branch
787
+
717
788
  if branch.start_with?("refs/")
718
789
  branch
719
790
  else
@@ -750,9 +821,7 @@ module Autobuild
750
821
  #
751
822
  # This is the value returned by {Git#status}
752
823
  class Status < Importer::Status
753
- attr_reader :fetch_commit
754
- attr_reader :head_commit
755
- attr_reader :common_commit
824
+ attr_reader :fetch_commit, :head_commit, :common_commit
756
825
 
757
826
  def initialize(package, status, remote_commit, local_commit, common_commit)
758
827
  super()
@@ -797,8 +866,8 @@ module Autobuild
797
866
  run_git_bare(package, 'rev-parse', '-q', '--verify', name).first
798
867
  rescue Autobuild::SubcommandFailed
799
868
  raise PackageException.new(package, 'import'),
800
- "failed to resolve #{name}. "\
801
- "Are you sure this commit, branch or tag exists ?"
869
+ "failed to resolve #{name}. "\
870
+ "Are you sure this commit, branch or tag exists ?"
802
871
  end
803
872
 
804
873
  # Returns the file's conents at a certain commit
@@ -811,7 +880,7 @@ module Autobuild
811
880
  run_git_bare(package, 'show', "#{commit}:#{path}").join("\n")
812
881
  rescue Autobuild::SubcommandFailed
813
882
  raise PackageException.new(package, 'import'),
814
- "failed to either resolve commit #{commit} or file #{path}"
883
+ "failed to either resolve commit #{commit} or file #{path}"
815
884
  end
816
885
 
817
886
  # Tests whether a commit is already present in a given history
@@ -845,7 +914,7 @@ module Autobuild
845
914
  def describe_commit_on_remote(package, rev = 'HEAD', options = Hash.new)
846
915
  rev = rev.to_str
847
916
  options = Kernel.validate_options options,
848
- tags: true
917
+ tags: true
849
918
 
850
919
  commit_id = rev_parse(package, rev)
851
920
 
@@ -875,15 +944,13 @@ module Autobuild
875
944
  end
876
945
 
877
946
  remote_refs.delete_if do |rev_name, rev_id|
878
- begin
879
947
  if commit_present_in?(package, commit_id, rev_id)
880
948
  return rev_name
881
949
  else
882
950
  true
883
951
  end
884
- rescue PackageException
952
+ rescue PackageException
885
953
  false
886
- end
887
954
  end
888
955
 
889
956
  unless remote_refs.empty?
@@ -909,7 +976,7 @@ module Autobuild
909
976
  def merge_status(package, fetch_commit, reference_commit = "HEAD")
910
977
  begin
911
978
  common_commit = run_git_bare(package, 'merge-base',
912
- reference_commit, fetch_commit).first.strip
979
+ reference_commit, fetch_commit).first.strip
913
980
  rescue Exception
914
981
  raise PackageException.new(package, 'import'), "failed to find "\
915
982
  "the merge-base between #{reference_commit} and #{fetch_commit}. "\
@@ -942,7 +1009,7 @@ module Autobuild
942
1009
  # @return [void]
943
1010
  def update_alternates(package)
944
1011
  alternates_path = File.join(git_dir(package, false),
945
- 'objects', 'info', 'alternates')
1012
+ 'objects', 'info', 'alternates')
946
1013
  current_alternates =
947
1014
  if File.file?(alternates_path)
948
1015
  File.readlines(alternates_path)
@@ -1007,18 +1074,18 @@ module Autobuild
1007
1074
  # changes
1008
1075
  unless commit_present_in?(package, current_head, fetch_commit)
1009
1076
  raise ImporterCannotReset.new(package, 'import'),
1010
- "branch #{local_branch} of #{package.name} contains"\
1011
- " commits that do not seem to be present on the branch"\
1012
- " #{remote_branch} of the remote repository. I can't"\
1013
- " go on as it could make you lose some stuff. Update"\
1014
- " the remote branch in your overrides, push your"\
1015
- " changes or reset to the remote commit manually"\
1016
- " before trying again"
1077
+ "branch #{local_branch} of #{package.name} contains"\
1078
+ " commits that do not seem to be present on the branch"\
1079
+ " #{remote_branch} of the remote repository. I can't"\
1080
+ " go on as it could make you lose some stuff. Update"\
1081
+ " the remote branch in your overrides, push your"\
1082
+ " changes or reset to the remote commit manually"\
1083
+ " before trying again"
1017
1084
  end
1018
1085
  end
1019
1086
 
1020
1087
  package.message format(" %%s: resetting branch %<branch>s to %<commit>s",
1021
- branch: local_branch, commit: target_commit)
1088
+ branch: local_branch, commit: target_commit)
1022
1089
  # I don't use a reset --hard here as it would add even more
1023
1090
  # restrictions on when we can do the operation (as we would refuse
1024
1091
  # doing it if there are local changes). The checkout creates a
@@ -1029,7 +1096,7 @@ module Autobuild
1029
1096
  begin
1030
1097
  run_git(package, 'checkout', target_commit)
1031
1098
  run_git(package, 'update-ref', "refs/heads/#{local_branch}",
1032
- resolved_target_commit)
1099
+ resolved_target_commit)
1033
1100
  run_git(package, 'symbolic-ref', "HEAD", "refs/heads/#{local_branch}")
1034
1101
  rescue ::Exception
1035
1102
  run_git(package, 'symbolic-ref', "HEAD", target_commit)
@@ -1065,6 +1132,9 @@ module Autobuild
1065
1132
  # @option (see Package#update)
1066
1133
  def update(package, options = Hash.new)
1067
1134
  validate_importdir(package)
1135
+
1136
+ resolve_all_branches(package) unless has_all_branches?
1137
+
1068
1138
  only_local = options.fetch(:only_local, false)
1069
1139
  reset = options.fetch(:reset, false)
1070
1140
 
@@ -1084,20 +1154,21 @@ module Autobuild
1084
1154
  end
1085
1155
 
1086
1156
  unless pin_is_uptodate
1087
- fetch_commit ||= current_remote_commit(package,
1088
- only_local: only_local,
1089
- refspec: [remote_branch_to_ref(remote_branch), tag])
1157
+ fetch_commit ||= current_remote_commit(
1158
+ package, only_local: only_local,
1159
+ refspec: [remote_branch_to_ref(remote_branch), tag]
1160
+ )
1090
1161
  did_update =
1091
1162
  if reset
1092
1163
  reset_head_to_commit(package, target_commit, fetch_commit,
1093
- force: (reset == :force))
1164
+ force: (reset == :force))
1094
1165
  else
1095
1166
  merge_if_simple(package, target_commit)
1096
1167
  end
1097
1168
  end
1098
1169
 
1099
1170
  if !only_local && with_submodules?
1100
- run_git(package, "submodule", "update", '--init')
1171
+ run_git(package, "submodule", "update", '--init', '--recursive')
1101
1172
  did_update = true
1102
1173
  end
1103
1174
 
@@ -1107,12 +1178,12 @@ module Autobuild
1107
1178
  private def ensure_on_local_branch(package, target_commit)
1108
1179
  if !has_local_branch?(package)
1109
1180
  package.message format("%%s: checking out branch %<branch>s",
1110
- branch: local_branch)
1181
+ branch: local_branch)
1111
1182
  run_git(package, 'checkout', '-b', local_branch, target_commit)
1112
1183
  true
1113
1184
  elsif !on_local_branch?(package)
1114
1185
  package.message format("%%s: switching to branch %<branch>s",
1115
- branch: local_branch)
1186
+ branch: local_branch)
1116
1187
  run_git(package, 'checkout', local_branch)
1117
1188
  true
1118
1189
  else
@@ -1195,28 +1266,30 @@ module Autobuild
1195
1266
  clone_options << "--config=#{key}=#{value}"
1196
1267
  end
1197
1268
  package.run(:import,
1198
- Autobuild.tool('git'), 'clone', '-o', remote_name, *clone_options,
1199
- repository, package.importdir, retry: true)
1269
+ Autobuild.tool('git'), 'clone', '-o', remote_name, *clone_options,
1270
+ repository, package.importdir, retry: true)
1200
1271
 
1201
1272
  update_remotes_configuration(package)
1202
1273
  update(package, only_local: !remote_branch.start_with?("refs/"),
1203
1274
  reset: :force)
1204
- run_git(package, "submodule", "update", '--init') if with_submodules?
1275
+ if with_submodules?
1276
+ run_git(package, "submodule", "update", '--init', '--recursive')
1277
+ end
1205
1278
  end
1206
1279
 
1207
1280
  # Changes the repository this importer is pointing to
1208
1281
  def relocate(repository, options = Hash.new)
1209
- options = Hash[options.map { |k, v| [k.to_sym, v] }]
1282
+ options = options.transform_keys(&:to_sym)
1210
1283
 
1211
1284
  local_branch =
1212
1285
  options[:local_branch] || options[:branch] ||
1213
- self.local_branch || 'master'
1286
+ self.local_branch || options[:default_branch] || nil
1214
1287
  remote_branch =
1215
1288
  options[:remote_branch] || options[:branch] ||
1216
- self.remote_branch || 'master'
1217
- if local_branch.start_with?("refs/")
1289
+ self.remote_branch || options[:default_branch] || nil
1290
+ if local_branch&.start_with?("refs/")
1218
1291
  raise ArgumentError, "you cannot provide a full ref for"\
1219
- " the local branch, only for the remote branch"
1292
+ " the local branch, only for the remote branch"
1220
1293
  end
1221
1294
 
1222
1295
  @push_to = options[:push_to] || @push_to