Improved adding collaborators.
This commit is contained in:
parent
74de292e30
commit
003e84d960
|
@ -25,11 +25,6 @@ import java.util.logging.Logger;
|
||||||
*/
|
*/
|
||||||
public class GithubManager {
|
public class GithubManager {
|
||||||
|
|
||||||
/**
|
|
||||||
* The assignments repository where students will get assignments from.
|
|
||||||
*/
|
|
||||||
private GHRepository assignmentsRepo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Github object for API interactions.
|
* Github object for API interactions.
|
||||||
*/
|
*/
|
||||||
|
@ -56,6 +51,22 @@ public class GithubManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a repository by name.
|
||||||
|
* @param name The name of the repository.
|
||||||
|
* @return The repository with the given name, or null if none exists.
|
||||||
|
*/
|
||||||
|
public GHRepository getRepository(String name) {
|
||||||
|
System.out.println(name);
|
||||||
|
try {
|
||||||
|
return this.organization.getRepository(name);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.severe("No repository with name: " + name + " exists.");
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a list of teams in the organization.
|
* Gets a list of teams in the organization.
|
||||||
* @return A List of all TA teams in the organization.
|
* @return A List of all TA teams in the organization.
|
||||||
|
@ -112,17 +123,17 @@ public class GithubManager {
|
||||||
logger.fine("Deleted pre-existing assignments repository.");
|
logger.fine("Deleted pre-existing assignments repository.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.assignmentsRepo = this.createRepository(assignmentsRepoName, team, description, false, true, true);
|
GHRepository assignmentsRepo = this.createRepository(assignmentsRepoName, team, description, false, true, true);
|
||||||
|
|
||||||
if (this.assignmentsRepo == null) {
|
if (assignmentsRepo == null) {
|
||||||
logger.severe("Could not create assignments repository.");
|
logger.severe("Could not create assignments repository.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.protectMasterBranch(this.assignmentsRepo, team);
|
this.protectMasterBranch(assignmentsRepo, team);
|
||||||
|
|
||||||
// Grant all teaching assistants write access.
|
// Grant all teaching assistants write access.
|
||||||
team.add(this.assignmentsRepo, GHOrganization.Permission.ADMIN);
|
team.add(assignmentsRepo, GHOrganization.Permission.ADMIN);
|
||||||
logger.fine("Gave admin rights to all teaching assistants in team: " + team.getName());
|
logger.fine("Gave admin rights to all teaching assistants in team: " + team.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,10 +143,11 @@ public class GithubManager {
|
||||||
* @param team The student team to set up.
|
* @param team The student team to set up.
|
||||||
* @param taTeam The team of teaching assistants that is responsible for these students.
|
* @param taTeam The team of teaching assistants that is responsible for these students.
|
||||||
* @param prefix The prefix to append to the front of the repo name.
|
* @param prefix The prefix to append to the front of the repo name.
|
||||||
|
* @param assignmentsRepo The assignments repository.
|
||||||
*/
|
*/
|
||||||
public void setupStudentRepo(StudentTeam team, TATeam taTeam, String prefix) {
|
public void setupStudentRepo(StudentTeam team, TATeam taTeam, String prefix, GHRepository assignmentsRepo) {
|
||||||
// First check that the assignments repo exists, otherwise no invitations can be sent.
|
// First check that the assignments repo exists, otherwise no invitations can be sent.
|
||||||
if (this.assignmentsRepo == null) {
|
if (assignmentsRepo == null) {
|
||||||
logger.warning("Assignments repository must be created before student repositories.");
|
logger.warning("Assignments repository must be created before student repositories.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -147,13 +159,13 @@ public class GithubManager {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
team.setRepository(repo);
|
||||||
|
team.setTaTeam(taTeam);
|
||||||
|
|
||||||
this.protectMasterBranch(repo, taTeam.getGithubTeam());
|
this.protectMasterBranch(repo, taTeam.getGithubTeam());
|
||||||
this.createDevelopmentBranch(repo);
|
this.createDevelopmentBranch(repo);
|
||||||
this.addTATeamAsAdmin(repo, taTeam.getGithubTeam());
|
this.addTATeamAsAdmin(repo, taTeam.getGithubTeam());
|
||||||
this.inviteStudentsToRepos(team, repo);
|
this.inviteStudentsToRepos(team, assignmentsRepo);
|
||||||
|
|
||||||
team.setRepository(repo);
|
|
||||||
team.setTaTeam(taTeam);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -216,25 +228,36 @@ public class GithubManager {
|
||||||
/**
|
/**
|
||||||
* Invites students in a team to their repository, and the assignments repository.
|
* Invites students in a team to their repository, and the assignments repository.
|
||||||
* @param team The team of students to invite as collaborators.
|
* @param team The team of students to invite as collaborators.
|
||||||
* @param repo The repository created for the students.
|
* @param assignmentsRepo The repository that contains assignments for the class.
|
||||||
*/
|
*/
|
||||||
private void inviteStudentsToRepos(StudentTeam team, GHRepository repo) {
|
private void inviteStudentsToRepos(StudentTeam team, GHRepository assignmentsRepo) {
|
||||||
try {
|
try {
|
||||||
logger.finest("Adding students from team: " + team.getId() + " as collaborators.");
|
logger.finest("Adding students from team: " + team.getId() + " as collaborators.");
|
||||||
List<GHUser> users = new ArrayList<>();
|
|
||||||
for (Student student : team.getStudents()) {
|
for (Student student : team.getStudents()) {
|
||||||
GHUser user = this.github.getUser(student.getGithubUsername());
|
GHUser user = this.github.getUser(student.getGithubUsername());
|
||||||
users.add(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
repo.addCollaborators(users);
|
this.addCollaboratorToRepo(user, assignmentsRepo);
|
||||||
this.assignmentsRepo.addCollaborators(users);
|
this.addCollaboratorToRepo(user, team.getRepository());
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.severe("Could not add students as collaborators to assignments or their repo.\n" + team);
|
logger.severe("Could not add students as collaborators to assignments or their repo.\n" + team);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a user to a repository, or if a failure occurs, log the failure.
|
||||||
|
* @param user The user to add as a collaborator.
|
||||||
|
* @param repository The repository to add the user to.
|
||||||
|
*/
|
||||||
|
private void addCollaboratorToRepo(GHUser user, GHRepository repository) {
|
||||||
|
try {
|
||||||
|
repository.addCollaborators(user);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.severe("Could not add user " + user.getLogin() + " to repository " + repository.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a teaching assistant team as admins to a particular student repository.
|
* Adds a teaching assistant team as admins to a particular student repository.
|
||||||
* @param studentRepo The student repository.
|
* @param studentRepo The student repository.
|
||||||
|
|
|
@ -4,6 +4,7 @@ import nl.andrewlalis.git_api.GithubManager;
|
||||||
import nl.andrewlalis.model.StudentTeam;
|
import nl.andrewlalis.model.StudentTeam;
|
||||||
import nl.andrewlalis.model.TATeam;
|
import nl.andrewlalis.model.TATeam;
|
||||||
import nl.andrewlalis.ui.view.InitializerApp;
|
import nl.andrewlalis.ui.view.InitializerApp;
|
||||||
|
import org.kohsuke.github.GHRepository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -23,13 +24,17 @@ public class SetupStudentRepos extends GithubExecutable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean executeWithManager(GithubManager manager, String[] args) {
|
protected boolean executeWithManager(GithubManager manager, String[] args) {
|
||||||
if (args.length < 1) {
|
if (args.length < 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
List<TATeam> taTeams = this.app.getOrganization().getTaTeams();
|
List<TATeam> taTeams = this.app.getOrganization().getTaTeams();
|
||||||
for (TATeam team : taTeams) {
|
for (TATeam team : taTeams) {
|
||||||
for (StudentTeam studentTeam : team.getStudentTeams()) {
|
for (StudentTeam studentTeam : team.getStudentTeams()) {
|
||||||
manager.setupStudentRepo(studentTeam, team, args[0]);
|
GHRepository assignmentsRepo = manager.getRepository(args[1]);
|
||||||
|
if (assignmentsRepo == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
manager.setupStudentRepo(studentTeam, team, args[0], assignmentsRepo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue