tms 1.3.0 → 1.3.1
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.
- data/README.markdown +40 -0
- data/VERSION +1 -1
- data/bin/tms +45 -20
- data/lib/tms/comparison.rb +60 -1
- data/tms.gemspec +2 -2
- metadata +4 -4
data/README.markdown
CHANGED
@@ -6,6 +6,46 @@ View avaliable Time Machine backups and show changes
|
|
6
6
|
|
7
7
|
Name from [fernlightning.com](http://www.fernlightning.com/doku.php?id=software:misc:tms)
|
8
8
|
|
9
|
+
## INSTALL:
|
10
|
+
|
11
|
+
gem install progress # use sudo if you need
|
12
|
+
|
13
|
+
## USAGE:
|
14
|
+
|
15
|
+
List backups:
|
16
|
+
|
17
|
+
tms
|
18
|
+
|
19
|
+
Show changes for last backup (same as `tms -2 -1`):
|
20
|
+
|
21
|
+
tms -1
|
22
|
+
|
23
|
+
Show changes between first and last backups:
|
24
|
+
|
25
|
+
tms 1 -1
|
26
|
+
|
27
|
+
Show changes for last backup only under your user dir:
|
28
|
+
|
29
|
+
tms -1 -f ~
|
30
|
+
|
31
|
+
List backups from another Time Machine:
|
32
|
+
|
33
|
+
tms -d `/Volumes/Time Machine/Backups.backupdb/user name`
|
34
|
+
|
35
|
+
Show backups in progress:
|
36
|
+
|
37
|
+
tms -i
|
38
|
+
|
39
|
+
Other options:
|
40
|
+
|
41
|
+
tms -h
|
42
|
+
|
43
|
+
## REQUIREMENTS:
|
44
|
+
|
45
|
+
* OS X
|
46
|
+
* ruby
|
47
|
+
* Time Machine
|
48
|
+
|
9
49
|
## Copyright
|
10
50
|
|
11
51
|
Copyright (c) 2010 Boba Fat. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.1
|
data/bin/tms
CHANGED
@@ -3,22 +3,34 @@
|
|
3
3
|
require 'tms'
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
def option_parser
|
7
|
-
@option_parser ||=
|
8
|
-
|
9
|
-
|
6
|
+
def option_parser(type = nil)
|
7
|
+
@option_parser ||= {}
|
8
|
+
@option_parser[type] ||= OptionParser.new do |op|
|
9
|
+
op.banner = <<-TEXT
|
10
|
+
#{op.program_name}, version #{Tms.version}
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
Usege:
|
13
|
+
List: #{op.program_name} [options]
|
14
|
+
Diff: #{op.program_name} [options] id|nXXX [id|nXXX]
|
15
|
+
|
16
|
+
TEXT
|
17
|
+
|
18
|
+
if type
|
19
|
+
op.banner << <<-TEXT
|
20
|
+
Options for #{type} (-h to view all options):
|
21
|
+
|
22
|
+
TEXT
|
23
|
+
end
|
15
24
|
|
16
25
|
op.on('-d', '--directory DIRECTORY', 'Use backup directory') do |backups_dir|
|
17
26
|
Tms::Backup.backups_dir = backups_dir
|
18
27
|
end
|
19
28
|
|
20
|
-
|
21
|
-
|
29
|
+
unless type == :list
|
30
|
+
op.on('-f', '--filter DIRECTORY', 'Show diff starting from directory',
|
31
|
+
' (can be used multiple times)') do |filter_dir|
|
32
|
+
Tms::Backup.add_filter_dir(filter_dir)
|
33
|
+
end
|
22
34
|
end
|
23
35
|
|
24
36
|
op.on('-i', '--[no-]in-progress', 'Show backups in progress',
|
@@ -27,20 +39,28 @@ def option_parser
|
|
27
39
|
Tms::Backup.show_in_progress = show_in_progress
|
28
40
|
end
|
29
41
|
|
30
|
-
|
31
|
-
|
42
|
+
unless type == :diff
|
43
|
+
op.on('-l', '--[no-]long', 'Show more info about backup in list') do |show_all_columns|
|
44
|
+
Tms::Backup.show_all_columns = show_all_columns
|
45
|
+
end
|
32
46
|
end
|
33
47
|
|
34
|
-
op.on('--[no-]color', 'Use color',
|
48
|
+
op.on('--[no-]color', 'Use color',
|
49
|
+
' (true by default if stdout is a tty)') do |colorize|
|
35
50
|
Tms::Backup.colorize = colorize
|
36
51
|
end
|
37
52
|
|
38
|
-
|
39
|
-
|
53
|
+
unless type == :list
|
54
|
+
op.on('--[no-]progress', 'Show progress when counting folder size',
|
55
|
+
' (true by default if stderr is a tty)') do |show_progress|
|
56
|
+
Tms::Backup.show_progress = show_progress
|
57
|
+
end
|
40
58
|
end
|
41
59
|
|
42
|
-
|
43
|
-
|
60
|
+
unless type == :list
|
61
|
+
op.on('--[no-]decimal', 'Use base 10 size') do |use_decimal|
|
62
|
+
Tms::Space.base10 = use_decimal
|
63
|
+
end
|
44
64
|
end
|
45
65
|
|
46
66
|
op.on_tail('-h', '--help', 'Show this message') do
|
@@ -48,7 +68,7 @@ def option_parser
|
|
48
68
|
exit
|
49
69
|
end
|
50
70
|
|
51
|
-
op.on_tail('--version', 'Show version') do
|
71
|
+
op.on_tail('-v', '--version', 'Show version') do
|
52
72
|
puts Tms.version
|
53
73
|
exit
|
54
74
|
end
|
@@ -57,9 +77,14 @@ end
|
|
57
77
|
|
58
78
|
ids, options = ARGV.partition{ |arg| arg =~ /^[\-n]?\d+$/ }
|
59
79
|
begin
|
60
|
-
option_parser.parse
|
80
|
+
option_parser.parse(options) # exits on -h or -v
|
81
|
+
rescue OptionParser::ParseError => e
|
82
|
+
end
|
83
|
+
type = ids.empty? ? :list : :diff
|
84
|
+
begin
|
85
|
+
option_parser(type).parse!(options)
|
61
86
|
rescue OptionParser::ParseError => e
|
62
|
-
abort "#{e.to_s}\n#{option_parser.help}"
|
87
|
+
abort "#{e.to_s}\n#{option_parser(type).help}"
|
63
88
|
end
|
64
89
|
unless options.empty?
|
65
90
|
abort "Unknown arguments: #{options.join(' ')}"
|
data/lib/tms/comparison.rb
CHANGED
@@ -67,11 +67,42 @@ module Tms
|
|
67
67
|
$stdout.puts "#{s}#{CLEAR_LINE}"
|
68
68
|
end
|
69
69
|
|
70
|
+
def trim_right_colored(s, length)
|
71
|
+
length = 0 if length < 0
|
72
|
+
colorizers = []
|
73
|
+
s.gsub(/\e\[\d+(;\d+)*m/) do
|
74
|
+
if $`.length < length
|
75
|
+
length += $&.length
|
76
|
+
else
|
77
|
+
colorizers << $&
|
78
|
+
end
|
79
|
+
end
|
80
|
+
s[0, length] << colorizers.join('')
|
81
|
+
end
|
82
|
+
|
83
|
+
def trim_left_colored(s, length)
|
84
|
+
length = 0 if length < 0
|
85
|
+
colorizers = []
|
86
|
+
s.reverse.gsub(/m(\d+;)*\d+\[\e/) do
|
87
|
+
if $`.length < length
|
88
|
+
length += $&.length
|
89
|
+
else
|
90
|
+
colorizers << $&.reverse
|
91
|
+
end
|
92
|
+
end
|
93
|
+
length = s.length if length > s.length
|
94
|
+
colorizers.reverse.join('') << s[-length, length]
|
95
|
+
end
|
96
|
+
|
70
97
|
def progress
|
71
98
|
if Tms::Backup.show_progress?
|
72
99
|
@last_progress ||= Time.now
|
73
100
|
if (now = Time.now) > @last_progress + 0.1
|
74
|
-
|
101
|
+
line = yield.to_s
|
102
|
+
if width = terminal_width
|
103
|
+
line = trim_left_colored(line, terminal_width - 1)
|
104
|
+
end
|
105
|
+
$stderr.print "#{line}#{CLEAR_LINE}\r"
|
75
106
|
@last_progress = now
|
76
107
|
end
|
77
108
|
end
|
@@ -106,5 +137,33 @@ module Tms
|
|
106
137
|
@total += sub_total
|
107
138
|
end
|
108
139
|
end
|
140
|
+
|
141
|
+
def command_exists?(command)
|
142
|
+
`which #{command}`
|
143
|
+
$?.success?
|
144
|
+
end
|
145
|
+
|
146
|
+
# method from hirb: https://github.com/cldwalker/hirb
|
147
|
+
# Returns [width, height] of terminal when detected, nil if not detected.
|
148
|
+
# Think of this as a simpler version of Highline's Highline::SystemExtensions.terminal_size()
|
149
|
+
def terminal_size
|
150
|
+
if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
151
|
+
[ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
|
152
|
+
elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
|
153
|
+
[`tput cols`.to_i, `tput lines`.to_i]
|
154
|
+
elsif STDIN.tty? && command_exists?('stty')
|
155
|
+
`stty size`.scan(/\d+/).map{ |s| s.to_i }.reverse
|
156
|
+
else
|
157
|
+
nil
|
158
|
+
end
|
159
|
+
rescue
|
160
|
+
nil
|
161
|
+
end
|
162
|
+
|
163
|
+
def terminal_width
|
164
|
+
if size = terminal_size
|
165
|
+
size[0]
|
166
|
+
end
|
167
|
+
end
|
109
168
|
end
|
110
169
|
end
|
data/tms.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tms}
|
8
|
-
s.version = "1.3.
|
8
|
+
s.version = "1.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Boba Fat"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-12}
|
13
13
|
s.default_executable = %q{tms}
|
14
14
|
s.description = %q{View avaliable Time Machine backups and show their diff}
|
15
15
|
s.executables = ["tms"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 1
|
10
|
+
version: 1.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Boba Fat
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-12 00:00:00 +03:00
|
19
19
|
default_executable: tms
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|