Merge pull request #2 from debanne/master
Fix merge with an already existing Change-Id
diff --git a/.travis.yml b/.travis.yml
index dfb6c36..15abc33 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -26,12 +26,13 @@
- ant
- export PATH=$PATH:$TRAVIS_BUILD_DIR/../../build/buck/bin
- cd ..
- - git clone https://gerrit.googlesource.com/gerrit
+ - git clone -b stable-2.10 https://gerrit.googlesource.com/gerrit
- cd gerrit
- ln -s $TRAVIS_BUILD_DIR plugins
- travis_retry tools/download_all.py > download.log
script:
+ - buck clean
- buck build gerrit > buck.log
- buck build plugins/automerge-plugin:automerge-plugin >> buck.log
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
index e9779f5..4b293a6 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -17,6 +17,7 @@
import com.google.common.collect.Lists;
import com.google.gerrit.common.ChangeListener;
import com.google.gerrit.extensions.api.GerritApi;
+import com.google.gerrit.extensions.api.changes.ChangeApi;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.ListChangesOption;
import com.google.gerrit.extensions.events.LifecycleListener;
@@ -157,12 +158,12 @@
related.addAll(api.changes().query("status: open AND topic: " + change.topic)
.withOption(ListChangesOption.CURRENT_REVISION).get());
} else {
- related.add(api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION)));
+ ChangeApi changeApi = api.changes().id(change.project, change.branch, change.id);
+ related.add(changeApi.get(EnumSet.of(ListChangesOption.CURRENT_REVISION)));
}
boolean submittable = true;
boolean mergeable = true;
for (final ChangeInfo info : related) {
- api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
if (!info.mergeable) {
mergeable = false;
}
diff --git a/test.rb b/test.rb
index 37296f2..ec3f2b3 100755
--- a/test.rb
+++ b/test.rb
@@ -72,6 +72,18 @@
check_status(commit2, 'MERGED')
end
+ def test_two_reviews_with_same_changed_id
+ commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}")
+ change_id = read_change_id(PROJECT1)
+ abandon_review(commit1)
+ # Reuse Change-Id of abandoned review
+ commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", nil, change_id)
+
+ approve_review(commit2)
+
+ check_status(commit2, 'MERGED')
+ end
+
private
def project_dir(project_name)
@@ -92,8 +104,17 @@
end
end
- def create_review(project_name, message, topic = nil)
+ def read_change_id(project_name, commit_id = "HEAD")
+ change_id = execute(["cd #{project_dir(project_name)}",
+ "git show #{commit_id} | grep Change-Id | sed 's/^.*Change-Id: \\([Ia-f0-9]*\\)$/\\1/'"
+ ].join(" && "))
+ refute(change_id.empty?, "missing change-id")
+ change_id
+ end
+
+ def create_review(project_name, message, topic = nil, change_id = nil)
topic_suffix = "/#{topic}" if topic
+ message = "#{message}\n\nChange-Id: #{change_id}" if change_id
execute(["cd #{project_dir(project_name)}",
"echo 0 >> a",
%Q(git commit -m "#{message}" .),
@@ -108,6 +129,10 @@
execute("#{GERRIT_SSH} gerrit review --verified 1 --code-review 2 #{commit_id}")
end
+ def abandon_review(commit_id)
+ execute("#{GERRIT_SSH} gerrit review --abandon #{commit_id}")
+ end
+
def check_status(commit_id, expected_status)
reviews = gerrit_query("commit:#{commit_id}")
assert_equal(1, reviews.size, "missing review with commit #{commit_id}")