From aa33f339dc6925501da0df251851cbbf679d2f8e Mon Sep 17 00:00:00 2001 From: "steven.liatti" <steven.liatti@hesge.ch> Date: Tue, 11 Jun 2019 12:04:15 +0200 Subject: [PATCH] Add script and doc --- .gitmodules | 3 +++ README.md | 13 +++++++++++-- clone_all.py | 34 ++++++++++++++++++++++++++++++++++ project_id.png | Bin 0 -> 8378 bytes public | 1 + 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 .gitmodules create mode 100644 clone_all.py create mode 100644 project_id.png create mode 160000 public diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..15c6786 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "public"] + path = public + url = ssh://git@ssh.hesge.ch:10572/iti_assistants/modele-tp-etudiants-public.git diff --git a/README.md b/README.md index e9d1f23..60126f0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ -# modele-tp-etudiants-private +# Modèle de TP pour étudiants (privé) -Ce repo contient un modèle pour organiser un TP à faire par les étudiants avec la contrainte d'utiliser le gitlab de l'école. \ No newline at end of file +Ce repo contient un modèle pour organiser un TP à faire par les étudiants avec la contrainte d'utiliser le gitlab de l'école. Il est constitué des fichiers privés de l'enseignant ainsi que d'un script python pour récupérer tous les forks des étudiants du repo public, ce dernier étant un repository git à part entière et submodule du premier. + +La syntaxe du script est la suivante : +```bash +python3 clone_all.py <token> <project_id> +``` +Vous pouvez générer un `token` [sur cette page](https://gitedu.hesge.ch/profile/personal_access_tokens), en cochant la case "api". Le `project_id` correspond à celui affiché sur la page de repo : + + +Le script clone tous les forks du repository public et les place dans le répertoire `repositories`. \ No newline at end of file diff --git a/clone_all.py b/clone_all.py new file mode 100644 index 0000000..a9f5a18 --- /dev/null +++ b/clone_all.py @@ -0,0 +1,34 @@ +import sys +import json +import requests +import subprocess + +if len(sys.argv) < 3: + print('Usage: ' + sys.argv[0] + ' <token> <project_id>') + exit(1) + +token = sys.argv[1] +project_id = sys.argv[2] + +base_url = 'https://gitedu.hesge.ch/api/v4/projects/' +params = {'simple': 'true'} +headers = {'PRIVATE-TOKEN': token} + +repositories = requests.get(base_url + project_id + '/forks', params=params, headers=headers).json() + +for repo in repositories: + repo_url = base_url + str(repo['id']) + '/members' + members = requests.get(repo_url, headers=headers).json() + + ssh_url_to_repo = repo['ssh_url_to_repo'] + web_url = repo['web_url'] + members_names = '' + + for member in members: + if member['access_level'] > 20: # Access level greater than "Reporter" + members_names += member['username'] + ', ' + + print('Members: ' + members_names) + print('Web url: ' + web_url) + print('Cloning in "repositories/' + repo['namespace']['name'] + '"\n') + subprocess.run(["git", "clone", "-q", ssh_url_to_repo, "repositories/" + repo['namespace']['name']]) diff --git a/project_id.png b/project_id.png new file mode 100644 index 0000000000000000000000000000000000000000..2671a3fb443acc0b326d14adaf81f5473fb2ea0a GIT binary patch literal 8378 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 Gp$Py{I+n-) literal 0 HcmV?d00001 diff --git a/public b/public new file mode 160000 index 0000000..51f1685 --- /dev/null +++ b/public @@ -0,0 +1 @@ +Subproject commit 51f16857a239d5a0272ad969d97d1c2b726965f6 -- GitLab