code: def ls(
          self, rev, path, recursive=False, recursive_dirs=False,
          directory=False, report=()
      ):
          
          raise NotImplementedError
docs: List directory or file
  
          :param rev: The revision to use.
          :param path: The path to list. May start with a '/' or not. Directories
                       may end with a '/' or not.
          :param recursive: Recursively list files in subdirectories.
          :param recursive_dirs: Used when recursive=True, also list directories.
          :param directory: If path is a directory, list path itself instead of
                            its contents.
          :param report: A list or tuple of extra attributes to return that may
                         require extra processing. Recognized values are 'size',
                         'target', 'executable', and 'commit'.
  
          Returns a list of dictionaries with the following keys:
  
          **type**
              The type of the file: 'f' for file, 'd' for directory, 'l' for
              symlink.
          **name**
              The name of the file. Not present if directory=True.
          **size**
              The size of the file. Only present for files when 'size' is in
              report.
          **target**
              The target of the symlink. Only present for symlinks when
              'target' is in report.
          **executable**
              True if the file is executable, False otherwise.    Only present
              for files when 'executable' is in report.
  
          Raises PathDoesNotExist if the path does not exist.