pass
-def do_ls(repo, args, out):
+def do_ls(repo, pwd, args, out):
+ pwd_str = b'/'.join(name for name, item in pwd) or b'/'
try:
- opt = ls.opts_from_cmdline(args, onabort=OptionError)
+ opt = ls.opts_from_cmdline(args, onabort=OptionError, pwd=pwd_str)
except OptionError as e:
log('error: %s' % e)
return
- return ls.within_repo(repo, opt, out)
+ return ls.within_repo(repo, opt, out, pwd_str)
def write_to_file(inf, outf):
#log('execute: %r %r\n' % (cmd, parm))
try:
if cmd == b'ls':
- # FIXME: respect pwd (perhaps via ls accepting resolve path/parent)
- do_ls(repo, words[1:], out)
+ do_ls(repo, pwd, words[1:], out)
out.flush()
elif cmd == b'cd':
np = pwd
from itertools import chain
from stat import S_ISDIR, S_ISLNK
import copy, locale, os.path, stat, sys
+import posixpath
from bup import metadata, options, vfs, xstat
from bup.compat import argv_bytes
n,numeric-ids list numeric IDs (user, group, etc.) rather than names
"""
-def opts_from_cmdline(args, onabort=None):
+def opts_from_cmdline(args, onabort=None, pwd=b'/'):
"""Parse ls command line arguments and return a dictionary of ls
options, agumented with "classification", "long_listing",
"paths", and "show_hidden".
else:
opt, flags, extra = Options(optspec).parse_bytes(args)
- opt.paths = [argv_bytes(x) for x in extra] or (b'/',)
+ opt.paths = [argv_bytes(x) for x in extra] or (pwd,)
opt.long_listing = opt.l
opt.classification = None
opt.show_hidden = None
opt.show_hidden = 'almost'
return opt
-def within_repo(repo, opt, out):
+def within_repo(repo, opt, out, pwd=b''):
if opt.commit_hash:
opt.hash = True
ret = 0
pending = []
for path in opt.paths:
+ path = posixpath.join(pwd, path)
try:
if opt.directory:
resolved = vfs.resolve(repo, path, follow=False)