-for line in lines:
- if not line.strip():
- continue
- words = [word for (wordstart,word) in shquote.quotesplit(line)]
- cmd = words[0].lower()
- #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)
- out.flush()
- elif cmd == b'cd':
- np = pwd
- for parm in words[1:]:
- res = vfs.resolve(repo, parm, parent=np)
- _, leaf_item = res[-1]
- if not leaf_item:
- raise Exception('%s does not exist'
- % path_msg(b'/'.join(name for name, item
- in res)))
- if not stat.S_ISDIR(vfs.item_mode(leaf_item)):
- raise Exception('%s is not a directory' % path_msg(parm))
- np = res
- pwd = np
- elif cmd == b'pwd':
- if len(pwd) == 1:
- out.write(b'/')
- out.write(b'/'.join(name for name, item in pwd) + b'\n')
- out.flush()
- elif cmd == b'cat':
- for parm in words[1:]:
- res = vfs.resolve(repo, parm, parent=pwd)
+ if extra:
+ lines = (argv_bytes(arg) for arg in extra)
+ else:
+ if hasattr(_helpers, 'readline'):
+ _helpers.set_completer_word_break_characters(b' \t\n\r/')
+ _helpers.set_attempted_completion_function(attempt_completion)
+ _helpers.set_completion_entry_function(enter_completion)
+ if sys.platform.startswith('darwin'):
+ # MacOS uses a slightly incompatible clone of libreadline
+ _helpers.parse_and_bind(b'bind ^I rl_complete')
+ _helpers.parse_and_bind(b'tab: complete')
+ lines = inputiter(stdin)
+
+ for line in lines:
+ if not line.strip():
+ continue
+ words = [word for (wordstart,word) in shquote.quotesplit(line)]
+ cmd = words[0].lower()
+ #log('execute: %r %r\n' % (cmd, parm))
+ try:
+ if cmd == b'ls':
+ do_ls(repo, pwd, words[1:], out)
+ out.flush()
+ elif cmd == b'cd':
+ np = pwd
+ for parm in words[1:]:
+ res = vfs.resolve(repo, parm, parent=np)
+ _, leaf_item = res[-1]
+ if not leaf_item:
+ raise Exception('%s does not exist'
+ % path_msg(b'/'.join(name for name, item
+ in res)))
+ if not stat.S_ISDIR(vfs.item_mode(leaf_item)):
+ raise Exception('%s is not a directory' % path_msg(parm))
+ np = res
+ pwd = np
+ elif cmd == b'pwd':
+ if len(pwd) == 1:
+ out.write(b'/')
+ out.write(b'/'.join(name for name, item in pwd) + b'\n')
+ out.flush()
+ elif cmd == b'cat':
+ for parm in words[1:]:
+ res = vfs.resolve(repo, parm, parent=pwd)
+ _, leaf_item = res[-1]
+ if not leaf_item:
+ raise Exception('%s does not exist' %
+ path_msg(b'/'.join(name for name, item
+ in res)))
+ with vfs.fopen(repo, leaf_item) as srcfile:
+ write_to_file(srcfile, out)
+ out.flush()
+ elif cmd == b'get':
+ if len(words) not in [2,3]:
+ rv = 1
+ raise Exception('Usage: get <filename> [localname]')
+ rname = words[1]
+ (dir,base) = os.path.split(rname)
+ lname = len(words) > 2 and words[2] or base
+ res = vfs.resolve(repo, rname, parent=pwd)