@Override
public void update(File targetDirectory, String revision, boolean recursive, boolean mirrored) throws IOException {
if (!mirrored) {
ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "remote", "update"));
if (!Strings.isNullOrEmpty(revision) && !revision.equals(getBranch(targetDirectory))) {
ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "checkout", revision));
} else {
String updateCommand = configuration.getString(GIT_UPDATE, "git rebase --autostash");
ProcessUtils.executeIn(targetDirectory, Arrays.asList(updateCommand.split(" ")));
}
if (recursive) {
ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "submodule", "update", "--init", "--recursive"));
}
} else {
ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "remote", "update", "--prune"));
}
}