fastlane-plugin-dropbox 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ea3802e7d6f6303249be04205d0c152474e3bae
4
- data.tar.gz: bd7e8e8c9c76db3d960dc32c4105019b2a97a434
3
+ metadata.gz: 9c56b82a82ac14332f51d316963e2d754f953d5f
4
+ data.tar.gz: 2e6873044edb0257de75a9f8c43ff6d9f01888ea
5
5
  SHA512:
6
- metadata.gz: cb02b5404cbdb428649712c5a1fafc48ddfe79578b9870c1e97e9068d084d389e0e331d095e80cd7caf520c343b0014f8241bee8ab6d815672b9292cbb3b2c04
7
- data.tar.gz: 3ed6e4330e586e25897d545a7d41ef4f341d8b76b93d23011696f92b6a7453c67025c40d72511e80b7be00c8d3cef8c512dfa818fc5897ca61d6cef8e19f3862
6
+ metadata.gz: 1ad412c087e911833ff72a285e3814b79802243ff06aa277d8866a3a44859408691d3f3723ea1719884488e9969cdb48424a862e2ecdd471fa5025137ce7276b
7
+ data.tar.gz: e370924eccc4c93bb911bcb33786a5088d379d38a83bdb474c361aa092eccb03063eb5ed49af6dc382647d4ee072d2b5abbc7d1f5d5df2bf82341550f587b5db
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # dropbox plugin
1
+ # Fastlane Dropbox plugin
2
2
 
3
- [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-dropbox)
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-dropbox) [![Gem Version](https://badge.fury.io/rb/fastlane-plugin-dropbox.svg)](https://badge.fury.io/rb/fastlane-plugin-dropbox)
4
4
 
5
5
  ## Getting Started
6
6
 
@@ -29,6 +29,8 @@ In order to register a Dropbox app you need to go to [Dropbox Developers](https:
29
29
  dropbox(
30
30
  file_path: '/some/local-path/to/file.txt',
31
31
  dropbox_path: '/path/to/Dropbox/destination/folder',
32
+ write_mode: "update",
33
+ update_rev: "file-revision-to-update",
32
34
  app_key: 'your-dropbox-app-key',
33
35
  app_secret: 'your-dropbox-app-secret'
34
36
  )
@@ -13,6 +13,22 @@ module Fastlane
13
13
 
14
14
  params[:keychain] ||= default_keychain
15
15
 
16
+ write_mode =
17
+ if params[:write_mode].nil?
18
+ 'add'
19
+ elsif params[:write_mode].eql? 'update'
20
+ if params[:update_rev].nil?
21
+ UI.user_error! 'You need to specify `update_rev` when using `update` write_mode.'
22
+ else
23
+ DropboxApi::Metadata::WriteMode.new({
24
+ '.tag' => 'update',
25
+ 'update' => params[:update_rev]
26
+ })
27
+ end
28
+ else
29
+ params[:write_mode]
30
+ end
31
+
16
32
  access_token = get_token_from_keychain(params[:keychain], params[:keychain_password])
17
33
  unless access_token
18
34
  access_token = request_token(params[:app_key], params[:app_secret])
@@ -23,36 +39,52 @@ module Fastlane
23
39
 
24
40
  client = DropboxApi::Client.new(access_token)
25
41
 
26
- output_file_name = nil
42
+ output_file = nil
27
43
 
28
44
  chunk_size = 157_286_400 # 150 megabytes
29
45
 
30
46
  if File.size(params[:file_path]) < chunk_size
31
- file = client.upload destination_path(params), File.read(params[:file_path])
32
- output_file_name = file.name
47
+ output_file = upload(client, params[:file_path], destination_path(params), write_mode)
33
48
  else
34
- parts = chunker params[:file_path], './part', chunk_size
49
+ output_file = upload_chunked(client, chunk_size, params[:file_path], destination_path(params), write_mode)
50
+ end
35
51
 
36
- UI.message ''
37
- UI.important "The archive is a big file so we're uploading it in 150MB chunks"
38
- UI.message ''
52
+ if output_file.name != File.basename(params[:file_path])
53
+ UI.user_error! 'Failed to upload file to Dropbox'
54
+ else
55
+ UI.success "File revision: '#{output_file.rev}'"
56
+ UI.success "Successfully uploaded file to Dropbox at '#{destination_path(params)}'"
57
+ end
58
+ end
59
+
60
+ def self.upload(client, file_path, destination_path, write_mode)
61
+ begin
62
+ client.upload destination_path, File.read(file_path), mode: write_mode
63
+ rescue DropboxApi::Errors::UploadWriteFailedError => e
64
+ UI.user_error! "Failed to upload file to Dropbox. Error message returned by Dropbox API: \"#{e.message}\""
65
+ end
66
+ end
67
+
68
+ def self.upload_chunked(client, chunk_size, file_path, destination_path, write_mode)
69
+ parts = chunker file_path, './part', chunk_size
70
+ UI.message ''
71
+ UI.important "The archive is a big file so we're uploading it in 150MB chunks"
72
+ UI.message ''
39
73
 
74
+ begin
40
75
  UI.message "Uploading part #1 (#{File.size(parts[0])} bytes)..."
41
76
  cursor = client.upload_session_start File.read(parts[0])
42
77
  parts[1..parts.size].each_with_index do |part, index|
43
78
  UI.message "Uploading part ##{index + 2} (#{File.size(part)} bytes)..."
44
79
  client.upload_session_append_v2 cursor, File.read(part)
45
80
  end
46
- file = client.upload_session_finish cursor, DropboxApi::Metadata::CommitInfo.new('path' => destination_path(params),
47
- 'mode' => :add)
48
- output_file_name = file.name
49
- parts.each { |part| File.delete(part) }
50
- end
51
81
 
52
- if output_file_name != File.basename(params[:file_path])
53
- UI.user_error! 'Failed to upload archive to Dropbox'
54
- else
55
- UI.success "Successfully uploaded archive to Dropbox at '#{destination_path(params)}'"
82
+ client.upload_session_finish cursor, DropboxApi::Metadata::CommitInfo.new('path' => destination_path,
83
+ 'mode' => write_mode)
84
+ rescue DropboxApi::Errors::UploadWriteFailedError => e
85
+ UI.user_error! "Error uploading file to Dropbox: \"#{e.message}\""
86
+ ensure
87
+ parts.each { |part| File.delete(part) }
56
88
  end
57
89
  end
58
90
 
@@ -148,6 +180,22 @@ module Fastlane
148
180
  description: 'Path to the destination Dropbox folder',
149
181
  type: String,
150
182
  optional: true),
183
+ FastlaneCore::ConfigItem.new(key: :write_mode,
184
+ env_name: 'DROPBOX_WRITE_MODE',
185
+ description: 'Determines uploaded file write mode. Supports `add`, `overwrite` and `update`',
186
+ type: String,
187
+ optional: true,
188
+ verify_block: proc do |value|
189
+ UI.command_output("write_mode '#{value}' not recognized. Defaulting to `add`.") unless value =~ /(add|overwrite|update)/
190
+ end),
191
+ FastlaneCore::ConfigItem.new(key: :update_rev,
192
+ env_name: 'DROPBOX_UPDATE_REV',
193
+ description: 'Revision of the file uploaded in `update` write_mode',
194
+ type: String,
195
+ optional: true,
196
+ verify_block: proc do |value|
197
+ UI.user_error!("Revision no. must be at least 9 hexadecimal characters ([0-9a-f]).") unless value =~ /[0-9a-f]{9,}/
198
+ end),
151
199
  FastlaneCore::ConfigItem.new(key: :app_key,
152
200
  env_name: 'DROPBOX_APP_KEY',
153
201
  description: 'App Key of your Dropbox app',
@@ -195,6 +243,8 @@ module Fastlane
195
243
  'dropbox(
196
244
  file_path: "./path/to/file.txt",
197
245
  dropbox_path: "/My Dropbox Folder/Text files",
246
+ write_mode: "add/overwrite/update",
247
+ update_rev: "a1c10ce0dd78",
198
248
  app_key: "dropbox-app-key",
199
249
  app_secret: "dropbox-app-secret"
200
250
  )'
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Dropbox
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-dropbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Kapusta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-18 00:00:00.000000000 Z
11
+ date: 2018-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dropbox_api