    public function blame($version = null)
    {
        $version = ($version === null) ? $this->getVersionString() : $version;

        if (!in_array($version, $this->getVersions(), true)) {
            throw new \UnexpectedValueException("Invalid log entry $version for {$this->path}.");
        }

        if (($blame = \Arbit\VCSWrapper\Cache\Manager::get($this->path, $version, 'blame')) === false) {
            // Refetch the basic blamermation, and cache it.
            $process = new \Arbit\VCSWrapper\GitCli\Process();
            $process->workingDirectory($this->root);

            // Execute command
            $return = $process->argument('blame')->argument('-l')->argument(new \SystemProcess\Argument\PathArgument('.' . $this->path))->execute();
            $contents = preg_split('(\r\n|\r|\n)', trim($process->stdoutOutput));

            // Convert returned lines into diff structures
            $blame = array();
            foreach ($contents as $nr => $line) {
                if (preg_match(self::BLAME_REGEXP, $line, $match)) {
                    $match['line'] = isset($match['line']) ? $match['line'] : null;
                    $blame[] = new \Arbit\VCSWrapper\Blame($match['line'], $match['version'], $match['author'], strtotime($match['date']));
                } else {
                    throw new \RuntimeException("Could not parse line: $line");
                }
            }

            \Arbit\VCSWrapper\Cache\Manager::cache($this->path, $version, 'blame', $blame);
        }

        return $blame;
    }