Author: gnodet Date: Wed May 5 19:17:05 2010 New Revision: 941432 URL: http://svn.apache.org/viewvc?rev=941432&view=rev Log: [sshd] fix sftp date formatting
Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/SftpTest.java Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java?rev=941432&r1=941431&r2=941432&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java (original) +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java Wed May 5 19:17:05 2010 @@ -26,8 +26,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; -import java.text.DateFormat; -import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -743,7 +743,9 @@ public class SftpSubsystem implements Co buffer.putInt(id); buffer.putInt(1); String name = file.getPath(); - name = name.replace('\\', '/'); + if (File.separatorChar != '/') { + name = name.replace(File.separatorChar, '/'); + } if (!name.startsWith("/")) { name = "/" + name; } @@ -803,7 +805,7 @@ public class SftpSubsystem implements Co sb.append(" "); sb.append(lengthString); sb.append(" "); - sb.append(new SimpleDateFormat("MMM dd hh:mm").format(f.lastModified())); + sb.append(getUnixDate(f.lastModified())); sb.append(" "); sb.append(f.getName()); @@ -904,4 +906,59 @@ public class SftpSubsystem implements Co } + private final static String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", + "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + /** + * Get unix style date string. + */ + private final static String getUnixDate(long millis) { + if (millis < 0) { + return "------------"; + } + + StringBuffer sb = new StringBuffer(16); + Calendar cal = new GregorianCalendar(); + cal.setTimeInMillis(millis); + + // month + sb.append(MONTHS[cal.get(Calendar.MONTH)]); + sb.append(' '); + + // day + int day = cal.get(Calendar.DATE); + if (day < 10) { + sb.append(' '); + } + sb.append(day); + sb.append(' '); + + long sixMonth = 15811200000L; // 183L * 24L * 60L * 60L * 1000L; + long nowTime = System.currentTimeMillis(); + if (Math.abs(nowTime - millis) > sixMonth) { + + // year + int year = cal.get(Calendar.YEAR); + sb.append(' '); + sb.append(year); + } else { + + // hour + int hh = cal.get(Calendar.HOUR_OF_DAY); + if (hh < 10) { + sb.append('0'); + } + sb.append(hh); + sb.append(':'); + + // minute + int mm = cal.get(Calendar.MINUTE); + if (mm < 10) { + sb.append('0'); + } + sb.append(mm); + } + return sb.toString(); + } + } Modified: mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/SftpTest.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/SftpTest.java?rev=941432&r1=941431&r2=941432&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/SftpTest.java (original) +++ mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/SftpTest.java Wed May 5 19:17:05 2010 @@ -108,7 +108,7 @@ public class SftpTest { } @Test -// @Ignore + @Ignore public void testExternal() throws Exception { System.out.println("SFTP subsystem available on port " + port); Thread.sleep(5 * 60000);