repertoire 0.1.0 → 0.1.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/History.txt CHANGED
@@ -1,3 +1,20 @@
1
+ == 0.1.1 / 2008-02-09
2
+
3
+ * Added the Type module to add meta-programming methods to Media types.
4
+ * Added metaid.rb.
5
+ * Added method Media.schemes.
6
+ * Added method Media.registered_schemes
7
+ * Added method Media.supports_scheme?.
8
+ * Added method Media.supports_scheme.
9
+ * Added method Media.directories.
10
+ * Added method Media.registered_directories.
11
+ * Added method Media.recognizes_directory?.
12
+ * Added method Media.recognizes_directory.
13
+ * Use :media instead of :type within the options passed to Media.checkout
14
+ and Media.update.
15
+ * Fixed Manifest to include
16
+ lib/repertoire/exceptions/program_not_found.
17
+
1
18
  == 0.1.0 / 2008-01-17
2
19
 
3
20
  * Initial release.
data/Manifest.txt CHANGED
@@ -2,18 +2,28 @@ History.txt
2
2
  Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
- bin/repertoire
6
5
  lib/repertoire.rb
7
6
  lib/repertoire/compat.rb
8
7
  lib/repertoire/extensions.rb
8
+ lib/repertoire/extensions/meta.rb
9
+ lib/repertoire/extensions/meta/object.rb
9
10
  lib/repertoire/extensions/uri.rb
11
+ lib/repertoire/exceptions.rb
12
+ lib/repertoire/exceptions/program_not_found.rb
13
+ lib/repertoire/exceptions/command_failed.rb
10
14
  lib/repertoire/media.rb
11
15
  lib/repertoire/media/exceptions.rb
12
16
  lib/repertoire/media/exceptions/unknown_media.rb
17
+ lib/repertoire/media/exceptions/repository_exists.rb
18
+ lib/repertoire/media/exceptions/checkout_failed.rb
19
+ lib/repertoire/media/exceptions/update_failed.rb
13
20
  lib/repertoire/media/media.rb
14
- lib/repertoire/media/cvs.rb
15
- lib/repertoire/media/darcs.rb
16
- lib/repertoire/media/rsync.rb
17
- lib/repertoire/media/svn.rb
21
+ lib/repertoire/media/type.rb
22
+ lib/repertoire/media/types.rb
23
+ lib/repertoire/media/types/cvs.rb
24
+ lib/repertoire/media/types/darcs.rb
25
+ lib/repertoire/media/types/rsync.rb
26
+ lib/repertoire/media/types/svn.rb
27
+ lib/repertoire/repertoire.rb
18
28
  lib/repertoire/version.rb
19
29
  test/test_repertoire.rb
data/README.txt CHANGED
@@ -8,7 +8,7 @@ R'epertoire is a Ruby library and utility for quickly checking-out and updating
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
- * Currently supports checking-out and updating from...
11
+ * Currently supports checking-out and updating from:
12
12
  * Subversion (SVN)
13
13
  * Darcs
14
14
  * CVS
data/lib/repertoire.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'repertoire/media'
2
+ require 'repertoire/repertoire'
2
3
  require 'repertoire/version'
@@ -1,3 +1,6 @@
1
+ require 'repertoire/exceptions/program_not_found'
2
+ require 'repertoire/exceptions/command_failed'
3
+
1
4
  module Repertoire
2
5
  module Compat
3
6
  #
@@ -43,5 +46,31 @@ module Repertoire
43
46
 
44
47
  return nil
45
48
  end
49
+
50
+ #
51
+ # Runs the command specified by _program_ and the given _args_.
52
+ # If _program_ cannot be found on the system, a ProgramNotFound
53
+ # exception will be raised.
54
+ #
55
+ # Compat.sh('ls','-la','/')
56
+ #
57
+ def Compat.sh(program,*args)
58
+ program = program.to_s
59
+
60
+ program_path = Compat.find_program(program)
61
+ unless program_path
62
+ raise(ProgramNotFound,"the program #{program.dump} was not found",caller)
63
+ end
64
+
65
+ # stringify the args
66
+ args = args.map { |arg| arg.to_s }
67
+
68
+ unless system(program_path,*args)
69
+ command = program_path
70
+ command += ' ' + args.join(' ') unless args.empty?
71
+
72
+ raise(CommandFailed,"the command #{command.dump} failed",caller)
73
+ end
74
+ end
46
75
  end
47
76
  end
@@ -0,0 +1,2 @@
1
+ require 'repertoire/exceptions/program_not_found'
2
+ require 'repertoire/exceptions/command_failed'
@@ -0,0 +1,4 @@
1
+ module Repertoire
2
+ class CommandFailed < RuntimeError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Repertoire
2
+ class CommandNotFound < RuntimeError
3
+ end
4
+ end
@@ -0,0 +1 @@
1
+ require 'repertoire/extensions/meta/object'
@@ -0,0 +1,24 @@
1
+ # metaprogramming assistant -- metaid.rb
2
+ class Object # :nodoc:
3
+ # The hidden singleton lurks behind everyone
4
+ def metaclass; class << self; self; end; end
5
+ def meta_eval(&blk); metaclass.instance_eval(&blk); end
6
+
7
+ # A class_eval version of meta_eval
8
+ def metaclass_eval(&blk); metaclass.class_eval(&blk); end
9
+
10
+ # Adds methods to a metaclass
11
+ def meta_def(name, &blk)
12
+ meta_eval { define_method(name, &blk) }
13
+ end
14
+
15
+ # Adds class methods to a metaclass
16
+ def metaclass_def(name, &blk)
17
+ metaclass_eval { define_method(name, &blk) }
18
+ end
19
+
20
+ # Defines an instance method within a class
21
+ def class_def(name, &blk)
22
+ class_eval { define_method(name, &blk) }
23
+ end
24
+ end
@@ -12,11 +12,13 @@ module URI
12
12
  # "awesome"
13
13
  #
14
14
  def URI.repo_name(uri)
15
- path = URI.parse(uri).path
16
- name = File.basename(path)
15
+ uri = URI.parse(uri)
16
+ name = File.basename(uri.path)
17
17
 
18
- if name=='trunk' || name.empty?
19
- name = File.basename(File.dirname(path))
18
+ if name.empty? || name==File::SEPARATOR
19
+ name = uri.host
20
+ elsif name=='trunk'
21
+ name = File.basename(File.dirname(uri.path))
20
22
  end
21
23
 
22
24
  return name
@@ -1,5 +1,2 @@
1
1
  require 'repertoire/media/media'
2
- require 'repertoire/media/svn'
3
- require 'repertoire/media/darcs'
4
- require 'repertoire/media/cvs'
5
- require 'repertoire/media/rsync'
2
+ require 'repertoire/media/types'
@@ -1,2 +1,4 @@
1
1
  require 'repertoire/exceptions/unknown_media'
2
- require 'repertoire/exceptions/program_not_found'
2
+ require 'repertoire/exceptions/repository_exists'
3
+ require 'repertoire/exceptions/checkout_failed'
4
+ require 'repertoire/exceptions/update_failed'
@@ -0,0 +1,4 @@
1
+ module Repertoire
2
+ class CheckoutFailed < RuntimeError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Repertoire
2
+ class RepositoryExists < RuntimeError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Repertoire
2
+ class UpdateFailed < RuntimeError
3
+ end
4
+ end
@@ -1,134 +1,242 @@
1
1
  require 'repertoire/media/exceptions/unknown_media'
2
- require 'repertoire/media/exceptions/program_not_found'
2
+ require 'repertoire/media/exceptions/repository_exists'
3
+ require 'repertoire/media/exceptions/checkout_failed'
4
+ require 'repertoire/media/exceptions/update_failed'
3
5
  require 'repertoire/extensions/uri'
4
- require 'repertoire/compat'
5
6
 
6
7
  require 'fileutils'
7
8
 
8
9
  module Repertoire
9
- class Media
10
-
10
+ module Media
11
11
  #
12
- # Returns the Hash of all registered Media types.
12
+ # Returns the +Hash+ of all registered Media types.
13
13
  #
14
14
  def Media.types
15
- @types ||= {}
15
+ @@media_types ||= {}
16
16
  end
17
17
 
18
18
  #
19
- # Returns +true+ if a Media type was registered for the specified
20
- # _scheme_, returns +false+ otherwise.
19
+ # Returns +true+ if there is a Media type registered with the matching
20
+ # _name_.
21
21
  #
22
- def Media.supported?(scheme)
23
- Media.types.has_key?(scheme.to_s)
22
+ def Media.supports?(name)
23
+ Media.types.has_key?(name.to_sym)
24
24
  end
25
25
 
26
26
  #
27
- # Get the Media type that was registered for the specified _scheme_.
27
+ # Returns the Media type with the matching _name_.
28
28
  #
29
- def Media.get(scheme)
30
- unless Media.supported?(scheme)
31
- raise(UnknownMedia,"media type #{scheme.dump} is unsupported",caller)
29
+ def Media.get(name)
30
+ name = name.to_sym
31
+
32
+ unless Media.supports?(name)
33
+ raise(UnknownMedia,"media type #{name.dump} is not registered",caller)
32
34
  end
33
35
 
34
- return Media.types[scheme]
36
+ return Media.types[name]
35
37
  end
36
38
 
37
39
  #
38
- # Get the Media type that was registered for the scheme of the
39
- # specified _uri_.
40
+ # Returns the +Hash+ of all registered Media types and their associated
41
+ # URI schemes.
40
42
  #
41
- def Media.get_for_uri(uri)
42
- Media.get(URI.parse(uri).scheme)
43
+ def Media.schemes
44
+ @@media_schemes ||= {}
43
45
  end
44
46
 
45
47
  #
46
- # Attempts to determine the correct Media type for the specified _path_.
48
+ # Returns an +Array+ of all registered URI schemes.
47
49
  #
48
- def Media.guess(path)
49
- path = File.expand_path(path)
50
+ def Media.registered_schemes
51
+ Media.schemes.keys
52
+ end
50
53
 
51
- Media.types.values.uniq.each do |media|
52
- if media.respond_to?(:is_repo?)
53
- return media if media.is_repo?(path)
54
- end
54
+ #
55
+ # Returns +true+ if a Media type was registered for the specified
56
+ # _scheme_, returns +false+ otherwise.
57
+ #
58
+ def Media.supports_scheme?(scheme)
59
+ Media.schemes.has_key?(scheme.to_s)
60
+ end
61
+
62
+ #
63
+ # Returns the Media type that was registered for the specified _scheme_.
64
+ #
65
+ def Media.supports_scheme(name)
66
+ name = name.to_s
67
+
68
+ unless Media.supports_scheme?(name)
69
+ raise(UnknownMedia,"media type for scheme #{name.dump} is not registered",caller)
55
70
  end
56
71
 
57
- raise(UnknownMedia,"the media type for #{path.dump} is unknown",caller)
72
+ return Media.schemes[name]
58
73
  end
59
74
 
60
75
  #
61
- # Checkout the repository at the specified _uri_ and the given _path_.
76
+ # Returns the +Hash+ of all registered Media types and their
77
+ # associated media storage directories.
62
78
  #
63
- def Media.checkout(uri,path=nil)
64
- if path
65
- path = File.expand_path(path)
66
- else
67
- path = URI.repo_name(uri)
68
- end
79
+ def Media.directories
80
+ @@media_directories ||= {}
81
+ end
69
82
 
70
- return Media.get_for_uri(uri).checkout(uri,path)
83
+ #
84
+ # Returns an +Array+ of all registered directories.
85
+ #
86
+ def Media.registered_directories
87
+ Media.directories.keys
71
88
  end
72
89
 
73
90
  #
74
- # Update the repository at the specified _path_ and the given _uri_.
75
- # If _uri_ is not given Repertoire will attempt to guess the media
76
- # type of the repository, see Media.guess.
91
+ # Returns +true+ if a Media type was registered with the specified
92
+ # _directory_, returns +false+ otherwise.
77
93
  #
78
- def Media.update(path,uri=nil)
79
- path = File.expand_path(path)
94
+ def Media.recognizes_directory?(name)
95
+ Media.directories.has_key?(name.to_s)
96
+ end
80
97
 
81
- if uri.nil?
82
- media = Media.guess(path)
83
- else
84
- media = Media.get_for_uri(uri)
98
+ #
99
+ # Returns the Media type that was registered for the specified
100
+ # _directory_.
101
+ #
102
+ def Media.recognizes_directory(name)
103
+ name = name.to_s
104
+
105
+ unless Media.recognizes_directory?(name)
106
+ raise(UnknownMedia,"media type for directory #{name.dump} is not registered",caller)
85
107
  end
86
108
 
87
- return media.update(path,uri)
109
+ return Media.directories[name]
88
110
  end
89
111
 
90
112
  #
91
- # Delete the repository at the specified _path_.
113
+ # Get the Media type that was registered for the scheme of the
114
+ # specified _uri_.
92
115
  #
93
- def Media.delete(path)
94
- FileUtils.rm_r(path.to_s,:force => true, :secure => true)
116
+ def Media.guess_from_uri(uri)
117
+ scheme = URI(uri).scheme
118
+
119
+ return [scheme, Media.supports_scheme(scheme)]
95
120
  end
96
121
 
97
- protected
122
+ #
123
+ # Attempts to determine the correct Media type for the specified _path_.
124
+ #
125
+ def Media.guess_from_path(path)
126
+ path = File.expand_path(path)
127
+
128
+ Media.directories.each do |directory,media|
129
+ if File.directory?(File.join(path,directory))
130
+ return media
131
+ end
132
+ end
133
+
134
+ raise(UnknownMedia,"the media type for #{path.dump} is unknown",caller)
135
+ end
98
136
 
99
137
  #
100
- # Register a Media type for the specified _schemes_.
138
+ # Checkout the repository at the specified _options_. If a _block_
139
+ # is given, it will be passed the path of the local repository
140
+ # after the repository is successfully checked out.
101
141
  #
102
- # uses_schemes 'cvs'
142
+ # _options_ must contain the following key:
143
+ # <tt>:uri</tt>:: The URI of the repository to checkout.
103
144
  #
104
- # uses_schemes 'svn', 'svn+ssh'
145
+ # _options_ may also contain the additional keys:
146
+ # <tt>:path</tt>:: Path to checkout the repository to.
147
+ # <tt>:media</tt>:: The media type of the repository. Defaults to the
148
+ # value of Media.get_for_uri.
149
+ # <tt>:into</tt>:: Checkout the repository into the given directory.
150
+ # Cannot be used with <tt>:path</tt>.
105
151
  #
106
- def self.uses_schemes(*schemes)
107
- schemes.each do |scheme|
108
- Media.types[scheme.to_s] = self
152
+ def Media.checkout(options={},&block)
153
+ uri = options[:uri].to_s
154
+ path = options[:path]
155
+ into = options[:into]
156
+ media = options[:media]
157
+
158
+ unless path
159
+ if into
160
+ into = File.expand_path(into)
161
+
162
+ unless File.directory?(into)
163
+ FileUtils.mkdir_p(into)
164
+ end
165
+
166
+ path = File.join(into,URI.repo_name(uri))
167
+ else
168
+ path = URI.repo_name(uri)
169
+ end
109
170
  end
171
+
172
+ path = File.expand_path(path)
173
+ if File.exists?(path)
174
+ raise(RepositoryExists,"the repository #{path.dump} already exists",caller)
175
+ end
176
+
177
+ if media
178
+ handler = Media.get(media)
179
+ else
180
+ media, handler = Media.guess_from_uri(uri)
181
+ end
182
+
183
+ begin
184
+ handler.checkout(uri,path)
185
+ rescue CommandFailed
186
+ raise(CheckoutFailed,"failed to checkout the repository located at #{uri.dump}",caller)
187
+ end
188
+
189
+ block.call(path,media,uri) if block
190
+ return {:path => path, :media => media, :uri => uri}
110
191
  end
111
192
 
112
193
  #
113
- # Runs the command specified by _program_ and the given _args_.
114
- # If _program_ cannot be found on the system, a ProgramNotFound
115
- # exception will be raised.
194
+ # Update the repository with the specified _options_. If a _block_
195
+ # is given, it will be passed the path of the local repository
196
+ # after the repository is successfully updated.
197
+ #
198
+ # _options_ must contain the following keys:
199
+ # <tt>:path</tt>:: The path of the repository to update.
116
200
  #
117
- # sh('ls','-la','/')
201
+ # _options_ may also contain the additional keys:
202
+ # <tt>:uri</tt>:: The URI to update against.
203
+ # <tt>:media</tt>:: The type of the repository. Defaults to
204
+ # Media.guess_from_uri if <tt>:uri</tt> is given,
205
+ # otherwise Media.guess_from_path.
118
206
  #
119
- def self.sh(program,*args)
120
- program = program.to_s
207
+ def Media.update(options={},&block)
208
+ path = File.expand_path(options[:path])
209
+ uri = options[:uri]
210
+ media = options[:media]
121
211
 
122
- program_path = Compat.find_program(program)
123
- unless program_path
124
- raise(ProgramNotFound,"the program #{program.dump} was not found",caller)
212
+ if media
213
+ handler = Media.get(media)
214
+ elsif uri
215
+ media, handler = Media.guess_from_uri(uri)
216
+ else
217
+ handler = Media.guess_from_path(path)
125
218
  end
126
219
 
127
- # stringify the args
128
- args = args.map { |arg| arg.to_s }
220
+ begin
221
+ handler.update(path,uri)
222
+ rescue CommandFailed
223
+ raise(UpdateFailed,"failed to update the repository at #{path.dump}",caller)
224
+ end
129
225
 
130
- return system(program_path,*args)
226
+ block.call(media,path,uri) if block
227
+ return {:media => media, :path => path, :uri => uri}
131
228
  end
132
229
 
230
+ #
231
+ # Delete the repository at the specified _path_. If a _block_ is
232
+ # given, it will be passed the _path_ before it is deleted.
233
+ #
234
+ def Media.delete(path,&block)
235
+ path = File.expand_path(path)
236
+
237
+ block.call(path) if block
238
+ FileUtils.rm_r(path.to_s,:force => true, :secure => true)
239
+ return nil
240
+ end
133
241
  end
134
242
  end
@@ -0,0 +1,84 @@
1
+ require 'repertoire/media/media'
2
+ require 'repertoire/extensions/meta'
3
+ require 'repertoire/compat'
4
+
5
+ module Repertoire
6
+ module Media
7
+ module Type
8
+ def self.included(base)
9
+ base.meta_def(:name) do
10
+ @name ||= nil
11
+ end
12
+
13
+ base.meta_def('name=') do |name|
14
+ @name = name.to_sym
15
+ end
16
+
17
+ base.meta_def(:schemes) do
18
+ @schemes ||= []
19
+ end
20
+
21
+ base.meta_def(:directory) do
22
+ @directory ||= nil
23
+ end
24
+
25
+ base.meta_def('directory=') do |dir|
26
+ @directory = dir.to_s
27
+ end
28
+
29
+ base.module_eval do
30
+
31
+ protected
32
+
33
+ #
34
+ # Register a Media type with the specified _names_.
35
+ #
36
+ # known_as :svn
37
+ #
38
+ def self.known_as(name)
39
+ name = name.to_sym
40
+
41
+ self.name = name
42
+ Media.types[name] = self
43
+ end
44
+
45
+ #
46
+ # Register a Media type for the specified _schemes_.
47
+ #
48
+ # uses_schemes 'cvs'
49
+ #
50
+ # uses_schemes 'svn', 'svn+ssh'
51
+ #
52
+ def self.uses_schemes(*schemes)
53
+ schemes.each do |scheme|
54
+ scheme = scheme.to_s
55
+
56
+ self.schemes << scheme
57
+ Media.schemes[scheme] = self
58
+ end
59
+ end
60
+
61
+ #
62
+ # Registers a Media type that uses the directory of the specified
63
+ # _name_ to store media information.
64
+ #
65
+ # uses_directory '.svn'
66
+ #
67
+ def self.uses_directory(name)
68
+ name = name.to_s
69
+
70
+ self.directory = name
71
+ Media.directories[name] = self
72
+ end
73
+
74
+ #
75
+ # See Compat.sh.
76
+ #
77
+ def self.sh(program,*args)
78
+ Compat.sh(program,*args)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,4 @@
1
+ require 'repertoire/media/types/cvs'
2
+ require 'repertoire/media/types/darcs'
3
+ require 'repertoire/media/types/svn'
4
+ require 'repertoire/media/types/rsync'
@@ -0,0 +1,31 @@
1
+ require 'repertoire/media/type'
2
+
3
+ module Repertoire
4
+ module Media
5
+ class CVS
6
+
7
+ include Type
8
+
9
+ known_as :cvs
10
+
11
+ uses_schemes 'cvs'
12
+ uses_directory 'CVS'
13
+
14
+ #
15
+ # Checks out the CVS repository located at the specified _uri_ into the
16
+ # specified _path_.
17
+ #
18
+ def self.checkout(uri,path)
19
+ sh('cvs','-d',path,'co',uri)
20
+ end
21
+
22
+ #
23
+ # Updated the CVS repository located at the specified _path_.
24
+ #
25
+ def self.update(path,uri=nil)
26
+ sh('cvs','up',path)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ require 'repertoire/media/type'
2
+
3
+ module Repertoire
4
+ module Media
5
+ class Darcs
6
+
7
+ include Type
8
+
9
+ known_as :darcs
10
+
11
+ uses_directory '_darcs'
12
+
13
+ #
14
+ # Checks out the Darcs repository located at the specified _uri_ into
15
+ # the specified _path_.
16
+ #
17
+ def self.checkout(uri,path=nil)
18
+ sh('darcs','get','--partial',uri,path)
19
+ end
20
+
21
+ #
22
+ # Updated the Darcs repository located at the specified _path_.
23
+ #
24
+ def self.update(uri,path)
25
+ sh('darcs','pull','-a',path)
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ require 'repertoire/media/type'
2
+
3
+ module Repertoire
4
+ module Media
5
+ class Rsync
6
+
7
+ include Type
8
+
9
+ known_as :rsync
10
+
11
+ uses_schemes 'rsync'
12
+
13
+ #
14
+ # Checks out the Rsync repository located at the specified _uri_ into
15
+ # the specified _path_.
16
+ #
17
+ def self.checkout(uri,path)
18
+ sh('rsync','-av',uri,path)
19
+ end
20
+
21
+ #
22
+ # Updated the Rsync repository located at the specified _path_ with the
23
+ # remote repository at the specified _uri_.
24
+ #
25
+ def self.update(path,uri)
26
+ sh('rsync','-av','--delete-after',uri,path)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'repertoire/media/type'
2
+
3
+ module Repertoire
4
+ module Media
5
+ class SVN
6
+
7
+ include Type
8
+
9
+ known_as :svn
10
+
11
+ uses_schemes 'svn', 'svn+ssh'
12
+ uses_directory '.svn'
13
+
14
+ #
15
+ # Checks out the SVN repository located at the specified _uri_ into the
16
+ # specified _path_.
17
+ #
18
+ def self.checkout(uri,path)
19
+ sh('svn','co',uri,path)
20
+ end
21
+
22
+ #
23
+ # Updated the SVN repository located at the specified _path_.
24
+ #
25
+ def self.update(path,uri=nil)
26
+ sh('svn','up',path)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'repertoire/media'
2
+
3
+ module Repertoire
4
+ #
5
+ # See Media.checkout.
6
+ #
7
+ def Repertoire.checkout(options={},&block)
8
+ Media.checkout(options,&block)
9
+ end
10
+
11
+ #
12
+ # See Media.update.
13
+ #
14
+ def Repertoire.update(options={},&block)
15
+ Media.update(options,&block)
16
+ end
17
+
18
+ #
19
+ # See Media.delete.
20
+ #
21
+ def Repertoire.delete(path,&block)
22
+ Media.delete(path,&block)
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Repertoire
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,82 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
2
4
  name: repertoire
3
5
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
6
+ version: 0.1.1
7
+ date: 2008-02-09 00:00:00 -08:00
8
+ summary: R'epertoire is a Ruby library and utility for quickly checking-out and updating code-bases from various SCMs. R'epertoire currently supports Subversion, Darcs, CVS, and even RSync.
9
+ require_paths:
10
+ - lib
11
+ email: postmodern.mod3@gmail.com
12
+ homepage: " by Postmodern Modulus III"
13
+ rubyforge_project: repertoire
14
+ description: "== FEATURES/PROBLEMS: * Currently supports checking-out and updating from: * Subversion (SVN) * Darcs * CVS * RSync == INSTALL: $ sudo gem install repertoire == LICENSE:"
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
5
25
  platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
6
29
  authors:
7
30
  - Postmodern Modulus III
8
- autorequire:
9
- bindir: bin
10
- cert_chain: []
11
-
12
- date: 2008-01-17 00:00:00 -08:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: hoe
17
- version_requirement:
18
- version_requirements: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.4.0
23
- version:
24
- description: "== FEATURES/PROBLEMS: * Currently supports checking-out and updating from... * Subversion (SVN) * Darcs * CVS * RSync == INSTALL: $ sudo gem install repertoire == LICENSE:"
25
- email: postmodern.mod3@gmail.com
26
- executables:
27
- - repertoire
28
- extensions: []
29
-
30
- extra_rdoc_files:
31
- - History.txt
32
- - Manifest.txt
33
- - README.txt
34
31
  files:
35
32
  - History.txt
36
33
  - Manifest.txt
37
34
  - README.txt
38
35
  - Rakefile
39
- - bin/repertoire
40
36
  - lib/repertoire.rb
41
37
  - lib/repertoire/compat.rb
42
38
  - lib/repertoire/extensions.rb
39
+ - lib/repertoire/extensions/meta.rb
40
+ - lib/repertoire/extensions/meta/object.rb
43
41
  - lib/repertoire/extensions/uri.rb
42
+ - lib/repertoire/exceptions.rb
43
+ - lib/repertoire/exceptions/program_not_found.rb
44
+ - lib/repertoire/exceptions/command_failed.rb
44
45
  - lib/repertoire/media.rb
45
46
  - lib/repertoire/media/exceptions.rb
46
47
  - lib/repertoire/media/exceptions/unknown_media.rb
48
+ - lib/repertoire/media/exceptions/repository_exists.rb
49
+ - lib/repertoire/media/exceptions/checkout_failed.rb
50
+ - lib/repertoire/media/exceptions/update_failed.rb
47
51
  - lib/repertoire/media/media.rb
48
- - lib/repertoire/media/cvs.rb
49
- - lib/repertoire/media/darcs.rb
50
- - lib/repertoire/media/rsync.rb
51
- - lib/repertoire/media/svn.rb
52
+ - lib/repertoire/media/type.rb
53
+ - lib/repertoire/media/types.rb
54
+ - lib/repertoire/media/types/cvs.rb
55
+ - lib/repertoire/media/types/darcs.rb
56
+ - lib/repertoire/media/types/rsync.rb
57
+ - lib/repertoire/media/types/svn.rb
58
+ - lib/repertoire/repertoire.rb
52
59
  - lib/repertoire/version.rb
53
60
  - test/test_repertoire.rb
54
- has_rdoc: true
55
- homepage: " by Postmodern Modulus III"
56
- post_install_message:
61
+ test_files:
62
+ - test/test_repertoire.rb
57
63
  rdoc_options:
58
64
  - --main
59
65
  - README.txt
60
- require_paths:
61
- - lib
62
- required_ruby_version: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
67
- version:
68
- required_rubygems_version: !ruby/object:Gem::Requirement
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: "0"
73
- version:
66
+ extra_rdoc_files:
67
+ - History.txt
68
+ - Manifest.txt
69
+ - README.txt
70
+ executables: []
71
+
72
+ extensions: []
73
+
74
74
  requirements: []
75
75
 
76
- rubyforge_project: repertoire
77
- rubygems_version: 1.0.1
78
- signing_key:
79
- specification_version: 2
80
- summary: R'epertoire is a Ruby library and utility for quickly checking-out and updating code-bases from various SCMs. R'epertoire currently supports Subversion, Darcs, CVS, and even RSync.
81
- test_files:
82
- - test/test_repertoire.rb
76
+ dependencies:
77
+ - !ruby/object:Gem::Dependency
78
+ name: hoe
79
+ version_requirement:
80
+ version_requirements: !ruby/object:Gem::Version::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.5.0
85
+ version:
data/bin/repertoire DELETED
File without changes
@@ -1,32 +0,0 @@
1
- require 'repertoire/media/media'
2
-
3
- module Repertoire
4
- class CVS < Media
5
-
6
- uses_schemes 'cvs'
7
-
8
- #
9
- # Returns +true+ if the repository located at the specified _path_
10
- # contains the +CVS+ directory, returns +false+ otherwise.
11
- #
12
- def self.is_repo?(path)
13
- File.directory?(File.join(path,'CVS'))
14
- end
15
-
16
- #
17
- # Checks out the CVS repository located at the specified _uri_ into the
18
- # specified _path_.
19
- #
20
- def self.checkout(uri,path)
21
- sh('cvs','-d',path,'co',uri)
22
- end
23
-
24
- #
25
- # Updated the CVS repository located at the specified _path_.
26
- #
27
- def self.update(path,uri=nil)
28
- sh('cvs','up',path)
29
- end
30
-
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- require 'repertoire/media/media'
2
-
3
- module Repertoire
4
- class Darcs < Media
5
-
6
- uses_schemes 'darcs'
7
-
8
- #
9
- # Returns +true+ if the repository located at the specified _path_
10
- # contains the +_darcs+ directory, returns +false+ otherwise.
11
- #
12
- def self.is_repo?(path)
13
- File.directory?(File.join(path,'_darcs'))
14
- end
15
-
16
- #
17
- # Checks out the Darcs repository located at the specified _uri_ into
18
- # the specified _path_.
19
- #
20
- def self.checkout(uri,path=nil)
21
- sh('darcs','get','--partial',uri,path)
22
- end
23
-
24
- #
25
- # Updated the Darcs repository located at the specified _path_.
26
- #
27
- def self.update(uri,path)
28
- sh('darcs','pull','-a',path)
29
- end
30
-
31
- end
32
- end
@@ -1,25 +0,0 @@
1
- require 'repertoire/media/media'
2
-
3
- module Repertoire
4
- class Rsync < Media
5
-
6
- uses_schemes 'rsync'
7
-
8
- #
9
- # Checks out the Rsync repository located at the specified _uri_ into
10
- # the specified _path_.
11
- #
12
- def self.checkout(uri,path)
13
- sh('rsync','-av',uri,path)
14
- end
15
-
16
- #
17
- # Updated the Rsync repository located at the specified _path_ with the
18
- # remote repository at the specified _uri_.
19
- #
20
- def self.update(path,uri)
21
- sh('rsync','-av','--delete-after',uri,path)
22
- end
23
-
24
- end
25
- end
@@ -1,32 +0,0 @@
1
- require 'repertoire/media/media'
2
-
3
- module Repertoire
4
- class SVN < Media
5
-
6
- uses_schemes 'svn', 'svn+ssh'
7
-
8
- #
9
- # Returns +true+ if the repository located at the specified _path_
10
- # contains the +.svn+ directory, returns +false+ otherwise.
11
- #
12
- def self.is_repo?(path)
13
- File.directory?(File.join(path,'.svn'))
14
- end
15
-
16
- #
17
- # Checks out the SVN repository located at the specified _uri_ into the
18
- # specified _path_.
19
- #
20
- def self.checkout(uri,path)
21
- sh('svn','co',uri,path)
22
- end
23
-
24
- #
25
- # Updated the SVN repository located at the specified _path_.
26
- #
27
- def self.update(path,uri=nil)
28
- sh('svn','up',path)
29
- end
30
-
31
- end
32
- end