You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2016/05/20 11:07:49 UTC

svn commit: r1744708 - /commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java

Author: sebb
Date: Fri May 20 11:07:49 2016
New Revision: 1744708

URL: http://svn.apache.org/viewvc?rev=1744708&view=rev
Log:
Treat parameter as a string if it's not a file or a directory
Show file name rather than directory name when listing contents
Don't append '-' for non-file digests

Modified:
    commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java

Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java?rev=1744708&r1=1744707&r2=1744708&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/cli/Digest.java Fri May 20 11:07:49 2016
@@ -18,6 +18,7 @@ package org.apache.commons.codec.cli;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.Charset;
 import java.security.MessageDigest;
 import java.util.Arrays;
 import java.util.Locale;
@@ -27,7 +28,7 @@ import org.apache.commons.codec.digest.D
 import org.apache.commons.codec.digest.MessageDigestAlgorithms;
 
 /**
- * A minimal command line to run digest over files.
+ * A minimal command line to run digest over files, directories or a string
  *
  * @see #main(String[])
  * @since 1.11
@@ -44,7 +45,8 @@ public class Digest {
      *
      * @param args
      *            {@code args[0]} is one of {@link MessageDigestAlgorithms} name, {@link MessageDigest} name, {@code ALL}
-     *            , or {@code *}. {@code args[1]} is a FILE.
+     *            , or {@code *}. 
+     *            {@code args[1]} is a FILE.
      * @throws IOException
      */
     public static void main(String[] args) throws IOException {
@@ -68,13 +70,17 @@ public class Digest {
         source = args.length == 1 ? null : args[1];
     }
 
-    private void println(String prefix, final byte[] digest) {
-        final String sourceDesc = source == null ? "-" : source;
+    private void println(final String prefix, final byte[] digest) {
+        println(prefix, digest, null);
+    }
+
+    private void println(final String prefix, final byte[] digest, String fileName) {
         // The standard appears to be to print
-        // hex, space, then either space or '*' followed by file
+        // hex, space, then either space or '*' followed by filename
         // where '*' is used for binary files
         // shasum(1) has a -b option which generates " *" separator
-        System.out.println(prefix + Hex.encodeHexString(digest) + "  " + sourceDesc);
+        // we don't distinguish binary files at present
+        System.out.println(prefix + Hex.encodeHexString(digest) + (fileName != null ? "  " + fileName : ""));
     }
 
     private void run() throws IOException {
@@ -105,18 +111,20 @@ public class Digest {
         }
         final File file = new File(source);
         if (file.isFile()) {
-            println(prefix, DigestUtils.digest(messageDigest, file));
+            println(prefix, DigestUtils.digest(messageDigest, file), source);
         } else if (file.isDirectory()) {
             run(prefix, messageDigest, file.listFiles());
         } else {
-            System.err.println("Parameter is file nor directory: '" + file + "'");
+            // use the default charset for the command-line parameter
+            final byte[] bytes = source.getBytes(Charset.defaultCharset());
+            println(prefix, DigestUtils.digest(messageDigest, bytes));
         }
     }
 
     private void run(String prefix, MessageDigest messageDigest, File[] files) throws IOException {
         for (File file : files) {
             if (file.isFile()) {
-                println(prefix, DigestUtils.digest(messageDigest, file));
+                println(prefix, DigestUtils.digest(messageDigest, file), file.getName());
             }
         }
     }