mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/net/ftp.rb (chdir, delete, gettextfile, mdtm, mkdir, nlst,
putbinaryfile, puttextfile, rename, rmdir, size): support Pathname. Patch by Joe Rafaniello. [fix GH-828] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ab8dbd1082
commit
cd29e5fcef
3 changed files with 99 additions and 15 deletions
|
@ -1,3 +1,9 @@
|
|||
Tue Feb 10 11:19:11 2015 Shugo Maeda <shugo@ruby-lang.org>
|
||||
|
||||
* lib/net/ftp.rb (chdir, delete, gettextfile, mdtm, mkdir, nlst,
|
||||
putbinaryfile, puttextfile, rename, rmdir, size): support
|
||||
Pathname. Patch by Joe Rafaniello. [fix GH-828]
|
||||
|
||||
Mon Feb 9 16:36:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* tool/make-snapshot (package): get rid of loading unbundled and
|
||||
|
|
|
@ -618,7 +618,7 @@ module Net
|
|||
end
|
||||
begin
|
||||
f.binmode if localfile
|
||||
retrbinary("RETR " + remotefile.to_s, blocksize, rest_offset) do |data|
|
||||
retrbinary("RETR #{remotefile}", blocksize, rest_offset) do |data|
|
||||
f.write(data) if localfile
|
||||
yield(data) if block_given?
|
||||
result.concat(data) if result
|
||||
|
@ -644,7 +644,7 @@ module Net
|
|||
result = ""
|
||||
end
|
||||
begin
|
||||
retrlines("RETR " + remotefile) do |line, newline|
|
||||
retrlines("RETR #{remotefile}") do |line, newline|
|
||||
l = newline ? line + "\n" : line
|
||||
f.print(l) if localfile
|
||||
yield(line, newline) if block_given?
|
||||
|
@ -689,9 +689,9 @@ module Net
|
|||
begin
|
||||
f.binmode
|
||||
if rest_offset
|
||||
storbinary("APPE " + remotefile, f, blocksize, rest_offset, &block)
|
||||
storbinary("APPE #{remotefile}", f, blocksize, rest_offset, &block)
|
||||
else
|
||||
storbinary("STOR " + remotefile, f, blocksize, rest_offset, &block)
|
||||
storbinary("STOR #{remotefile}", f, blocksize, rest_offset, &block)
|
||||
end
|
||||
ensure
|
||||
f.close
|
||||
|
@ -706,7 +706,7 @@ module Net
|
|||
def puttextfile(localfile, remotefile = File.basename(localfile), &block) # :yield: line
|
||||
f = open(localfile)
|
||||
begin
|
||||
storlines("STOR " + remotefile, f, &block)
|
||||
storlines("STOR #{remotefile}", f, &block)
|
||||
ensure
|
||||
f.close
|
||||
end
|
||||
|
@ -742,7 +742,7 @@ module Net
|
|||
def nlst(dir = nil)
|
||||
cmd = "NLST"
|
||||
if dir
|
||||
cmd = cmd + " " + dir
|
||||
cmd = "#{cmd} #{dir}"
|
||||
end
|
||||
files = []
|
||||
retrlines(cmd) do |line|
|
||||
|
@ -758,7 +758,7 @@ module Net
|
|||
def list(*args, &block) # :yield: line
|
||||
cmd = "LIST"
|
||||
args.each do |arg|
|
||||
cmd = cmd + " " + arg.to_s
|
||||
cmd = "#{cmd} #{arg}"
|
||||
end
|
||||
if block
|
||||
retrlines(cmd, &block)
|
||||
|
@ -777,18 +777,18 @@ module Net
|
|||
# Renames a file on the server.
|
||||
#
|
||||
def rename(fromname, toname)
|
||||
resp = sendcmd("RNFR " + fromname)
|
||||
resp = sendcmd("RNFR #{fromname}")
|
||||
if resp[0] != ?3
|
||||
raise FTPReplyError, resp
|
||||
end
|
||||
voidcmd("RNTO " + toname)
|
||||
voidcmd("RNTO #{toname}")
|
||||
end
|
||||
|
||||
#
|
||||
# Deletes a file on the server.
|
||||
#
|
||||
def delete(filename)
|
||||
resp = sendcmd("DELE " + filename)
|
||||
resp = sendcmd("DELE #{filename}")
|
||||
if resp[0, 3] == "250"
|
||||
return
|
||||
elsif resp[0] == ?5
|
||||
|
@ -812,7 +812,7 @@ module Net
|
|||
end
|
||||
end
|
||||
end
|
||||
cmd = "CWD " + dirname
|
||||
cmd = "CWD #{dirname}"
|
||||
voidcmd(cmd)
|
||||
end
|
||||
|
||||
|
@ -821,7 +821,7 @@ module Net
|
|||
#
|
||||
def size(filename)
|
||||
with_binary(true) do
|
||||
resp = sendcmd("SIZE " + filename)
|
||||
resp = sendcmd("SIZE #{filename}")
|
||||
if resp[0, 3] != "213"
|
||||
raise FTPReplyError, resp
|
||||
end
|
||||
|
@ -845,7 +845,7 @@ module Net
|
|||
# Creates a remote directory.
|
||||
#
|
||||
def mkdir(dirname)
|
||||
resp = sendcmd("MKD " + dirname)
|
||||
resp = sendcmd("MKD #{dirname}")
|
||||
return parse257(resp)
|
||||
end
|
||||
|
||||
|
@ -853,7 +853,7 @@ module Net
|
|||
# Removes a remote directory.
|
||||
#
|
||||
def rmdir(dirname)
|
||||
voidcmd("RMD " + dirname)
|
||||
voidcmd("RMD #{dirname}")
|
||||
end
|
||||
|
||||
#
|
||||
|
@ -907,7 +907,7 @@ module Net
|
|||
# Use +mtime+ if you want a parsed Time instance.
|
||||
#
|
||||
def mdtm(filename)
|
||||
resp = sendcmd("MDTM " + filename)
|
||||
resp = sendcmd("MDTM #{filename}")
|
||||
if resp[0, 3] == "213"
|
||||
return resp[3 .. -1].strip
|
||||
end
|
||||
|
|
|
@ -767,6 +767,84 @@ class FTPTest < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_pathnames
|
||||
require 'pathname'
|
||||
|
||||
commands = []
|
||||
server = create_ftp_server(0.2) { |sock|
|
||||
sock.print("220 (test_ftp).\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("331 Please specify the password.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("230 Login successful.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("200 Switching to Binary mode.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("257 'foo' directory created.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("250 CWD command successful.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("250 CWD command successful.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("250 RMD command successful.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("213 test.txt Fri, 11 Jan 2013 11:20:41 -0500.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("213 test.txt 16.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("350 File exists, ready for destination name\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("250 RNTO command successful.\r\n")
|
||||
commands.push(sock.gets)
|
||||
sock.print("250 DELE command successful.\r\n")
|
||||
}
|
||||
|
||||
begin
|
||||
begin
|
||||
dir = Pathname.new("foo")
|
||||
file = Pathname.new("test.txt")
|
||||
file2 = Pathname.new("test2.txt")
|
||||
ftp = Net::FTP.new
|
||||
ftp.connect(SERVER_ADDR, server.port)
|
||||
ftp.login
|
||||
ftp.mkdir(dir)
|
||||
ftp.chdir(dir)
|
||||
ftp.chdir("..")
|
||||
ftp.rmdir(dir)
|
||||
ftp.mdtm(file)
|
||||
ftp.size(file)
|
||||
ftp.rename(file, file2)
|
||||
ftp.delete(file)
|
||||
|
||||
# TODO: These commented tests below expose the error but don't test anything:
|
||||
# TypeError: no implicit conversion of Pathname into String
|
||||
# ftp.nlst(dir)
|
||||
# ftp.putbinaryfile(Pathname.new("/etc/hosts"), file2)
|
||||
# ftp.puttextfile(Pathname.new("/etc/hosts"), file2)
|
||||
# ftp.gettextfile(Pathname.new("/etc/hosts"), file2)
|
||||
# ftp.getbinaryfile(Pathname.new("/etc/hosts"), file2)
|
||||
# ftp.list(dir, dir, dir)
|
||||
|
||||
assert_match(/\AUSER /, commands.shift)
|
||||
assert_match(/\APASS /, commands.shift)
|
||||
assert_match(/\ATYPE /, commands.shift)
|
||||
assert_match(/\AMKD /, commands.shift)
|
||||
assert_match(/\ACWD /, commands.shift)
|
||||
assert_match(/\ACDUP/, commands.shift)
|
||||
assert_match(/\ARMD /, commands.shift)
|
||||
assert_match(/\AMDTM /, commands.shift)
|
||||
assert_match(/\ASIZE /, commands.shift)
|
||||
assert_match(/\ARNFR /, commands.shift)
|
||||
assert_match(/\ARNTO /, commands.shift)
|
||||
assert_match(/\ADELE /, commands.shift)
|
||||
ensure
|
||||
ftp.close if ftp
|
||||
end
|
||||
ensure
|
||||
server.close
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue