Compare commits

...

17 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
2340a02fc6 Release version 0.23.0 2019-06-04 14:43:32 -04:00
Jose Diaz-Gonzalez
cafff4ae80 Merge pull request #113 from kleag/master
Avoid to crash in case of HTTP 502 error
2019-06-04 14:43:10 -04:00
Gael de Chalendar
3193d120e5 Avoid to crash in case of HTTP 502 error
Survive also on socket.error connections like on HTTPError or URLError.

This should solve issue #110.
2019-06-04 18:53:58 +02:00
Jose Diaz-Gonzalez
da4b29a2d6 Release version 0.22.2 2019-02-21 15:41:11 -05:00
Jose Diaz-Gonzalez
d05c96ecef Merge pull request #107 from josegonzalez/patch-1
fix: warn instead of error
2019-02-21 15:40:59 -05:00
Jose Diaz-Gonzalez
c86163bfe6 fix: warn instead of error
Refs #106
2019-02-21 15:40:39 -05:00
Jose Diaz-Gonzalez
eff6e36974 Release version 0.22.1 2019-02-21 15:13:31 -05:00
Jose Diaz-Gonzalez
63e458bafb Merge pull request #106 from jstetic/master
Log URL error
2019-02-21 15:13:02 -05:00
JOHN STETIC
57ab5ce1a2 Log URL error https://github.com/josegonzalez/python-github-backup/issues/105 2019-02-20 20:43:00 -05:00
Jose Diaz-Gonzalez
d148f9b900 Release version 0.22.0 2019-02-01 09:50:42 -05:00
Jose Diaz-Gonzalez
89ee22c2be Merge pull request #103 from whwright/98-better-logging
Fix accidental system exit with better logging strategy
2018-12-27 15:12:26 -05:00
W. Harrison Wright
9e472b74e6 Remove unnecessary sys.exit call 2018-12-27 13:07:13 -06:00
W. Harrison Wright
4b459f9af8 Add org check to avoid incorrect log output 2018-12-27 12:58:57 -06:00
W. Harrison Wright
b70ea87db7 Fix accidental system exit with better logging strategy 2018-12-27 12:53:21 -06:00
Jose Diaz-Gonzalez
f8be34562b Release version 0.21.1 2018-12-25 06:28:28 -05:00
Jose Diaz-Gonzalez
ec05204aa9 Merge pull request #101 from ecki/patch-2
Mark options which are not included in --all
2018-12-25 06:27:58 -05:00
Bernd
628f2cbf73 Mark options which are not included in --all
As discussed in Issue #100
2018-12-24 04:19:29 +01:00
3 changed files with 105 additions and 122 deletions

View File

@@ -1,49 +1,83 @@
Changelog Changelog
========= =========
0.21.0 (2018-11-28) 0.23.0 (2019-06-04)
-------------------
------------------------
- Avoid to crash in case of HTTP 502 error. [Gael de Chalendar]
Survive also on socket.error connections like on HTTPError or URLError.
This should solve issue #110.
0.22.2 (2019-02-21)
------------------- -------------------
Fix
~~~
- Warn instead of error. [Jose Diaz-Gonzalez]
Refs #106
0.22.1 (2019-02-21)
-------------------
- Log URL error https://github.com/josegonzalez/python-github-
backup/issues/105. [JOHN STETIC]
0.22.0 (2019-02-01)
-------------------
- Remove unnecessary sys.exit call. [W. Harrison Wright]
- Add org check to avoid incorrect log output. [W. Harrison Wright]
- Fix accidental system exit with better logging strategy. [W. Harrison
Wright]
0.21.1 (2018-12-25)
-------------------
- Mark options which are not included in --all. [Bernd]
As discussed in Issue #100
0.21.0 (2018-11-28)
-------------------
- Correctly download repos when user arg != authenticated user. [W. - Correctly download repos when user arg != authenticated user. [W.
Harrison Wright] Harrison Wright]
0.20.1 (2018-09-29) 0.20.1 (2018-09-29)
------------------- -------------------
- Clone the specified user's gists, not the authenticated user. [W. - Clone the specified user's gists, not the authenticated user. [W.
Harrison Wright] Harrison Wright]
- Clone the specified user's starred repos, not the authenticated user. - Clone the specified user's starred repos, not the authenticated user.
[W. Harrison Wright] [W. Harrison Wright]
0.20.0 (2018-03-24) 0.20.0 (2018-03-24)
------------------- -------------------
- Chore: drop Python 2.6. [Jose Diaz-Gonzalez] - Chore: drop Python 2.6. [Jose Diaz-Gonzalez]
- Feat: simplify release script. [Jose Diaz-Gonzalez] - Feat: simplify release script. [Jose Diaz-Gonzalez]
0.19.2 (2018-03-24) 0.19.2 (2018-03-24)
------------------- -------------------
Fix Fix
~~~ ~~~
- Cleanup pep8 violations. [Jose Diaz-Gonzalez] - Cleanup pep8 violations. [Jose Diaz-Gonzalez]
0.19.0 (2018-03-24) 0.19.0 (2018-03-24)
------------------- -------------------
- Add additional output for the current request. [Robin Gloster] - Add additional output for the current request. [Robin Gloster]
This is useful to have some progress indication for huge repositories. This is useful to have some progress indication for huge repositories.
- Add option to backup additional PR details. [Robin Gloster] - Add option to backup additional PR details. [Robin Gloster]
Some payload is only included when requesting a single pull request Some payload is only included when requesting a single pull request
- Mark string as binary in comparison for skip_existing. [Johannes - Mark string as binary in comparison for skip_existing. [Johannes
Bornhold] Bornhold]
@@ -54,66 +88,53 @@ Fix
0.18.0 (2018-02-22) 0.18.0 (2018-02-22)
------------------- -------------------
- Add option to fetch followers/following JSON data. [Stephen Greene] - Add option to fetch followers/following JSON data. [Stephen Greene]
0.17.0 (2018-02-20) 0.17.0 (2018-02-20)
------------------- -------------------
- Short circuit gists backup process. [W. Harrison Wright] - Short circuit gists backup process. [W. Harrison Wright]
- Formatting. [W. Harrison Wright] - Formatting. [W. Harrison Wright]
- Add ability to backup gists. [W. Harrison Wright] - Add ability to backup gists. [W. Harrison Wright]
0.16.0 (2018-01-22) 0.16.0 (2018-01-22)
------------------- -------------------
- Change option to --all-starred. [W. Harrison Wright] - Change option to --all-starred. [W. Harrison Wright]
- JK don't update documentation. [W. Harrison Wright] - JK don't update documentation. [W. Harrison Wright]
- Put starred clone repoistories under a new option. [W. Harrison - Put starred clone repoistories under a new option. [W. Harrison
Wright] Wright]
- Add comment. [W. Harrison Wright] - Add comment. [W. Harrison Wright]
- Add ability to clone starred repos. [W. Harrison Wright] - Add ability to clone starred repos. [W. Harrison Wright]
0.14.1 (2017-10-11) 0.14.1 (2017-10-11)
------------------- -------------------
- Fix arg not defined error. [Edward Pfremmer] - Fix arg not defined error. [Edward Pfremmer]
Ref: https://github.com/josegonzalez/python-github-backup/issues/69
0.14.0 (2017-10-11) 0.14.0 (2017-10-11)
------------------- -------------------
- Added a check to see if git-lfs is installed when doing an LFS clone. - Added a check to see if git-lfs is installed when doing an LFS clone.
[pieterclaerhout] [pieterclaerhout]
- Added support for LFS clones. [pieterclaerhout] - Added support for LFS clones. [pieterclaerhout]
- Add pypi info to readme. [Albert Wang] - Add pypi info to readme. [Albert Wang]
- Explicitly support python 3 in package description. [Albert Wang] - Explicitly support python 3 in package description. [Albert Wang]
- Add couple examples to help new users. [Yusuf Tran] - Add couple examples to help new users. [Yusuf Tran]
0.13.2 (2017-05-06) 0.13.2 (2017-05-06)
------------------- -------------------
- Fix remotes while updating repository. [Dima Gerasimov] - Fix remotes while updating repository. [Dima Gerasimov]
0.13.1 (2017-04-11) 0.13.1 (2017-04-11)
------------------- -------------------
- Fix error when repository has no updated_at value. [Nicolai Ehemann] - Fix error when repository has no updated_at value. [Nicolai Ehemann]
0.13.0 (2017-04-05) 0.13.0 (2017-04-05)
------------------- -------------------
- Add OS check for OSX specific keychain args. [Martin O'Reilly] - Add OS check for OSX specific keychain args. [Martin O'Reilly]
Keychain arguments are only supported on Mac OSX. Keychain arguments are only supported on Mac OSX.
@@ -122,8 +143,6 @@ Fix
error message rather than a "No password item matching the error message rather than a "No password item matching the
provided name and account could be found in the osx keychain" provided name and account could be found in the osx keychain"
error message error message
- Add support for storing PAT in OSX keychain. [Martin O'Reilly] - Add support for storing PAT in OSX keychain. [Martin O'Reilly]
Added additional optional arguments and README guidance for storing Added additional optional arguments and README guidance for storing
@@ -133,62 +152,48 @@ Fix
0.12.1 (2017-03-27) 0.12.1 (2017-03-27)
------------------- -------------------
- Avoid remote branch name churn. [Chris Adams] - Avoid remote branch name churn. [Chris Adams]
This avoids the backup output having lots of "[new branch]" messages This avoids the backup output having lots of "[new branch]" messages
because removing the old remote name removed all of the existing branch because removing the old remote name removed all of the existing branch
references. references.
- Fix detection of bare git directories. [Andrzej Maczuga] - Fix detection of bare git directories. [Andrzej Maczuga]
0.12.0 (2016-11-22) 0.12.0 (2016-11-22)
------------------- -------------------
Fix Fix
~~~ ~~~
- Properly import version from github_backup package. [Jose Diaz- - Properly import version from github_backup package. [Jose Diaz-
Gonzalez] Gonzalez]
- Support alternate git status output. [Jose Diaz-Gonzalez] - Support alternate git status output. [Jose Diaz-Gonzalez]
Other Other
~~~~~ ~~~~~
- Pep8: E501 line too long (83 > 79 characters) [Jose Diaz-Gonzalez] - Pep8: E501 line too long (83 > 79 characters) [Jose Diaz-Gonzalez]
- Pep8: E128 continuation line under-indented for visual indent. [Jose - Pep8: E128 continuation line under-indented for visual indent. [Jose
Diaz-Gonzalez] Diaz-Gonzalez]
- Support archivization using bare git clones. [Andrzej Maczuga] - Support archivization using bare git clones. [Andrzej Maczuga]
- Fix typo, 3x. [Terrell Russell] - Fix typo, 3x. [Terrell Russell]
0.11.0 (2016-10-26) 0.11.0 (2016-10-26)
------------------- -------------------
- Support --token file:///home/user/token.txt (fixes gh-51) [Björn - Support --token file:///home/user/token.txt (fixes gh-51) [Björn
Dahlgren] Dahlgren]
- Fix some linting. [Albert Wang] - Fix some linting. [Albert Wang]
- Fix byte/string conversion for python 3. [Albert Wang] - Fix byte/string conversion for python 3. [Albert Wang]
- Support python 3. [Albert Wang] - Support python 3. [Albert Wang]
- Encode special characters in password. [Remi Rampin] - Encode special characters in password. [Remi Rampin]
- Don't pretend program name is "Github Backup" [Remi Rampin] - Don't pretend program name is "Github Backup" [Remi Rampin]
- Don't install over insecure connection. [Remi Rampin] - Don't install over insecure connection. [Remi Rampin]
The git:// protocol is unauthenticated and unencrypted, and no longer advertised by GitHub. Using HTTPS shouldn't impact performance. The git:// protocol is unauthenticated and unencrypted, and no longer advertised by GitHub. Using HTTPS shouldn't impact performance.
0.10.3 (2016-08-21) 0.10.3 (2016-08-21)
------------------- -------------------
- Fixes #29. [Jonas Michel] - Fixes #29. [Jonas Michel]
Reporting an error when the user's rate limit is exceeded causes Reporting an error when the user's rate limit is exceeded causes
@@ -196,8 +201,6 @@ Other
sleep. Instead of generating an explicit error we just want to sleep. Instead of generating an explicit error we just want to
inform the user that the script is going to sleep until their rate inform the user that the script is going to sleep until their rate
limit count resets. limit count resets.
- Fixes #29. [Jonas Michel] - Fixes #29. [Jonas Michel]
The errors list was not being cleared out after resuming a backup The errors list was not being cleared out after resuming a backup
@@ -208,14 +211,13 @@ Other
0.10.2 (2016-08-21) 0.10.2 (2016-08-21)
------------------- -------------------
- Add a note regarding git version requirement. [Jose Diaz-Gonzalez] - Add a note regarding git version requirement. [Jose Diaz-Gonzalez]
Closes #37 Closes #37
0.10.0 (2016-08-18) 0.10.0 (2016-08-18)
------------------- -------------------
- Implement incremental updates. [Robert Bradshaw] - Implement incremental updates. [Robert Bradshaw]
Guarded with an --incremental flag. Guarded with an --incremental flag.
@@ -228,12 +230,11 @@ Other
0.9.0 (2016-03-29) 0.9.0 (2016-03-29)
------------------ ------------------
- Fix cloning private repos with basic auth or token. [Kazuki Suda] - Fix cloning private repos with basic auth or token. [Kazuki Suda]
0.8.0 (2016-02-14) 0.8.0 (2016-02-14)
------------------ ------------------
- Don't store issues which are actually pull requests. [Enrico Tröger] - Don't store issues which are actually pull requests. [Enrico Tröger]
This prevents storing pull requests twice since the Github API returns This prevents storing pull requests twice since the Github API returns
@@ -244,43 +245,31 @@ Other
0.7.0 (2016-02-02) 0.7.0 (2016-02-02)
------------------ ------------------
- Softly fail if not able to read hooks. [Albert Wang] - Softly fail if not able to read hooks. [Albert Wang]
- Add note about 2-factor auth. [Albert Wang] - Add note about 2-factor auth. [Albert Wang]
- Make user repository search go through endpoint capable of reading - Make user repository search go through endpoint capable of reading
private repositories. [Albert Wang] private repositories. [Albert Wang]
- Prompt for password if only username given. [Alex Hall] - Prompt for password if only username given. [Alex Hall]
0.6.0 (2015-11-10) 0.6.0 (2015-11-10)
------------------ ------------------
- Force proper remote url. [Jose Diaz-Gonzalez] - Force proper remote url. [Jose Diaz-Gonzalez]
- Improve error handling in case of HTTP errors. [Enrico Tröger] - Improve error handling in case of HTTP errors. [Enrico Tröger]
In case of a HTTP status code 404, the returned 'r' was never assigned. In case of a HTTP status code 404, the returned 'r' was never assigned.
In case of URL errors which are not timeouts, we probably should bail In case of URL errors which are not timeouts, we probably should bail
out. out.
- Add --hooks to also include web hooks into the backup. [Enrico Tröger] - Add --hooks to also include web hooks into the backup. [Enrico Tröger]
- Create the user specified output directory if it does not exist. - Create the user specified output directory if it does not exist.
[Enrico Tröger] [Enrico Tröger]
Fixes #17. Fixes #17.
- Add missing auth argument to _get_response() [Enrico Tröger] - Add missing auth argument to _get_response() [Enrico Tröger]
When running unauthenticated and Github starts rate-limiting the client, When running unauthenticated and Github starts rate-limiting the client,
github-backup crashes because the used auth variable in _get_response() github-backup crashes because the used auth variable in _get_response()
was not available. This change should fix it. was not available. This change should fix it.
- Add repository URL to error message for non-existing repositories. - Add repository URL to error message for non-existing repositories.
[Enrico Tröger] [Enrico Tröger]
@@ -291,40 +280,28 @@ Other
0.5.0 (2015-10-10) 0.5.0 (2015-10-10)
------------------ ------------------
- Add release script. [Jose Diaz-Gonzalez] - Add release script. [Jose Diaz-Gonzalez]
- Refactor to both simplify codepath as well as follow PEP8 standards. - Refactor to both simplify codepath as well as follow PEP8 standards.
[Jose Diaz-Gonzalez] [Jose Diaz-Gonzalez]
- Retry 3 times when the connection times out. [Mathijs Jonker] - Retry 3 times when the connection times out. [Mathijs Jonker]
- Made unicode output defalut. [Kirill Grushetsky] - Made unicode output defalut. [Kirill Grushetsky]
- Import alphabetised. [Kirill Grushetsky] - Import alphabetised. [Kirill Grushetsky]
- Preserve Unicode characters in the output file. [Kirill Grushetsky] - Preserve Unicode characters in the output file. [Kirill Grushetsky]
Added option to preserve Unicode characters in the output file Added option to preserve Unicode characters in the output file
- Josegonzales/python-github-backup#12 Added backup of labels and - Josegonzales/python-github-backup#12 Added backup of labels and
milestones. [aensley] milestones. [aensley]
- Fixed indent. [Mathijs Jonker] - Fixed indent. [Mathijs Jonker]
- Skip unitialized repo's. [mjonker-embed] - Skip unitialized repo's. [mjonker-embed]
These gave me errors which caused mails from crontab. These gave me errors which caused mails from crontab.
- Added prefer-ssh. [mjonker-embed] - Added prefer-ssh. [mjonker-embed]
Was needed for my back-up setup, code includes this but readme wasn't updated Was needed for my back-up setup, code includes this but readme wasn't updated
- Retry API requests which failed due to rate-limiting. [Chris Adams] - Retry API requests which failed due to rate-limiting. [Chris Adams]
This allows operation to continue, albeit at a slower pace, This allows operation to continue, albeit at a slower pace,
if you have enough data to trigger the API rate limits if you have enough data to trigger the API rate limits
- Logging_subprocess: always log when a command fails. [Chris Adams] - Logging_subprocess: always log when a command fails. [Chris Adams]
Previously git clones could fail without any indication Previously git clones could fail without any indication
@@ -334,21 +311,15 @@ Other
Now a non-zero return code will always output a message to Now a non-zero return code will always output a message to
stderr and will display the executed command so it can be stderr and will display the executed command so it can be
rerun for troubleshooting. rerun for troubleshooting.
- Switch to using ssh_url. [Chris Adams] - Switch to using ssh_url. [Chris Adams]
The previous commit used the wrong URL for a private repo. This was The previous commit used the wrong URL for a private repo. This was
masked by the lack of error loging in logging_subprocess (which will be masked by the lack of error loging in logging_subprocess (which will be
in a separate branch) in a separate branch)
- Add an option to prefer checkouts over SSH. [Chris Adams] - Add an option to prefer checkouts over SSH. [Chris Adams]
This is really useful with private repos to avoid being nagged This is really useful with private repos to avoid being nagged
for credentials for every repository for credentials for every repository
- Add pull request support. [Kevin Laude] - Add pull request support. [Kevin Laude]
Back up reporitory pull requests by passing the --include-pulls Back up reporitory pull requests by passing the --include-pulls
@@ -360,8 +331,6 @@ Other
Pull requests are automatically backed up when the --all argument is Pull requests are automatically backed up when the --all argument is
uesd. uesd.
- Add GitHub Enterprise support. [Kevin Laude] - Add GitHub Enterprise support. [Kevin Laude]
Pass the -H or --github-host argument with a GitHub Enterprise hostname Pass the -H or --github-host argument with a GitHub Enterprise hostname
@@ -371,35 +340,21 @@ Other
0.2.0 (2014-09-22) 0.2.0 (2014-09-22)
------------------ ------------------
- Add support for retrieving repositories. Closes #1. [Jose Diaz- - Add support for retrieving repositories. Closes #1. [Jose Diaz-
Gonzalez] Gonzalez]
- Fix PEP8 violations. [Jose Diaz-Gonzalez] - Fix PEP8 violations. [Jose Diaz-Gonzalez]
- Add authorization to header only if specified by user. [Ioannis - Add authorization to header only if specified by user. [Ioannis
Filippidis] Filippidis]
- Fill out readme more. [Jose Diaz-Gonzalez] - Fill out readme more. [Jose Diaz-Gonzalez]
- Fix import. [Jose Diaz-Gonzalez] - Fix import. [Jose Diaz-Gonzalez]
- Properly name readme. [Jose Diaz-Gonzalez] - Properly name readme. [Jose Diaz-Gonzalez]
- Create MANIFEST.in. [Jose Diaz-Gonzalez] - Create MANIFEST.in. [Jose Diaz-Gonzalez]
- Create .gitignore. [Jose Diaz-Gonzalez] - Create .gitignore. [Jose Diaz-Gonzalez]
- Create setup.py. [Jose Diaz-Gonzalez] - Create setup.py. [Jose Diaz-Gonzalez]
- Create requirements.txt. [Jose Diaz-Gonzalez] - Create requirements.txt. [Jose Diaz-Gonzalez]
- Create __init__.py. [Jose Diaz-Gonzalez] - Create __init__.py. [Jose Diaz-Gonzalez]
- Create LICENSE.txt. [Jose Diaz-Gonzalez] - Create LICENSE.txt. [Jose Diaz-Gonzalez]
- Create README.md. [Jose Diaz-Gonzalez] - Create README.md. [Jose Diaz-Gonzalez]
- Create github-backup. [Jose Diaz-Gonzalez] - Create github-backup. [Jose Diaz-Gonzalez]

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
from __future__ import print_function from __future__ import print_function
import socket
import argparse import argparse
import base64 import base64
@@ -40,16 +41,17 @@ FNULL = open(os.devnull, 'w')
def log_error(message): def log_error(message):
if type(message) == str: """
message = [message] Log message (str) or messages (List[str]) to stderr and exit with status 1
"""
for msg in message: log_warning(message)
sys.stderr.write("{0}\n".format(msg))
sys.exit(1) sys.exit(1)
def log_info(message): def log_info(message):
"""
Log message (str) or messages (List[str]) to stdout
"""
if type(message) == str: if type(message) == str:
message = [message] message = [message]
@@ -57,6 +59,17 @@ def log_info(message):
sys.stdout.write("{0}\n".format(msg)) sys.stdout.write("{0}\n".format(msg))
def log_warning(message):
"""
Log message (str) or messages (List[str]) to stderr
"""
if type(message) == str:
message = [message]
for msg in message:
sys.stderr.write("{0}\n".format(msg))
def logging_subprocess(popenargs, def logging_subprocess(popenargs,
logger, logger,
stdout_log_level=logging.DEBUG, stdout_log_level=logging.DEBUG,
@@ -163,11 +176,11 @@ def parse_args():
parser.add_argument('--all-starred', parser.add_argument('--all-starred',
action='store_true', action='store_true',
dest='all_starred', dest='all_starred',
help='include starred repositories in backup') help='include starred repositories in backup [*]')
parser.add_argument('--watched', parser.add_argument('--watched',
action='store_true', action='store_true',
dest='include_watched', dest='include_watched',
help='include watched repositories in backup') help='include JSON output of watched repositories in backup')
parser.add_argument('--followers', parser.add_argument('--followers',
action='store_true', action='store_true',
dest='include_followers', dest='include_followers',
@@ -179,7 +192,7 @@ def parse_args():
parser.add_argument('--all', parser.add_argument('--all',
action='store_true', action='store_true',
dest='include_everything', dest='include_everything',
help='include everything in backup') help='include everything in backup (not including [*])')
parser.add_argument('--issues', parser.add_argument('--issues',
action='store_true', action='store_true',
dest='include_issues', dest='include_issues',
@@ -207,7 +220,7 @@ def parse_args():
parser.add_argument('--pull-details', parser.add_argument('--pull-details',
action='store_true', action='store_true',
dest='include_pull_details', dest='include_pull_details',
help='include more pull request details in backup') help='include more pull request details in backup [*]')
parser.add_argument('--labels', parser.add_argument('--labels',
action='store_true', action='store_true',
dest='include_labels', dest='include_labels',
@@ -231,7 +244,7 @@ def parse_args():
parser.add_argument('--lfs', parser.add_argument('--lfs',
action='store_true', action='store_true',
dest='lfs_clone', dest='lfs_clone',
help='clone LFS repositories (requires Git LFS to be installed, https://git-lfs.github.com)') help='clone LFS repositories (requires Git LFS to be installed, https://git-lfs.github.com) [*]')
parser.add_argument('--wikis', parser.add_argument('--wikis',
action='store_true', action='store_true',
dest='include_wiki', dest='include_wiki',
@@ -239,11 +252,11 @@ def parse_args():
parser.add_argument('--gists', parser.add_argument('--gists',
action='store_true', action='store_true',
dest='include_gists', dest='include_gists',
help='include gists in backup') help='include gists in backup [*]')
parser.add_argument('--starred-gists', parser.add_argument('--starred-gists',
action='store_true', action='store_true',
dest='include_starred_gists', dest='include_starred_gists',
help='include starred gists in backup') help='include starred gists in backup [*]')
parser.add_argument('--skip-existing', parser.add_argument('--skip-existing',
action='store_true', action='store_true',
dest='skip_existing', dest='skip_existing',
@@ -273,11 +286,11 @@ def parse_args():
parser.add_argument('-P', '--private', parser.add_argument('-P', '--private',
action='store_true', action='store_true',
dest='private', dest='private',
help='include private repositories') help='include private repositories [*]')
parser.add_argument('-F', '--fork', parser.add_argument('-F', '--fork',
action='store_true', action='store_true',
dest='fork', dest='fork',
help='include forked repositories') help='include forked repositories [*]')
parser.add_argument('--prefer-ssh', parser.add_argument('--prefer-ssh',
action='store_true', action='store_true',
help='Clone repositories using SSH instead of HTTPS') help='Clone repositories using SSH instead of HTTPS')
@@ -392,6 +405,16 @@ def retrieve_data(args, template, query_args=None, single_request=False):
status_code = int(r.getcode()) status_code = int(r.getcode())
retries = 0
while retries < 3 and status_code == 502:
print('API request returned HTTP 502: Bad Gateway. Retrying in 5 seconds')
retries += 1
time.sleep(5)
request = _construct_request(per_page, page, query_args, template, auth) # noqa
r, errors = _get_response(request, auth, template)
status_code = int(r.getcode())
if status_code != 200: if status_code != 200:
template = 'API request returned HTTP {0}: {1}' template = 'API request returned HTTP {0}: {1}'
errors.append(template.format(status_code, r.reason)) errors.append(template.format(status_code, r.reason))
@@ -433,7 +456,13 @@ def _get_response(request, auth, template):
except HTTPError as exc: except HTTPError as exc:
errors, should_continue = _request_http_error(exc, auth, errors) # noqa errors, should_continue = _request_http_error(exc, auth, errors) # noqa
r = exc r = exc
except URLError: except URLError as e:
log_warning(e.reason)
should_continue = _request_url_error(template, retry_timeout)
if not should_continue:
raise
except socket.error as e:
log_warning(e.strerror)
should_continue = _request_url_error(template, retry_timeout) should_continue = _request_url_error(template, retry_timeout)
if not should_continue: if not should_continue:
raise raise
@@ -513,7 +542,6 @@ def check_git_lfs_install():
exit_code = subprocess.call(['git', 'lfs', 'version']) exit_code = subprocess.call(['git', 'lfs', 'version'])
if exit_code != 0: if exit_code != 0:
log_error('The argument --lfs requires you to have Git LFS installed.\nYou can get it from https://git-lfs.github.com.') log_error('The argument --lfs requires you to have Git LFS installed.\nYou can get it from https://git-lfs.github.com.')
sys.exit(1)
def retrieve_repositories(args, authenticated_user): def retrieve_repositories(args, authenticated_user):
@@ -524,8 +552,8 @@ def retrieve_repositories(args, authenticated_user):
template = 'https://{0}/user/repos'.format( template = 'https://{0}/user/repos'.format(
get_github_api_host(args)) get_github_api_host(args))
else: else:
if args.private: if args.private and not args.organization:
log_error('Authenticated user is different from user being backed up, thus private repositories cannot be accessed') log_warning('Authenticated user is different from user being backed up, thus private repositories cannot be accessed')
template = 'https://{0}/users/{1}/repos'.format( template = 'https://{0}/users/{1}/repos'.format(
get_github_api_host(args), get_github_api_host(args),
args.user) args.user)

View File

@@ -1 +1 @@
__version__ = '0.21.0' __version__ = '0.23.0'