@NotNull private static FetchParams getFetchParams(@NotNull GitRepository repository) { GitLocalBranch currentBranch = repository.getCurrentBranch(); if (currentBranch == null) { // fetching current branch is called from Update Project and Push, where branch tracking is // pre-checked String message = "Current branch can't be null here. \nRepository: " + repository; LOG.error(message); return new FetchParams(GitFetchResult.error(new Exception(message))); } GitBranchTrackInfo trackInfo = GitBranchUtil.getTrackInfoForBranch(repository, currentBranch); if (trackInfo == null) { String message = "Tracked info is null for branch " + currentBranch + "\n Repository: " + repository; LOG.error(message); return new FetchParams(GitFetchResult.error(new Exception(message))); } GitRemote remote = trackInfo.getRemote(); String url = remote.getFirstUrl(); if (url == null) { String message = "URL is null for remote " + remote.getName(); LOG.error(message); return new FetchParams(GitFetchResult.error(new Exception(message))); } return new FetchParams(remote, trackInfo.getRemoteBranch(), url); }
/** * For each root check that the repository is on branch, and this branch is tracking a remote * branch, and the remote branch exists. If it is not true for at least one of roots, notify and * return false. If branch configuration is OK for all roots, return true. */ private boolean checkTrackedBranchesConfigured() { LOG.info("checking tracked branch configuration..."); for (GitRepository repository : myRepositories) { VirtualFile root = repository.getRoot(); final GitLocalBranch branch = repository.getCurrentBranch(); if (branch == null) { LOG.info("checkTrackedBranchesConfigured: current branch is null in " + repository); notifyImportantError( myProject, "Can't update: no current branch", "You are in 'detached HEAD' state, which means that you're not on any branch" + rootStringIfNeeded(root) + "Checkout a branch to make update possible."); return false; } GitBranchTrackInfo trackInfo = GitBranchUtil.getTrackInfoForBranch(repository, branch); if (trackInfo == null) { final String branchName = branch.getName(); LOG.info( String.format( "checkTrackedBranchesConfigured: no track info for current branch %s in %s", branch, repository)); String recommendedCommand = String.format( GitVersionSpecialty.KNOWS_SET_UPSTREAM_TO.existsIn(repository.getVcs().getVersion()) ? "git branch --set-upstream-to origin/%1$s %1$s" : "git branch --set-upstream %1$s origin/%1$s", branchName); notifyImportantError( myProject, "Can't update: no tracked branch", "No tracked branch configured for branch " + code(branchName) + rootStringIfNeeded(root) + "To make your branch track a remote branch call, for example,<br/>" + "<code>" + recommendedCommand + "</code>"); return false; } myTrackedBranches.put(root, new GitBranchPair(branch, trackInfo.getRemoteBranch())); } return true; }