/**
  * Returns proper updater based on the update policy (merge or rebase) selected by user or stored
  * in his .git/config
  *
  * @return {@link GitMergeUpdater} or {@link GitRebaseUpdater}.
  */
 @NotNull
 public static GitUpdater getUpdater(
     @NotNull Project project,
     @NotNull Git git,
     @NotNull Map<VirtualFile, GitBranchPair> trackedBranches,
     @NotNull VirtualFile root,
     @NotNull ProgressIndicator progressIndicator,
     @NotNull UpdatedFiles updatedFiles) {
   final GitVcsSettings settings = GitVcsSettings.getInstance(project);
   if (settings == null) {
     return getDefaultUpdaterForBranch(
         project, git, root, trackedBranches, progressIndicator, updatedFiles);
   }
   switch (settings.getUpdateType()) {
     case REBASE:
       return new GitRebaseUpdater(
           project, git, root, trackedBranches, progressIndicator, updatedFiles);
     case MERGE:
       return new GitMergeUpdater(
           project, git, root, trackedBranches, progressIndicator, updatedFiles);
     case BRANCH_DEFAULT:
       // use default for the branch
       return getDefaultUpdaterForBranch(
           project, git, root, trackedBranches, progressIndicator, updatedFiles);
   }
   return getDefaultUpdaterForBranch(
       project, git, root, trackedBranches, progressIndicator, updatedFiles);
 }