| 1 | package edu.ucsb.cs156.frontiers.jobs; | |
| 2 | ||
| 3 | import edu.ucsb.cs156.frontiers.entities.Course; | |
| 4 | import edu.ucsb.cs156.frontiers.services.RepositoryService; | |
| 5 | import edu.ucsb.cs156.frontiers.services.jobs.JobContext; | |
| 6 | import edu.ucsb.cs156.frontiers.services.jobs.JobContextConsumer; | |
| 7 | import java.util.List; | |
| 8 | import lombok.Builder; | |
| 9 | import lombok.extern.slf4j.Slf4j; | |
| 10 | ||
| 11 | @Builder | |
| 12 | @Slf4j | |
| 13 | public class DeleteRepoJob implements JobContextConsumer { | |
| 14 | ||
| 15 | private final Course course; | |
| 16 | private final String prefix; | |
| 17 | private final RepositoryService repositoryService; | |
| 18 | ||
| 19 | @Override | |
| 20 | public Course getCourse() { | |
| 21 |
1
1. getCourse : replaced return value with null for edu/ucsb/cs156/frontiers/jobs/DeleteRepoJob::getCourse → KILLED |
return course; |
| 22 | } | |
| 23 | ||
| 24 | @Override | |
| 25 | public void accept(JobContext ctx) throws Exception { | |
| 26 | ctx.log( | |
| 27 | String.format( | |
| 28 | "Starting DeleteRepoJob for course %s with prefix %s", course.getCourseName(), prefix)); | |
| 29 | ||
| 30 | List<String> matchingRepos = repositoryService.getRepoNamesWithPrefix(course, prefix); | |
| 31 | ||
| 32 | ctx.log(String.format("%d repos found with prefix %s", matchingRepos.size(), prefix)); | |
| 33 | ||
| 34 | int reposDeleted = 0; | |
| 35 | int reposRetained = 0; | |
| 36 | int repoErrors = 0; | |
| 37 | ||
| 38 | for (String repoName : matchingRepos) { | |
| 39 | try { | |
| 40 | // Sleep to prevent GitHub API rate limiting | |
| 41 |
1
1. accept : removed call to java/lang/Thread::sleep → KILLED |
Thread.sleep(1000); |
| 42 | ||
| 43 | boolean hasCommits = repositoryService.repoHasCommits(course, repoName); | |
| 44 | ||
| 45 |
1
1. accept : negated conditional → KILLED |
if (hasCommits) { |
| 46 |
1
1. accept : Changed increment from 1 to -1 → KILLED |
reposRetained++; |
| 47 | ctx.log(String.format("Repo %s not deleted; commits exist.", repoName)); | |
| 48 | } else { | |
| 49 |
1
1. accept : removed call to edu/ucsb/cs156/frontiers/services/RepositoryService::deleteRepository → KILLED |
repositoryService.deleteRepository(course, repoName); |
| 50 |
1
1. accept : Changed increment from 1 to -1 → KILLED |
reposDeleted++; |
| 51 | ctx.log(String.format("Deleted repo %s", repoName)); | |
| 52 | } | |
| 53 | } catch (Exception e) { | |
| 54 |
1
1. accept : Changed increment from 1 to -1 → KILLED |
repoErrors++; |
| 55 | ctx.log(String.format("Error processing repo %s: %s", repoName, e.getMessage())); | |
| 56 | } | |
| 57 | } | |
| 58 | ||
| 59 | ctx.log(String.format("%d repos deleted", reposDeleted)); | |
| 60 | ctx.log(String.format("%d repos retained", reposRetained)); | |
| 61 | ctx.log(String.format("%d errors", repoErrors)); | |
| 62 | } | |
| 63 | } | |
Mutations | ||
| 21 |
1.1 |
|
| 41 |
1.1 |
|
| 45 |
1.1 |
|
| 46 |
1.1 |
|
| 49 |
1.1 |
|
| 50 |
1.1 |
|
| 54 |
1.1 |