Select Git revision
01-clone.py
Christopher Bohn authored
01-clone.py 2.78 KiB
import subprocess
from gitlab import Gitlab
from config import Config
import gitlab_functions
class_start_date = '2019-08'
message = [
'Human-readable names limited by students\' creation of human-readable names.',
'You will need to add students who did not create a homework repository',
'before the due date, who misspelled the repository\'s name,',
'or who created a repository in a previous semester.'
]
def get_projects(git_server):
retrieved_projects = gitlab_functions.get_projects_by_keyword(git_server, 'csce361-homework')
projects = len(retrieved_projects)
print(f'retrieved {projects} projects')
retrieved_projects = list(filter(lambda p: p.created_at.startswith(class_start_date), retrieved_projects))
projects = len(retrieved_projects)
print(f'after culling, there are {projects} projects')
return retrieved_projects
def create_csv(git_server, projects, filename):
file = open(filename, 'x')
file.write('Student,NUID,Gitlab Username,Canvas Username\n')
for project in projects:
student = gitlab_functions.get_user_by_id(git_server, project.creator_id)
file.write(f'{student.name},unknown,{student.username},unknown\n')
file.close()
print('CSV file for students and their usernames has been started.')
print(message[1])
print(message[2])
print(message[3])
def create_bash_cloner(git_server, projects, filename):
file = open(filename, 'x')
file.write('#!/bin/bash\n\n')
file.write('# Auto-generated clone script.\n')
file.write(f'# {message[0]}\n')
file.write(f'# {message[1]}\n')
file.write(f'# {message[2]}\n')
file.write(f'# {message[3]}\n\n')
for project in projects:
repo_url = project.ssh_url_to_repo
student = gitlab_functions.get_user_by_id(git_server, project.creator_id).name.replace(' ', '_')
file.write(f'git clone {repo_url} {student}\n')
file.close()
subprocess.call(['chmod', '+x', filename])
print('Bash script created to provide to TAs so they can clone homework repositories.')
print(message[0])
print(message[1])
print(message[2])
print(message[3])
def clone_repositories(git_server, projects):
subprocess.call(['mkdir', 'homework'])
for project in projects:
repo_url = project.ssh_url_to_repo
student = gitlab_functions.get_user_by_id(git_server, project.creator_id).name.replace(' ', '_')
subprocess.call(['git', 'clone', repo_url, f'homework/{student}'])
if __name__ == '__main__':
git = Gitlab(Config.gitlab_url, private_token=Config.gitlab_api_key)
student_repositories = get_projects(git)
create_csv(git, student_repositories, f'{class_start_date}.csv')
create_bash_cloner(git, student_repositories, '01-clone.sh')
clone_repositories(git, student_repositories)