summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationConfiguration.java
blob: 6b39960a7311e09a5d8998061c7a6b9f56055326 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.googlesource.gerrit.plugins.replication;

import com.google.common.base.MoreObjects;

import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.transport.RemoteConfig;

class DestinationConfiguration {
  private final int delay;
  private final int retryDelay;
  private final int lockErrorMaxRetries;
  private final String[] adminUrls;
  private final int poolThreads;
  private final boolean createMissingRepos;
  private final boolean replicatePermissions;
  private final boolean replicateProjectDeletions;
  private final String remoteNameStyle;
  private final String[] urls;
  private final String[] projects;
  private final String[] authGroupNames;
  private final RemoteConfig remoteConfig;

  DestinationConfiguration(RemoteConfig remoteConfig, Config cfg) {
    this.remoteConfig = remoteConfig;
    String name = remoteConfig.getName();
    urls = cfg.getStringList("remote", name, "url");
    delay = Math.max(0, getInt(remoteConfig, cfg, "replicationdelay", 15));
    projects = cfg.getStringList("remote", name, "projects");
    adminUrls = cfg.getStringList("remote", name, "adminUrl");
    retryDelay = Math.max(0, getInt(remoteConfig, cfg, "replicationretry", 1));
    poolThreads = Math.max(0, getInt(remoteConfig, cfg, "threads", 1));
    authGroupNames = cfg.getStringList("remote", name, "authGroup");
    lockErrorMaxRetries = cfg.getInt("replication", "lockErrorMaxRetries", 0);

    createMissingRepos =
        cfg.getBoolean("remote", name, "createMissingRepositories", true);
    replicatePermissions =
        cfg.getBoolean("remote", name, "replicatePermissions", true);
    replicateProjectDeletions =
        cfg.getBoolean("remote", name, "replicateProjectDeletions", false);
    remoteNameStyle = MoreObjects.firstNonNull(
        cfg.getString("remote", name, "remoteNameStyle"), "slash");
  }

  public int getDelay() {
    return delay;
  }

  public int getRetryDelay() {
    return retryDelay;
  }

  public int getPoolThreads() {
    return poolThreads;
  }

  public int getLockErrorMaxRetries() {
    return lockErrorMaxRetries;
  }

  public String[] getUrls() {
    return urls;
  }

  public String[] getAdminUrls() {
    return adminUrls;
  }

  public String[] getProjects() {
    return projects;
  }

  public String[] getAuthGroupNames() {
    return authGroupNames;
  }

  public String getRemoteNameStyle() {
    return remoteNameStyle;
  }

  public boolean replicatePermissions() {
    return replicatePermissions;
  }

  public boolean createMissingRepos() {
    return createMissingRepos;
  }

  public boolean replicateProjectDeletions() {
    return replicateProjectDeletions;
  }

  public RemoteConfig getRemoteConfig() {
    return remoteConfig;
  }

  private static int getInt(
      RemoteConfig rc, Config cfg, String name, int defValue) {
    return cfg.getInt("remote", rc.getName(), name, defValue);
  }
}