DeleteRepoJob.java

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
Location : getCourse
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_get_course()]
replaced return value with null for edu/ucsb/cs156/frontiers/jobs/DeleteRepoJob::getCourse → KILLED

41

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_handles_exceptions()]
removed call to java/lang/Thread::sleep → KILLED

45

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_success_mixed_repos()]
negated conditional → KILLED

46

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_success_mixed_repos()]
Changed increment from 1 to -1 → KILLED

49

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_success_mixed_repos()]
removed call to edu/ucsb/cs156/frontiers/services/RepositoryService::deleteRepository → KILLED

50

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_success_mixed_repos()]
Changed increment from 1 to -1 → KILLED

54

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.DeleteRepoJobTests]/[method:test_delete_repo_job_handles_exceptions()]
Changed increment from 1 to -1 → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0