protected UpdateScmResult executeUpdateCommand()

in maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java [49:101]


    protected UpdateScmResult executeUpdateCommand(
            ScmProviderRepository repo, ScmFileSet fileSet, ScmVersion scmVersion) throws ScmException {
        GitScmProviderRepository repository = (GitScmProviderRepository) repo;

        if (GitScmProviderRepository.PROTOCOL_FILE.equals(
                        repository.getFetchInfo().getProtocol())
                && repository
                                .getFetchInfo()
                                .getPath()
                                .indexOf(fileSet.getBasedir().getPath())
                        >= 0) {
            throw new ScmException("remote repository must not be the working directory");
        }

        int exitCode;

        CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();

        // fir we need to get the current reversion
        Commandline clRev = createLatestRevisionCommandLine(repository, fileSet.getBasedir(), scmVersion);
        GitLatestRevisionCommandConsumer consumerRev = new GitLatestRevisionCommandConsumer();
        exitCode = GitCommandLineUtils.execute(clRev, consumerRev, stderr);
        if (exitCode != 0) {
            return new UpdateScmResult(clRev.toString(), "The git-log command failed.", stderr.getOutput(), false);
        }
        String origSha1 = consumerRev.getLatestRevision();

        Commandline cl = createCommandLine(repository, fileSet.getBasedir(), scmVersion);
        exitCode = GitCommandLineUtils.execute(cl, stdout, stderr);
        if (exitCode != 0) {
            return new UpdateScmResult(cl.toString(), "The git-pull command failed.", stderr.getOutput(), false);
        }

        // we also need to log exactly what has been updated
        GitDiffRawConsumer diffRawConsumer = new GitDiffRawConsumer();
        Commandline clDiffRaw = GitDiffCommand.createDiffRawCommandLine(fileSet.getBasedir(), origSha1);
        exitCode = GitCommandLineUtils.execute(clDiffRaw, diffRawConsumer, stderr);
        if (exitCode != 0) {
            return new UpdateScmResult(
                    clDiffRaw.toString(), "The git-diff --raw command failed.", stderr.getOutput(), false);
        }

        // now let's get the latest version
        consumerRev = new GitLatestRevisionCommandConsumer();
        exitCode = GitCommandLineUtils.execute(clRev, consumerRev, stderr);
        if (exitCode != 0) {
            return new UpdateScmResult(clRev.toString(), "The git-log command failed.", stderr.getOutput(), false);
        }
        String latestRevision = consumerRev.getLatestRevision();

        return new UpdateScmResultWithRevision(cl.toString(), diffRawConsumer.getChangedFiles(), latestRevision);
    }