summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--lib/net/ftp.rb10
-rw-r--r--test/net/ftp/test_ftp.rb33
3 files changed, 40 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 050e8b83d7..60701a7e8b 100644
--- a/NEWS
+++ b/NEWS
@@ -205,6 +205,7 @@ with all sufficient information, see the ChangeLog file or Redmine
* Support TLS (RFC 4217).
* Support hash style options for Net::FTP.new.
+ * Add a new optional argument pathname to Net::FTP#status.
* OpenSSL
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index bb280139db..9f2f76fb1d 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -1226,11 +1226,13 @@ module Net
#
# Returns the status (STAT command).
+ # pathname - when stat is invoked with pathname as a parameter it acts like
+ # list but alot faster and over the same tcp session.
#
- def status
- line = "STAT" + CRLF
- print "put: STAT\n" if @debug_mode
- @sock.send(line, Socket::MSG_OOB)
+ def status(pathname = nil)
+ line = pathname ? "STAT #{pathname}" : "STAT"
+ print "put: #{line}\n" if @debug_mode
+ @sock.send(line + CRLF, Socket::MSG_OOB)
return getresp
end
diff --git a/test/net/ftp/test_ftp.rb b/test/net/ftp/test_ftp.rb
index 79885b3e57..2541e7954a 100644
--- a/test/net/ftp/test_ftp.rb
+++ b/test/net/ftp/test_ftp.rb
@@ -1316,6 +1316,39 @@ EOF
end
end
+ def test_status_path
+ commands = []
+ server = create_ftp_server { |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("213 End of status\r\n")
+ }
+ begin
+ begin
+ ftp = Net::FTP.new
+ ftp.read_timeout = 0.2
+ ftp.connect(SERVER_ADDR, server.port)
+ ftp.login
+ assert_match(/\AUSER /, commands.shift)
+ assert_match(/\APASS /, commands.shift)
+ assert_equal("TYPE I\r\n", commands.shift)
+ ftp.status "/"
+ assert_equal("STAT /\r\n", commands.shift)
+ assert_equal(nil, commands.shift)
+ ensure
+ ftp.close if ftp
+ end
+ ensure
+ server.close
+ end
+ end
+
def test_pathnames
require 'pathname'