Merge branch 'stable-3.4' into stable-3.5 * stable-3.4: Set plugin version to 3.4.7 Fire git ref update events for all imported refs PluginVelocityRuntimeProvider: Fix warning flagged by error prone Fix default scopes resolution Change-Id: Ida702ab138d136e9ef6d65ad1e06af0611a86c32
diff --git a/github-oauth/pom.xml b/github-oauth/pom.xml index 7868a8b..0b7a9b5 100644 --- a/github-oauth/pom.xml +++ b/github-oauth/pom.xml
@@ -21,7 +21,7 @@ <parent> <groupId>com.googlesource.gerrit.plugins.github</groupId> <artifactId>github-parent</artifactId> - <version>3.4.7</version> + <version>3.5.0.1</version> </parent> <artifactId>github-oauth</artifactId> <name>Gerrit Code Review - GitHub OAuth login</name>
diff --git a/github-plugin/pom.xml b/github-plugin/pom.xml index 757372f..fed554e 100644 --- a/github-plugin/pom.xml +++ b/github-plugin/pom.xml
@@ -20,7 +20,7 @@ <parent> <artifactId>github-parent</artifactId> <groupId>com.googlesource.gerrit.plugins.github</groupId> - <version>3.4.7</version> + <version>3.5.0.1</version> </parent> <artifactId>github-plugin</artifactId>
diff --git a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java index 19ed82f..e826880 100644 --- a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java +++ b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
@@ -17,6 +17,7 @@ import com.google.gerrit.entities.Account; import com.google.gerrit.server.ServerInitiated; import com.google.gerrit.server.account.externalids.ExternalId; +import com.google.gerrit.server.account.externalids.ExternalIdFactory; import com.google.gerrit.server.notedb.Sequences; import com.google.inject.Inject; import com.google.inject.Provider; @@ -28,21 +29,25 @@ public class AccountImporter { private final Sequences sequences; private final Provider<AccountsUpdate> accountsUpdateProvider; + private final ExternalIdFactory externalIdFactory; @Inject public AccountImporter( - Sequences sequences, @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) { + Sequences sequences, + @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider, + ExternalIdFactory externalIdFactory) { this.sequences = sequences; this.accountsUpdateProvider = accountsUpdateProvider; + this.externalIdFactory = externalIdFactory; } public Account.Id importAccount(String login, String name, String email) throws IOException, ConfigInvalidException { Account.Id id = Account.id(sequences.nextAccountId()); List<ExternalId> extIds = new ArrayList<>(); - extIds.add(ExternalId.createEmail(id, email)); - extIds.add(ExternalId.create(ExternalId.SCHEME_GERRIT, login, id)); - extIds.add(ExternalId.create(ExternalId.SCHEME_USERNAME, login, id)); + extIds.add(externalIdFactory.createEmail(id, email)); + extIds.add(externalIdFactory.create(ExternalId.SCHEME_GERRIT, login, id)); + extIds.add(externalIdFactory.create(ExternalId.SCHEME_USERNAME, login, id)); AccountState accountUpdate = accountsUpdateProvider .get()
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java index 870a13b..f25e6ee 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java
@@ -190,7 +190,6 @@ private void setProjectSettings() { projectConfig.updateProject( b -> { - b.setParent(config.getBaseProject(getRepository().isPrivate())); b.setDescription(description); b.setSubmitType(SubmitType.MERGE_IF_NECESSARY); b.setBooleanConfig(
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitCloneStep.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitCloneStep.java index 8923b52..12e5101 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitCloneStep.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitCloneStep.java
@@ -16,6 +16,7 @@ import com.google.gerrit.entities.Project; import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.api.changes.NotifyHandling; +import com.google.gerrit.extensions.api.projects.ProjectInput; import com.google.gerrit.extensions.events.ProjectDeletedListener; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -58,6 +59,7 @@ private final DynamicSet<ProjectDeletedListener> deletedListeners; private final ProjectCache projectCache; private final GitRepositoryManager repoManager; + private final String projectName; private final GitReferenceUpdated referenceUpdated; private final Provider<IdentifiedUser> identifiedUser; @@ -89,7 +91,8 @@ this.context = context; this.organisation = organisation; this.repository = repository; - this.destinationDirectory = prepareTargetGitDirectory(gitDir, organisation, repository); + this.projectName = organisation + "/" + repository; + this.destinationDirectory = prepareTargetGitDirectory(gitDir, this.projectName); this.deletedListeners = deletedListeners; this.projectCache = projectCache; this.repoManager = repoManager; @@ -97,9 +100,8 @@ this.identifiedUser = identifiedUser; } - private static File prepareTargetGitDirectory(File gitDir, String organisation, String repository) + private static File prepareTargetGitDirectory(File gitDir, String projectName) throws GitException { - String projectName = organisation + "/" + repository; File repositoryDir = new File(gitDir, projectName + ".git"); if (repositoryDir.exists()) { throw new GitDestinationAlreadyExistsException(projectName); @@ -107,11 +109,12 @@ return repositoryDir; } - private String createNewProject() throws GitException { - String projectName = organisation + "/" + repository; + private void createNewProject() throws GitException { try (ManualRequestContext requestContext = context.openAs(config.importAccountId)) { - gerritApi.projects().create(projectName).get(); - return projectName; + ProjectInput pi = new ProjectInput(); + pi.name = projectName; + pi.parent = config.getBaseProject(getRepository().isPrivate()); + gerritApi.projects().create(pi).get(); } catch (ResourceConflictException e) { throw new GitDestinationAlreadyExistsException(projectName); } catch (RestApiException e) { @@ -121,7 +124,8 @@ @Override public void doImport(ProgressMonitor progress) throws GitException { - Project.NameKey projectName = Project.nameKey(createNewProject()); + createNewProject(); + Project.NameKey key = Project.nameKey(projectName); String sourceUri = getSourceUri(); try (Git git = Git.open(destinationDirectory)) { FetchCommand fetch = git.fetch().setRefSpecs("refs/*:refs/*").setRemote(sourceUri); @@ -134,7 +138,7 @@ AccountState accountState = identifiedUser.get().state(); for (Ref ref : git.getRepository().getRefDatabase().getRefs()) { referenceUpdated.fire( - projectName, ref.getName(), ObjectId.zeroId(), ref.getObjectId(), accountState); + key, ref.getName(), ObjectId.zeroId(), ref.getObjectId(), accountState); } } catch (IOException | GitAPIException e) { LOG.error("Unable to fetch from {} into {}", sourceUri, destinationDirectory, e); @@ -154,7 +158,6 @@ } try { - String projectName = organisation + "/" + repository; Project.NameKey key = Project.nameKey(projectName); cleanJGitCache(key); FileUtils.deleteDirectory(gitDirectory);
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java index cb71e78..f706539 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
@@ -26,6 +26,7 @@ import com.google.gerrit.server.account.AccountImporter; import com.google.gerrit.server.account.externalids.ExternalId; import com.google.gerrit.server.account.externalids.ExternalIds; +import com.google.gerrit.server.config.AuthConfig; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; @@ -79,6 +80,7 @@ private final String repoName; private final int prId; private final GitRepositoryManager repoMgr; + private final AuthConfig authConfig; private final int jobIndex; private final ExternalIds externalIds; private PullRequestCreateChange createChange; @@ -96,10 +98,12 @@ GitHubRepository.Factory gitHubRepoFactory, ScopedProvider<GitHubLogin> ghLoginProvider, ExternalIds externalIds, + AuthConfig authConfig, @Assisted("index") int jobIndex, @Assisted("organisation") String organisation, @Assisted("name") String repoName, @Assisted int pullRequestId) { + this.authConfig = authConfig; this.jobIndex = jobIndex; this.repoMgr = repoMgr; this.ghLogin = ghLoginProvider.get(); @@ -217,8 +221,9 @@ private Optional<ExternalId> externalIdByScheme(String scheme, String id) { try { - return externalIds.get(ExternalId.Key.create(scheme, id)); - } catch (IOException | ConfigInvalidException e) { + return externalIds.get( + ExternalId.Key.create(scheme, id, authConfig.isUserNameCaseInsensitive())); + } catch (IOException e) { LOG.error("Unable to get external id for " + scheme + ":" + id, e); return Optional.empty(); }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java index 5f74078..9e96c2b 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java
@@ -30,6 +30,7 @@ import com.google.gerrit.server.account.GroupMembership; import com.google.gerrit.server.project.ProjectState; import com.google.inject.Inject; +import com.google.inject.Provider; import java.util.Collection; import java.util.Collections; import java.util.Set; @@ -41,12 +42,16 @@ private static final Logger log = LoggerFactory.getLogger(GitHubGroupBackend.class); private final GitHubGroupMembership.Factory ghMembershipProvider; private final GitHubGroupsCache ghOrganisationCache; + private final Provider<CurrentUser> currentUserProvider; @Inject GitHubGroupBackend( - GitHubGroupMembership.Factory ghMembershipProvider, GitHubGroupsCache ghOrganisationCache) { + GitHubGroupMembership.Factory ghMembershipProvider, + GitHubGroupsCache ghOrganisationCache, + Provider<CurrentUser> currentUserProvider) { this.ghMembershipProvider = ghMembershipProvider; this.ghOrganisationCache = ghOrganisationCache; + this.currentUserProvider = currentUserProvider; } @Override @@ -112,6 +117,13 @@ @Override public GroupMembership membershipsOf(CurrentUser user) { + CurrentUser currentUser = currentUserProvider.get(); + if (!currentUser.isIdentifiedUser() + || !currentUser.asIdentifiedUser().getAccountId().equals(user.getAccountId())) { + // Do not allow to perform group discovery of other users + return GroupMembership.EMPTY; + } + String username = user.getUserName().orElse(null); if (Strings.isNullOrEmpty(username)) { return GroupMembership.EMPTY;
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java index e2b8041..23edcbc 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
@@ -32,7 +32,9 @@ import com.google.gerrit.server.account.AuthRequest; import com.google.gerrit.server.account.AuthResult; import com.google.gerrit.server.account.externalids.ExternalId; +import com.google.gerrit.server.account.externalids.ExternalIdFactory; import com.google.gerrit.server.account.externalids.ExternalIds; +import com.google.gerrit.server.config.AuthConfig; import com.google.gerrit.server.restapi.account.AddSshKey; import com.google.gerrit.server.restapi.account.GetSshKeys; import com.google.gerrit.server.restapi.account.PutName; @@ -68,6 +70,9 @@ private final PutName putName; private final Provider<AccountsUpdate> accountsUpdateProvider; private final ExternalIds externalIds; + private final ExternalIdFactory externalIdFactory; + private final AuthRequest.Factory authRequestFactory; + private final AuthConfig authConfig; @Inject public AccountController( @@ -78,7 +83,10 @@ final PutPreferred putPreferred, final PutName putName, @ServerInitiated final Provider<AccountsUpdate> accountsUpdateProvider, - final ExternalIds externalIds) { + final ExternalIds externalIds, + final ExternalIdFactory externalIdFactory, + final AuthRequest.Factory authRequestFactory, + final AuthConfig authConfig) { this.restAddSshKey = restAddSshKey; this.restGetSshKeys = restGetSshKeys; this.accountManager = accountManager; @@ -87,6 +95,9 @@ this.putName = putName; this.accountsUpdateProvider = accountsUpdateProvider; this.externalIds = externalIds; + this.externalIdFactory = externalIdFactory; + this.authRequestFactory = authRequestFactory; + this.authConfig = authConfig; } @Override @@ -120,7 +131,7 @@ String username = req.getParameter("username"); try { Id accountId = user.getAccountId(); - AuthResult result = accountManager.link(accountId, AuthRequest.forEmail(email)); + AuthResult result = accountManager.link(accountId, authRequestFactory.createForEmail(email)); log.debug("Account {} linked to email {}: result = {}", accountId, email, result); putPreferred.apply(new AccountResource.Email(user, email), null); @@ -128,11 +139,12 @@ nameInput.name = fullName; putName.apply(user, nameInput); - ExternalId.Key key = ExternalId.Key.create(SCHEME_USERNAME, username); + ExternalId.Key key = + ExternalId.Key.create(SCHEME_USERNAME, username, authConfig.isUserNameCaseInsensitive()); Optional<ExternalId> other; try { other = externalIds.get(key); - } catch (IOException | ConfigInvalidException e) { + } catch (IOException e) { throw new IllegalArgumentException( "Internal error while fetching username='" + username + "'"); } @@ -148,7 +160,7 @@ .update( "Set Username from GitHub", accountId, - u -> u.addExternalId(ExternalId.create(key, accountId, null, null))); + u -> u.addExternalId(externalIdFactory.create(key, accountId, null, null))); } catch (Exception e) { throw new IllegalArgumentException( "Internal error while trying to set username='" + username + "'");
diff --git a/pom.xml b/pom.xml index b88f8bd..72d4915 100644 --- a/pom.xml +++ b/pom.xml
@@ -18,7 +18,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>com.googlesource.gerrit.plugins.github</groupId> <artifactId>github-parent</artifactId> - <version>3.4.7</version> + <version>3.5.0.1</version> <name>Gerrit Code Review - GitHub integration</name> <url>http://www.gerritforge.com</url> <packaging>pom</packaging>