diff --git a/README.md b/README.md index 3818299a85543a986020f67ea799704851b90355..adb02a9b09d5d7d63e1355e0803d1db42d7a65aa 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 1c6ba5b3715dde25ef07c205e4f820a66e372250..1cd22620001c6e9481a2a93573b8efb845a9a996 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 a6bfb8d612f7806b9292d1040981e4a88eb62c13..719f4da11819cfba637e91a4dd9f84ef1aff2cef 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