code: def scan(repos, options):
      
      ignore_set = set()
      repos = repos[::-1]  # Create a queue we can push and pop from
      while repos:
          directory, dotdir = repos.pop()
          ignore_this = any(pat in directory for pat in options.ignore_patterns)
          if ignore_this:
              if options.verbose:
                  output(b'Ignoring repo: %s' % directory)
                  output(b'')
              continue
  
          vcsname, get_status = SYSTEMS[dotdir]
          lines, subrepos = get_status(directory, ignore_set, options)
  
          # We want to tackle subrepos immediately after their repository,
          # so we put them at the front of the queue.
          subrepos = [(os.path.join(directory, r), dotdir) for r in subrepos]
          repos.extend(reversed(subrepos))
  
          if lines is None:  # signal that we should ignore this one
              continue
          if lines or options.verbose:
              output(b'%s - %s' % (directory, vcsname))
              for line in lines:
                  output(line)
              output(b'')
docs: Given a repository list [(path, vcsname), ...], scan each of them.