Return a list of files that are not ignored by git

def find_notignored_git_files(self, context, silent_build):
        """
        Return a list of files that are not ignored by git
        """
        def git(args, error_message, cwd=context.parent_dir, **error_kwargs):
            output, status = command_output("git {0}".format(args), cwd=cwd)
            if status != 0:
                error_kwargs['output'] = output
                error_kwargs['directory'] = context.parent_dir
                raise HarpoonError(error_message, **error_kwargs)
            return output

        changed_files = git("diff --name-only", "Failed to determine what files have changed")
        untracked_files = git("ls-files --others --exclude-standard", "Failed to find untracked files")

        valid = set()
        under_source_control = git("ls-files --exclude-standard", "Failed to find all the files under source control")
        git_submodules = [regexes["whitespace"].split(line.strip())[1] for line in git("submodule status", "Failed to find submodules", cwd=context.git_root)]
        git_submodules = [os.path.normpath(os.path.relpath(os.path.abspath(p), os.path.abspath(os.path.relpath(context.parent_dir, context.git_root)))) for p in git_submodules]

        valid = under_source_control + untracked_files

        for filename in list(valid):
            matched = False
            if context.exclude:
                for excluder in context.exclude:
                    if fnmatch.fnmatch(filename, excluder):
                        matched = True
                        break

            if matched:
                continue

            location = os.path.join(context.parent_dir, filename)
            if os.path.islink(location) and os.path.isdir(location):
                actual_path = os.path.abspath(os.path.realpath(location))
                parent_dir = os.path.abspath(os.path.realpath(context.parent_dir))
                include_from = os.path.relpath(actual_path, parent_dir)

                to_include = git("ls-files --exclude-standard -- {0}".format(include_from), "Failed to find files under a symlink")
                for found in to_include:
                    valid += [os.path.join(filename, os.path.relpath(found, include_from))]
            elif os.path.isdir(location) and filename in git_submodules:
                to_include = git("ls-files --exclude-standard", "Failed to find files in a submodule", cwd=location)
                valid = [v for v in valid if v != filename]
                for found in to_include:
                    valid.append(os.path.join(filename, found))

        return set(self.convert_nonascii(valid))