dropup 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 (5) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/bin/dropup +110 -0
  4. data/dropup.gemspec +30 -0
  5. metadata +64 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5a5f5c04597a8168388e2c1088da707fef35bc9d
4
+ data.tar.gz: b1c8d1f5b67e8f351c311f3a64fbbf2c49e22a66
5
+ SHA512:
6
+ metadata.gz: 5d4eb6a194d40337505cc71a041070b22e7efe79e46eadb6ce65a593cb3ede06f374efeca01930f71f8721b0fd56c3048ca5e8b3a9aa9ede92cd1a7dc2963778
7
+ data.tar.gz: 45c00dfb1425e0f25f773561d9ee57026f96f1049d7b935f27277cf9eb2aea8326a92fb59877c36f1a72277e8ac4d71965e1a97753ea21314f5734d1bbf03b75
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/bin/dropup ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath)
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+
7
+ require 'time'
8
+ require 'optparse'
9
+ require 'open3'
10
+ require 'terminal-notifier'
11
+
12
+ options = {
13
+ :size => 400, # in MB
14
+ :keep => 0, # number of backups to keep
15
+ :dry => false,
16
+ :verbose => false,
17
+ :notification => false
18
+ }
19
+
20
+ opt_parser = OptionParser.new do |opt|
21
+ opt.banner = "Usage: dropup <dir1> <dir2> <dirN> <destination-%.dmg>"
22
+ opt.separator ""
23
+ opt.separator ""
24
+ opt.separator "Options"
25
+
26
+ opt.on("-h", "--help", "help") do
27
+ puts opt_parser
28
+ exit
29
+ end
30
+
31
+ opt.on("-v", "--verbose", "verbose") do
32
+ options[:verbose] = true
33
+ end
34
+
35
+ opt.on("-n", "--notification", "notification") do
36
+ options[:notification] = true
37
+ end
38
+
39
+ opt.on("-k", "--keep KEEP", "keep") do |keep|
40
+ options[:keep] = keep.to_i - 1
41
+ end
42
+
43
+ opt.on("-s", "--size SIZE", "size") do |size|
44
+ options[:size] = size.to_i
45
+ end
46
+ end
47
+
48
+ opt_parser.parse!
49
+
50
+ if ARGV.length < 2
51
+ puts opt_parser
52
+ exit
53
+ end
54
+
55
+ destination = File.expand_path(ARGV.pop)
56
+
57
+ backups = Dir[destination.gsub(/%/,'*')].sort.reverse
58
+
59
+ puts "Backups: #{backups}" if options[:verbose]
60
+
61
+ while backups.length > options[:keep]
62
+ backup = backups.pop
63
+ puts "Deleting: #{backup}" if options[:verbose]
64
+ File.delete(backup)
65
+ end
66
+
67
+ backup = destination.gsub(/%/, Time.now.strftime("%Y%m%d%M%H%S%L"))
68
+
69
+ puts "Creating: #{backup}" if options[:verbose]
70
+
71
+ password = %x[security find-internet-password -s dropup -a password -g 2>&1][/^password:\s"([^"]*)"/,1]
72
+
73
+ if password == ''
74
+ puts "Set a password: security add-internet-password -s dropup -U -T \"\" -a password -w <PASSWORD>"
75
+ exit
76
+ end
77
+
78
+ cmd = %W(
79
+ hdiutil create
80
+ -encryption AES-256
81
+ -stdinpass
82
+ -volname "Backup"
83
+ -format UDZO
84
+ -megabytes #{options[:size]}
85
+ #{ARGV.map{|s| "-srcfolder \"#{File.expand_path(s)}\"" }.join(' ')}
86
+ "#{File.expand_path(backup)}"
87
+ ).join(' ')
88
+
89
+ puts "Command: #{cmd}" if options[:verbose]
90
+
91
+ if not options[:dry]
92
+ Open3.popen3(cmd) do |stdin, stdout, stderr, wait|
93
+ stdin.printf(password)
94
+ stdin.close
95
+
96
+ TerminalNotifier.notify('Backup Starting') if options[:notification]
97
+ puts "Building dmg" if options[:verbose]
98
+
99
+ if wait.value == 0 then
100
+
101
+ TerminalNotifier.notify('Backup Successful', :title => 'Success') if options[:notification]
102
+ puts "Success" if options[:verbose]
103
+
104
+ else
105
+
106
+ TerminalNotifier.notify('Backup Failed', :title => 'Error', :sound => 'default') if options[:notification]
107
+ puts "Error: #{stderr.read}" if options[:verbose]
108
+ end
109
+ end
110
+ end
data/dropup.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'dropup'
3
+ s.version = '0.2'
4
+ s.date = '2014-10-01'
5
+
6
+ s.authors = [ 'Torsten Curdt' ]
7
+ s.email = [ 'tcurdt@vafer.org' ]
8
+ s.homepage = 'http://github.com/tcurdt/dropup'
9
+ s.summary = 'dropup tool'
10
+ s.description = 'dropup tool long'
11
+
12
+ s.rubyforge_project = s.name
13
+
14
+ s.license = 'Apache'
15
+
16
+ s.platform = Gem::Platform::RUBY
17
+
18
+ s.has_rdoc = false
19
+
20
+ s.files = Dir["{lib,man,spec}/*"] + Dir["{README,LICENSE}*"] + Dir["*{.gemspec,file}"]
21
+ s.test_files = s.files.select { |path| path =~ /^spec\/.*_spec\.rb/ }
22
+ s.executables = Dir["bin/*"].map {|f| File.basename f }
23
+ s.require_paths = ['lib']
24
+
25
+ s.requirements = <<-EOS
26
+ Nothing?
27
+ EOS
28
+
29
+ s.add_dependency 'terminal-notifier', '~> 1.6'
30
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dropup
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.2'
5
+ platform: ruby
6
+ authors:
7
+ - Torsten Curdt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal-notifier
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ description: dropup tool long
28
+ email:
29
+ - tcurdt@vafer.org
30
+ executables:
31
+ - dropup
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - Gemfile
36
+ - bin/dropup
37
+ - dropup.gemspec
38
+ homepage: http://github.com/tcurdt/dropup
39
+ licenses:
40
+ - Apache
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements:
57
+ - |
58
+ Nothing?
59
+ rubyforge_project: dropup
60
+ rubygems_version: 2.4.2
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: dropup tool
64
+ test_files: []