void () { String tagFullName = GitTag.REFS_TAGS_PREFIX + myTagName; int successRemotes = 0; int failureRemotes = 0; GitCompoundResult result = new GitCompoundResult(myProject); Collection<GitRepository> repositories = getRepositories(); for (GitRepository repository: repositories) { String expectedCommit = myRepositories.get(repository); List<ForceWithLease> forceWithLease = expectedCommit != null ? singletonList(new ForceWithLeaseReference(tagFullName, expectedCommit)) : emptyList(); for (GitRemote remote: repository.getRemotes()) { GitCommandResult lsRemoteResult = myGit.lsRemoteRefs(myProject, repository.getRoot(), remote, singletonList(tagFullName), "--tags"); //NON-NLS if (!lsRemoteResult.success()) { result.append(repository, lsRemoteResult); continue; } if (hasTagOnRemote(tagFullName, lsRemoteResult.getOutput())) { GitCommandResult pushResult = myGit.push(repository, new GitPushParamsImpl(remote, ":" + tagFullName, false, false, false, null, forceWithLease)); result.append(repository, pushResult); if (pushResult.success()) { successRemotes++; } else { failureRemotes++; } } } repository.update(); } int remotesCount = ContainerUtil.exists(repositories, it -> it.getRemotes().size() > 1) ? 1 : 2; if (successRemotes > 0) { String message = GitBundle.message("delete.remote.tag.operation.deleted.tag.on.remotes", remotesCount, myTagName); notifySuccessWithEmptyTitle(message); } else if (successRemotes == 0 && failureRemotes == 0) { String message = GitBundle.message("delete.remote.tag.operation.tag.does.not.exist.on.remotes", remotesCount, myTagName); notifySuccessWithEmptyTitle(message); } if (!result.totalSuccess()) { String title = GitBundle.message("delete.remote.tag.operation.failed.to.delete.tag.on.remotes", myTagName, remotesCount); VcsNotifier.getInstance(myProject) .notifyError(TAG_REMOTE_DELETION_ERROR, title, result.getErrorOutputWithReposIndication(), true); } }