Skip to content

Commit c3b831f

Browse files
committed
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 git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1744708 13f79535-47bb-0310-9956-ffa450edef68
1 parent 5b5e075 commit c3b831f

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

src/main/java/org/apache/commons/codec/cli/Digest.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.File;
2020
import java.io.IOException;
21+
import java.nio.charset.Charset;
2122
import java.security.MessageDigest;
2223
import java.util.Arrays;
2324
import java.util.Locale;
@@ -27,7 +28,7 @@
2728
import org.apache.commons.codec.digest.MessageDigestAlgorithms;
2829

2930
/**
30-
* A minimal command line to run digest over files.
31+
* A minimal command line to run digest over files, directories or a string
3132
*
3233
* @see #main(String[])
3334
* @since 1.11
@@ -44,7 +45,8 @@ public class Digest {
4445
*
4546
* @param args
4647
* {@code args[0]} is one of {@link MessageDigestAlgorithms} name, {@link MessageDigest} name, {@code ALL}
47-
* , or {@code *}. {@code args[1]} is a FILE.
48+
* , or {@code *}.
49+
* {@code args[1]} is a FILE.
4850
* @throws IOException
4951
*/
5052
public static void main(String[] args) throws IOException {
@@ -68,13 +70,17 @@ private Digest(final String[] args) {
6870
source = args.length == 1 ? null : args[1];
6971
}
7072

71-
private void println(String prefix, final byte[] digest) {
72-
final String sourceDesc = source == null ? "-" : source;
73+
private void println(final String prefix, final byte[] digest) {
74+
println(prefix, digest, null);
75+
}
76+
77+
private void println(final String prefix, final byte[] digest, String fileName) {
7378
// The standard appears to be to print
74-
// hex, space, then either space or '*' followed by file
79+
// hex, space, then either space or '*' followed by filename
7580
// where '*' is used for binary files
7681
// shasum(1) has a -b option which generates " *" separator
77-
System.out.println(prefix + Hex.encodeHexString(digest) + " " + sourceDesc);
82+
// we don't distinguish binary files at present
83+
System.out.println(prefix + Hex.encodeHexString(digest) + (fileName != null ? " " + fileName : ""));
7884
}
7985

8086
private void run() throws IOException {
@@ -105,18 +111,20 @@ private void run(String prefix, final MessageDigest messageDigest) throws IOExce
105111
}
106112
final File file = new File(source);
107113
if (file.isFile()) {
108-
println(prefix, DigestUtils.digest(messageDigest, file));
114+
println(prefix, DigestUtils.digest(messageDigest, file), source);
109115
} else if (file.isDirectory()) {
110116
run(prefix, messageDigest, file.listFiles());
111117
} else {
112-
System.err.println("Parameter is file nor directory: '" + file + "'");
118+
// use the default charset for the command-line parameter
119+
final byte[] bytes = source.getBytes(Charset.defaultCharset());
120+
println(prefix, DigestUtils.digest(messageDigest, bytes));
113121
}
114122
}
115123

116124
private void run(String prefix, MessageDigest messageDigest, File[] files) throws IOException {
117125
for (File file : files) {
118126
if (file.isFile()) {
119-
println(prefix, DigestUtils.digest(messageDigest, file));
127+
println(prefix, DigestUtils.digest(messageDigest, file), file.getName());
120128
}
121129
}
122130
}

0 commit comments

Comments
 (0)