void (@NotNull Map<HgRepository, PushSpec<HgPushSource, HgTarget>> pushSpecs, @Nullable VcsPushOptionValue vcsPushOptionValue, boolean force) { for (Map.Entry<HgRepository, PushSpec<HgPushSource, HgTarget>> entry : pushSpecs.entrySet()) { HgRepository repository = entry.getKey(); PushSpec<HgPushSource, HgTarget> hgSpec = entry.getValue(); HgTarget destination = hgSpec.getTarget(); HgPushSource source = hgSpec.getSource(); Project project = repository.getProject(); final HgPushCommand pushCommand = new HgPushCommand(project, repository.getRoot(), destination.myTarget); pushCommand.setIsNewBranch(true); // set always true, because it just allow mercurial to create a new one if needed pushCommand.setForce(force); String branchName = source.getBranch(); if (branchName.equals(repository.getCurrentBookmark())) { if (vcsPushOptionValue == HgVcsPushOptionValue.Current) { pushCommand.setBookmarkName(branchName); } else { pushCommand.setRevision(branchName); } } else { pushCommand.setBranchName(branchName); } pushSynchronously(project, pushCommand); } }