Merge "Document that draft changes/patch sets and change edits are not imported" into stable-2.11
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/AccountUtil.java b/src/main/java/com/googlesource/gerrit/plugins/importer/AccountUtil.java
index 31fecd4..fe76caf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/AccountUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/AccountUtil.java
@@ -15,7 +15,6 @@
package com.googlesource.gerrit.plugins.importer;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.reviewdb.client.Account;
@@ -47,7 +46,6 @@
class AccountUtil {
private static Logger log = LoggerFactory.getLogger(AccountUtil.class);
- private final String pluginName;
private final AccountCache accountCache;
private final AccountManager accountManager;
private final AuthType authType;
@@ -55,12 +53,10 @@
@Inject
public AccountUtil(
- @PluginName String pluginName,
AccountCache accountCache,
AccountManager accountManager,
AuthConfig authConfig,
Provider<ReviewDb> db) {
- this.pluginName = pluginName;
this.accountCache = accountCache;
this.accountManager = accountManager;
this.authType = authConfig.getAuthType();
@@ -90,8 +86,8 @@
}
if (!Objects.equals(a.getAccount().getPreferredEmail(), acc.email)) {
log.warn(String.format(
- "[%s] Email mismatch for user %s: expected %s but found %s",
- pluginName, acc.username, acc.email, a.getAccount().getPreferredEmail()));
+ "Email mismatch for user %s: expected %s but found %s",
+ acc.username, acc.email, a.getAccount().getPreferredEmail()));
}
return a.getAccount().getId();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/AddApprovalsStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/AddApprovalsStep.java
index a4a31ae..b5deef0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/AddApprovalsStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/AddApprovalsStep.java
@@ -18,7 +18,6 @@
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ApprovalInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
@@ -61,7 +60,6 @@
private final Change change;
private final ChangeInfo changeInfo;
private final boolean resume;
- private final String pluginName;
@Inject
public AddApprovalsStep(AccountUtil accountUtil,
@@ -69,7 +67,6 @@
ReviewDb db,
IdentifiedUser.GenericFactory genericUserFactory,
ChangeControl.GenericFactory changeControlFactory,
- @PluginName String pluginName,
@Assisted Change change,
@Assisted ChangeInfo changeInfo,
@Assisted boolean resume) {
@@ -81,7 +78,6 @@
this.change = change;
this.changeInfo = changeInfo;
this.resume = resume;
- this.pluginName = pluginName;
}
void add(GerritApi api) throws OrmException, NoSuchChangeException, IOException,
@@ -101,13 +97,13 @@
ChangeControl ctrl = control(change, a);
LabelType labelType = ctrl.getLabelTypes().byLabel(labelName);
if(labelType == null) {
- log.warn(String.format("[%s] Label '%s' not found in target system."
+ log.warn(String.format("Label '%s' not found in target system."
+ " This label was referenced by an approval provided from '%s'"
+ " for change '%s'."
+ " This approval will be skipped. In order to import this"
+ " approval configure the missing label and resume the import"
+ " with the force option."
- , pluginName, labelName, a.username, changeInfo.id));
+ , labelName, a.username, changeInfo.id));
continue;
}
short shortValue = a.value != null ? a.value.shortValue() : 0;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/AddHashtagsStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/AddHashtagsStep.java
index f8aaef9..f04c435 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/AddHashtagsStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/AddHashtagsStep.java
@@ -14,7 +14,6 @@
package com.googlesource.gerrit.plugins.importer;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.api.changes.HashtagsInput;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.AuthException;
@@ -47,7 +46,6 @@
private final HashtagsUtil hashtagsUtil;
private final CurrentUser currentUser;
private final ChangeControl.GenericFactory changeControlFactory;
- private final String pluginName;
private final Change change;
private final ChangeInfo changeInfo;
private final boolean resume;
@@ -56,14 +54,12 @@
AddHashtagsStep(HashtagsUtil hashtagsUtil,
CurrentUser currentUser,
ChangeControl.GenericFactory changeControlFactory,
- @PluginName String pluginName,
@Assisted Change change,
@Assisted ChangeInfo changeInfo,
@Assisted boolean resume) {
this.hashtagsUtil = hashtagsUtil;
this.currentUser = currentUser;
this.changeControlFactory = changeControlFactory;
- this.pluginName = pluginName;
this.change = change;
this.changeInfo = changeInfo;
this.resume = resume;
@@ -85,11 +81,11 @@
hashtagsUtil.setHashtags(ctrl, input, false, false);
} catch (AuthException e) {
log.warn(String.format(
- "[%s] Hashtags cannot be set on change %s because the importing"
+ "Hashtags cannot be set on change %s because the importing"
+ " user %s doesn't have permissions to edit hashtags"
+ " (e.g. assign the 'Edit Hashtags' global capability"
+ " and resume the import with the force option).",
- pluginName, ChangeTriplet.format(change), currentUser.getUserName()));
+ ChangeTriplet.format(change), currentUser.getUserName()));
}
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
index 6d6d7ca..4194a6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
@@ -17,7 +17,6 @@
import static com.google.gerrit.reviewdb.client.AccountGroup.isInternalGroup;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.registration.DynamicSet;
@@ -76,7 +75,6 @@
private static Logger log = LoggerFactory.getLogger(ImportGroup.class);
- private final String pluginName;
private final Config cfg;
private final ReviewDb db;
private final AccountUtil accountUtil;
@@ -91,7 +89,6 @@
@Inject
ImportGroup(
- @PluginName String pluginName,
@GerritServerConfig Config cfg,
ReviewDb db,
AccountUtil accountUtil,
@@ -102,7 +99,6 @@
ImportGroup.Factory importGroupFactory,
GerritApi.Factory apiFactory,
@Assisted AccountGroup.NameKey group) {
- this.pluginName = pluginName;
this.cfg = cfg;
this.db = db;
this.accountUtil = accountUtil;
@@ -213,8 +209,8 @@
IOException, PreconditionFailedException, MethodNotAllowedException {
String uniqueName = getUniqueGroupName(info.name);
if (!info.name.equals(uniqueName)) {
- log.warn(String.format("[%s] Group %s with UUID %s is imported with name %s",
- pluginName, info.name, info.id, uniqueName));
+ log.warn(String.format("Group %s with UUID %s is imported with name %s",
+ info.name, info.id, uniqueName));
info.name = uniqueName;
}
AccountGroup group = createAccountGroup(info);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
index ca6efb5..bc8061e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
@@ -19,7 +19,6 @@
import com.google.common.base.Strings;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
@@ -99,7 +98,6 @@
private static Logger log = LoggerFactory.getLogger(ImportProject.class);
private static Version v2_11 = new Version("2.11");
- private final String pluginName;
private final ProjectCache projectCache;
private final OpenRepositoryStep openRepoStep;
private final ConfigureRepositoryStep configRepoStep;
@@ -124,7 +122,6 @@
@Inject
ImportProject(
- @PluginName String pluginName,
ProjectCache projectCache,
OpenRepositoryStep openRepoStep,
ConfigureRepositoryStep configRepoStep,
@@ -138,7 +135,6 @@
ImportLog importLog,
ProjectsCollection projects,
@Assisted Project.NameKey targetProject) {
- this.pluginName = pluginName;
this.projectCache = projectCache;
this.openRepoStep = openRepoStep;
this.configRepoStep = configRepoStep;
@@ -257,11 +253,11 @@
importLog.onImport((IdentifiedUser) currentUser.get(), srcProject,
targetProject, input.from, e);
String msg = input.from != null
- ? format("[%s] Unable to transfer project '%s' from"
+ ? format("Unable to transfer project '%s' from"
+ " source gerrit host '%s'.",
- pluginName, srcProject.get(), input.from)
- : format("[%s] Unable to copy project '%s'.",
- pluginName, srcProject.get());
+ srcProject.get(), input.from)
+ : format("Unable to copy project '%s'.",
+ srcProject.get());
log.error(msg, e);
throw e;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayChangesStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayChangesStep.java
index 69b5789..6d1d388 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayChangesStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayChangesStep.java
@@ -17,7 +17,6 @@
import com.google.common.collect.Iterators;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -65,7 +64,6 @@
private static Logger log = LoggerFactory.getLogger(ReplayChangesStep.class);
- private final String pluginName;
private final ReplayRevisionsStep.Factory replayRevisionsFactory;
private final ReplayInlineCommentsStep.Factory replayInlineCommentsFactory;
private final ReplayMessagesStep.Factory replayMessagesFactory;
@@ -88,7 +86,6 @@
@Inject
ReplayChangesStep(
- @PluginName String pluginName,
ReplayRevisionsStep.Factory replayRevisionsFactory,
ReplayInlineCommentsStep.Factory replayInlineCommentsFactory,
ReplayMessagesStep.Factory replayMessagesFactory,
@@ -108,7 +105,6 @@
@Assisted("resume") boolean resume,
@Assisted ResumeImportStatistic importStatistic,
@Assisted ProgressMonitor pm) {
- this.pluginName = pluginName;
this.replayRevisionsFactory = replayRevisionsFactory;
this.replayInlineCommentsFactory = replayInlineCommentsFactory;
this.replayMessagesFactory = replayMessagesFactory;
@@ -142,8 +138,8 @@
try {
replayChange(rw, c);
} catch (Exception e) {
- log.error(String.format("[%s] Failed to replay change %s.",
- pluginName, Url.decode(c.id)), e);
+ log.error(String.format("Failed to replay change %s.",
+ Url.decode(c.id)), e);
throw e;
}
pm.update(1);
@@ -176,14 +172,7 @@
}
if (c.revisions.isEmpty()) {
- log.warn(String.format("[%s] Change %s has no revisions.",
- pluginName, c.id));
- return;
- }
- if (c.currentRevision == null) {
- log.warn(String.format(
- "[%s] Change %s has no current revision.",
- pluginName, c.id));
+ log.warn(String.format("Change %s has no revisions.", c.id));
return;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayInlineCommentsStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayInlineCommentsStep.java
index 7ce0212..0dda6e6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayInlineCommentsStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayInlineCommentsStep.java
@@ -22,7 +22,6 @@
import com.google.common.collect.Multimap;
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.client.Side;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.CommentInfo;
@@ -73,7 +72,6 @@
private final ChangeUpdate.Factory updateFactory;
private final PatchLineCommentsUtil plcUtil;
private final PatchListCache patchListCache;
- private final String pluginName;
private final Change change;
private final ChangeInfo changeInfo;
private final GerritApi api;
@@ -87,7 +85,6 @@
ChangeUpdate.Factory updateFactory,
PatchLineCommentsUtil plcUtil,
PatchListCache patchListCache,
- @PluginName String pluginName,
@Assisted Change change,
@Assisted ChangeInfo changeInfo,
@Assisted GerritApi api,
@@ -99,7 +96,6 @@
this.updateFactory = updateFactory;
this.plcUtil = plcUtil;
this.patchListCache = patchListCache;
- this.pluginName = pluginName;
this.change = change;
this.changeInfo = changeInfo;
this.api = api;
@@ -117,14 +113,22 @@
// it must be a revision that was created in the target system after
// the initial import
log.warn(String.format(
- "[%s] Project %s was modified in target system: "
+ "Project %s was modified in target system: "
+ "Skip replay inline comments for patch set %s"
+ " which doesn't exist in the source system.",
- pluginName, change.getProject().get(), ps.getId().toString()));
+ change.getProject().get(), ps.getId().toString()));
continue;
}
comments = filterComments(ps, comments);
+ } else if (comments == null) {
+ log.warn(String.format(
+ "Cannot retrieve comments for revision %s, "
+ + "revision not found in source system: "
+ + "Skip replay inline comments for patch set %s of project %s.",
+ ps.getRevision().get(), ps.getId().toString(),
+ change.getProject().get()));
+ continue;
}
Multimap<Account.Id, CommentInfo> commentsByAuthor = ArrayListMultimap.create();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayRevisionsStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayRevisionsStep.java
index 084d3cb..a4b4601 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayRevisionsStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayRevisionsStep.java
@@ -15,7 +15,6 @@
package com.googlesource.gerrit.plugins.importer;
import com.google.gerrit.common.errors.NoSuchAccountException;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.RevisionInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -58,7 +57,6 @@
private final AccountUtil accountUtil;
private final ReviewDb db;
private final PatchSetInfoFactory patchSetInfoFactory;
- private final String pluginName;
private final Repository repo;
private final RevWalk rw;
private final Change change;
@@ -68,7 +66,6 @@
public ReplayRevisionsStep(AccountUtil accountUtil,
ReviewDb db,
PatchSetInfoFactory patchSetInfoFactory,
- @PluginName String pluginName,
@Assisted Repository repo,
@Assisted RevWalk rw,
@Assisted Change change,
@@ -76,7 +73,6 @@
this.accountUtil = accountUtil;
this.db = db;
this.patchSetInfoFactory = patchSetInfoFactory;
- this.pluginName = pluginName;
this.repo = repo;
this.rw = rw;
this.change = change;
@@ -91,6 +87,7 @@
db.changes().beginTransaction(change.getId());
try {
+ PatchSetInfo info = null;
for (RevisionInfo r : revisions) {
if (r.draft != null && r.draft) {
// no import of draft patch sets
@@ -114,9 +111,9 @@
// a patch set with the same number was created both in the source
// and in the target system
log.warn(String.format(
- "[%s] Project %s was modified in target system: "
+ "Project %s was modified in target system: "
+ "Skip replay revision for patch set %s.",
- pluginName, change.getProject().get(), ps.getId().toString()));
+ change.getProject().get(), ps.getId().toString()));
continue;
}
}
@@ -128,8 +125,8 @@
ps.setRevision(new RevId(commit.name()));
ps.setDraft(r.draft != null && r.draft);
- PatchSetInfo info = patchSetInfoFactory.get(commit, ps.getId());
- if (changeInfo.currentRevision.equals(info.getRevId())) {
+ info = patchSetInfoFactory.get(commit, ps.getId());
+ if (info.getRevId().equals(changeInfo.currentRevision)) {
change.setCurrentPatchSet(info);
}
@@ -138,6 +135,21 @@
updateRef(repo, ps);
}
+ if (change.currentPatchSetId() == null) {
+ if (changeInfo.currentRevision != null) {
+ log.warn(String.format(
+ "Current revision %s of change %s not found."
+ + " Setting lastest revision %s as current patch set.",
+ changeInfo.currentRevision, changeInfo.id, info.getRevId()));
+ } else {
+ log.warn(String.format(
+ "Change %s has no current revision."
+ + " Setting lastest revision %s as current patch set.",
+ changeInfo.id, info.getRevId()));
+ }
+ change.setCurrentPatchSet(info);
+ }
+
db.patchSets().insert(patchSets);
db.commit();
} finally {
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index 0531825..e69aed0 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -89,7 +89,10 @@
For auth type 'LDAP', 'HTTP\_LDAP' or 'CLIENT\_SSL\_CERT\_LDAP' missing
user accounts are automatically created. The public SSH keys of a user
are automatically retrieved from the source Gerrit server and added to
-the new account in the target Gerrit server.
+the new account in the target Gerrit server. For this the remote user
+must have the link:access-control.html#capability_modifyAccount[Modify
+Account] or the link:access-control.html#capability_administrateServer[
+Administrate Server] capability assigned on the source system.
Gerrit internal users (e.g. service users) are never automatically
created but must be created in the target Gerrit server before the