rye 0.8.6 → 0.8.7
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/CHANGES.txt +11 -3
- data/lib/rye.rb +1 -1
- data/lib/rye/box.rb +31 -13
- data/lib/rye/cmd.rb +22 -9
- data/rye.gemspec +1 -1
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
RYE, CHANGES
|
2
2
|
|
3
|
-
TODO
|
4
3
|
|
5
|
-
|
6
|
-
|
4
|
+
#### 0.8.7 (2009-08-11) #############################
|
5
|
+
|
6
|
+
* FIXED: Rye::Box info level output is cleaner
|
7
|
+
* FIXED: file_upload / download now expanding local tildas when safemode is disabled
|
8
|
+
* ADDED: Interactive handling for removing gems
|
9
|
+
* ADDED: dir_upload and dir_download
|
7
10
|
|
8
11
|
|
9
12
|
#### 0.8.6 (2009-08-04) #############################
|
@@ -277,3 +280,8 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
|
|
277
280
|
|
278
281
|
Initial public release
|
279
282
|
|
283
|
+
|
284
|
+
#### TODO ###########################################
|
285
|
+
|
286
|
+
* Re-implement Rye::Rap as an Observable StringIO object for dynamic printing of output.
|
287
|
+
* Fingerprints: ssh-keygen -l -f id_rsa_repos.pub
|
data/lib/rye.rb
CHANGED
data/lib/rye/box.rb
CHANGED
@@ -169,7 +169,7 @@ module Rye
|
|
169
169
|
@rye_current_working_directory = fpath
|
170
170
|
end
|
171
171
|
end
|
172
|
-
|
172
|
+
debug "CWD: #{@rye_current_working_directory}"
|
173
173
|
self
|
174
174
|
end
|
175
175
|
# Like [] except it returns an empty Rye::Rap object to mimick
|
@@ -720,7 +720,7 @@ module Rye
|
|
720
720
|
## raise Rye::CommandNotFound unless self.can?(cmd)
|
721
721
|
|
722
722
|
begin
|
723
|
-
|
723
|
+
debug "COMMAND: #{cmd_internal}"
|
724
724
|
|
725
725
|
if !@rye_quiet && @rye_pre_command_hook.is_a?(Proc)
|
726
726
|
@rye_pre_command_hook.call(cmd_clean, user, host, nickname)
|
@@ -802,11 +802,11 @@ module Rye
|
|
802
802
|
#
|
803
803
|
def net_ssh_exec!(command)
|
804
804
|
|
805
|
-
block ||= Proc.new do |channel, type, data|
|
805
|
+
block ||= Proc.new do |channel, type, data, tt|
|
806
806
|
|
807
807
|
channel[:stdout] ||= ""
|
808
808
|
channel[:stderr] ||= ""
|
809
|
-
|
809
|
+
|
810
810
|
|
811
811
|
if type == :stderr
|
812
812
|
# NOTE: Use sudo to test this since it prompts for a passwords.
|
@@ -824,7 +824,15 @@ module Rye
|
|
824
824
|
# return the following error and appear to hang. We
|
825
825
|
# catch it and raise the appropriate exception.
|
826
826
|
raise Rye::NoPty if data =~ /Pseudo-terminal will not/
|
827
|
-
|
827
|
+
elsif type == :stdout
|
828
|
+
if data =~ /Select gem to uninstall/i
|
829
|
+
puts data
|
830
|
+
ret = Annoy.get_user_input('')
|
831
|
+
raise "No input given" if ret.nil?
|
832
|
+
channel.send_data "#{ret}\n"
|
833
|
+
else
|
834
|
+
channel[:stdout] << data
|
835
|
+
end
|
828
836
|
end
|
829
837
|
|
830
838
|
end
|
@@ -865,6 +873,7 @@ module Rye
|
|
865
873
|
|
866
874
|
|
867
875
|
# * +direction+ is one of :upload, :download
|
876
|
+
# * +recursive+ should be true for directories and false for files.
|
868
877
|
# * +files+ is an Array of file paths, the content is direction specific.
|
869
878
|
# For downloads, +files+ is a list of files to download. The last element
|
870
879
|
# must be the local directory to download to. If downloading a single file
|
@@ -878,14 +887,14 @@ module Rye
|
|
878
887
|
# parameters. An exception is raised and no files are transferred.
|
879
888
|
# Uploads always return nil. Downloads return nil or a StringIO object if
|
880
889
|
# one is specified for the target.
|
881
|
-
def net_scp_transfer!(direction, *files)
|
882
|
-
|
890
|
+
def net_scp_transfer!(direction, recursive, *files)
|
891
|
+
|
883
892
|
unless [:upload, :download].member?(direction.to_sym)
|
884
893
|
raise "Must be one of: upload, download"
|
885
894
|
end
|
886
895
|
|
887
896
|
if @rye_current_working_directory
|
888
|
-
|
897
|
+
debug "CWD (#{@rye_current_working_directory})"
|
889
898
|
end
|
890
899
|
|
891
900
|
files = [files].flatten.compact || []
|
@@ -911,7 +920,10 @@ module Rye
|
|
911
920
|
|
912
921
|
# Expand fileglobs (e.g. path/*.rb becomes [path/1.rb, path/2.rb]).
|
913
922
|
# This should happen after checking files.size to determine the target
|
914
|
-
|
923
|
+
unless @rye_safe
|
924
|
+
files.collect! { |file| Dir.glob File.expand_path(file) }
|
925
|
+
files.flatten!
|
926
|
+
end
|
915
927
|
end
|
916
928
|
|
917
929
|
# Fail early. We check whether the StringIO object is available to read
|
@@ -924,10 +936,10 @@ module Rye
|
|
924
936
|
end
|
925
937
|
end
|
926
938
|
|
927
|
-
info "#{direction.to_s
|
939
|
+
info "#{direction.to_s} to: #{target}"
|
928
940
|
debug "FILES: " << files.join(', ')
|
929
941
|
|
930
|
-
# Make sure the
|
942
|
+
# Make sure the target directory exists. We can do this only when
|
931
943
|
# there's more than one file because "target" could be a file name
|
932
944
|
if files.size > 1 && !target.is_a?(StringIO)
|
933
945
|
debug "CREATING TARGET DIRECTORY: #{target}"
|
@@ -936,14 +948,20 @@ module Rye
|
|
936
948
|
|
937
949
|
Net::SCP.start(@rye_host, @rye_opts[:user], @rye_opts || {}) do |scp|
|
938
950
|
transfers = []
|
951
|
+
prev = ""
|
939
952
|
files.each do |file|
|
940
953
|
debug file.to_s
|
941
|
-
|
942
|
-
|
954
|
+
prev = ""
|
955
|
+
transfers << scp.send(direction, file, target, :recursive => recursive) do |ch, n, s, t|
|
956
|
+
line = "%-50s %6d/%-6d bytes" % [n, s, t]
|
957
|
+
spaces = (prev.size > line.size) ? ' '*(prev.size - line.size) : ''
|
958
|
+
pinfo "%s %s \r" % [line, spaces] # update line: "file: sent/total"
|
943
959
|
@rye_info.flush if @rye_info # make sure every line is printed
|
960
|
+
prev = line
|
944
961
|
end
|
945
962
|
end
|
946
963
|
transfers.each { |t| t.wait } # Run file transfers in parallel
|
964
|
+
pinfo (' '*prev.size) << "\r"
|
947
965
|
info $/
|
948
966
|
end
|
949
967
|
|
data/lib/rye/cmd.rb
CHANGED
@@ -25,11 +25,11 @@ module Rye;
|
|
25
25
|
|
26
26
|
# NOTE: See Rye::Box for the implementation of cd
|
27
27
|
#def cd(*args); cmd('cd', args); end
|
28
|
+
#def rm(*args); cmd('rm', args); end
|
28
29
|
def wc(*args); cmd('wc', args); end
|
29
30
|
def cp(*args); cmd("cp", args); end
|
30
31
|
def mv(*args); cmd("mv", args); end
|
31
32
|
def ls(*args); cmd('ls', args); end
|
32
|
-
#def rm(*args); cmd('rm', args); end
|
33
33
|
def ps(*args); cmd('ps', args); end
|
34
34
|
def sh(*args); cmd('sh', args); end
|
35
35
|
def df(*args); cmd('df', args); end
|
@@ -47,6 +47,7 @@ module Rye;
|
|
47
47
|
def tar(*args); cmd('tar', args); end
|
48
48
|
|
49
49
|
#def kill(*args); cmd('kill', args); end
|
50
|
+
def rake(*args); cmd('sudo', args); end
|
50
51
|
def sudo(*args); cmd('sudo', args); end
|
51
52
|
def grep(*args); cmd('grep', args); end
|
52
53
|
def date(*args); cmd('date', args); end
|
@@ -83,11 +84,11 @@ module Rye;
|
|
83
84
|
def printenv(*args); cmd('printenv', args); end
|
84
85
|
def hostname(*args); cmd('hostname', args); end
|
85
86
|
def rudy_ec2(*args); cmd('rudy-ec2', args); end
|
86
|
-
def
|
87
|
+
def rudy_sdb(*args); cmd('rudy-sdb', args); end
|
87
88
|
def configure(*args); cmd('./configure', args); end
|
88
89
|
|
89
90
|
# Transfer files to a machine via Net::SCP.
|
90
|
-
# * +
|
91
|
+
# * +paths+ is an Array of files to upload. The last element is the
|
91
92
|
# directory to upload to. If uploading a single file, the last element
|
92
93
|
# can be a file path. The list of files can also include StringIO objects.
|
93
94
|
# The target directory will be created if it does not exist, but only
|
@@ -97,10 +98,10 @@ module Rye;
|
|
97
98
|
# Always return nil.
|
98
99
|
#
|
99
100
|
# NOTE: Changes to current working directory with +cd+ or +[]+ are ignored.
|
100
|
-
def file_upload(*
|
101
|
+
def file_upload(*paths); net_scp_transfer!(:upload, false, *paths); end
|
101
102
|
|
102
103
|
# Transfer files from a machine via Net::SCP.
|
103
|
-
# * +
|
104
|
+
# * +paths+ is an Array of files to download. The last element must be the
|
104
105
|
# local directory to download to. If downloading a single file the last
|
105
106
|
# element can be a file path. The target can also be a StringIO object.
|
106
107
|
# The target directory will be created if it does not exist, but only
|
@@ -110,13 +111,25 @@ module Rye;
|
|
110
111
|
# Return nil or a StringIO object, if specified as the target.
|
111
112
|
#
|
112
113
|
# NOTE: Changes to current working directory with +cd+ or +[]+ are ignored.
|
113
|
-
def file_download(*
|
114
|
+
def file_download(*paths); net_scp_transfer!(:download, false, *paths); end
|
115
|
+
|
116
|
+
# Same as file_upload except directories are processed recursively. If
|
117
|
+
# any supplied paths are directories you need to use this method and not
|
118
|
+
# file_upload.
|
119
|
+
def dir_upload(*paths); net_scp_transfer!(:upload, true, *paths); end
|
120
|
+
alias_method :directory_upload, :dir_upload
|
121
|
+
|
122
|
+
# Same as file_download except directories are processed recursively. If
|
123
|
+
# any supplied paths are directories you need to use this method and not
|
124
|
+
# file_download.
|
125
|
+
def dir_download(*paths); net_scp_transfer!(:download, true, *paths); end
|
126
|
+
alias_method :directory_download, :dir_download
|
114
127
|
|
115
128
|
# Shorthand for +file_download('remote/path').string+
|
116
129
|
#
|
117
|
-
# Returns a String containing the content of all remote *
|
118
|
-
def string_download(*
|
119
|
-
net_scp_transfer!(:download, *
|
130
|
+
# Returns a String containing the content of all remote *paths*.
|
131
|
+
def string_download(*paths)
|
132
|
+
net_scp_transfer!(:download, *paths).string
|
120
133
|
end
|
121
134
|
alias_method :str_download, :string_download
|
122
135
|
|
data/rye.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "rye"
|
3
3
|
s.rubyforge_project = "rye"
|
4
|
-
s.version = "0.8.
|
4
|
+
s.version = "0.8.7"
|
5
5
|
s.summary = "Rye: Safely run SSH commands on a bunch of machines at the same time (from Ruby)."
|
6
6
|
s.description = s.summary
|
7
7
|
s.author = "Delano Mandelbaum"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rye
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-11 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|