summary refs log tree commit diff stats
diff options
context:
space:
mode:
authornfnty <git@nfnty.se>2017-02-01 22:56:19 +0100
committernfnty <git@nfnty.se>2017-02-01 23:02:23 +0100
commit27d06bb96dffd36f37b25919c229927ca89d271d (patch)
tree945c28ccc3d3c25b6f66be3f6dcb348af0001128
parent17f87391a2d1e9c123ab9e3fdc626e8279d94f1d (diff)
downloadranger-27d06bb96dffd36f37b25919c229927ca89d271d.tar.gz
core.main.parse_arguments: Resolve links, Validate paths
Add option to specify cache directory

Fixes #551
-rw-r--r--ranger/core/main.py28
1 files changed, 16 insertions, 12 deletions
diff --git a/ranger/core/main.py b/ranger/core/main.py
index 80a16000..18fb7dd3 100644
--- a/ranger/core/main.py
+++ b/ranger/core/main.py
@@ -200,8 +200,7 @@ https://github.com/hut/ranger/issues
 
 def parse_arguments():
     """Parse the program arguments"""
-    from optparse import OptionParser, SUPPRESS_HELP  # pylint: disable=deprecated-module
-    from os.path import expanduser
+    from optparse import OptionParser  # pylint: disable=deprecated-module
     from ranger import CONFDIR, CACHEDIR, USAGE, VERSION
 
     if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME']:
@@ -225,6 +224,9 @@ def parse_arguments():
     parser.add_option('-r', '--confdir', type='string',
                       metavar='dir', default=default_confdir,
                       help="change the configuration directory. (%default)")
+    parser.add_option('--cachedir', type='string',
+                      metavar='dir', default=default_cachedir,
+                      help="change the cache directory. (%default)")
     parser.add_option('--copy-config', type='string', metavar='which',
                       help="copy the default configs to the local config directory. "
                       "Possible values: all, rc, rifle, commands, commands_full, scope")
@@ -254,28 +256,30 @@ def parse_arguments():
 
     args, positional = parser.parse_args()
     args.paths = positional
-    args.confdir = expanduser(args.confdir)
-    args.cachedir = expanduser(default_cachedir)
 
-    def choose_init(flag):
-        argval = args.__dict__['choose' + flag]
+    def path_init(option):
+        argval = args.__dict__[option]
         try:
-            path = os.path.abspath(argval)
+            path = os.path.realpath(argval)
         except OSError as ex:
             sys.stderr.write(
-                '--choose{0} is not accessible: {1}\n{2}\n'.format(flag, argval, str(ex)))
+                '--{0} is not accessible: {1}\n{2}\n'.format(option, argval, str(ex)))
             sys.exit(1)
         if os.path.exists(path) and not os.access(path, os.W_OK):
-            sys.stderr.write('--choose{0} is not writable: {1}\n'.format(flag, path))
+            sys.stderr.write('--{0} is not writable: {1}\n'.format(option, path))
             sys.exit(1)
         return path
 
+    args.confdir = os.path.expanduser(args.confdir)
+    args.confdir = path_init('confdir')
+    args.cachedir = os.path.expanduser(args.cachedir)
+    args.cachedir = path_init('cachedir')
     if args.choosefile:
-        args.choosefile = choose_init('file')
+        args.choosefile = path_init('choosefile')
     if args.choosefiles:
-        args.choosefiles = choose_init('files')
+        args.choosefiles = path_init('choosefiles')
     if args.choosedir:
-        args.choosedir = choose_init('dir')
+        args.choosedir = path_init('choosedir')
 
     return args