Skip to content

Commit 2ab9b1a

Browse files
authored
Merge pull request #113 from vohoanglong0107/refactor-get-repository-name
refactor: unify ways to get repository name
2 parents 6e9935a + a83fcc7 commit 2ab9b1a

File tree

6 files changed

+51
-51
lines changed

6 files changed

+51
-51
lines changed

src/bors/handlers/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ pub async fn handle_bors_global_event(
139139
futures::future::join_all(repos.into_iter().map(|repo| {
140140
let repo = Arc::clone(&repo);
141141
async {
142-
let subspan = tracing::info_span!("Repo", repo = repo.repository.to_string());
142+
let subspan = tracing::info_span!("Repo", repo = repo.repository().to_string());
143143
refresh_repository(repo, Arc::clone(&db), team_api_client)
144144
.instrument(subspan)
145145
.await
@@ -249,8 +249,8 @@ async fn reload_repos(
249249
let reloaded_repos = repo_loader.load_repositories(team_api_client).await?;
250250
let mut repositories = ctx.repositories.write().unwrap();
251251
for repo in repositories.values() {
252-
if !reloaded_repos.contains_key(&repo.repository) {
253-
tracing::warn!("Repository {} was not reloaded", repo.repository);
252+
if !reloaded_repos.contains_key(repo.repository()) {
253+
tracing::warn!("Repository {} was not reloaded", repo.repository());
254254
}
255255
}
256256
for (name, repo) in reloaded_repos {

src/bors/handlers/refresh.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub async fn refresh_repository(
2929
}
3030

3131
async fn cancel_timed_out_builds(repo: &RepositoryState, db: &PgDbClient) -> anyhow::Result<()> {
32-
let running_builds = db.get_running_builds(&repo.repository).await?;
32+
let running_builds = db.get_running_builds(repo.repository()).await?;
3333
tracing::info!("Found {} running build(s)", running_builds.len());
3434

3535
let timeout = repo.config.load().timeout;
@@ -67,12 +67,12 @@ async fn reload_permission(
6767
team_api_client: &TeamApiClient,
6868
) -> anyhow::Result<()> {
6969
let permissions = team_api_client
70-
.load_permissions(&repo.repository)
70+
.load_permissions(repo.repository())
7171
.await
7272
.with_context(|| {
7373
format!(
7474
"Could not load permissions for repository {}",
75-
repo.repository
75+
repo.repository()
7676
)
7777
})?;
7878
repo.permissions.store(Arc::new(permissions));

src/bors/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,13 @@ pub struct CheckSuite {
6060
/// Can be used to query permissions for the repository, and also to perform various
6161
/// actions using the stored client.
6262
pub struct RepositoryState {
63-
pub repository: GithubRepoName,
6463
pub client: GithubRepositoryClient,
6564
pub permissions: ArcSwap<UserPermissions>,
6665
pub config: ArcSwap<RepositoryConfig>,
6766
}
67+
68+
impl RepositoryState {
69+
pub fn repository(&self) -> &GithubRepoName {
70+
self.client.repository()
71+
}
72+
}

src/github/api/client.rs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,37 @@ use crate::github::{Branch, CommitSha, GithubRepoName, PullRequest, PullRequestN
1313

1414
/// Provides access to a single app installation (repository) using the GitHub API.
1515
pub struct GithubRepositoryClient {
16-
pub app: App,
16+
app: App,
1717
/// The client caches the access token for this given repository and refreshes it once it
1818
/// expires.
19-
pub client: Octocrab,
19+
client: Octocrab,
2020
// We store the name separately, because repository has an optional owner, but at this point
2121
// we must always have some owner of the repo.
22-
pub repo_name: GithubRepoName,
23-
pub repository: Repository,
22+
repo_name: GithubRepoName,
23+
repository: Repository,
2424
}
2525

2626
impl GithubRepositoryClient {
27-
pub fn client(&self) -> &Octocrab {
28-
&self.client
27+
pub fn new(
28+
app: App,
29+
client: Octocrab,
30+
repo_name: GithubRepoName,
31+
repository: Repository,
32+
) -> Self {
33+
Self {
34+
app,
35+
client,
36+
repo_name,
37+
repository,
38+
}
2939
}
3040

31-
pub fn name(&self) -> &GithubRepoName {
32-
&self.repo_name
41+
pub fn client(&self) -> &Octocrab {
42+
&self.client
3343
}
3444

3545
pub fn repository(&self) -> &GithubRepoName {
36-
self.name()
46+
&self.repo_name
3747
}
3848

3949
/// Was the comment created by the bot?
@@ -78,12 +88,7 @@ impl GithubRepositoryClient {
7888
let branch: octocrab::models::repos::Branch = self
7989
.client
8090
.get(
81-
format!(
82-
"/repos/{}/{}/branches/{name}",
83-
self.repo_name.owner(),
84-
self.repo_name.name(),
85-
)
86-
.as_str(),
91+
format!("/repos/{}/branches/{name}", self.repository()).as_str(),
8792
None::<&()>,
8893
)
8994
.await
@@ -112,7 +117,7 @@ impl GithubRepositoryClient {
112117
comment: Comment,
113118
) -> anyhow::Result<()> {
114119
self.client
115-
.issues(&self.name().owner, &self.name().name)
120+
.issues(&self.repository().owner, &self.repository().name)
116121
.create_comment(pr.0, comment.render())
117122
.await
118123
.with_context(|| format!("Cannot post comment to {}", self.format_pr(pr)))?;
@@ -215,7 +220,9 @@ impl GithubRepositoryClient {
215220

216221
/// Add a set of labels to a PR.
217222
pub async fn add_labels(&self, pr: PullRequestNumber, labels: &[String]) -> anyhow::Result<()> {
218-
let client = self.client.issues(self.name().owner(), self.name().name());
223+
let client = self
224+
.client
225+
.issues(self.repository().owner(), self.repository().name());
219226
if !labels.is_empty() {
220227
client
221228
.add_labels(pr.0, labels)
@@ -232,7 +239,9 @@ impl GithubRepositoryClient {
232239
pr: PullRequestNumber,
233240
labels: &[String],
234241
) -> anyhow::Result<()> {
235-
let client = self.client.issues(self.name().owner(), self.name().name());
242+
let client = self
243+
.client
244+
.issues(self.repository().owner(), self.repository().name());
236245
// The GitHub API only allows removing labels one by one, so we remove all of them in
237246
// parallel to speed it up a little.
238247
let labels_to_remove_futures = labels.iter().map(|label| client.remove_label(pr.0, label));
@@ -266,19 +275,12 @@ impl GithubRepositoryClient {
266275
.html_url
267276
.as_ref()
268277
.map(|url| url.to_string())
269-
.unwrap_or_else(|| {
270-
format!(
271-
"{}/{}/{}",
272-
base_github_html_url(),
273-
self.name().owner,
274-
self.name().name
275-
)
276-
});
278+
.unwrap_or_else(|| format!("{}/{}", base_github_html_url(), self.repository(),));
277279
format!("{html_url}/actions/runs/{run_id}")
278280
}
279281

280282
fn format_pr(&self, pr: PullRequestNumber) -> String {
281-
format!("{}/{}/{}", self.name().owner(), self.name().name(), pr)
283+
format!("{}/{}", self.repository(), pr)
282284
}
283285
}
284286

src/github/api/mod.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,7 @@ async fn create_repo_state(
143143
) -> anyhow::Result<RepositoryState> {
144144
tracing::info!("Found repository {name}");
145145

146-
let client = GithubRepositoryClient {
147-
app,
148-
client: repo_client,
149-
repo_name: name.clone(),
150-
repository: repo,
151-
};
146+
let client = GithubRepositoryClient::new(app, repo_client, name.clone(), repo);
152147

153148
let permissions = team_api_client
154149
.load_permissions(&name)
@@ -168,7 +163,6 @@ async fn create_repo_state(
168163
};
169164

170165
Ok(RepositoryState {
171-
repository: name,
172166
client,
173167
config: ArcSwap::new(Arc::new(config)),
174168
permissions: ArcSwap::new(Arc::new(permissions)),

src/github/api/operations.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub async fn merge_branches(
4141
commit_message: &str,
4242
) -> Result<CommitSha, MergeError> {
4343
let client = repo.client();
44-
let merge_url = format!("/repos/{}/{}/merges", repo.name().owner, repo.name().name);
44+
let merge_url = format!("/repos/{}/merges", repo.repository());
4545

4646
let request = MergeRequest {
4747
base: base_ref,
@@ -57,7 +57,7 @@ pub async fn merge_branches(
5757

5858
tracing::trace!(
5959
"Response from merging `{head_sha}` into `{base_ref}` in `{}`: {status} ({text})",
60-
repo.name(),
60+
repo.repository(),
6161
);
6262

6363
match status {
@@ -79,7 +79,7 @@ pub async fn merge_branches(
7979
Err(error) => {
8080
tracing::debug!(
8181
"Merging `{head_sha}` into `{base_ref}` in `{}` failed: {error:?}",
82-
repo.name()
82+
repo.repository()
8383
);
8484
Err(MergeError::NetworkError(error))
8585
}
@@ -112,8 +112,8 @@ async fn create_branch(
112112
name: String,
113113
sha: &CommitSha,
114114
) -> Result<(), String> {
115-
repo.client
116-
.repos(repo.repo_name.owner(), repo.repo_name.name())
115+
repo.client()
116+
.repos(repo.repository().owner(), repo.repository().name())
117117
.create_ref(&Reference::Branch(name), sha.as_ref())
118118
.await
119119
.map_err(|error| format!("Cannot create branch: {error}"))?;
@@ -137,16 +137,15 @@ async fn update_branch(
137137
sha: &CommitSha,
138138
) -> Result<(), BranchUpdateError> {
139139
let url = format!(
140-
"/repos/{}/{}/git/refs/{}",
141-
repo.name().owner(),
142-
repo.name().name(),
140+
"/repos/{}/git/refs/{}",
141+
repo.repository(),
143142
Reference::Branch(branch_name.clone()).ref_url()
144143
);
145144

146145
tracing::debug!("Updating branch {} to SHA {}", url, sha.as_ref());
147146

148147
let res = repo
149-
.client
148+
.client()
150149
._patch(
151150
url.as_str(),
152151
Some(&serde_json::json!({
@@ -160,7 +159,7 @@ async fn update_branch(
160159
tracing::trace!(
161160
"Updating branch response: status={}, text={:?}",
162161
status,
163-
repo.client.body_to_string(res).await
162+
repo.client().body_to_string(res).await
164163
);
165164

166165
match status {

0 commit comments

Comments
 (0)