hammer_cli_csv 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +8 -8
  2. data/config/cli_config.yml +2 -0
  3. data/lib/hammer_cli_csv.rb +4 -11
  4. data/lib/hammer_cli_csv/activation_keys.rb +7 -21
  5. data/lib/hammer_cli_csv/architectures.rb +6 -37
  6. data/lib/hammer_cli_csv/base.rb +177 -21
  7. data/lib/hammer_cli_csv/compute_profiles.rb +4 -21
  8. data/lib/hammer_cli_csv/compute_resources.rb +4 -16
  9. data/lib/hammer_cli_csv/containers.rb +65 -0
  10. data/lib/hammer_cli_csv/content_hosts.rb +22 -26
  11. data/lib/hammer_cli_csv/content_view_filters.rb +90 -60
  12. data/lib/hammer_cli_csv/content_views.rb +4 -17
  13. data/lib/hammer_cli_csv/csv.rb +0 -12
  14. data/lib/hammer_cli_csv/domains.rb +74 -38
  15. data/lib/hammer_cli_csv/exception_handler.rb +0 -11
  16. data/lib/hammer_cli_csv/export.rb +14 -20
  17. data/lib/hammer_cli_csv/headpin_api.rb +0 -11
  18. data/lib/hammer_cli_csv/host_collections.rb +5 -23
  19. data/lib/hammer_cli_csv/host_groups.rb +115 -0
  20. data/lib/hammer_cli_csv/hosts.rb +32 -56
  21. data/lib/hammer_cli_csv/import.rb +46 -24
  22. data/lib/hammer_cli_csv/installation_medias.rb +4 -15
  23. data/lib/hammer_cli_csv/job_templates.rb +142 -0
  24. data/lib/hammer_cli_csv/lifecycle_environments.rb +5 -38
  25. data/lib/hammer_cli_csv/locations.rb +4 -33
  26. data/lib/hammer_cli_csv/operating_systems.rb +17 -33
  27. data/lib/hammer_cli_csv/organizations.rb +13 -41
  28. data/lib/hammer_cli_csv/partition_tables.rb +66 -54
  29. data/lib/hammer_cli_csv/products.rb +12 -24
  30. data/lib/hammer_cli_csv/provisioning_templates.rb +4 -18
  31. data/lib/hammer_cli_csv/puppet_environments.rb +36 -59
  32. data/lib/hammer_cli_csv/puppet_facts.rb +36 -58
  33. data/lib/hammer_cli_csv/puppet_reports.rb +4 -38
  34. data/lib/hammer_cli_csv/reports.rb +4 -15
  35. data/lib/hammer_cli_csv/roles.rb +4 -15
  36. data/lib/hammer_cli_csv/settings.rb +49 -0
  37. data/lib/hammer_cli_csv/smart_proxies.rb +9 -24
  38. data/lib/hammer_cli_csv/splice.rb +0 -12
  39. data/lib/hammer_cli_csv/subnets.rb +10 -21
  40. data/lib/hammer_cli_csv/subscriptions.rb +21 -24
  41. data/lib/hammer_cli_csv/sync_plans.rb +4 -19
  42. data/lib/hammer_cli_csv/users.rb +4 -15
  43. data/lib/hammer_cli_csv/version.rb +1 -12
  44. data/test/content_hosts_test.rb +1 -1
  45. data/test/content_views_test.rb +52 -0
  46. data/test/data/content-hosts.csv +1 -1
  47. data/test/data/content-view-filters.csv +1 -1
  48. data/test/data/content-views.csv +5 -5
  49. data/test/data/hosts.csv +2 -2
  50. data/test/data/operating-systems.csv +16 -16
  51. data/test/data/products.csv +1 -1
  52. data/test/data/settings.csv +5 -0
  53. data/test/import_test.rb +79 -0
  54. metadata +14 -18
@@ -1,32 +1,3 @@
1
- # Copyright 2013-2014 Red Hat, Inc.
2
- #
3
- # This software is licensed to you under the GNU General Public
4
- # License as published by the Free Software Foundation; either version
5
- # 2 of the License (GPLv2) or (at your option) any later version.
6
- # There is NO WARRANTY for this software, express or implied,
7
- # including the implied warranties of MERCHANTABILITY,
8
- # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
9
- # have received a copy of GPLv2 along with this software; if not, see
10
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
11
-
12
- #
13
- # -= Locations CSV =-
14
- #
15
- # Columns
16
- # Name
17
- # - Name of the location.
18
- # - May contain '%d' which will be replaced with current iteration number of Count
19
- # - eg. "location%d" -> "location1"
20
- # Count
21
- # - Number of times to iterate on this line of the CSV file
22
- # Parent
23
- # - Parent location
24
- #
25
-
26
- require 'hammer_cli'
27
- require 'json'
28
- require 'csv'
29
-
30
1
  module HammerCLICsv
31
2
  class CsvCommand
32
3
  class LocationsCommand < BaseCommand
@@ -36,10 +7,10 @@ module HammerCLICsv
36
7
  PARENT = 'Parent Location'
37
8
 
38
9
  def export
39
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
40
- csv << [NAME, COUNT, PARENT]
10
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
11
+ csv << [NAME, PARENT]
41
12
  @api.resource(:locations).call(:index, {:per_page => 999999})['results'].each do |location|
42
- csv << [location['name'], 1, '']
13
+ csv << [location['name'], '']
43
14
  end
44
15
  end
45
16
  end
@@ -56,7 +27,7 @@ module HammerCLICsv
56
27
  end
57
28
 
58
29
  def create_locations_from_csv(line)
59
- line[COUNT].to_i.times do |number|
30
+ count(line[COUNT]).times do |number|
60
31
  name = namify(line[NAME], number)
61
32
  location_id = @existing[name]
62
33
  if !location_id
@@ -1,14 +1,3 @@
1
- # Copyright 2013-2014 Red Hat, Inc.
2
- #
3
- # This software is licensed to you under the GNU General Public
4
- # License as published by the Free Software Foundation; either version
5
- # 2 of the License (GPLv2) or (at your option) any later version.
6
- # There is NO WARRANTY for this software, express or implied,
7
- # including the implied warranties of MERCHANTABILITY,
8
- # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
9
- # have received a copy of GPLv2 along with this software; if not, see
10
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
11
-
12
1
  module HammerCLICsv
13
2
  class CsvCommand
14
3
  class OperatingSystemsCommand < BaseCommand
@@ -16,16 +5,16 @@ module HammerCLICsv
16
5
  desc 'import or export operating systems'
17
6
 
18
7
  FAMILY = 'Family'
8
+ DESCRIPTION = 'Description'
19
9
 
20
10
  def export
21
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
22
- csv << [NAME, COUNT, FAMILY]
11
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
12
+ csv << [NAME, DESCRIPTION, FAMILY]
23
13
  @api.resource(:operatingsystems).call(:index, {:per_page => 999999})['results'].each do |operatingsystem|
24
14
  name = build_os_name(operatingsystem['name'], operatingsystem['major'], operatingsystem['minor'])
25
- count = 1
26
15
  description = operatingsystem['description']
27
16
  family = operatingsystem['family']
28
- csv << [name, count, description, family]
17
+ csv << [name, description, family]
29
18
  end
30
19
  end
31
20
  end
@@ -42,30 +31,25 @@ module HammerCLICsv
42
31
  end
43
32
 
44
33
  def create_operatingsystems_from_csv(line)
45
- line[COUNT].to_i.times do |number|
34
+ params = {
35
+ 'operatingsystem' => {
36
+ 'family' => line[FAMILY],
37
+ 'description' => line[DESCRIPTION]
38
+ }
39
+ }
40
+ count(line[COUNT]).times do |number|
46
41
  name = namify(line[NAME], number)
47
42
  (osname, major, minor) = split_os_name(name)
43
+ params['operatingsystem']['name'] = osname
44
+ params['operatingsystem']['major'] = major
45
+ params['operatingsystem']['minor'] = minor
48
46
  if !@existing.include? name
49
47
  print "Creating operating system '#{name}'..." if option_verbose?
50
- @api.resource(:operatingsystems).call(:create, {
51
- 'operatingsystem' => {
52
- 'name' => osname,
53
- 'major' => major,
54
- 'minor' => minor,
55
- 'family' => line[FAMILY]
56
- }
57
- })
48
+ @api.resource(:operatingsystems).call(:create, params)
58
49
  else
59
50
  print "Updating operating system '#{name}'..." if option_verbose?
60
- @api.resource(:operatingsystems).call(:update, {
61
- 'id' => @existing[name],
62
- 'operatingsystem' => {
63
- 'name' => osname,
64
- 'major' => major,
65
- 'minor' => minor,
66
- 'family' => line[FAMILY]
67
- }
68
- })
51
+ params['id'] = @existing[name]
52
+ @api.resource(:operatingsystems).call(:update, params)
69
53
  end
70
54
  print "done\n" if option_verbose?
71
55
  end
@@ -1,36 +1,3 @@
1
- # Copyright 2013-2014 Red Hat, Inc.
2
- #
3
- # This software is licensed to you under the GNU General Public
4
- # License as published by the Free Software Foundation; either version
5
- # 2 of the License (GPLv2) or (at your option) any later version.
6
- # There is NO WARRANTY for this software, express or implied,
7
- # including the implied warranties of MERCHANTABILITY,
8
- # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
9
- # have received a copy of GPLv2 along with this software; if not, see
10
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
11
-
12
- #
13
- # -= Organizations CSV =-
14
- #
15
- # Columns
16
- # Name
17
- # - Name of the organization.
18
- # - May contain '%d' which will be replaced with current iteration number of Count
19
- # - eg. "organization%d" -> "organization1"
20
- # Count
21
- # - Number of times to iterate on this line of the CSV file
22
- # Org Label
23
- # - Label of the organization.
24
- # - May contain '%d' which will be replaced with current iteration number of Count
25
- # - eg. "organization%d" -> "organization1"
26
- # Description
27
- #
28
-
29
- require 'hammer_cli'
30
- #require 'net/http'
31
- require 'json'
32
- require 'csv'
33
-
34
1
  module HammerCLICsv
35
2
  class CsvCommand
36
3
  class OrganizationsCommand < BaseCommand
@@ -41,16 +8,18 @@ module HammerCLICsv
41
8
  DESCRIPTION = 'Description'
42
9
 
43
10
  def export
44
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
45
- csv << [NAME, COUNT, LABEL, DESCRIPTION]
11
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
12
+ csv << [NAME, LABEL, DESCRIPTION]
46
13
 
47
14
  if @server_status['release'] == 'Headpin'
48
15
  @headpin.get(:organizations).each do |organization|
49
- csv << [organization['name'], 1, organization['label'], organization['description']]
16
+ next if option_organization && organization['name'] != option_organization
17
+ csv << [organization['name'], organization['label'], organization['description']]
50
18
  end
51
19
  else
52
20
  @api.resource(:organizations).call(:index, {:per_page => 999999})['results'].each do |organization|
53
- csv << [organization['name'], 1, organization['label'], organization['description']]
21
+ next if option_organization && organization['name'] != option_organization
22
+ csv << [organization['name'], organization['label'], organization['description']]
54
23
  end
55
24
  end
56
25
  end
@@ -68,10 +37,12 @@ module HammerCLICsv
68
37
  end
69
38
 
70
39
  def create_organizations_from_csv(line)
71
- line[COUNT].to_i.times do |number|
40
+ count(line[COUNT]).times do |number|
72
41
  name = namify(line[NAME], number)
42
+ return if option_organization && name != option_organization
73
43
  label = namify(line[LABEL], number)
74
- if !@existing.include? name
44
+ organization_id = @existing[name]
45
+ if organization_id.nil?
75
46
  print "Creating organization '#{name}'... " if option_verbose?
76
47
  @api.resource(:organizations).call(:create, {
77
48
  'name' => name,
@@ -83,10 +54,11 @@ module HammerCLICsv
83
54
  })
84
55
  else
85
56
  print "Updating organization '#{name}'... " if option_verbose?
57
+ organization = @api.resource(:organizations).call(:show, {'id' => organization_id})
86
58
  @api.resource(:organizations).call(:update, {
87
- 'id' => foreman_organization(:name => name),
59
+ 'id' => organization_id,
88
60
  'organization' => {
89
- 'id' => foreman_organization(:name => name),
61
+ 'id' => organization_id,
90
62
  'description' => line[DESCRIPTION]
91
63
  }
92
64
  })
@@ -1,50 +1,52 @@
1
- # Copyright 2013-2014 Red Hat, Inc.
2
- #
3
- # This software is licensed to you under the GNU General Public
4
- # License as published by the Free Software Foundation; either version
5
- # 2 of the License (GPLv2) or (at your option) any later version.
6
- # There is NO WARRANTY for this software, express or implied,
7
- # including the implied warranties of MERCHANTABILITY,
8
- # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
9
- # have received a copy of GPLv2 along with this software; if not, see
10
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
11
-
12
- #
13
- # -= Partition Tables CSV =-
14
- #
15
- # Columns
16
- # Name
17
- # - Partition table name
18
- # - May contain '%d' which will be replaced with current iteration number of Count
19
- # - eg. "os%d" -> "os1"
20
- # Count
21
- # - Number of times to iterate on this line of the CSV file
22
- #
23
-
24
- require 'hammer_cli'
25
- require 'json'
26
- require 'csv'
27
-
28
1
  module HammerCLICsv
29
2
  class CsvCommand
30
3
  class PartitionTablesCommand < BaseCommand
31
4
  command_name 'partition-tables'
32
5
  desc 'import or export partition tables'
33
6
 
7
+ ORGANIZATIONS = 'Organizations'
8
+ LOCATIONS = 'Locations'
34
9
  OSFAMILY = 'OS Family'
35
10
  OPERATINGSYSTEMS = 'Operating Systems'
36
11
  LAYOUT = 'Layout'
37
12
 
38
13
  def export
39
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
40
- csv << [NAME, COUNT, OSFAMILY, OPERATINGSYSTEMS, LAYOUT]
14
+ # TODO: partition-tables do not return their organizations or locations
15
+ # http://projects.theforeman.org/issues/11175
16
+ organizations_map = {}
17
+ @api.resource(:organizations).call(:index, {:per_page => 999999})['results'].each do |organization|
18
+ ptables = @api.resource(:ptables).call(:index, {'organization_id' => organization['id']})['results'].each do |ptable|
19
+ organizations_map[ptable['name']] ||= []
20
+ organizations_map[ptable['name']] << organization['name']
21
+ end
22
+ end
23
+ locations_map = {}
24
+ @api.resource(:locations).call(:index, {:per_page => 999999})['results'].each do |location|
25
+ ptables = @api.resource(:ptables).call(:index, {'location_id' => location['id']})['results'].each do |ptable|
26
+ locations_map[ptable['name']] ||= []
27
+ locations_map[ptable['name']] << location['name']
28
+ end
29
+ end
30
+
31
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
32
+ csv << [NAME, ORGANIZATIONS, LOCATIONS, OSFAMILY, OPERATINGSYSTEMS, LAYOUT]
41
33
  @api.resource(:ptables).call(:index, {:per_page => 999999})['results'].each do |ptable|
42
34
  ptable = @api.resource(:ptables).call(:show, {'id' => ptable['id']})
43
35
  name = ptable['name']
44
- count = 1
45
36
  osfamily = ptable['os_family']
46
37
  layout = ptable['layout']
47
- csv << [name, count, osfamily, layout]
38
+ operatingsystems = export_column(ptable, 'operatingsystems', 'title')
39
+
40
+ organizations = CSV.generate do |column|
41
+ column << organizations_map[name] if organizations_map[name]
42
+ end
43
+ organizations.delete!("\n")
44
+ locations = CSV.generate do |column|
45
+ column << locations_map[name] if locations_map[name]
46
+ end
47
+ locations.delete!("\n")
48
+
49
+ csv << [name, organizations, locations, osfamily, operatingsystems, layout]
48
50
  end
49
51
  end
50
52
  end
@@ -61,32 +63,42 @@ module HammerCLICsv
61
63
  end
62
64
 
63
65
  def create_ptables_from_csv(line)
64
- line[COUNT].to_i.times do |number|
66
+ params = {
67
+ 'ptable' => {
68
+ 'os_family' => line[OSFAMILY],
69
+ 'layout' => line[LAYOUT]
70
+ }
71
+ }
72
+ # Check for backwards compatibility
73
+ if apipie_check_param(:ptable, :create, 'ptable[operatingsystem_ids]')
74
+ operatingsystems = collect_column(line[OPERATINGSYSTEMS]) do |operatingsystem|
75
+ foreman_operatingsystem(:name => operatingsystem)
76
+ end
77
+ params['ptable']['operatingsystem_ids'] = operatingsystems
78
+ end
79
+ if apipie_check_param(:ptable, :create, 'ptable[organization_ids]')
80
+ organizations = collect_column(line[ORGANIZATIONS]) do |organization|
81
+ foreman_organization(:name => organization)
82
+ end
83
+ params['ptable']['organization_ids'] = organizations
84
+ end
85
+ if apipie_check_param(:ptable, :create, 'ptable[location_ids]')
86
+ locations = collect_column(line[LOCATIONS]) do |location|
87
+ foreman_location(:name => location)
88
+ end
89
+ params['ptable']['location_ids'] = locations
90
+ end
91
+
92
+ count(line[COUNT]).times do |number|
65
93
  name = namify(line[NAME], number)
66
- operatingsystem_ids = CSV.parse_line(line[OPERATINGSYSTEMS]).collect do |operatingsystem_name|
67
- foreman_operatingsystem(:name => operatingsystem_name)
68
- end if line[OPERATINGSYSTEMS]
94
+ params['ptable']['name'] = name
69
95
  if !@existing.include? name
70
- print "Creating ptable '#{name}'... " if option_verbose?
71
- @api.resource(:ptables).call(:create, {
72
- 'ptable' => {
73
- 'name' => name,
74
- 'os_family' => line[OSFAMILY],
75
- 'operatingsystem_ids' => operatingsystem_ids,
76
- 'layout' => line[LAYOUT]
77
- }
78
- })
96
+ print "Creating partition-table '#{name}'... " if option_verbose?
97
+ @api.resource(:ptables).call(:create, params)
79
98
  else
80
- print "Updating ptable '#{name}'..." if option_verbose?
81
- @api.resource(:ptables).call(:update, {
82
- 'id' => @existing[name],
83
- 'ptable' => {
84
- 'name' => name,
85
- 'os_family' => line[OSFAMILY],
86
- 'operatingsystem_ids' => operatingsystem_ids,
87
- 'layout' => line[LAYOUT]
88
- }
89
- })
99
+ print "Updating partition-table '#{name}'..." if option_verbose?
100
+ params['id'] = @existing[name]
101
+ @api.resource(:ptables).call(:update, params)
90
102
  end
91
103
  print "done\n" if option_verbose?
92
104
  end
@@ -1,23 +1,10 @@
1
- # Copyright 2013-2014 Red Hat, Inc.
2
- #
3
- # This software is licensed to you under the GNU General Public
4
- # License as published by the Free Software Foundation; either version
5
- # 2 of the License (GPLv2) or (at your option) any later version.
6
- # There is NO WARRANTY for this software, express or implied,
7
- # including the implied warranties of MERCHANTABILITY,
8
- # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
9
- # have received a copy of GPLv2 along with this software; if not, see
10
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
11
-
12
1
  module HammerCLICsv
13
2
  class CsvCommand
14
3
  class ProductsCommand < BaseCommand
15
4
  command_name 'products'
16
5
  desc _('import or export products')
17
6
 
18
- option %w(--organization), 'ORGANIZATION', _('Only process organization matching this name')
19
- option %w(--sync), 'true|false', _('Sync product repositories (default true)')
20
-
7
+ option %w(--[no-]sync), :flag, _('Sync product repositories (default true)'), :default => true
21
8
  LABEL = 'Label'
22
9
  ORGANIZATION = 'Organization'
23
10
  REPOSITORY = 'Repository'
@@ -26,8 +13,8 @@ module HammerCLICsv
26
13
  DESCRIPTION = 'Description'
27
14
 
28
15
  def export
29
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
30
- csv << [NAME, COUNT, LABEL, ORGANIZATION, REPOSITORY, REPOSITORY_TYPE, REPOSITORY_URL]
16
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
17
+ csv << [NAME, LABEL, ORGANIZATION, REPOSITORY, REPOSITORY_TYPE, REPOSITORY_URL]
31
18
  @api.resource(:organizations).call(:index, {
32
19
  :per_page => 999999
33
20
  })['results'].each do |organization|
@@ -41,9 +28,10 @@ module HammerCLICsv
41
28
  'product_id' => product['id'],
42
29
  'organization_id' => organization['id']
43
30
  })['results'].each do |repository|
31
+ repository = @api.resource(:repositories).call(:show, {:id => repository['id']})
44
32
  repository_type = repository['product_type'] == 'custom' ? 'Custom' : 'Red Hat'
45
33
  repository_type += " #{repository['content_type'].capitalize}"
46
- csv << [product['name'], 1, product['label'], organization['name'],
34
+ csv << [product['name'], product['label'], organization['name'],
47
35
  repository['name'], repository_type, repository['url']]
48
36
  end
49
37
  end
@@ -87,7 +75,7 @@ module HammerCLICsv
87
75
  end
88
76
  end
89
77
 
90
- line[COUNT].to_i.times do |number|
78
+ count(line[COUNT]).times do |number|
91
79
  name = namify(line[NAME], number)
92
80
  product_id = @existing_products[line[ORGANIZATION]][name]
93
81
  if product_id.nil?
@@ -140,7 +128,7 @@ module HammerCLICsv
140
128
  @existing_repositories[line[ORGANIZATION] + name][line[LABEL]] = repository
141
129
  end
142
130
 
143
- sync_repository(line, repository)
131
+ sync_repository(line, name, repository)
144
132
  puts _('done') if option_verbose?
145
133
  end
146
134
 
@@ -161,14 +149,14 @@ module HammerCLICsv
161
149
  end
162
150
  end
163
151
 
164
- def sync_repository(line, repository)
165
- if option_sync =~ (/A(true|1|yes)$/i) || HammerCLI::Settings.get(:csv, :products_sync) ||
166
- (option_sync.nil? && HammerCLI::Settings.get(:csv, :products_sync).nil?)
152
+ def sync_repository(line, name, repository)
153
+ if (HammerCLI::Settings.get(:csv, :products_sync) == true || HammerCLI::Settings.get(:csv, :products_sync).nil?) &&
154
+ option_sync?
167
155
  if option_verbose?
168
156
  print _("syncing repository '%{repository_name}' in product '%{name}'...") %
169
- {:repository_name => repository_name, :name => name}
157
+ {:repository_name => repository['name'], :name => name}
170
158
  end
171
- if repository['sync_state'] == 'finished'
159
+ if repository['last_sync']
172
160
  print _("previously synced, skipping...") if option_verbose?
173
161
  else
174
162
  exec_sync_repository(line, repository)