droxi 0.2.2 → 0.2.3

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: 9b3d4718e377e5291effa8c95ef8b88f2dd10f8b
4
- data.tar.gz: b14e7c988a4f40f0e53363c1d45f5257e9c76017
3
+ metadata.gz: 41024246faf2e570c6f96a0c2cfa77af7a871cbb
4
+ data.tar.gz: 9a516974414a11c3427e81590aa77d92a43e68d5
5
5
  SHA512:
6
- metadata.gz: c67954fa6f3ff293c90d88934651dd1c1438cd09461b2cbb5a57dcb72ae094a40d197fecd731fcbfa8fef3838459b2b3185d8cfa52784bf33d97d872b82efccf
7
- data.tar.gz: 9fab7e390b306c6a8322b52c2a8ec6b3645ac7b6cc35e2ff392e69130e46d7efce8c2cfd8c45fcc9f22f49f4d7b051ea9b7ab83f13adf2f12fd987a8dcf12989
6
+ metadata.gz: 13d4714c04d56e274c6dc50a7612bb51714c956503faf91a2b83b68d054221ffbb576455d44ad7568ee2a44998bb4f724cbed135108740e303d113ae2490a334
7
+ data.tar.gz: a91221075eb67995cb8a38578a4a030531e7028e86ed1346fae2570d28c56cb0b4e153e9cf51c8592c66408dd038bd2963213445bddfd4089d1fd824972a52de
data/droxi.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'droxi'
3
3
  s.version = IO.read('lib/droxi.rb')[/VERSION = '(.+)'/, 1]
4
- s.date = '2014-09-11'
4
+ s.date = '2014-12-17'
5
5
  s.summary = 'ftp-like command-line interface to Dropbox'
6
6
  s.description = "A command-line Dropbox interface inspired by GNU \
7
7
  coreutils, GNU ftp, and lftp. Features include smart tab \
data/lib/droxi.rb CHANGED
@@ -10,7 +10,7 @@ require_relative 'droxi/text'
10
10
  # Command-line Dropbox client module.
11
11
  module Droxi
12
12
  # Version number of the program.
13
- VERSION = '0.2.2'
13
+ VERSION = '0.2.3'
14
14
 
15
15
  # Message to display when invoked with the --help option.
16
16
  HELP_TEXT =
@@ -357,14 +357,21 @@ module Commands
357
357
 
358
358
  # Upload a local file.
359
359
  PUT = Command.new(
360
- 'put [-f] [-O REMOTE_DIR] LOCAL_FILE...',
360
+ 'put [-f] [-q] [-O REMOTE_DIR] [-t COUNT] LOCAL_FILE...',
361
361
  "Upload local files to the remote working directory. If a remote file of \
362
362
  the same name already exists, Dropbox will rename the upload unless the \
363
363
  the -f option is given, in which case the remote file will be \
364
364
  overwritten. If the -O option is given, the files will be uploaded to \
365
- the given directory instead of the current directory.",
365
+ the given directory instead of the current directory. The -q option \
366
+ prevents progress from being printed. The -t option specifies the \
367
+ number of tries in case of error. The default is 5; -t 0 will retry \
368
+ infinitely.",
366
369
  lambda do |client, state, args|
367
- flags = extract_flags(PUT.usage, args, '-f' => 0, '-O' => 1)
370
+ flags = extract_flags(PUT.usage, args,
371
+ '-f' => 0,
372
+ '-q' => 0,
373
+ '-O' => 1,
374
+ '-t' => 1)
368
375
 
369
376
  dest_index = flags.find_index('-O')
370
377
  dest_path = nil
@@ -378,6 +385,9 @@ module Commands
378
385
  end
379
386
  end
380
387
 
388
+ tries_index = flags.find_index('-t')
389
+ tries = tries_index ? flags[tries_index + 1].to_i : 5
390
+
381
391
  args.each do |arg|
382
392
  to_path = state.resolve_path(File.basename(arg))
383
393
 
@@ -390,7 +400,8 @@ module Commands
390
400
 
391
401
  # Chunked upload if file is more than 1M.
392
402
  if file.size > 1024 * 1024
393
- data = chunked_upload(client, to_path, file)
403
+ data = chunked_upload(client, to_path, file,
404
+ flags.include?('-q'), tries)
394
405
  else
395
406
  data = client.put_file(to_path, file)
396
407
  end
@@ -659,17 +670,6 @@ module Commands
659
670
  (state.pwd = File.dirname(state.pwd)) until state.metadata(state.pwd)
660
671
  end
661
672
 
662
- # def self.extract_flags(@usage, cmd, args, valid_flags)
663
- # tokens = args.take_while { |s| s[/^-\w+$/] }
664
- # args.shift(tokens.size)
665
-
666
- # # Process compound flags like -rf into -r, -f.
667
- # flags = tokens.join.chars.uniq.drop(1).map { |c| "-#{c}" }
668
- # invalid_flags = flags.reject { |f| valid_flags[f[1]] }
669
- # invalid_flags.each { |f| warn "#{cmd}: #{f}: invalid option" }
670
- # flags
671
- # end
672
-
673
673
  # Removes flags (e.g. -f) from the +Array+ and returns an +Array+ of the
674
674
  # removed flags. Prints warnings if the flags are not in the given +String+
675
675
  # of valid flags (e.g. '-rf').
@@ -701,29 +701,35 @@ module Commands
701
701
  end
702
702
 
703
703
  # Attempts to upload a file to the server in chunks, displaying progress.
704
- def self.chunked_upload(client, to_path, file)
704
+ def self.chunked_upload(client, to_path, file, quiet, tries)
705
705
  uploader = DropboxClient::ChunkedUploader.new(client, file, file.size)
706
- thread = Thread.new { monitor_upload(uploader, to_path) }
707
- loop_upload(uploader, thread)
706
+ thread = quiet ? nil : Thread.new { monitor_upload(uploader, to_path) }
707
+ tries = -1 if tries == 0
708
+ loop_upload(uploader, thread, tries)
708
709
  data = uploader.finish(to_path)
709
- thread.join
710
- print "\r" + (' ' * (18 + to_path.rpartition('/')[2].size)) + "\r"
710
+ if thread
711
+ thread.join
712
+ print "\r" + (' ' * (18 + to_path.rpartition('/')[2].size)) + "\r"
713
+ end
711
714
  data
712
715
  end
713
716
 
714
717
  # Continuously try to upload until successful or interrupted.
715
- def self.loop_upload(uploader, monitor_thread)
716
- while uploader.offset < uploader.total_size
718
+ # rubocop:disable Style/MethodLength
719
+ def self.loop_upload(uploader, monitor_thread, tries)
720
+ while tries != 0 && uploader.offset < uploader.total_size
717
721
  begin
718
722
  uploader.upload(1024 * 1024)
719
723
  rescue DropboxError => error
720
724
  puts "\n" + error.to_s
725
+ --tries
721
726
  end
722
727
  end
723
728
  rescue Interrupt => error
724
- monitor_thread.kill
729
+ monitor_thread.kill if monitor_thread
725
730
  raise error
726
731
  end
732
+ # rubocop:enable Style/MethodLength
727
733
 
728
734
  # Displays real-time progress for the a being uploaded.
729
735
  def self.monitor_upload(uploader, to_path)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: droxi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mulcahy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-11 00:00:00.000000000 Z
11
+ date: 2014-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dropbox-sdk