summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmitMergeDelegate.java
blob: b39b5f268c8d434f2db8142258305b9cbde7946f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.google.gerrit.server.git;

import com.google.gerrit.reviewdb.AbstractEntity;
import com.google.gerrit.reviewdb.ApprovalCategory;
import com.google.gerrit.reviewdb.Change;
import com.google.gerrit.reviewdb.ReviewDb;
import com.google.gerrit.reviewdb.ApprovalCategory.Id;
import com.google.gerrit.reviewdb.Branch.NameKey;
import com.google.gerrit.server.git.MergeOp.MergeDelegate;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.SchemaFactory;
import com.google.inject.Inject;

import java.util.List;

/**
 * MergeOp variation for submit merges.
 *
 */
public class SubmitMergeDelegate implements MergeDelegate {
  /**
   * Factory interface for creating delegates.
   */
  public interface Factory {
    SubmitMergeDelegate create();
  }

  private final SchemaFactory<ReviewDb> reviewDbFactory;

  @Inject
  public SubmitMergeDelegate(final SchemaFactory<ReviewDb> reviewDbFactory) {
    this.reviewDbFactory = reviewDbFactory;
  }

  @Override
  public List<Change> createMergeList(NameKey destBranch) throws MergeException {
    ReviewDb reviewDb = null;
    try {
      // Open review database.
      reviewDb = reviewDbFactory.open();

      // List all submitted changes in the destination branch.
      List<Change> inStaging = reviewDb.changes().submitted(destBranch).toList();
      return inStaging;
    } catch (OrmException e) {
      throw new MergeException("Cannot query the database", e);
    } finally {
      if (reviewDb != null) {
        // Close the review database.
        reviewDb.close();
      }
    }
  }

  @Override
  public Id getRequiredApprovalCategory() {
    return ApprovalCategory.SUBMIT;
  }

  @Override
  public String getMessageForMergeStatus(CommitMergeStatus status,
      CodeReviewCommit commit) {
    // Use default messages.
    return null;
  }

  @Override
  public String toString() {
    return "submit";
  }

  @Override
  public AbstractEntity.Status getStatus() {
    return Change.Status.MERGED;
  }

  @Override
  public boolean rebuildStaging() {
    return true;
  }
}