<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def status_git(path, ignore_set, options):
 """Run git status. Returns a 2-element tuple: * Text lines describing the status of the repository. * List of subrepository paths, relative to the repository itself. """

    # Check whether current branch is dirty:
    lines = [l for l in run(('git', 'status', '-s', '-b'), cwd=path)
             if (options.untracked or not l.startswith(b'?'))
             and not l.startswith(b'##')]

    # Check all branches for unpushed commits:
    lines += [l for l in run(('git', 'branch', '-v'), cwd=path)
              if (b' [ahead ' in l)]

    # Check for non-tracking branches:
    if options.non_tracking:
        lines += [l for l in run(('git', 'for-each-ref',
                                  '--format=[%(refname:short)]%(upstream)',
                                   'refs/heads'), cwd=path)
                  if l.endswith(b']')]

    if options.stash:
        lines += [l for l in run(('git', 'stash', 'list'), cwd=path)]

    discovered_submodules = []
    for l in run(('git', 'submodule', 'status'), cwd=path):
        match = git_submodule.search(l)
        if match:
            discovered_submodules.append(match.group(1))

    return lines, discovered_submodules