From 20f15d1abca648918a2ad972679b2b3e5c37f657 Mon Sep 17 00:00:00 2001 From: "steven.liatti" <steven.liatti@hesge.ch> Date: Thu, 21 Nov 2019 21:29:47 +0100 Subject: [PATCH] Add possible checkout at date in clone_all scripts --- README.md | 8 ++++---- scripts/clone_all_forks.py | 19 +++++++++++++++---- scripts/clone_all_repos_in_group.py | 19 +++++++++++++++---- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 3818299..adb02a9 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,12 @@ Crée un dépôt git (projet) au sein d'un groupe à partir de l'URL d'un projet ### clone_all_repos_in_group.py ```bash -python3 clone_all_repos_in_group.py <token> <group_id> <directory> +python3 clone_all_repos_in_group.py <token> <group_id> <directory> <until_date> ``` -Clone tous les repositories d'un groupe `group_id` donné dans un répertoire nommé `directory`. Affiche sur la sortie standard les membres du groupe, l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. +Clone tous les repositories d'un groupe `group_id` donné dans un répertoire nommé `directory`. Si une date `until_date` (au format `AAAA-MM-DD hh:mm`) est donnée, exécute un `git checkout` sur le premier commit précédant cette date. Affiche sur la sortie standard les membres du groupe, l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. ### clone_all_forks.py ```bash -python3 clone_all_forks.py <token> <project_id> <directory> +python3 clone_all_forks.py <token> <project_id> <directory> <until_date> ``` -Clone tous les forks d'un projet `project_id` donné dans un répertoire nommé `directory`. Affiche sur la sortie standard les membres du groupe (avec un droit d'accès supérieur à *Reporter*), l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. +Clone tous les forks d'un projet `project_id` donné dans un répertoire nommé `directory`. Si une date `until_date` (au format `AAAA-MM-DD hh:mm`) est donnée, exécute un `git checkout` sur le premier commit précédant cette date. Affiche sur la sortie standard les membres du groupe (avec un droit d'accès supérieur à *Reporter*), l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. diff --git a/scripts/clone_all_forks.py b/scripts/clone_all_forks.py index 1c6ba5b..1cd2262 100755 --- a/scripts/clone_all_forks.py +++ b/scripts/clone_all_forks.py @@ -7,7 +7,7 @@ import requests import subprocess if len(sys.argv) < 4: - print('Usage: ' + sys.argv[0] + ' <token> <project_id> <directory>') + print('Usage: ' + sys.argv[0] + ' <token> <project_id> <directory> <until_date>') exit(1) directory = sys.argv[3] @@ -36,10 +36,21 @@ for repo in repositories: for member in members: if member['access_level'] > 20: # Access level greater than "Reporter" - members_names += member['username'] + ', ' + members_names += "'" + member['name'] + "' (" + member['username'] + '), ' print('Members: ' + members_names) print('Web url: ' + web_url) - print('Cloning in "' + directory + '/' + repo['namespace']['name'] + '"\n') - # TODO: checkout at date + print('Cloning in "' + directory + '/' + repo['namespace']['name'] + '"') + subprocess.run(["git", "clone", "-q", ssh_url_to_repo, directory + '/' + repo['namespace']['name']]) + if len(sys.argv) > 4: + until_date = sys.argv[4] + commit_id = subprocess.check_output([ + "git","rev-list", "-n", "1", "--before=\"" + until_date + "\"", + "master"], cwd=directory + '/' + repo['namespace']['name']).decode('utf-8').rstrip() + subprocess.run( + ["git", "checkout", "-q", str(commit_id)], + cwd=directory + '/' + repo['namespace']['name']) + print("Checkout at " + str(commit_id) + "\n") + else: + print() \ No newline at end of file diff --git a/scripts/clone_all_repos_in_group.py b/scripts/clone_all_repos_in_group.py index a6bfb8d..719f4da 100755 --- a/scripts/clone_all_repos_in_group.py +++ b/scripts/clone_all_repos_in_group.py @@ -7,7 +7,7 @@ import requests import subprocess if len(sys.argv) < 4: - print('Usage: ' + sys.argv[0] + ' <token> <group_id> <directory>') + print('Usage: ' + sys.argv[0] + ' <token> <group_id> <directory> <until_date>') exit(1) directory = sys.argv[3] @@ -45,6 +45,17 @@ for repo in repositories: print('Members: ' + members_names) print('Web url: ' + web_url) - print('Cloning in "' + directory + '/' + repo['path'] + '"\n') - # TODO: checkout at date - subprocess.run(["git", "clone", "-q", ssh_url_to_repo, directory + '/' + repo['path']]) \ No newline at end of file + print('Cloning in "' + directory + '/' + repo['path'] + '"') + + subprocess.run(["git", "clone", "-q", ssh_url_to_repo, directory + '/' + repo['path']]) + if len(sys.argv) > 4: + until_date = sys.argv[4] + commit_id = subprocess.check_output([ + "git","rev-list", "-n", "1", "--before=\"" + until_date + "\"", + "master"], cwd=directory + '/' + repo['path']).decode('utf-8').rstrip() + subprocess.run( + ["git", "checkout", "-q", str(commit_id)], + cwd=directory + '/' + repo['path']) + print("Checkout at " + str(commit_id) + "\n") + else: + print() \ No newline at end of file -- GitLab