<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="sourcerepo_v1.html">Cloud Source Repositories API</a> . <a href="sourcerepo_v1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="sourcerepo_v1.projects.repos.html">repos()</a></code>
</p>
<p class="firstline">Returns the repos Resource.</p>

<p class="toc_element">
  <code><a href="#getConfig">getConfig(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the Cloud Source Repositories configuration of the project.</p>
<p class="toc_element">
  <code><a href="#updateConfig">updateConfig(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the Cloud Source Repositories configuration of the project.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getConfig">getConfig(name, x__xgafv=None)</code>
  <pre>Returns the Cloud Source Repositories configuration of the project.

Args:
  name: string, The name of the requested project. Values are of the form
`projects/<project>`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Cloud Source Repositories configuration of a project.
    "enablePrivateKeyCheck": True or False, # Reject a Git push that contains a private key.
    "name": "A String", # The name of the project. Values are of the form `projects/<project>`.
    "pubsubConfigs": { # How this project publishes a change in the repositories through Cloud
        # Pub/Sub. Keyed by the topic names.
      "a_key": { # Configuration to publish a Cloud Pub/Sub message.
        "topic": "A String", # A topic of Cloud Pub/Sub. Values are of the form
            # `projects/<project>/topics/<topic>`. The project needs to be the same
            # project as this config is in.
        "messageFormat": "A String", # The format of the Cloud Pub/Sub messages.
        "serviceAccountEmail": "A String", # Email address of the service account used for publishing Cloud Pub/Sub
            # messages. This service account needs to be in the same project as the
            # PubsubConfig. When added, the caller needs to have
            # iam.serviceAccounts.actAs permission on this service account. If
            # unspecified, it defaults to the compute engine default service account.
      },
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateConfig">updateConfig(name, body, x__xgafv=None)</code>
  <pre>Updates the Cloud Source Repositories configuration of the project.

Args:
  name: string, The name of the requested project. Values are of the form
`projects/<project>`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for UpdateProjectConfig.
    "projectConfig": { # Cloud Source Repositories configuration of a project. # The new configuration for the project.
      "enablePrivateKeyCheck": True or False, # Reject a Git push that contains a private key.
      "name": "A String", # The name of the project. Values are of the form `projects/<project>`.
      "pubsubConfigs": { # How this project publishes a change in the repositories through Cloud
          # Pub/Sub. Keyed by the topic names.
        "a_key": { # Configuration to publish a Cloud Pub/Sub message.
          "topic": "A String", # A topic of Cloud Pub/Sub. Values are of the form
              # `projects/<project>/topics/<topic>`. The project needs to be the same
              # project as this config is in.
          "messageFormat": "A String", # The format of the Cloud Pub/Sub messages.
          "serviceAccountEmail": "A String", # Email address of the service account used for publishing Cloud Pub/Sub
              # messages. This service account needs to be in the same project as the
              # PubsubConfig. When added, the caller needs to have
              # iam.serviceAccounts.actAs permission on this service account. If
              # unspecified, it defaults to the compute engine default service account.
        },
      },
    },
    "updateMask": "A String", # A FieldMask specifying which fields of the project_config to modify. Only
        # the fields in the mask will be modified. If no mask is provided, this
        # request is no-op.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Cloud Source Repositories configuration of a project.
    "enablePrivateKeyCheck": True or False, # Reject a Git push that contains a private key.
    "name": "A String", # The name of the project. Values are of the form `projects/<project>`.
    "pubsubConfigs": { # How this project publishes a change in the repositories through Cloud
        # Pub/Sub. Keyed by the topic names.
      "a_key": { # Configuration to publish a Cloud Pub/Sub message.
        "topic": "A String", # A topic of Cloud Pub/Sub. Values are of the form
            # `projects/<project>/topics/<topic>`. The project needs to be the same
            # project as this config is in.
        "messageFormat": "A String", # The format of the Cloud Pub/Sub messages.
        "serviceAccountEmail": "A String", # Email address of the service account used for publishing Cloud Pub/Sub
            # messages. This service account needs to be in the same project as the
            # PubsubConfig. When added, the caller needs to have
            # iam.serviceAccounts.actAs permission on this service account. If
            # unspecified, it defaults to the compute engine default service account.
      },
    },
  }</pre>
</div>

</body></html>