You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2016/03/21 17:53:22 UTC

svn commit: r1735997 - in /felix/trunk/gogo/jline: ./ src/main/java/org/apache/felix/gogo/jline/

Author: gnodet
Date: Mon Mar 21 16:53:21 2016
New Revision: 1735997

URL: http://svn.apache.org/viewvc?rev=1735997&view=rev
Log:
Use CommandSession.currentDir()

Modified:
    felix/trunk/gogo/jline/pom.xml
    felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java
    felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/JLineCommands.java
    felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java
    felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java

Modified: felix/trunk/gogo/jline/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/pom.xml?rev=1735997&r1=1735996&r2=1735997&view=diff
==============================================================================
--- felix/trunk/gogo/jline/pom.xml (original)
+++ felix/trunk/gogo/jline/pom.xml Mon Mar 21 16:53:21 2016
@@ -31,6 +31,7 @@
     <properties>
         <!-- Skip because of NPE -->
         <animal.sniffer.skip>true</animal.sniffer.skip>
+        <felix.java.version>8</felix.java.version>
     </properties>
     <dependencies>
         <dependency>

Modified: felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java?rev=1735997&r1=1735996&r2=1735997&view=diff
==============================================================================
--- felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java (original)
+++ felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java Mon Mar 21 16:53:21 2016
@@ -20,8 +20,6 @@ package org.apache.felix.gogo.jline;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.StringWriter;
@@ -29,6 +27,11 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -224,9 +227,16 @@ public class Builtin {
         BufferedWriter fw = null;
 
         if (args.size() == 1) {
-            String path = args.get(0);
-            File file = new File(Posix._pwd(session), path);
-            fw = new BufferedWriter(new FileWriter(file, opt.isSet("append")));
+            Path path = session.currentDir().resolve(args.get(0));
+            Set<OpenOption> options = new HashSet<>();
+            options.add(StandardOpenOption.WRITE);
+            options.add(StandardOpenOption.CREATE);
+            if (opt.isSet("append")) {
+                options.add(StandardOpenOption.APPEND);
+            } else {
+                options.add(StandardOpenOption.TRUNCATE_EXISTING);
+            }
+            fw = Files.newBufferedWriter(path, StandardCharsets.UTF_8, options.toArray(new OpenOption[options.size()]));
         }
 
         StringWriter sw = new StringWriter();

Modified: felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/JLineCommands.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/JLineCommands.java?rev=1735997&r1=1735996&r2=1735997&view=diff
==============================================================================
--- felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/JLineCommands.java (original)
+++ felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/JLineCommands.java Mon Mar 21 16:53:21 2016
@@ -20,7 +20,6 @@ package org.apache.felix.gogo.jline;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
@@ -105,7 +104,7 @@ public class JLineCommands {
     }
 
     public void nano(final CommandSession session, String[] argv) throws Exception {
-        commands.nano(Shell.getTerminal(session), System.out, System.err, Shell.cwd(session), argv);
+        commands.nano(Shell.getTerminal(session), System.out, System.err, session.currentDir(), argv);
     }
 
     public void watch(final CommandSession session, String[] argv) throws IOException, InterruptedException {
@@ -169,7 +168,7 @@ public class JLineCommands {
     }
 
     public void less(CommandSession session, String[] argv) throws IOException, InterruptedException {
-        commands.less(Shell.getTerminal(session), System.out, System.err, Shell.cwd(session), argv);
+        commands.less(Shell.getTerminal(session), System.out, System.err, session.currentDir(), argv);
     }
 
     public void history(CommandSession session, String[] argv) throws IOException {
@@ -209,7 +208,7 @@ public class JLineCommands {
         ParsedLine line = Shell.getParsedLine(session);
         LineReader reader = Shell.getReader(session);
         List<Candidate> candidates = new ArrayList<>();
-        new FilesCompleter(new File(Shell.cwd(session))).complete(reader, line, candidates);
+        new FilesCompleter(session.currentDir()).complete(reader, line, candidates);
         return candidates;
     }
 
@@ -217,7 +216,7 @@ public class JLineCommands {
         ParsedLine line = Shell.getParsedLine(session);
         LineReader reader = Shell.getReader(session);
         List<Candidate> candidates = new ArrayList<>();
-        new DirectoriesCompleter(new File(Shell.cwd(session))).complete(reader, line, candidates);
+        new DirectoriesCompleter(session.currentDir()).complete(reader, line, candidates);
         return candidates;
     }
 

Modified: felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java?rev=1735997&r1=1735996&r2=1735997&view=diff
==============================================================================
--- felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java (original)
+++ felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java Mon Mar 21 16:53:21 2016
@@ -20,11 +20,11 @@ package org.apache.felix.gogo.jline;
 
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,21 +45,6 @@ import org.jline.builtins.Options;
 public class Posix {
     static final String[] functions = {"cat", "echo", "grep", "sort", "sleep", "cd", "pwd", "ls"};
 
-    static final String CWD = "_cwd";
-
-    public static File _pwd(CommandSession session) {
-        try {
-            File cwd = (File) session.get(CWD);
-            if (cwd == null) {
-                cwd = new File(".").getCanonicalFile();
-                session.put(CWD, cwd);
-            }
-            return cwd;
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
     public static void sort(CommandSession session, String[] argv) throws IOException {
         final String[] usage = {
                 "sort -  writes sorted standard input to standard output.",
@@ -86,7 +71,7 @@ public class Posix {
         if (!args.isEmpty()) {
             for (String filename : args) {
                 BufferedReader reader = new BufferedReader(new InputStreamReader(
-                        Shell.cwd(session).resolve(filename).toURL().openStream()));
+                        session.currentDir().toUri().resolve(filename).toURL().openStream()));
                 try {
                     read(reader, lines);
                 } finally {
@@ -261,13 +246,7 @@ public class Posix {
         }
     }
 
-    private static <T> void addAll(List<? super T> list, T[] array) {
-        if (array != null) {
-            Collections.addAll(list, array);
-        }
-    }
-
-    public File pwd(CommandSession session, String[] argv) throws IOException {
+    public Path pwd(CommandSession session, String[] argv) throws IOException {
         final String[] usage = {
                 "pwd - get current directory",
                 "Usage: pwd [OPTIONS]",
@@ -282,16 +261,10 @@ public class Posix {
             System.err.println("usage: pwd");
             return null;
         }
-        File cwd = (File) session.get(CWD);
-        if (cwd == null) {
-            cwd = new File(".").getCanonicalFile();
-            session.put(CWD, cwd);
-        }
-        return cwd;
+        return session.currentDir();
     }
 
-    public File cd(CommandSession session, String[] argv)
-            throws IOException {
+    public void cd(CommandSession session, String[] argv) throws IOException {
         final String[] usage = {
                 "cd - get current directory",
                 "Usage: cd [OPTIONS] DIRECTORY",
@@ -300,29 +273,23 @@ public class Posix {
         Options opt = Options.compile(usage).parse(argv);
         if (opt.isSet("help")) {
             opt.usage(System.err);
-            return null;
+            return;
         }
         if (opt.args().size() != 1) {
             System.err.println("usage: cd DIRECTORY");
-            return null;
+            return;
         }
-        File cwd = pwd(session, new String[0]);
-        String dir = opt.args().get(0);
-
-        URI curUri = cwd.toURI();
-        URI newUri = curUri.resolve(dir);
-
-        cwd = new File(newUri);
-        if (!cwd.exists()) {
+        Path cwd = session.currentDir();
+        cwd = cwd.resolve(opt.args().get(0)).toAbsolutePath();
+        if (!Files.exists(cwd)) {
             throw new IOException("Directory does not exist");
-        } else if (!cwd.isDirectory()) {
+        } else if (!Files.isDirectory(cwd)) {
             throw new IOException("Target is not a directory");
         }
-        session.put(CWD, cwd.getCanonicalFile());
-        return cwd;
+        session.currentDir(cwd);
     }
 
-    public Collection<File> ls(CommandSession session, String[] argv) throws IOException {
+    public Collection<Path> ls(CommandSession session, String[] argv) throws IOException {
         final String[] usage = {
                 "ls - list files",
                 "Usage: ls [OPTIONS] PATTERNS...",
@@ -336,8 +303,7 @@ public class Posix {
         if (opt.args().isEmpty()) {
             opt.args().add("*");
         }
-        opt.args().remove(0);
-        List<File> files = new ArrayList<File>();
+        List<Path> files = new ArrayList<>();
         for (String pattern : opt.args()) {
             pattern = ((pattern == null) || (pattern.length() == 0)) ? "." : pattern;
             pattern = ((pattern.charAt(0) != File.separatorChar) && (pattern.charAt(0) != '.'))
@@ -346,29 +312,28 @@ public class Posix {
             String parent = (idx < 0) ? "." : pattern.substring(0, idx + 1);
             String target = (idx < 0) ? pattern : pattern.substring(idx + 1);
 
-            File actualParent = ((parent.charAt(0) == File.separatorChar)
-                    ? new File(parent)
-                    : new File(pwd(session, new String[0]), parent)).getCanonicalFile();
+            Path actualParent = session.currentDir().resolve(parent).normalize();
 
             idx = target.indexOf(File.separatorChar, idx);
             boolean isWildcarded = (target.indexOf('*', idx) >= 0);
             if (isWildcarded) {
-                if (!actualParent.exists()) {
+                if (!Files.exists(actualParent)) {
                     throw new IOException("File does not exist");
                 }
                 final List<String> pieces = parseSubstring(target);
-                addAll(files, actualParent.listFiles(new FileFilter() {
-                    public boolean accept(File pathname) {
-                        return compareSubstring(pieces, pathname.getName());
-                    }
-                }));
+                Files.list(actualParent)
+                        .filter(p -> compareSubstring(pieces, p.getFileName().toString()))
+                        .map(actualParent::relativize)
+                        .forEach(files::add);
             } else {
-                File actualTarget = new File(actualParent, target).getCanonicalFile();
-                if (!actualTarget.exists()) {
+                Path actualTarget = actualParent.resolve(target);
+                if (!Files.exists(actualTarget)) {
                     throw new IOException("File does not exist");
                 }
-                if (actualTarget.isDirectory()) {
-                    addAll(files, actualTarget.listFiles());
+                if (Files.isDirectory(actualTarget)) {
+                    Files.list(actualTarget)
+                            .map(actualTarget::relativize)
+                            .forEach(files::add);
                 } else {
                     files.add(actualTarget);
                 }
@@ -397,14 +362,14 @@ public class Posix {
             args = Collections.singletonList("-");
         }
 
-        URI cwd = Shell.cwd(session);
+        Path cwd = session.currentDir();
         for (String arg : args) {
             InputStream is;
             if ("-".equals(arg)) {
                 is = System.in;
 
             } else {
-                is = cwd.resolve(arg).toURL().openStream();
+                is = cwd.toUri().resolve(arg).toURL().openStream();
             }
             cat(new BufferedReader(new InputStreamReader(is)), opt.isSet("n"));
         }
@@ -494,8 +459,8 @@ public class Posix {
             InputStream in = null;
 
             try {
-                URI cwd = Shell.cwd(session);
-                in = (arg == null) ? System.in : cwd.resolve(arg).toURL().openStream();
+                Path cwd = session.currentDir();
+                in = (arg == null) ? System.in : cwd.resolve(arg).toUri().toURL().openStream();
 
                 BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
                 int line = 0;

Modified: felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java?rev=1735997&r1=1735996&r2=1735997&view=diff
==============================================================================
--- felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java (original)
+++ felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java Mon Mar 21 16:53:21 2016
@@ -188,10 +188,6 @@ public class Shell {
         return (Set<String>) session.get(".variables");
     }
 
-    static URI cwd(CommandSession session) {
-        return Posix._pwd(session).toURI(); // _cwd is set by felixcommands:cd
-    }
-
     private static <T extends Annotation> T findAnnotation(Annotation[] anns,
                                                            Class<T> clazz) {
         for (int i = 0; (anns != null) && (i < anns.length); i++) {
@@ -255,6 +251,7 @@ public class Shell {
         newSession.put("#TERM", (Function) (s, arguments) -> terminal.getType());
         newSession.put("#COLUMNS", (Function) (s, arguments) -> terminal.getWidth());
         newSession.put("#LINES", (Function) (s, arguments) -> terminal.getHeight());
+        newSession.put("#CWD", (Function) (s, arguments) -> s.currentDir().toString());
 
         LineReader reader = null;
         if (args.isEmpty() && interactive) {
@@ -338,7 +335,7 @@ public class Shell {
                 }
                 program = buf;
             } else {
-                URI script = cwd(session).resolve(args.remove(0));
+                URI script = session.currentDir().toUri().resolve(args.remove(0));
 
                 // set script arguments
                 newSession.put("0", script);
@@ -371,7 +368,7 @@ public class Shell {
     }
 
     public Object source(CommandSession session, String script) throws Exception {
-        URI uri = cwd(session).resolve(script);
+        URI uri = session.currentDir().toUri().resolve(script);
         session.put("0", uri);
         try {
             return session.execute(readScript(uri));