branch_io_cli 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5010d2220f3412bda298fa667173dd26b6142f20
4
- data.tar.gz: 91b25b66bd4c3d4b9e6bf9ea9051763c5bd5cc01
2
+ SHA256:
3
+ metadata.gz: 989a943d54479ffb6d3267bdf57872a68597f9d77675add48c258a2ab915baf1
4
+ data.tar.gz: 4f3eb86d6364cba95221dbd6f29e84ba725ab1c04034abd49ee452930a88ba99
5
5
  SHA512:
6
- metadata.gz: 3bffd545175fc581e8ae95b7ea13002386a36c994fbff76169538d2ee4cb047b10ea4b41457526b707bab99755763bf6a3589ab91086da68578f882a79676df4
7
- data.tar.gz: 07af2fa0b8aad5aec93df27be95a4707c58b196f5f761b1c1f276ec80c0a51974f21cb2f5d5ad84c1ec16c1c2f73f06d72d9435debb7d0ffc7910332b392a5da
6
+ metadata.gz: bbc1488e06f6518d460b7095f01bd5ec28f27c53a1f3799acccab60e2924addb0f6679d4956332384794e7dedca39e1505bce0f5576085d8d418604d64d6b478
7
+ data.tar.gz: 686b31264af06559b23f2d2e39713aac5df2f50802c82de3f459157722afa14c816feac24b2b148dc60160ca4bd59c1a36ab9747a7745a32b0214972c480dcb9
data/README.md CHANGED
@@ -233,6 +233,7 @@ report with additional diagnostic information suitable for opening a support tic
233
233
  |--sdk iphonesimulator|Name of an SDK to use with xcodebuild (default: iphonesimulator)|
234
234
  |--[no-]clean|Clean before building (default: yes)|
235
235
  |--[no-]header-only|Show a diagnostic header and exit without cleaning or building (default: no)|
236
+ |--[no-]pod-repo-update|Update the local podspec repo before installing (default: yes)|
236
237
  |--podfile /path/to/Podfile|Path to the Podfile for the project|
237
238
  |--cartfile /path/to/Cartfile|Path to the Cartfile for the project|
238
239
  |--out ./report.txt|Path to use for the generated report (default: ./report.txt)|
@@ -18,7 +18,8 @@ _branch_io_complete()
18
18
 
19
19
  validate_opts="$global_opts -D --domains --xcodeproj --target"
20
20
 
21
- report_opts="$global_opts --xcodeproj --workspace --header-only --no-clean --scheme --target --configuration --out"
21
+ report_opts="$global_opts --xcodeproj --workspace --header-only --no-clean --scheme --target --configuration --sdk --out"
22
+ report_opts="$global_opts --podfile --cartfile --no-pod-repo-update"
22
23
 
23
24
  if [[ ${cur} == -* ]] ; then
24
25
  case "${cmd}" in
@@ -168,14 +168,17 @@ EOF
168
168
  c.option "--cartfile /path/to/Cartfile", String, "Path to the Cartfile for the project"
169
169
  c.option "--[no-]clean", "Clean before attempting to build (default: yes)"
170
170
  c.option "--[no-]header-only", "Write a report header to standard output and exit"
171
- c.option "--out branch-report.txt", String, "Report output path (default: ./branch-report.txt)"
171
+ c.option "--[no-]pod-repo-update", "Update the local podspec repo before installing (default: yes)"
172
+ c.option "--out ./report.txt", String, "Report output path (default: ./report.txt)"
172
173
 
173
174
  c.action do |args, options|
174
175
  options.default(
175
176
  clean: true,
176
177
  header_only: false,
177
178
  configuration: "Release",
178
- sdk: "iphonesimulator"
179
+ sdk: "iphonesimulator",
180
+ out: "./report.txt",
181
+ pod_repo_update: true
179
182
  )
180
183
  Commands::ReportCommand.new(options).run!
181
184
  end
@@ -1,4 +1,5 @@
1
1
  require "cocoapods-core"
2
+ require "branch_io_cli/helper/methods"
2
3
 
3
4
  module BranchIOCLI
4
5
  module Commands
@@ -16,6 +17,32 @@ module BranchIOCLI
16
17
  exit 0
17
18
  end
18
19
 
20
+ # Only if a Podfile is detected/supplied at the command line.
21
+ if pod_install_required?
22
+ say "pod install required in order to build."
23
+ install = ask %{Run "pod install" now (Y/n)? }
24
+ if install.downcase =~ /^n/
25
+ say %{Please run "pod install" or "pod update" first in order to continue.}
26
+ exit(-1)
27
+ end
28
+
29
+ helper.verify_cocoapods
30
+
31
+ install_command = "pod install"
32
+
33
+ if config_helper.pod_repo_update
34
+ install_command += " --repo-update"
35
+ else
36
+ say <<EOF
37
+ You have disabled "pod repo update". This can cause "pod install" to fail in
38
+ some cases. If that happens, please rerun without --no-pod-repo-update or run
39
+ "pod install --repo-update" manually.
40
+ EOF
41
+ end
42
+
43
+ sh install_command
44
+ end
45
+
19
46
  File.open config_helper.report_path, "w" do |report|
20
47
  report.write "Branch.io Xcode build report v #{VERSION} #{DateTime.now}\n\n"
21
48
  report.write "#{report_configuration}\n"
@@ -153,13 +180,42 @@ Configuration: #{config_helper.configuration || '(none)'}
153
180
  SDK: #{config_helper.sdk}
154
181
  Podfile: #{config_helper.podfile_path || '(none)'}
155
182
  Cartfile: #{config_helper.cartfile_path || '(none)'}
183
+ Pod repo update: #{config_helper.pod_repo_update.inspect}
156
184
  Clean: #{config_helper.clean.inspect}
157
185
  EOF
158
186
  end
159
187
 
188
+ def pod_install_required?
189
+ # If this is set, its existence has been verified.
190
+ return false unless config_helper.podfile_path
191
+
192
+ lockfile_path = "#{config_helper.podfile_path}.lock"
193
+ manifest_path = File.expand_path "../Pods/Manifest.lock", config_helper.podfile_path
194
+
195
+ return true unless File.exist?(lockfile_path) && File.exist?(manifest_path)
196
+
197
+ podfile = Pod::Podfile.from_file Pathname.new config_helper.podfile_path
198
+ lockfile = Pod::Lockfile.from_file Pathname.new lockfile_path
199
+ manifest = Pod::Lockfile.from_file Pathname.new manifest_path
200
+
201
+ # diff the contents of Podfile.lock and Pods/Manifest.lock
202
+ # This is just what is done in the "[CP] Check Pods Manifest.lock" script build phase
203
+ # in a project using CocoaPods.
204
+ return true unless lockfile == manifest
205
+
206
+ # compare checksum of Podfile with checksum in Podfile.lock
207
+ # This is a good sanity check, but perhaps unnecessary. It means pod install
208
+ # has not been run since the Podfile was modified, which is probably an oversight.
209
+ return true unless lockfile.to_hash["PODFILE CHECKSUM"] == podfile.checksum
210
+
211
+ false
212
+ end
213
+
160
214
  # rubocop: disable Metrics/PerceivedComplexity
161
215
  def report_header
162
- header = `xcodebuild -version`
216
+ header = "cocoapods-core: #{Pod::CORE_VERSION}\n"
217
+
218
+ header += `xcodebuild -version`
163
219
 
164
220
  header += "\nTarget #{config_helper.target.name} deploy target: #{config_helper.target.deployment_target}\n"
165
221
 
@@ -202,6 +258,7 @@ EOF
202
258
  header += "Target #{config_helper.target.name.inspect} not found in Podfile.\n"
203
259
  end
204
260
 
261
+ header += "\npod install #{pod_install_required? ? '' : 'not '}required.\n"
205
262
  end
206
263
 
207
264
  if config_helper.cartfile_path
@@ -12,6 +12,9 @@ module BranchIOCLI
12
12
 
13
13
  # rubocop: disable Metrics/PerceivedComplexity
14
14
  def run!
15
+ # Make sure the user stashes or commits before continuing.
16
+ check_repo_status
17
+
15
18
  xcodeproj = config_helper.xcodeproj
16
19
 
17
20
  case config_helper.sdk_integration_mode
@@ -63,6 +66,44 @@ module BranchIOCLI
63
66
  sh "git commit -qm '[branch_io_cli] Branch SDK integration' #{changes.join(' ')}"
64
67
  end
65
68
  # rubocop: enable Metrics/PerceivedComplexity
69
+
70
+ def check_repo_status
71
+ # If the git command is not installed, there's not much we can do.
72
+ # Don't want to use verify_git here, which will insist on installing
73
+ # the command. The logic of that method could change.
74
+ return if `which git`.empty?
75
+
76
+ unless Dir.exist? ".git"
77
+ `git rev-parse --git-dir > /dev/null 2>&1`
78
+ # Not a git repo
79
+ return unless $?.success?
80
+ end
81
+
82
+ `git diff-index --quiet HEAD --`
83
+ return if $?.success?
84
+
85
+ # Show the user
86
+ sh "git status"
87
+
88
+ choice = choose do |menu|
89
+ menu.header = "There are uncommitted changes in this repo. It's best to stash or commit them before continuing."
90
+ menu.choice "Stash"
91
+ menu.choice "Commit (you will be prompted for a commit message)"
92
+ menu.choice "Quit"
93
+ menu.prompt = "Please enter one of the options above: "
94
+ end
95
+
96
+ case choice
97
+ when /^Stash/
98
+ sh "git stash -q"
99
+ when /^Commit/
100
+ message = ask "Please enter a commit message: "
101
+ sh "git commit -aqm'#{message}'"
102
+ else
103
+ say "Please stash or commit your changes before continuing."
104
+ exit(-1)
105
+ end
106
+ end
66
107
  end
67
108
  end
68
109
  end
@@ -100,8 +100,9 @@ module BranchIOCLI
100
100
  @scheme = options.scheme
101
101
  @target = options.target
102
102
  @configuration = options.configuration
103
- @report_path = options.out || "./report.txt"
103
+ @report_path = options.out
104
104
  @sdk = options.sdk
105
+ @pod_repo_update = options.pod_repo_update
105
106
 
106
107
  validate_xcodeproj_and_workspace options
107
108
  validate_target options
@@ -174,6 +175,7 @@ EOF
174
175
  <%= color('SDK:', BOLD) %> #{@sdk}
175
176
  <%= color('Podfile:', BOLD) %> #{@podfile_path || '(none)'}
176
177
  <%= color('Cartfile:', BOLD) %> #{@cartfile_path || '(none)'}
178
+ <%= color('Pod repo update:', BOLD) %> #{@pod_repo_update.inspect}
177
179
  <%= color('Clean:', BOLD) %> #{@clean.inspect}
178
180
  <%= color('Report path:', BOLD) %> #{@report_path}
179
181
  EOF
@@ -1,3 +1,3 @@
1
1
  module BranchIOCLI
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: branch_io_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Branch
@@ -286,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
286
  version: '0'
287
287
  requirements: []
288
288
  rubyforge_project:
289
- rubygems_version: 2.6.14
289
+ rubygems_version: 2.7.0
290
290
  signing_key:
291
291
  specification_version: 4
292
292
  summary: Branch.io command-line interface for mobile app integration