You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2006/12/20 20:28:27 UTC
svn commit: r489175 - in /lucene/hadoop/trunk: CHANGES.txt
src/java/org/apache/hadoop/fs/FsShell.java
Author: cutting
Date: Wed Dec 20 11:28:26 2006
New Revision: 489175
URL: http://svn.apache.org/viewvc?view=rev&rev=489175
Log:
HADOOP-738. Extend FsShell '-put' and '-get' commands to accept standard input and output, respectively. Contributed by Wendy.
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/java/org/apache/hadoop/fs/FsShell.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=489175&r1=489174&r2=489175
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Wed Dec 20 11:28:26 2006
@@ -130,6 +130,10 @@
36. HADOOP-814. Optimize locking in namenode. (Dhruba Borthakur via cutting)
+37. HADOOP-738. Change 'fs -put' and 'fs -get' commands to accept
+ standard input and output, respectively. Standard i/o is
+ specified by a file named '-'. (Wendy Chien via cutting)
+
Release 0.9.2 - 2006-12-15
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/fs/FsShell.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/fs/FsShell.java?view=diff&rev=489175&r1=489174&r2=489175
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/fs/FsShell.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/fs/FsShell.java Wed Dec 20 11:28:26 2006
@@ -38,11 +38,39 @@
conf.setQuietMode(true);
this.fs = FileSystem.get(conf);
}
+
+ /**
+ * Copies from stdin to the indicated file.
+ */
+ private void copyFromStdin(Path dst) throws IOException {
+ if (fs.isDirectory(dst)) {
+ throw new IOException("When source is stdin, destination must be a file.");
+ }
+ if (fs.exists(dst)) {
+ throw new IOException("Target " + dst.toString() + " already exists.");
+ }
+ FSDataOutputStream out = fs.create(dst);
+ byte buf[] = new byte[conf.getInt("io.file.buffer.size", 4096)];
+ try {
+ int bytesRead = System.in.read(buf);
+ while (bytesRead >= 0) {
+ out.write(buf, 0, bytesRead);
+ bytesRead = System.in.read(buf);
+ }
+ } finally {
+ out.close();
+ }
+ }
+
/**
* Add a local file to the indicated FileSystem name. src is kept.
*/
void copyFromLocal(Path src, String dstf) throws IOException {
+ if (src.toString().equals("-")) {
+ copyFromStdin(new Path(dstf));
+ } else {
fs.copyFromLocalFile(src, new Path(dstf));
+ }
}
/**
@@ -74,14 +102,21 @@
}
String srcf = argv[pos++];
String dstf = argv[pos++];
- Path [] srcs = fs.globPaths( new Path(srcf) );
- if( srcs.length > 1 && !new File( dstf ).isDirectory()) {
- throw new IOException( "When copy multiple files, "
- + "destination should be a directory." );
- }
- Path dst = new Path( dstf );
- for( int i=0; i<srcs.length; i++ ) {
- fs.copyToLocalFile( srcs[i], dst, copyCrc );
+ if( dstf.equals("-")) {
+ if (copyCrc) {
+ System.err.println("-crc option is not valid when destination is stdout.");
+ }
+ cat(srcf);
+ } else {
+ Path [] srcs = fs.globPaths( new Path(srcf) );
+ if( srcs.length > 1 && !new File( dstf ).isDirectory()) {
+ throw new IOException( "When copying multiple files, "
+ + "destination should be a directory." );
+ }
+ Path dst = new Path( dstf );
+ for( int i=0; i<srcs.length; i++ ) {
+ fs.copyToLocalFile( srcs[i], dst, copyCrc );
+ }
}
}