gemfury 0.10.0 → 0.11.0.rc1

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
  SHA256:
3
- metadata.gz: d7ad8af7e2f9db42d44a05360c28f3e691607c272b4d11a4de88047d7fd37eb2
4
- data.tar.gz: 113e1ffe15573f136a79f27fe8606a9b65568d8905128ea6beebd0d5d0748416
3
+ metadata.gz: d70b381f57a4b0bdaa62c9cf441eaa42bbd5c0fbb6ff3317ef2a396fbbf65217
4
+ data.tar.gz: 4a2869a2f1b62c3bbb9326dc4dcf73b8086a0ac4d4f6a75925c90a4fb8e8fe75
5
5
  SHA512:
6
- metadata.gz: 57e3be83d8d4f0c121273b137655f363af2c5b9e5cd2cb036b02c8a9cdc6ec025b75380b19a7c45ad544c5beb772bb6e8cc0e220bffa547aacdfe10f8139d7b8
7
- data.tar.gz: ab16b83e43abacaf44a274ea6d78c216a98fb3ff1bde3596ddf4c41f75046dd1f4a31bd614a49c5d91a81a05e1a66b00b9fed71c78498bdd8cd18de11f23d1d3
6
+ metadata.gz: 5c7eb18d8f1660c10ef60c7eabe1f218ab02ccbdc28d7f79d59f15d0d827452ef53b238cc7d4e523be9b38f6f10626142dfca7ab789e3d55e9c7d535d4311923
7
+ data.tar.gz: 2f135047469572a771c67a24b47d113b3710154ed421319148e5439bf8b7196854d8d9366ee6ab5cdb8474b9ed36f25761bbdcbea85de279e5a21508e99273a6
@@ -1,3 +1,6 @@
1
+ require 'progressbar'
2
+ require 'delegate'
3
+
1
4
  class Gemfury::Command::App < Thor
2
5
  include Gemfury::Command::Authorization
3
6
  UserAgent = "Gemfury CLI #{Gemfury::VERSION}".freeze
@@ -15,6 +18,7 @@ class Gemfury::Command::App < Thor
15
18
 
16
19
  ### PACKAGE MANAGEMENT ###
17
20
  option :public, :type => :boolean, :desc => "Create as public package"
21
+ option :quiet, :type => :boolean, :aliases => "-q", :desc => "Do not show progress bar", :default => false
18
22
  desc "push FILE", "Upload a new version of a package"
19
23
  def push(*gems)
20
24
  with_checks_and_rescues do
@@ -46,10 +50,10 @@ class Gemfury::Command::App < Thor
46
50
  shell.say "\n*** #{gem_name.capitalize} Versions ***\n\n"
47
51
 
48
52
  va = []
49
- va = [ %w{ version uploaded uploaded_by } ]
53
+ va = [ %w{ version uploaded_by uploaded } ]
50
54
  versions.each do |v|
51
- uploaded = Time.parse(v['created_at']).strftime('%F %R %z')
52
- va << [ v['version'], uploaded, v['created_by']['name'] ]
55
+ uploaded = time_ago(Time.parse(v['created_at']).getlocal)
56
+ va << [ v['version'], v['created_by']['name'], uploaded ]
53
57
  end
54
58
 
55
59
  shell.print_table(va)
@@ -114,16 +118,25 @@ class Gemfury::Command::App < Thor
114
118
  desc "sharing", "List collaborators"
115
119
  def sharing
116
120
  with_checks_and_rescues do
117
- me = client.account_info['username']
121
+ account_info = client.account_info
122
+ me = account_info['username']
123
+
118
124
  collaborators = client.list_collaborators
119
125
  if collaborators.empty?
120
- shell.say "You (#{me}) are the only collaborator", :green
126
+ shell.say %Q(You (#{me}) are the only collaborator\n), :green
121
127
  else
122
128
  shell.say %Q(\n*** Collaborators for "#{me}" ***\n), :green
123
- usernames = [me] + collaborators.map { |c| c['username'] }
124
- shell.say usernames.join("\n")
129
+
130
+ va = [ %w{ username permission } ]
131
+
132
+ if account_info['type'] == 'user'
133
+ va << [ me, 'owner' ]
134
+ end
135
+
136
+ collaborators.each { |c| va << [ c['username'], c['permission'] ] }
137
+
138
+ shell.print_table(va)
125
139
  end
126
- shell.say "\n"
127
140
  end
128
141
  end
129
142
 
@@ -248,6 +261,10 @@ private
248
261
  g.is_a?(String) ? File.new(g) : g rescue nil
249
262
  end.compact
250
263
 
264
+ if !options[:quiet] && !shell.mute? && $stdout.tty?
265
+ files = files.map { |g| ProgressIO.new(g) }
266
+ end
267
+
251
268
  if files.empty?
252
269
  die!("Problem: No valid packages found", nil, command)
253
270
  end
@@ -259,11 +276,23 @@ private
259
276
 
260
277
  error_ex = nil
261
278
 
262
- # Let's get uploading
263
279
  files.each do |file|
280
+ show_bar = file.is_a?(ProgressIO) && file.show_bar?
281
+ title = "Uploading #{File.basename(file.path)} "
282
+
264
283
  begin
265
- shell.say "Uploading #{File.basename(file.path)} "
266
- client.push_gem(file, push_options)
284
+ if show_bar
285
+ begin
286
+ client.push_gem(file, push_options)
287
+ ensure
288
+ shell.say "\e[A\e[0K", nil, false
289
+ shell.say title
290
+ end
291
+ else
292
+ shell.say title
293
+ client.push_gem(file, push_options)
294
+ end
295
+
267
296
  shell.say "- done"
268
297
  rescue Gemfury::CorruptGemFile => e
269
298
  shell.say "- problem processing this package", :red
@@ -286,10 +315,77 @@ private
286
315
  end
287
316
  end
288
317
 
318
+ C50K = 50000
319
+
320
+ class ProgressIO < SimpleDelegator
321
+ attr_reader :content_type, :original_filename, :local_path
322
+
323
+ def initialize(filename_or_io, content_type = 'application/octet-stream', fname = nil)
324
+ io = filename_or_io
325
+ local_path = ''
326
+
327
+ if io.respond_to? :read
328
+ local_path = filename_or_io.respond_to?(:path) ? filename_or_io.path : 'local.path'
329
+ else
330
+ io = File.open(filename_or_io)
331
+ local_path = filename_or_io
332
+ end
333
+
334
+ fname ||= local_path
335
+
336
+ @content_type = content_type
337
+ @original_filename = File.basename(fname)
338
+ @local_path = local_path
339
+
340
+ if io.respond_to? :size
341
+ filesize = io.size
342
+ else
343
+ filesize = io.stat.size
344
+ end
345
+
346
+ if filesize > C50K
347
+ title = 'Uploading %s ' % File.basename(fname)
348
+ @bar = ProgressBar.create(:title => title, :total => filesize)
349
+ else
350
+ @bar = nil
351
+ end
352
+
353
+ super(io)
354
+ end
355
+
356
+ def show_bar?
357
+ @bar != nil
358
+ end
359
+
360
+ def read(length)
361
+ buf = __getobj__.read(length)
362
+ unless @bar.nil? || buf.nil?
363
+ @bar.progress += buf.bytesize
364
+ end
365
+
366
+ buf
367
+ end
368
+ end
369
+
289
370
  def die!(msg, err = nil, command = nil)
290
371
  shell.say msg, :red
291
372
  help(command) if command
292
373
  shell.say %Q(#{err.class.name}: #{err}\n#{err.backtrace.join("\n")}) if err && ENV['DEBUG']
293
374
  exit(1)
294
375
  end
376
+
377
+ def time_ago(tm)
378
+ ago = tm.strftime('%F %R')
379
+
380
+ in_secs = Time.now - tm
381
+ if in_secs < 60
382
+ ago += ' (~ %ds ago)' % in_secs
383
+ elsif in_secs < 3600
384
+ ago += ' (~ %sm ago)' % (in_secs / 60).floor
385
+ elsif in_secs < (3600 * 24)
386
+ ago += ' (~ %sh ago)' % (in_secs / 3600).floor
387
+ end
388
+
389
+ ago
390
+ end
295
391
  end
@@ -1,3 +1,3 @@
1
1
  module Gemfury
2
- VERSION = '0.10.0'
2
+ VERSION = '0.11.0.rc1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemfury
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Rykov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-20 00:00:00.000000000 Z
11
+ date: 2019-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -104,6 +104,20 @@ dependencies:
104
104
  - - "<"
105
105
  - !ruby/object:Gem::Version
106
106
  version: 2.1.0.pre
107
+ - !ruby/object:Gem::Dependency
108
+ name: progressbar
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 1.10.1
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 1.10.1
107
121
  description: 'Hosted repo for your public and private packages at https://gemfury.com
108
122
 
109
123
  '
@@ -165,9 +179,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
179
  version: '0'
166
180
  required_rubygems_version: !ruby/object:Gem::Requirement
167
181
  requirements:
168
- - - ">="
182
+ - - ">"
169
183
  - !ruby/object:Gem::Version
170
- version: '0'
184
+ version: 1.3.1
171
185
  requirements: []
172
186
  rubyforge_project:
173
187
  rubygems_version: 2.7.8