piston 1.4.0 → 2.0.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.
Files changed (85) hide show
  1. data/History.txt +24 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +109 -0
  4. data/{README → README.txt} +14 -10
  5. data/VERSION.yml +4 -0
  6. data/bin/piston +3 -8
  7. data/lib/piston/cli.rb +121 -0
  8. data/lib/piston/commands/base.rb +44 -0
  9. data/lib/piston/commands/convert.rb +23 -71
  10. data/lib/piston/commands/diff.rb +14 -46
  11. data/lib/piston/commands/import.rb +48 -57
  12. data/lib/piston/commands/info.rb +24 -0
  13. data/lib/piston/commands/lock_unlock.rb +26 -0
  14. data/lib/piston/commands/status.rb +29 -54
  15. data/lib/piston/commands/update.rb +35 -122
  16. data/lib/piston/commands/upgrade.rb +26 -0
  17. data/lib/piston/commands.rb +4 -0
  18. data/lib/piston/git/client.rb +76 -0
  19. data/lib/piston/git/commit.rb +114 -0
  20. data/lib/piston/git/repository.rb +63 -0
  21. data/lib/piston/git/working_copy.rb +145 -0
  22. data/lib/piston/git.rb +13 -0
  23. data/lib/piston/repository.rb +61 -0
  24. data/lib/piston/revision.rb +83 -0
  25. data/lib/piston/svn/client.rb +88 -0
  26. data/lib/piston/svn/repository.rb +67 -0
  27. data/lib/piston/svn/revision.rb +112 -0
  28. data/lib/piston/svn/working_copy.rb +184 -0
  29. data/lib/piston/svn.rb +15 -0
  30. data/lib/piston/version.rb +9 -7
  31. data/lib/piston/working_copy.rb +334 -0
  32. data/lib/piston.rb +13 -64
  33. data/lib/subclass_responsibility_error.rb +2 -0
  34. data/test/integration_helpers.rb +36 -0
  35. data/test/spec_suite.rb +4 -0
  36. data/test/test_helper.rb +92 -0
  37. data/test/unit/git/commit/test_checkout.rb +31 -0
  38. data/test/unit/git/commit/test_each.rb +30 -0
  39. data/test/unit/git/commit/test_rememberance.rb +22 -0
  40. data/test/unit/git/commit/test_validation.rb +34 -0
  41. data/test/unit/git/repository/test_at.rb +23 -0
  42. data/test/unit/git/repository/test_basename.rb +12 -0
  43. data/test/unit/git/repository/test_branchanme.rb +15 -0
  44. data/test/unit/git/repository/test_guessing.rb +32 -0
  45. data/test/unit/git/working_copy/test_copying.rb +25 -0
  46. data/test/unit/git/working_copy/test_creation.rb +22 -0
  47. data/test/unit/git/working_copy/test_existence.rb +18 -0
  48. data/test/unit/git/working_copy/test_finalization.rb +15 -0
  49. data/test/unit/git/working_copy/test_guessing.rb +35 -0
  50. data/test/unit/git/working_copy/test_rememberance.rb +22 -0
  51. data/test/unit/svn/repository/test_at.rb +19 -0
  52. data/test/unit/svn/repository/test_basename.rb +24 -0
  53. data/test/unit/svn/repository/test_guessing.rb +45 -0
  54. data/test/unit/svn/revision/test_checkout.rb +28 -0
  55. data/test/unit/svn/revision/test_each.rb +22 -0
  56. data/test/unit/svn/revision/test_rememberance.rb +38 -0
  57. data/test/unit/svn/revision/test_validation.rb +50 -0
  58. data/test/unit/svn/working_copy/test_copying.rb +26 -0
  59. data/test/unit/svn/working_copy/test_creation.rb +16 -0
  60. data/test/unit/svn/working_copy/test_existence.rb +23 -0
  61. data/test/unit/svn/working_copy/test_externals.rb +56 -0
  62. data/test/unit/svn/working_copy/test_finalization.rb +17 -0
  63. data/test/unit/svn/working_copy/test_guessing.rb +18 -0
  64. data/test/unit/svn/working_copy/test_rememberance.rb +26 -0
  65. data/test/unit/test_info.rb +37 -0
  66. data/test/unit/test_lock_unlock.rb +47 -0
  67. data/test/unit/test_repository.rb +51 -0
  68. data/test/unit/test_revision.rb +31 -0
  69. data/test/unit/working_copy/test_guessing.rb +35 -0
  70. data/test/unit/working_copy/test_info.rb +14 -0
  71. data/test/unit/working_copy/test_rememberance.rb +42 -0
  72. data/test/unit/working_copy/test_validate.rb +63 -0
  73. metadata +132 -31
  74. data/CHANGELOG +0 -81
  75. data/LICENSE +0 -19
  76. data/Rakefile +0 -63
  77. data/contrib/piston +0 -43
  78. data/lib/core_ext/range.rb +0 -5
  79. data/lib/core_ext/string.rb +0 -9
  80. data/lib/piston/command.rb +0 -68
  81. data/lib/piston/command_error.rb +0 -6
  82. data/lib/piston/commands/lock.rb +0 -30
  83. data/lib/piston/commands/switch.rb +0 -139
  84. data/lib/piston/commands/unlock.rb +0 -29
  85. data/lib/transat/parser.rb +0 -189
@@ -1,29 +0,0 @@
1
- require "piston"
2
- require "piston/command"
3
-
4
- module Piston
5
- module Commands
6
- class Unlock < Piston::Command
7
- def run
8
- raise Piston::CommandError, "No targets to run against" if args.empty?
9
- svn :propdel, Piston::LOCKED, *args
10
- args.each do |dir|
11
- logging_stream.puts "Unlocked '#{dir}'"
12
- end
13
- end
14
-
15
- def self.help
16
- "Undoes the changes enabled by lock"
17
- end
18
-
19
- def self.detailed_help
20
- <<EOF
21
- usage: unlock DIR [DIR [...]]
22
-
23
- Unlocked folders are free to be updated to the latest revision when
24
- updating.
25
- EOF
26
- end
27
- end
28
- end
29
- end
@@ -1,189 +0,0 @@
1
- require "optparse"
2
-
3
- module Transat
4
- class VersionNeeded < StandardError; end
5
-
6
- class HelpNeeded < StandardError
7
- attr_reader :command
8
-
9
- def initialize(command)
10
- @command = command
11
- end
12
- end
13
-
14
- class NoCommandGiven < StandardError
15
- def message
16
- "No command given"
17
- end
18
- end
19
-
20
- class UnknownOptions < StandardError
21
- attr_reader :command
22
-
23
- def initialize(command, unrecognized_options)
24
- @command, @unrecognized_options = command, unrecognized_options
25
- end
26
-
27
- def message
28
- "Command #{@command} does not accept options #{@unrecognized_options.join(", ")}"
29
- end
30
- end
31
-
32
- class UnknownCommand < StandardError
33
- def initialize(command, parser)
34
- @command, @parser = command, parser
35
- end
36
-
37
- def message
38
- "Unknown command: #{@command.inspect}"
39
- end
40
- end
41
-
42
- class BaseCommand
43
- attr_reader :non_options, :options
44
- def initialize(non_options, options)
45
- @non_options, @options = non_options, options
46
- end
47
- end
48
-
49
- class VersionCommand < BaseCommand
50
- def run
51
- raise VersionNeeded
52
- end
53
- end
54
-
55
- class HelpCommand < BaseCommand
56
- def run
57
- raise HelpNeeded.new(non_options.first)
58
- end
59
- end
60
-
61
- class Parser
62
- def initialize(&block)
63
- @valid_options, @received_options, @commands = [], {}, {}
64
- @option_parser = OptionParser.new
65
-
66
- command(:help, Transat::HelpCommand)
67
- command(:version, Transat::VersionCommand)
68
- instance_eval(&block) if block_given?
69
- end
70
-
71
- def option(name, options={})
72
- options[:long] = name.to_s.gsub("_", "-") unless options[:long]
73
- @valid_options << name
74
- @received_options[name] = nil
75
-
76
- opt_args = []
77
- opt_args << "-#{options[:short]}" if options.has_key?(:short)
78
- opt_args << "--#{options[:long] || name}"
79
- opt_args << "=#{options[:param_name]}" if options.has_key?(:param_name)
80
- opt_args << options[:message]
81
- case options[:type]
82
- when :int, :integer
83
- opt_args << Integer
84
- when :float
85
- opt_args << Float
86
- when nil
87
- # NOP
88
- else
89
- raise ArgumentError, "Option #{name} has a bad :type parameter: #{options[:type].inspect}"
90
- end
91
-
92
- @option_parser.on(*opt_args.compact) do |value|
93
- @received_options[name] = value
94
- end
95
- end
96
-
97
- def command(name, klass, options={})
98
- @commands[name.to_s] = options.merge(:class => klass)
99
- end
100
-
101
- def parse_and_execute(args=ARGV)
102
- begin
103
- command, non_options = parse(args)
104
- execute(command, non_options)
105
- rescue HelpNeeded
106
- $stderr.puts usage($!.command)
107
- exit 1
108
- rescue VersionNeeded
109
- puts "#{program_name} #{version}"
110
- exit 0
111
- rescue NoCommandGiven, UnknownOptions, UnknownCommand
112
- $stderr.puts "ERROR: #{$!.message}"
113
- $stderr.puts usage($!.respond_to?(:command) ? $!.command : nil)
114
- exit 1
115
- end
116
- end
117
-
118
- def parse(args)
119
- non_options = @option_parser.parse(args)
120
- command = non_options.shift
121
- raise NoCommandGiven unless command
122
- return command, non_options
123
- end
124
-
125
- def execute(command, non_options)
126
- found = false
127
- @commands.each do |command_name, options|
128
- command_klass = options[:class]
129
- aliases = [command_name]
130
- aliases += command_klass.aliases if command_klass.respond_to?(:aliases)
131
- return command_klass.new(non_options, @received_options).run if aliases.include?(command)
132
- end
133
-
134
- raise UnknownCommand.new(command, self)
135
- end
136
-
137
- def usage(command=nil)
138
- message = []
139
-
140
- if command then
141
- command_klass = @commands[command][:class]
142
- help =
143
- if command_klass.respond_to?(:aliases) then
144
- "#{command} (#{command_klass.aliases.join(", ")})"
145
- else
146
- "#{command}"
147
- end
148
- help = "#{help}: #{command_klass.help}" if command_klass.respond_to?(:help)
149
- message << help
150
- message << command_klass.detailed_help if command_klass.respond_to?(:detailed_help)
151
- message << ""
152
- message << "Valid options:"
153
- @option_parser.summarize(message)
154
- else
155
- message << "usage: #{program_name.downcase} <SUBCOMMAND> [OPTIONS] [ARGS...]"
156
- message << "Type '#{program_name.downcase} help <SUBCOMMAND>' for help on a specific subcommand."
157
- message << "Type '#{program_name.downcase} version' to get this program's version."
158
- message << ""
159
- message << "Available subcommands are:"
160
- @commands.sort.each do |command, options|
161
- command_klass = options[:class]
162
- if command_klass.respond_to?(:aliases) then
163
- message << " #{command} (#{command_klass.aliases.join(", ")})"
164
- else
165
- message << " #{command}"
166
- end
167
- end
168
- end
169
-
170
- message.map {|line| line.chomp}.join("\n")
171
- end
172
-
173
- def program_name(value=nil)
174
- value ? @program_name = value : @program_name
175
- end
176
-
177
- def version(value=nil)
178
- if value then
179
- @version = value.respond_to?(:join) ? value.join(".") : value
180
- else
181
- @version
182
- end
183
- end
184
-
185
- def self.parse_and_execute(args=ARGV, &block)
186
- self.new(&block).parse_and_execute(args)
187
- end
188
- end
189
- end