From 325f77dcd900a617a606c8f78d860cfac75820b2 Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Tue, 12 Jan 2016 11:18:26 +0200 Subject: [PATCH 1/2] Prompt for password if only username given --- bin/github-backup | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/bin/github-backup b/bin/github-backup index 29697dc..cc469f8 100755 --- a/bin/github-backup +++ b/bin/github-backup @@ -7,6 +7,7 @@ import base64 import calendar import codecs import errno +import getpass import json import logging import os @@ -109,7 +110,9 @@ def parse_args(): parser.add_argument('-p', '--password', dest='password', - help='password for basic auth') + help='password for basic auth. ' + 'If a username is given but not a password, the ' + 'password will be prompted for.') parser.add_argument('-t', '--token', dest='token', @@ -219,17 +222,18 @@ def parse_args(): def get_auth(args): - auth = None if args.token: - auth = base64.b64encode(args.token + ':' + 'x-oauth-basic') - elif args.username and args.password: - auth = base64.b64encode(args.username + ':' + args.password) - elif args.username and not args.password: - log_error('You must specify a password for basic auth') - elif args.password and not args.username: + return base64.b64encode(args.token + ':' + 'x-oauth-basic') + + if args.username: + if not args.password: + args.password = getpass.getpass() + return base64.b64encode(args.username + ':' + args.password) + + if args.password: log_error('You must specify a username for basic auth') - return auth + return None def get_github_api_host(args): From 675484a215b722ad28d2f7dd5d074f07fb45e8d1 Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Tue, 12 Jan 2016 14:40:29 +0200 Subject: [PATCH 2/2] Update README with new CLI usage --- README.rst | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index 273b4f0..e9a0335 100644 --- a/README.rst +++ b/README.rst @@ -23,15 +23,14 @@ CLI Usage is as follows:: Github Backup [-h] [-u USERNAME] [-p PASSWORD] [-t TOKEN] [-o OUTPUT_DIRECTORY] [--starred] [--watched] [--all] [--issues] [--issue-comments] [--issue-events] [--pulls] - [--pull-comments] [--pull-commits] [--repositories] - [--wikis] [--labels] [--hooks] [--skip-existing] - [-L [LANGUAGES [LANGUAGES ...]]] [-N NAME_REGEX] - [-H GITHUB_HOST] [-O] [-R REPOSITORY] [-P] [-F] - [--prefer-ssh] [-v] + [--pull-comments] [--pull-commits] [--labels] [--hooks] + [--milestones] [--repositories] [--wikis] + [--skip-existing] [-L [LANGUAGES [LANGUAGES ...]]] + [-N NAME_REGEX] [-H GITHUB_HOST] [-O] [-R REPOSITORY] + [-P] [-F] [--prefer-ssh] [-v] USER - - Backup a github users account + Backup a github account positional arguments: USER github username @@ -41,7 +40,8 @@ CLI Usage is as follows:: -u USERNAME, --username USERNAME username for basic auth -p PASSWORD, --password PASSWORD - password for basic auth + password for basic auth. If a username is given but + not a password, the password will be prompted for. -t TOKEN, --token TOKEN personal access or OAuth token -o OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY @@ -55,10 +55,12 @@ CLI Usage is as follows:: --pulls include pull requests in backup --pull-comments include pull request review comments in backup --pull-commits include pull request commits in backup + --labels include labels in backup + --hooks include hooks in backup (works only when + authenticated) + --milestones include milestones in backup --repositories include repository clone in backup --wikis include wiki clone in backup - --labels include labels in backup - --hooks include web hooks in backup (works only when authenticated) --skip-existing skip project if a backup directory exists -L [LANGUAGES [LANGUAGES ...]], --languages [LANGUAGES [LANGUAGES ...]] only allow these languages @@ -66,7 +68,7 @@ CLI Usage is as follows:: python regex to match names against -H GITHUB_HOST, --github-host GITHUB_HOST GitHub Enterprise hostname - -O, --organization whether or not this is a query for an organization + -O, --organization whether or not this is an organization user -R REPOSITORY, --repository REPOSITORY name of repository to limit backup to -P, --private include private repositories