@Override public VcsSupport createVcsSupport(Configuration configuration) { return new GitVcsSupport(configuration); }
@Override public VcsStatus getStatus(File targetDirectory) throws IOException { final VcsStatus.Builder status = VcsStatus.builder(getRevision(targetDirectory)); status.withBranch(getBranch(targetDirectory)); getStatusInternal(targetDirectory, status); return status.build(); }
@Override public void update(File targetDirectory, String revision, boolean recursive, boolean mirrored) throws IOException { // Cached repositories need to update all branches if (!mirrored) { // Fetch changes 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 { // Update working copy String updateCommand = configuration.getString(GIT_UPDATE, "git rebase --autostash"); ProcessUtils.executeIn(targetDirectory, Arrays.asList(updateCommand.split(" "))); } // Update submodules if necessary if (recursive) { ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "submodule", "update", "--init", "--recursive")); } } else { // Update the remote ProcessUtils.executeIn(targetDirectory, Arrays.asList("git", "remote", "update", "--prune")); } }
@Override public boolean hasChanges(File targetDirectory) throws IOException { VcsStatus.Builder builder = VcsStatus.builder(""); getStatusInternal(targetDirectory, builder); VcsStatus status = builder.build(); return status.hasUncommittedChanges() || status.hasUnpublishedChanges(); }