github-backup 0.50.3__tar.gz → 0.51.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {github_backup-0.50.3 → github_backup-0.51.1}/CHANGES.rst +453 -1
  2. github_backup-0.50.3/README → github_backup-0.51.1/PKG-INFO +59 -3
  3. github_backup-0.50.3/github_backup.egg-info/PKG-INFO → github_backup-0.51.1/README +29 -31
  4. github_backup-0.50.3/PKG-INFO → github_backup-0.51.1/README.rst +29 -31
  5. github_backup-0.51.1/github_backup/__init__.py +1 -0
  6. {github_backup-0.50.3 → github_backup-0.51.1}/github_backup/github_backup.py +596 -1
  7. github_backup-0.50.3/README.rst → github_backup-0.51.1/github_backup.egg-info/PKG-INFO +59 -3
  8. {github_backup-0.50.3 → github_backup-0.51.1}/github_backup.egg-info/SOURCES.txt +2 -1
  9. {github_backup-0.50.3 → github_backup-0.51.1}/release-requirements.txt +14 -13
  10. {github_backup-0.50.3 → github_backup-0.51.1}/setup.py +3 -2
  11. github_backup-0.51.1/tests/test_attachments.py +353 -0
  12. github_backup-0.50.3/github_backup/__init__.py +0 -1
  13. {github_backup-0.50.3 → github_backup-0.51.1}/LICENSE.txt +0 -0
  14. {github_backup-0.50.3 → github_backup-0.51.1}/MANIFEST.in +0 -0
  15. {github_backup-0.50.3 → github_backup-0.51.1}/bin/github-backup +0 -0
  16. {github_backup-0.50.3 → github_backup-0.51.1}/github_backup.egg-info/dependency_links.txt +0 -0
  17. {github_backup-0.50.3 → github_backup-0.51.1}/github_backup.egg-info/top_level.txt +0 -0
  18. {github_backup-0.50.3 → github_backup-0.51.1}/github_backup.egg-info/zip-safe +0 -0
  19. {github_backup-0.50.3 → github_backup-0.51.1}/requirements.txt +0 -0
  20. {github_backup-0.50.3 → github_backup-0.51.1}/setup.cfg +0 -0
@@ -1,9 +1,461 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- 0.50.3 (2025-08-08)
4
+ 0.51.1 (2025-11-16)
5
5
  -------------------
6
6
  ------------------------
7
+
8
+ Fix
9
+ ~~~
10
+ - Prevent duplicate attachment downloads. [Rodos]
11
+
12
+ Fixes bug where attachments were downloaded multiple times with
13
+ incremented filenames (file.mov, file_1.mov, file_2.mov) when
14
+ running backups without --skip-existing flag.
15
+
16
+ I should not have used the --skip-existing flag for attachments,
17
+ it did not do what I thought it did.
18
+
19
+ The correct approach is to always use the manifest to guide what
20
+ has already been downloaded and what now needs to be done.
21
+
22
+ Other
23
+ ~~~~~
24
+ - Chore(deps): bump certifi in the python-packages group.
25
+ [dependabot[bot]]
26
+
27
+ Bumps the python-packages group with 1 update: [certifi](https://github.com/certifi/python-certifi).
28
+
29
+
30
+ Updates `certifi` from 2025.10.5 to 2025.11.12
31
+ - [Commits](https://github.com/certifi/python-certifi/compare/2025.10.05...2025.11.12)
32
+
33
+ ---
34
+ updated-dependencies:
35
+ - dependency-name: certifi
36
+ dependency-version: 2025.11.12
37
+ dependency-type: direct:production
38
+ update-type: version-update:semver-minor
39
+ dependency-group: python-packages
40
+ ...
41
+ - Test: Add pytest infrastructure and attachment tests. [Rodos]
42
+
43
+ In making my last fix to attachments, I found it challenging not
44
+ having tests to ensure there was no regression.
45
+
46
+ Added pytest with minimal setup and isolated configuration. Created
47
+ a separate test workflow to keep tests isolated from linting.
48
+
49
+ Tests cover the key elements of the attachment logic:
50
+ - URL extraction from issue bodies
51
+ - Filename extraction from different URL types
52
+ - Filename collision resolution
53
+ - Manifest duplicate prevention
54
+ - Chore(deps): bump black in the python-packages group.
55
+ [dependabot[bot]]
56
+
57
+ Bumps the python-packages group with 1 update: [black](https://github.com/psf/black).
58
+
59
+
60
+ Updates `black` from 25.9.0 to 25.11.0
61
+ - [Release notes](https://github.com/psf/black/releases)
62
+ - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
63
+ - [Commits](https://github.com/psf/black/compare/25.9.0...25.11.0)
64
+
65
+ ---
66
+ updated-dependencies:
67
+ - dependency-name: black
68
+ dependency-version: 25.11.0
69
+ dependency-type: direct:production
70
+ update-type: version-update:semver-minor
71
+ dependency-group: python-packages
72
+ ...
73
+ - Chore(deps): bump docutils in the python-packages group.
74
+ [dependabot[bot]]
75
+
76
+ Bumps the python-packages group with 1 update: [docutils](https://github.com/rtfd/recommonmark).
77
+
78
+
79
+ Updates `docutils` from 0.22.2 to 0.22.3
80
+ - [Changelog](https://github.com/readthedocs/recommonmark/blob/master/CHANGELOG.md)
81
+ - [Commits](https://github.com/rtfd/recommonmark/commits)
82
+
83
+ ---
84
+ updated-dependencies:
85
+ - dependency-name: docutils
86
+ dependency-version: 0.22.3
87
+ dependency-type: direct:production
88
+ update-type: version-update:semver-patch
89
+ dependency-group: python-packages
90
+ ...
91
+
92
+
93
+ 0.51.0 (2025-11-06)
94
+ -------------------
95
+
96
+ Fix
97
+ ~~~
98
+ - Remove Python 3.8 and 3.9 from CI matrix. [Rodos]
99
+
100
+ 3.8 and 3.9 are failing because the pinned dependencies don't support them:
101
+ - autopep8==2.3.2 needs Python 3.9+
102
+ - bleach==6.3.0 needs Python 3.10+
103
+
104
+ Both are EOL now anyway (3.8 in Oct 2024, 3.9 in Oct 2025).
105
+
106
+ Just fixing CI to test 3.10-3.14 for now. Will do a separate PR to formally
107
+ drop 3.8/3.9 support with python_requires and README updates.
108
+
109
+ Other
110
+ ~~~~~
111
+ - Refactor: Add atomic writes for attachment files and manifests.
112
+ [Rodos]
113
+ - Feat: Add attachment download support for issues and pull requests.
114
+ [Rodos]
115
+
116
+ Adds new --attachments flag that downloads user-uploaded files from
117
+ issue and PR bodies and comments. Key features:
118
+
119
+ - Determines attachment URLs
120
+ - Tracks downloads in manifest.json with metadata
121
+ - Supports --skip-existing to avoid re-downloading
122
+ - Handles filename collisions with counter suffix
123
+ - Smart retry logic for transient vs permanent failures
124
+ - Uses Content-Disposition for correct file extensions
125
+ - Feat: Drop support for Python 3.8 and 3.9 (EOL) [Rodos]
126
+
127
+ Both Python 3.8 and 3.9 have reached end-of-life:
128
+ - Python 3.8: EOL October 7, 2024
129
+ - Python 3.9: EOL October 31, 2025
130
+
131
+ Changes:
132
+ - Add python_requires=">=3.10" to setup.py
133
+ - Remove Python 3.8 and 3.9 from classifiers
134
+ - Add Python 3.13 and 3.14 to classifiers
135
+ - Update README to document Python 3.10+ requirement
136
+ - Feat: Enforce Python 3.8+ requirement and add multi-version CI
137
+ testing. [Rodos]
138
+
139
+ - Add python_requires=">=3.8" to setup.py to enforce minimum version at install time
140
+ - Update README to explicitly document Python 3.8+ requirement
141
+ - Add CI matrix to test lint/build on Python 3.8-3.14 (7 versions)
142
+ - Aligns with actual usage patterns (~99% of downloads on Python 3.8+)
143
+ - Prevents future PRs from inadvertently using incompatible syntax
144
+
145
+ This change protects users by preventing installation on unsupported Python
146
+ versions and ensures contributors can see version requirements clearly.
147
+ - Chore(deps): bump bleach in the python-packages group.
148
+ [dependabot[bot]]
149
+
150
+ Bumps the python-packages group with 1 update: [bleach](https://github.com/mozilla/bleach).
151
+
152
+
153
+ Updates `bleach` from 6.2.0 to 6.3.0
154
+ - [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
155
+ - [Commits](https://github.com/mozilla/bleach/compare/v6.2.0...v6.3.0)
156
+
157
+ ---
158
+ updated-dependencies:
159
+ - dependency-name: bleach
160
+ dependency-version: 6.3.0
161
+ dependency-type: direct:production
162
+ update-type: version-update:semver-minor
163
+ dependency-group: python-packages
164
+ ...
165
+ - Chore(deps): bump charset-normalizer in the python-packages group.
166
+ [dependabot[bot]]
167
+
168
+ Bumps the python-packages group with 1 update: [charset-normalizer](https://github.com/jawah/charset_normalizer).
169
+
170
+
171
+ Updates `charset-normalizer` from 3.4.3 to 3.4.4
172
+ - [Release notes](https://github.com/jawah/charset_normalizer/releases)
173
+ - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md)
174
+ - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.3...3.4.4)
175
+
176
+ ---
177
+ updated-dependencies:
178
+ - dependency-name: charset-normalizer
179
+ dependency-version: 3.4.4
180
+ dependency-type: direct:production
181
+ update-type: version-update:semver-patch
182
+ dependency-group: python-packages
183
+ ...
184
+ - Chore(deps): bump idna from 3.10 to 3.11 in the python-packages group.
185
+ [dependabot[bot]]
186
+
187
+ Bumps the python-packages group with 1 update: [idna](https://github.com/kjd/idna).
188
+
189
+
190
+ Updates `idna` from 3.10 to 3.11
191
+ - [Release notes](https://github.com/kjd/idna/releases)
192
+ - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst)
193
+ - [Commits](https://github.com/kjd/idna/compare/v3.10...v3.11)
194
+
195
+ ---
196
+ updated-dependencies:
197
+ - dependency-name: idna
198
+ dependency-version: '3.11'
199
+ dependency-type: direct:production
200
+ update-type: version-update:semver-minor
201
+ dependency-group: python-packages
202
+ ...
203
+ - Chore(deps): bump the python-packages group across 1 directory with 2
204
+ updates. [dependabot[bot]]
205
+
206
+ Bumps the python-packages group with 2 updates in the / directory: [platformdirs](https://github.com/tox-dev/platformdirs) and [rich](https://github.com/Textualize/rich).
207
+
208
+
209
+ Updates `platformdirs` from 4.4.0 to 4.5.0
210
+ - [Release notes](https://github.com/tox-dev/platformdirs/releases)
211
+ - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/CHANGES.rst)
212
+ - [Commits](https://github.com/tox-dev/platformdirs/compare/4.4.0...4.5.0)
213
+
214
+ Updates `rich` from 14.1.0 to 14.2.0
215
+ - [Release notes](https://github.com/Textualize/rich/releases)
216
+ - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
217
+ - [Commits](https://github.com/Textualize/rich/compare/v14.1.0...v14.2.0)
218
+
219
+ ---
220
+ updated-dependencies:
221
+ - dependency-name: platformdirs
222
+ dependency-version: 4.5.0
223
+ dependency-type: direct:production
224
+ update-type: version-update:semver-minor
225
+ dependency-group: python-packages
226
+ - dependency-name: rich
227
+ dependency-version: 14.2.0
228
+ dependency-type: direct:production
229
+ update-type: version-update:semver-minor
230
+ dependency-group: python-packages
231
+ ...
232
+ - Chore(deps): bump the python-packages group with 3 updates.
233
+ [dependabot[bot]]
234
+
235
+ Bumps the python-packages group with 3 updates: [certifi](https://github.com/certifi/python-certifi), [click](https://github.com/pallets/click) and [markdown-it-py](https://github.com/executablebooks/markdown-it-py).
236
+
237
+
238
+ Updates `certifi` from 2025.8.3 to 2025.10.5
239
+ - [Commits](https://github.com/certifi/python-certifi/compare/2025.08.03...2025.10.05)
240
+
241
+ Updates `click` from 8.1.8 to 8.3.0
242
+ - [Release notes](https://github.com/pallets/click/releases)
243
+ - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
244
+ - [Commits](https://github.com/pallets/click/compare/8.1.8...8.3.0)
245
+
246
+ Updates `markdown-it-py` from 3.0.0 to 4.0.0
247
+ - [Release notes](https://github.com/executablebooks/markdown-it-py/releases)
248
+ - [Changelog](https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md)
249
+ - [Commits](https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0)
250
+
251
+ ---
252
+ updated-dependencies:
253
+ - dependency-name: certifi
254
+ dependency-version: 2025.10.5
255
+ dependency-type: direct:production
256
+ update-type: version-update:semver-minor
257
+ dependency-group: python-packages
258
+ - dependency-name: click
259
+ dependency-version: 8.3.0
260
+ dependency-type: direct:production
261
+ update-type: version-update:semver-minor
262
+ dependency-group: python-packages
263
+ - dependency-name: markdown-it-py
264
+ dependency-version: 4.0.0
265
+ dependency-type: direct:production
266
+ update-type: version-update:semver-major
267
+ dependency-group: python-packages
268
+ ...
269
+ - Chore(deps): bump docutils in the python-packages group.
270
+ [dependabot[bot]]
271
+
272
+ Bumps the python-packages group with 1 update: [docutils](https://github.com/rtfd/recommonmark).
273
+
274
+
275
+ Updates `docutils` from 0.22.1 to 0.22.2
276
+ - [Changelog](https://github.com/readthedocs/recommonmark/blob/master/CHANGELOG.md)
277
+ - [Commits](https://github.com/rtfd/recommonmark/commits)
278
+
279
+ ---
280
+ updated-dependencies:
281
+ - dependency-name: docutils
282
+ dependency-version: 0.22.2
283
+ dependency-type: direct:production
284
+ update-type: version-update:semver-patch
285
+ dependency-group: python-packages
286
+ ...
287
+ - Chore(deps): bump the python-packages group across 1 directory with 2
288
+ updates. [dependabot[bot]]
289
+
290
+ Bumps the python-packages group with 2 updates in the / directory: [black](https://github.com/psf/black) and [docutils](https://github.com/rtfd/recommonmark).
291
+
292
+
293
+ Updates `black` from 25.1.0 to 25.9.0
294
+ - [Release notes](https://github.com/psf/black/releases)
295
+ - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
296
+ - [Commits](https://github.com/psf/black/compare/25.1.0...25.9.0)
297
+
298
+ Updates `docutils` from 0.22 to 0.22.1
299
+ - [Changelog](https://github.com/readthedocs/recommonmark/blob/master/CHANGELOG.md)
300
+ - [Commits](https://github.com/rtfd/recommonmark/commits)
301
+
302
+ ---
303
+ updated-dependencies:
304
+ - dependency-name: black
305
+ dependency-version: 25.9.0
306
+ dependency-type: direct:production
307
+ update-type: version-update:semver-minor
308
+ dependency-group: python-packages
309
+ - dependency-name: docutils
310
+ dependency-version: 0.22.1
311
+ dependency-type: direct:production
312
+ update-type: version-update:semver-patch
313
+ dependency-group: python-packages
314
+ ...
315
+ - Delete .github/ISSUE_TEMPLATE.md. [Jose Diaz-Gonzalez]
316
+ - Create feature.yaml. [Jose Diaz-Gonzalez]
317
+ - Delete .github/ISSUE_TEMPLATE/bug_report.md. [Jose Diaz-Gonzalez]
318
+ - Rename bug.md to bug.yaml. [Jose Diaz-Gonzalez]
319
+ - Chore: create bug template. [Jose Diaz-Gonzalez]
320
+ - Chore: Rename PULL_REQUEST.md to .github/PULL_REQUEST.md. [Jose Diaz-
321
+ Gonzalez]
322
+ - Chore: Rename ISSUE_TEMPLATE.md to .github/ISSUE_TEMPLATE.md. [Jose
323
+ Diaz-Gonzalez]
324
+ - Chore(deps): bump actions/setup-python from 5 to 6. [dependabot[bot]]
325
+
326
+ Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
327
+ - [Release notes](https://github.com/actions/setup-python/releases)
328
+ - [Commits](https://github.com/actions/setup-python/compare/v5...v6)
329
+
330
+ ---
331
+ updated-dependencies:
332
+ - dependency-name: actions/setup-python
333
+ dependency-version: '6'
334
+ dependency-type: direct:production
335
+ update-type: version-update:semver-major
336
+ ...
337
+ - Chore(deps): bump twine from 6.1.0 to 6.2.0 in the python-packages
338
+ group. [dependabot[bot]]
339
+
340
+ Bumps the python-packages group with 1 update: [twine](https://github.com/pypa/twine).
341
+
342
+
343
+ Updates `twine` from 6.1.0 to 6.2.0
344
+ - [Release notes](https://github.com/pypa/twine/releases)
345
+ - [Changelog](https://github.com/pypa/twine/blob/main/docs/changelog.rst)
346
+ - [Commits](https://github.com/pypa/twine/compare/6.1.0...6.2.0)
347
+
348
+ ---
349
+ updated-dependencies:
350
+ - dependency-name: twine
351
+ dependency-version: 6.2.0
352
+ dependency-type: direct:production
353
+ update-type: version-update:semver-minor
354
+ dependency-group: python-packages
355
+ ...
356
+ - Chore(deps): bump more-itertools in the python-packages group.
357
+ [dependabot[bot]]
358
+
359
+ Bumps the python-packages group with 1 update: [more-itertools](https://github.com/more-itertools/more-itertools).
360
+
361
+
362
+ Updates `more-itertools` from 10.7.0 to 10.8.0
363
+ - [Release notes](https://github.com/more-itertools/more-itertools/releases)
364
+ - [Commits](https://github.com/more-itertools/more-itertools/compare/v10.7.0...v10.8.0)
365
+
366
+ ---
367
+ updated-dependencies:
368
+ - dependency-name: more-itertools
369
+ dependency-version: 10.8.0
370
+ dependency-type: direct:production
371
+ update-type: version-update:semver-minor
372
+ dependency-group: python-packages
373
+ ...
374
+ - Chore(deps): bump platformdirs in the python-packages group.
375
+ [dependabot[bot]]
376
+
377
+ Bumps the python-packages group with 1 update: [platformdirs](https://github.com/tox-dev/platformdirs).
378
+
379
+
380
+ Updates `platformdirs` from 4.3.8 to 4.4.0
381
+ - [Release notes](https://github.com/tox-dev/platformdirs/releases)
382
+ - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/CHANGES.rst)
383
+ - [Commits](https://github.com/tox-dev/platformdirs/compare/4.3.8...4.4.0)
384
+
385
+ ---
386
+ updated-dependencies:
387
+ - dependency-name: platformdirs
388
+ dependency-version: 4.4.0
389
+ dependency-type: direct:production
390
+ update-type: version-update:semver-minor
391
+ dependency-group: python-packages
392
+ ...
393
+ - Chore(deps): bump actions/checkout from 4 to 5. [dependabot[bot]]
394
+
395
+ Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
396
+ - [Release notes](https://github.com/actions/checkout/releases)
397
+ - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
398
+ - [Commits](https://github.com/actions/checkout/compare/v4...v5)
399
+
400
+ ---
401
+ updated-dependencies:
402
+ - dependency-name: actions/checkout
403
+ dependency-version: '5'
404
+ dependency-type: direct:production
405
+ update-type: version-update:semver-major
406
+ ...
407
+ - Chore(deps): bump requests in the python-packages group.
408
+ [dependabot[bot]]
409
+
410
+ Bumps the python-packages group with 1 update: [requests](https://github.com/psf/requests).
411
+
412
+
413
+ Updates `requests` from 2.32.4 to 2.32.5
414
+ - [Release notes](https://github.com/psf/requests/releases)
415
+ - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
416
+ - [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.32.5)
417
+
418
+ ---
419
+ updated-dependencies:
420
+ - dependency-name: requests
421
+ dependency-version: 2.32.5
422
+ dependency-type: direct:production
423
+ update-type: version-update:semver-patch
424
+ dependency-group: python-packages
425
+ ...
426
+ - Chore: update Dockerfile to use Python 3.12 and improve dependency
427
+ installation. [Mateusz Hajder]
428
+ - Chore(deps): bump the python-packages group with 2 updates.
429
+ [dependabot[bot]]
430
+
431
+ Bumps the python-packages group with 2 updates: [certifi](https://github.com/certifi/python-certifi) and [charset-normalizer](https://github.com/jawah/charset_normalizer).
432
+
433
+
434
+ Updates `certifi` from 2025.7.14 to 2025.8.3
435
+ - [Commits](https://github.com/certifi/python-certifi/compare/2025.07.14...2025.08.03)
436
+
437
+ Updates `charset-normalizer` from 3.4.2 to 3.4.3
438
+ - [Release notes](https://github.com/jawah/charset_normalizer/releases)
439
+ - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md)
440
+ - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.2...3.4.3)
441
+
442
+ ---
443
+ updated-dependencies:
444
+ - dependency-name: certifi
445
+ dependency-version: 2025.8.3
446
+ dependency-type: direct:production
447
+ update-type: version-update:semver-minor
448
+ dependency-group: python-packages
449
+ - dependency-name: charset-normalizer
450
+ dependency-version: 3.4.3
451
+ dependency-type: direct:production
452
+ update-type: version-update:semver-patch
453
+ dependency-group: python-packages
454
+ ...
455
+
456
+
457
+ 0.50.3 (2025-08-08)
458
+ -------------------
7
459
  - Revert "Add conditional check for git checkout in development path"
8
460
  [Eric Wheeler]
9
461
 
@@ -1,3 +1,33 @@
1
+ Metadata-Version: 2.4
2
+ Name: github-backup
3
+ Version: 0.51.1
4
+ Summary: backup a github user or organization
5
+ Home-page: http://github.com/josegonzalez/python-github-backup
6
+ Author: Jose Diaz-Gonzalez
7
+ Author-email: github-backup@josediazgonzalez.com
8
+ License: MIT
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Topic :: System :: Archiving :: Backup
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Requires-Python: >=3.10
18
+ Description-Content-Type: text/x-rst
19
+ License-File: LICENSE.txt
20
+ Dynamic: author
21
+ Dynamic: author-email
22
+ Dynamic: classifier
23
+ Dynamic: description
24
+ Dynamic: description-content-type
25
+ Dynamic: home-page
26
+ Dynamic: license
27
+ Dynamic: license-file
28
+ Dynamic: requires-python
29
+ Dynamic: summary
30
+
1
31
  =============
2
32
  github-backup
3
33
  =============
@@ -9,8 +39,8 @@ The package can be used to backup an *entire* `Github <https://github.com/>`_ or
9
39
  Requirements
10
40
  ============
11
41
 
42
+ - Python 3.10 or higher
12
43
  - GIT 1.9+
13
- - Python
14
44
 
15
45
  Installation
16
46
  ============
@@ -50,7 +80,7 @@ CLI Help output::
50
80
  [--keychain-name OSX_KEYCHAIN_ITEM_NAME]
51
81
  [--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
52
82
  [--releases] [--latest-releases NUMBER_OF_LATEST_RELEASES]
53
- [--skip-prerelease] [--assets]
83
+ [--skip-prerelease] [--assets] [--attachments]
54
84
  [--exclude [REPOSITORY [REPOSITORY ...]]
55
85
  [--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
56
86
  USER
@@ -133,6 +163,9 @@ CLI Help output::
133
163
  --skip-prerelease skip prerelease and draft versions; only applies if including releases
134
164
  --assets include assets alongside release information; only
135
165
  applies if including releases
166
+ --attachments download user-attachments from issues and pull requests
167
+ to issues/attachments/{issue_number}/ and
168
+ pulls/attachments/{pull_number}/ directories
136
169
  --exclude [REPOSITORY [REPOSITORY ...]]
137
170
  names of repositories to exclude from backup.
138
171
  --throttle-limit THROTTLE_LIMIT
@@ -213,6 +246,29 @@ When you use the ``--lfs`` option, you will need to make sure you have Git LFS i
213
246
  Instructions on how to do this can be found on https://git-lfs.github.com.
214
247
 
215
248
 
249
+ About Attachments
250
+ -----------------
251
+
252
+ When you use the ``--attachments`` option with ``--issues`` or ``--pulls``, the tool will download user-uploaded attachments (images, videos, documents, etc.) from issue and pull request descriptions and comments. In some circumstances attachments contain valuable data related to the topic, and without their backup important information or context might be lost inadvertently.
253
+
254
+ Attachments are saved to ``issues/attachments/{issue_number}/`` and ``pulls/attachments/{pull_number}/`` directories, where ``{issue_number}`` is the GitHub issue number (e.g., issue #123 saves to ``issues/attachments/123/``). Each attachment directory contains:
255
+
256
+ - The downloaded attachment files (named by their GitHub identifier with appropriate file extensions)
257
+ - If multiple attachments have the same filename, conflicts are resolved with numeric suffixes (e.g., ``report.pdf``, ``report_1.pdf``, ``report_2.pdf``)
258
+ - A ``manifest.json`` file documenting all downloads, including URLs, file metadata, and download status
259
+
260
+ The tool automatically extracts file extensions from HTTP headers to ensure files can be more easily opened by your operating system.
261
+
262
+ **Supported URL formats:**
263
+
264
+ - Modern: ``github.com/user-attachments/{assets,files}/*``
265
+ - Legacy: ``user-images.githubusercontent.com/*`` and ``private-user-images.githubusercontent.com/*``
266
+ - Repo files: ``github.com/{owner}/{repo}/files/*`` (filtered to current repository)
267
+ - Repo assets: ``github.com/{owner}/{repo}/assets/*`` (filtered to current repository)
268
+
269
+ **Repository filtering** for repo files/assets handles renamed and transferred repositories gracefully. URLs are included if they either match the current repository name directly, or redirect to it (e.g., ``willmcgugan/rich`` redirects to ``Textualize/rich`` after transfer).
270
+
271
+
216
272
  Run in Docker container
217
273
  -----------------------
218
274
 
@@ -303,7 +359,7 @@ Quietly and incrementally backup useful Github user data (public and private rep
303
359
  export FINE_ACCESS_TOKEN=SOME-GITHUB-TOKEN
304
360
  GH_USER=YOUR-GITHUB-USER
305
361
 
306
- github-backup -f $FINE_ACCESS_TOKEN --prefer-ssh -o ~/github-backup/ -l error -P -i --all-starred --starred --watched --followers --following --issues --issue-comments --issue-events --pulls --pull-comments --pull-commits --labels --milestones --repositories --wikis --releases --assets --pull-details --gists --starred-gists $GH_USER
362
+ github-backup -f $FINE_ACCESS_TOKEN --prefer-ssh -o ~/github-backup/ -l error -P -i --all-starred --starred --watched --followers --following --issues --issue-comments --issue-events --pulls --pull-comments --pull-commits --labels --milestones --repositories --wikis --releases --assets --attachments --pull-details --gists --starred-gists $GH_USER
307
363
 
308
364
  Debug an error/block or incomplete backup into a temporary directory. Omit "incremental" to fill a previous incomplete backup. ::
309
365
 
@@ -1,31 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: github-backup
3
- Version: 0.50.3
4
- Summary: backup a github user or organization
5
- Home-page: http://github.com/josegonzalez/python-github-backup
6
- Author: Jose Diaz-Gonzalez
7
- Author-email: github-backup@josediazgonzalez.com
8
- License: MIT
9
- Classifier: Development Status :: 5 - Production/Stable
10
- Classifier: Topic :: System :: Archiving :: Backup
11
- Classifier: License :: OSI Approved :: MIT License
12
- Classifier: Programming Language :: Python :: 3.8
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Description-Content-Type: text/x-rst
18
- License-File: LICENSE.txt
19
- Dynamic: author
20
- Dynamic: author-email
21
- Dynamic: classifier
22
- Dynamic: description
23
- Dynamic: description-content-type
24
- Dynamic: home-page
25
- Dynamic: license
26
- Dynamic: license-file
27
- Dynamic: summary
28
-
29
1
  =============
30
2
  github-backup
31
3
  =============
@@ -37,8 +9,8 @@ The package can be used to backup an *entire* `Github <https://github.com/>`_ or
37
9
  Requirements
38
10
  ============
39
11
 
12
+ - Python 3.10 or higher
40
13
  - GIT 1.9+
41
- - Python
42
14
 
43
15
  Installation
44
16
  ============
@@ -78,7 +50,7 @@ CLI Help output::
78
50
  [--keychain-name OSX_KEYCHAIN_ITEM_NAME]
79
51
  [--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
80
52
  [--releases] [--latest-releases NUMBER_OF_LATEST_RELEASES]
81
- [--skip-prerelease] [--assets]
53
+ [--skip-prerelease] [--assets] [--attachments]
82
54
  [--exclude [REPOSITORY [REPOSITORY ...]]
83
55
  [--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
84
56
  USER
@@ -161,6 +133,9 @@ CLI Help output::
161
133
  --skip-prerelease skip prerelease and draft versions; only applies if including releases
162
134
  --assets include assets alongside release information; only
163
135
  applies if including releases
136
+ --attachments download user-attachments from issues and pull requests
137
+ to issues/attachments/{issue_number}/ and
138
+ pulls/attachments/{pull_number}/ directories
164
139
  --exclude [REPOSITORY [REPOSITORY ...]]
165
140
  names of repositories to exclude from backup.
166
141
  --throttle-limit THROTTLE_LIMIT
@@ -241,6 +216,29 @@ When you use the ``--lfs`` option, you will need to make sure you have Git LFS i
241
216
  Instructions on how to do this can be found on https://git-lfs.github.com.
242
217
 
243
218
 
219
+ About Attachments
220
+ -----------------
221
+
222
+ When you use the ``--attachments`` option with ``--issues`` or ``--pulls``, the tool will download user-uploaded attachments (images, videos, documents, etc.) from issue and pull request descriptions and comments. In some circumstances attachments contain valuable data related to the topic, and without their backup important information or context might be lost inadvertently.
223
+
224
+ Attachments are saved to ``issues/attachments/{issue_number}/`` and ``pulls/attachments/{pull_number}/`` directories, where ``{issue_number}`` is the GitHub issue number (e.g., issue #123 saves to ``issues/attachments/123/``). Each attachment directory contains:
225
+
226
+ - The downloaded attachment files (named by their GitHub identifier with appropriate file extensions)
227
+ - If multiple attachments have the same filename, conflicts are resolved with numeric suffixes (e.g., ``report.pdf``, ``report_1.pdf``, ``report_2.pdf``)
228
+ - A ``manifest.json`` file documenting all downloads, including URLs, file metadata, and download status
229
+
230
+ The tool automatically extracts file extensions from HTTP headers to ensure files can be more easily opened by your operating system.
231
+
232
+ **Supported URL formats:**
233
+
234
+ - Modern: ``github.com/user-attachments/{assets,files}/*``
235
+ - Legacy: ``user-images.githubusercontent.com/*`` and ``private-user-images.githubusercontent.com/*``
236
+ - Repo files: ``github.com/{owner}/{repo}/files/*`` (filtered to current repository)
237
+ - Repo assets: ``github.com/{owner}/{repo}/assets/*`` (filtered to current repository)
238
+
239
+ **Repository filtering** for repo files/assets handles renamed and transferred repositories gracefully. URLs are included if they either match the current repository name directly, or redirect to it (e.g., ``willmcgugan/rich`` redirects to ``Textualize/rich`` after transfer).
240
+
241
+
244
242
  Run in Docker container
245
243
  -----------------------
246
244
 
@@ -331,7 +329,7 @@ Quietly and incrementally backup useful Github user data (public and private rep
331
329
  export FINE_ACCESS_TOKEN=SOME-GITHUB-TOKEN
332
330
  GH_USER=YOUR-GITHUB-USER
333
331
 
334
- github-backup -f $FINE_ACCESS_TOKEN --prefer-ssh -o ~/github-backup/ -l error -P -i --all-starred --starred --watched --followers --following --issues --issue-comments --issue-events --pulls --pull-comments --pull-commits --labels --milestones --repositories --wikis --releases --assets --pull-details --gists --starred-gists $GH_USER
332
+ github-backup -f $FINE_ACCESS_TOKEN --prefer-ssh -o ~/github-backup/ -l error -P -i --all-starred --starred --watched --followers --following --issues --issue-comments --issue-events --pulls --pull-comments --pull-commits --labels --milestones --repositories --wikis --releases --assets --attachments --pull-details --gists --starred-gists $GH_USER
335
333
 
336
334
  Debug an error/block or incomplete backup into a temporary directory. Omit "incremental" to fill a previous incomplete backup. ::
337
335