duplicity 3.2.0__tar.gz → 3.2.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 (200) hide show
  1. {duplicity-3.2.0 → duplicity-3.2.1}/CHANGELOG.md +165 -7
  2. duplicity-3.2.1/PKG-INFO +100 -0
  3. duplicity-3.2.1/README-ARCH.md +62 -0
  4. duplicity-3.2.1/README-INSTALL.md +158 -0
  5. duplicity-3.2.1/README-LOG.md +33 -0
  6. duplicity-3.2.1/README-RELEASE.md +66 -0
  7. {duplicity-3.2.0 → duplicity-3.2.1}/README-REPO.md +1 -1
  8. duplicity-3.2.1/README-SNAP.md +90 -0
  9. duplicity-3.2.1/README-TESTING.md +37 -0
  10. duplicity-3.2.1/README.md +47 -0
  11. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/__init__.py +10 -2
  12. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/__main__.py +11 -6
  13. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/_librsync_ctypes.py +91 -4
  14. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/argparse311.py +3 -1
  15. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backend.py +145 -45
  16. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backend_pool.py +65 -20
  17. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/__init__.py +6 -3
  18. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/_cf_cloudfiles.py +23 -0
  19. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/_cf_pyrax.py +23 -0
  20. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/_testbackend.py +10 -0
  21. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/adbackend.py +49 -13
  22. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/azurebackend.py +17 -3
  23. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/b2backend.py +55 -15
  24. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/boxbackend.py +79 -14
  25. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/cfbackend.py +4 -0
  26. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/dpbxbackend.py +35 -3
  27. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/gdocsbackend.py +14 -2
  28. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/gdrivebackend.py +29 -1
  29. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/giobackend.py +15 -0
  30. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/hsibackend.py +15 -0
  31. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/hubicbackend.py +15 -0
  32. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/idrivedbackend.py +9 -0
  33. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/imapbackend.py +20 -1
  34. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/jottacloudbackend.py +36 -4
  35. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/lftpbackend.py +22 -1
  36. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/localbackend.py +53 -0
  37. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/mediafirebackend.py +38 -8
  38. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/megabackend.py +35 -9
  39. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/megav2backend.py +38 -10
  40. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/megav3backend.py +44 -12
  41. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/multibackend.py +24 -1
  42. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/ncftpbackend.py +24 -1
  43. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/onedrivebackend.py +59 -20
  44. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/par2backend.py +40 -7
  45. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/pcabackend.py +9 -0
  46. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/pydrivebackend.py +17 -3
  47. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/pyrax_identity/__init__.py +4 -0
  48. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/pyrax_identity/hubic.py +19 -1
  49. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/rclonebackend.py +33 -0
  50. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/rsyncbackend.py +46 -2
  51. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/s3_boto3_backend.py +51 -0
  52. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/slatebackend.py +10 -0
  53. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/ssh_paramiko_backend.py +64 -3
  54. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/ssh_pexpect_backend.py +23 -5
  55. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/swiftbackend.py +27 -0
  56. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/sxbackend.py +18 -1
  57. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/tahoebackend.py +9 -0
  58. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/webdavbackend.py +49 -5
  59. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/backends/xorrisobackend.py +16 -0
  60. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/cached_ops.py +27 -1
  61. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/cli_data.py +224 -40
  62. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/cli_main.py +128 -25
  63. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/cli_util.py +199 -14
  64. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/config.py +19 -9
  65. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/diffdir.py +39 -5
  66. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/dup_collections.py +43 -36
  67. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/dup_main.py +189 -206
  68. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/dup_tarfile.py +3 -1
  69. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/dup_temp.py +21 -7
  70. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/dup_time.py +62 -15
  71. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/errors.py +22 -0
  72. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/file_naming.py +38 -8
  73. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/globmatch.py +39 -37
  74. duplicity-3.2.1/duplicity/gpg.py +627 -0
  75. duplicity-3.2.1/duplicity/gpginterface.py +702 -0
  76. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/lazy.py +91 -31
  77. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/librsync.py +61 -23
  78. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/log.py +51 -4
  79. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/manifest.py +66 -37
  80. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/patchdir.py +93 -26
  81. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/path.py +196 -62
  82. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/progress.py +18 -8
  83. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/robust.py +15 -4
  84. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/selection.py +107 -139
  85. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/statistics.py +100 -42
  86. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/tempdir.py +42 -32
  87. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/util.py +88 -17
  88. duplicity-3.2.1/duplicity.egg-info/PKG-INFO +100 -0
  89. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity.egg-info/SOURCES.txt +55 -1
  90. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity.egg-info/requires.txt +0 -2
  91. {duplicity-3.2.0 → duplicity-3.2.1}/man/duplicity.1 +25 -1
  92. duplicity-3.2.1/po/af_ZA/af_ZA.po +1668 -0
  93. {duplicity-3.2.0 → duplicity-3.2.1}/po/af_ZA.po +394 -382
  94. duplicity-3.2.1/po/ar_SA/ar_SA.po +1703 -0
  95. {duplicity-3.2.0 → duplicity-3.2.1}/po/ar_SA.po +400 -393
  96. duplicity-3.2.1/po/ca_ES/ca_ES.po +1668 -0
  97. {duplicity-3.2.0 → duplicity-3.2.1}/po/ca_ES.po +394 -382
  98. duplicity-3.2.1/po/cs_CZ/cs_CZ.po +1695 -0
  99. {duplicity-3.2.0 → duplicity-3.2.1}/po/cs_CZ.po +400 -393
  100. duplicity-3.2.1/po/da_DK/da_DK.po +1700 -0
  101. {duplicity-3.2.0 → duplicity-3.2.1}/po/da_DK.po +400 -393
  102. duplicity-3.2.1/po/de_AT/de_AT.po +1700 -0
  103. {duplicity-3.2.0 → duplicity-3.2.1}/po/de_AT.po +400 -393
  104. duplicity-3.2.1/po/de_DE/de_DE.po +1700 -0
  105. {duplicity-3.2.0 → duplicity-3.2.1}/po/de_DE.po +400 -393
  106. {duplicity-3.2.0 → duplicity-3.2.1}/po/duplicity.pot +399 -386
  107. duplicity-3.2.1/po/el_GR/el_GR.po +1693 -0
  108. {duplicity-3.2.0 → duplicity-3.2.1}/po/el_GR.po +400 -388
  109. duplicity-3.2.1/po/en_AU/en_AU.po +1668 -0
  110. {duplicity-3.2.0 → duplicity-3.2.1}/po/en_AU.po +394 -382
  111. duplicity-3.2.1/po/en_GB/en_GB.po +1675 -0
  112. {duplicity-3.2.0 → duplicity-3.2.1}/po/en_GB.po +394 -382
  113. duplicity-3.2.1/po/en_PR/en_PR.po +1668 -0
  114. {duplicity-3.2.0 → duplicity-3.2.1}/po/en_PR.po +394 -382
  115. duplicity-3.2.1/po/en_US/en_US.po +1668 -0
  116. {duplicity-3.2.0 → duplicity-3.2.1}/po/en_US.po +394 -382
  117. duplicity-3.2.1/po/es_EM/es_EM.po +1700 -0
  118. {duplicity-3.2.0 → duplicity-3.2.1}/po/es_EM.po +400 -393
  119. duplicity-3.2.1/po/es_ES/es_ES.po +1700 -0
  120. {duplicity-3.2.0 → duplicity-3.2.1}/po/es_ES.po +400 -393
  121. duplicity-3.2.1/po/es_MX/es_MX.po +1700 -0
  122. {duplicity-3.2.0 → duplicity-3.2.1}/po/es_MX.po +400 -393
  123. duplicity-3.2.1/po/es_PR/es_PR.po +1700 -0
  124. {duplicity-3.2.0 → duplicity-3.2.1}/po/es_PR.po +400 -393
  125. duplicity-3.2.1/po/es_US/es_US.po +1700 -0
  126. {duplicity-3.2.0 → duplicity-3.2.1}/po/es_US.po +400 -393
  127. duplicity-3.2.1/po/fi_FI/fi_FI.po +1700 -0
  128. {duplicity-3.2.0 → duplicity-3.2.1}/po/fi_FI.po +400 -393
  129. duplicity-3.2.1/po/fr_FR/fr_FR.po +1700 -0
  130. {duplicity-3.2.0 → duplicity-3.2.1}/po/fr_FR.po +400 -390
  131. duplicity-3.2.1/po/he_IL/he_IL.po +1670 -0
  132. {duplicity-3.2.0 → duplicity-3.2.1}/po/he_IL.po +395 -385
  133. duplicity-3.2.1/po/hu_HU/hu_HU.po +1685 -0
  134. {duplicity-3.2.0 → duplicity-3.2.1}/po/hu_HU.po +395 -383
  135. duplicity-3.2.1/po/it_IT/it_IT.po +1700 -0
  136. {duplicity-3.2.0 → duplicity-3.2.1}/po/it_IT.po +400 -393
  137. duplicity-3.2.1/po/ja_JP/ja_JP.po +1683 -0
  138. {duplicity-3.2.0 → duplicity-3.2.1}/po/ja_JP.po +400 -388
  139. duplicity-3.2.1/po/ka_GE/ka_GE.po +1668 -0
  140. {duplicity-3.2.0 → duplicity-3.2.1}/po/ka_GE.po +394 -382
  141. duplicity-3.2.1/po/ko_KR/ko_KR.po +1666 -0
  142. {duplicity-3.2.0 → duplicity-3.2.1}/po/ko_KR.po +394 -382
  143. duplicity-3.2.1/po/nl_BE/nl_BE.po +1700 -0
  144. {duplicity-3.2.0 → duplicity-3.2.1}/po/nl_BE.po +400 -393
  145. duplicity-3.2.1/po/nl_NL/nl_NL.po +1700 -0
  146. {duplicity-3.2.0 → duplicity-3.2.1}/po/nl_NL.po +400 -393
  147. duplicity-3.2.1/po/nl_SR/nl_SR.po +1700 -0
  148. {duplicity-3.2.0 → duplicity-3.2.1}/po/nl_SR.po +400 -393
  149. duplicity-3.2.1/po/no_NO/no_NO.po +1693 -0
  150. {duplicity-3.2.0 → duplicity-3.2.1}/po/no_NO.po +400 -393
  151. duplicity-3.2.1/po/pl_PL/pl_PL.po +1703 -0
  152. {duplicity-3.2.0 → duplicity-3.2.1}/po/pl_PL.po +400 -393
  153. duplicity-3.2.1/po/pt_BR/pt_BR.po +1699 -0
  154. {duplicity-3.2.0 → duplicity-3.2.1}/po/pt_BR.po +400 -393
  155. duplicity-3.2.1/po/pt_PT/pt_PT.po +1698 -0
  156. {duplicity-3.2.0 → duplicity-3.2.1}/po/pt_PT.po +400 -393
  157. duplicity-3.2.1/po/ro_RO/ro_RO.po +1701 -0
  158. {duplicity-3.2.0 → duplicity-3.2.1}/po/ro_RO.po +400 -393
  159. duplicity-3.2.1/po/ru_BY/ru_BY.po +1703 -0
  160. {duplicity-3.2.0 → duplicity-3.2.1}/po/ru_BY.po +400 -393
  161. duplicity-3.2.1/po/ru_MD/ru_MD.po +1703 -0
  162. duplicity-3.2.1/po/ru_MD.po +1703 -0
  163. duplicity-3.2.1/po/ru_RU/ru_RU.po +1703 -0
  164. {duplicity-3.2.0 → duplicity-3.2.1}/po/ru_RU.po +400 -393
  165. duplicity-3.2.0/po/ru_MD.po → duplicity-3.2.1/po/ru_UA/ru_UA.po +3 -3
  166. duplicity-3.2.1/po/sr_SP/sr_SP.po +1670 -0
  167. {duplicity-3.2.0 → duplicity-3.2.1}/po/sr_SP.po +394 -382
  168. duplicity-3.2.1/po/sv_SE/sv_SE.po +1700 -0
  169. {duplicity-3.2.0 → duplicity-3.2.1}/po/sv_SE.po +400 -393
  170. duplicity-3.2.1/po/tr_TR/tr_TR.po +1668 -0
  171. {duplicity-3.2.0 → duplicity-3.2.1}/po/tr_TR.po +394 -382
  172. duplicity-3.2.1/po/uk_UA/uk_UA.po +1689 -0
  173. {duplicity-3.2.0 → duplicity-3.2.1}/po/uk_UA.po +395 -383
  174. duplicity-3.2.1/po/vi_VN/vi_VN.po +1666 -0
  175. {duplicity-3.2.0 → duplicity-3.2.1}/po/vi_VN.po +394 -382
  176. duplicity-3.2.1/po/zh_CN/zh_CN.po +1695 -0
  177. {duplicity-3.2.0 → duplicity-3.2.1}/po/zh_CN.po +400 -393
  178. duplicity-3.2.1/po/zh_HK/zh_HK.po +1666 -0
  179. {duplicity-3.2.0 → duplicity-3.2.1}/po/zh_HK.po +394 -382
  180. duplicity-3.2.1/po/zh_MO/zh_MO.po +1666 -0
  181. {duplicity-3.2.0 → duplicity-3.2.1}/po/zh_MO.po +394 -382
  182. duplicity-3.2.1/po/zh_SG/zh_SG.po +1695 -0
  183. {duplicity-3.2.0 → duplicity-3.2.1}/po/zh_SG.po +400 -393
  184. duplicity-3.2.1/po/zh_TW/zh_TW.po +1666 -0
  185. {duplicity-3.2.0 → duplicity-3.2.1}/po/zh_TW.po +394 -382
  186. {duplicity-3.2.0 → duplicity-3.2.1}/pyproject.toml +22 -10
  187. {duplicity-3.2.0 → duplicity-3.2.1}/requirements.txt +1 -3
  188. {duplicity-3.2.0 → duplicity-3.2.1}/setup.py +91 -9
  189. duplicity-3.2.0/PKG-INFO +0 -241
  190. duplicity-3.2.0/README.md +0 -186
  191. duplicity-3.2.0/duplicity/gpg.py +0 -587
  192. duplicity-3.2.0/duplicity.egg-info/PKG-INFO +0 -241
  193. {duplicity-3.2.0 → duplicity-3.2.1}/AUTHORS.md +0 -0
  194. {duplicity-3.2.0 → duplicity-3.2.1}/COPYING +0 -0
  195. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity/_librsyncmodule.c +0 -0
  196. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity.egg-info/dependency_links.txt +0 -0
  197. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity.egg-info/entry_points.txt +0 -0
  198. {duplicity-3.2.0 → duplicity-3.2.1}/duplicity.egg-info/top_level.txt +0 -0
  199. {duplicity-3.2.0 → duplicity-3.2.1}/po/ru_UA.po +0 -0
  200. {duplicity-3.2.0 → duplicity-3.2.1}/setup.cfg +0 -0
@@ -1,16 +1,96 @@
1
1
 
2
- (Unreleased) / 2026-08-10
2
+ (Unreleased) / 2026-09-28
3
3
  =========================
4
4
 
5
5
 
6
6
 
7
+ rel.3.2.1 / 2026-09-28
8
+ ======================
9
+
10
+ * [`d7da150b`](https://gitlab.com/duplicity/duplicity/-/commit/d7da150b):new: Create subpath in rsyncd.
11
+ * [`77c5107e`](https://gitlab.com/duplicity/duplicity/-/commit/77c5107e):new: Add get_version() to librsync to retrieve underlying library version
12
+ * [`b839f2c8`](https://gitlab.com/duplicity/duplicity/-/commit/b839f2c8):new: Add pure Python librsync implementation using ctypes as fallback
13
+ * [`ba7957c3`](https://gitlab.com/duplicity/duplicity/-/commit/ba7957c3):new: Add coverage configuration and Makefile targets for testing.
14
+ * [`846e90ae`](https://gitlab.com/duplicity/duplicity/-/commit/846e90ae):chg: Adapt `makechangelog` for enhanced usability and stricter repo cleanliness checks
15
+ * [`35191e13`](https://gitlab.com/duplicity/duplicity/-/commit/35191e13):chg: Remove unused pytest options and manual testing directory from `pyproject.toml`
16
+ * [`eaa264be`](https://gitlab.com/duplicity/duplicity/-/commit/eaa264be):chg: Improve error handling for Box, OneDrive, and WebDAV backends; add unit tests for comprehensive validation
17
+ * [`e181a9e9`](https://gitlab.com/duplicity/duplicity/-/commit/e181a9e9):chg: Improve error handling and signature file filtering logic; add unit tests for B2 and PAR2 backends
18
+ * [`58a54680`](https://gitlab.com/duplicity/duplicity/-/commit/58a54680):chg: Add regex cache invalidation for file prefix changes; update tests
19
+ * [`fcd6920a`](https://gitlab.com/duplicity/duplicity/-/commit/fcd6920a):chg: Add deprecation warnings for CloudFiles, Pyrax, and Hubic backends
20
+ * [`1842e4de`](https://gitlab.com/duplicity/duplicity/-/commit/1842e4de):chg: Remove `python3-gnupg` and restore `gpginterface` module and unit tests.
21
+ * [`aae16c61`](https://gitlab.com/duplicity/duplicity/-/commit/aae16c61):chg: Remove `python3-gnupg` and restore `gpginterface` module and unit tests.
22
+ * [`a201453e`](https://gitlab.com/duplicity/duplicity/-/commit/a201453e):chg: Plan to remove obsolete Pyrax, CloudFiles, and Hubic backends; standardize on python-swiftclient
23
+ * [`abdf9a0e`](https://gitlab.com/duplicity/duplicity/-/commit/abdf9a0e):chg: Remove unused gnupg import from gpg.py for cleanup.
24
+ * [`bd649791`](https://gitlab.com/duplicity/duplicity/-/commit/bd649791):chg: Split wildcard and multiline imports into individual lines for improved clarity and compliance with coding standards
25
+ * [`993cc651`](https://gitlab.com/duplicity/duplicity/-/commit/993cc651):chg: Decouple selection parsing from core engine and refactor tests
26
+ * [`1af57ea4`](https://gitlab.com/duplicity/duplicity/-/commit/1af57ea4):chg: Add support and tests for new CLI options
27
+ * [`df643666`](https://gitlab.com/duplicity/duplicity/-/commit/df643666):chg: Update Python3 version and dependencies in `debian/control`
28
+ * [`855c6f1c`](https://gitlab.com/duplicity/duplicity/-/commit/855c6f1c):chg: Remove outdated comment for `python3-gnupg` in `debian/control`
29
+ * [`22fae925`](https://gitlab.com/duplicity/duplicity/-/commit/22fae925):chg: Sync README files in `setup.py` and clean up verbosity flags
30
+ * [`978355b4`](https://gitlab.com/duplicity/duplicity/-/commit/978355b4):chg: Enable verbose mode in debian/rules
31
+ * [`626cdccb`](https://gitlab.com/duplicity/duplicity/-/commit/626cdccb):chg: Remove redundant `apt` commands in `debian/rules`
32
+ * [`ba71d094`](https://gitlab.com/duplicity/duplicity/-/commit/ba71d094):chg: Update setuptools to >=61.0.0 in dev dependencies and `debian/rules`
33
+ * [`2b55864a`](https://gitlab.com/duplicity/duplicity/-/commit/2b55864a):chg: Simplify `gnupg` import logic in `gpg.py`
34
+ * [`80abbd02`](https://gitlab.com/duplicity/duplicity/-/commit/80abbd02):chg: Adjust dependencies in `requirements.txt` and `debian/control`
35
+ * [`df52d45b`](https://gitlab.com/duplicity/duplicity/-/commit/df52d45b):chg: Add `python3-gnupg` as a build dependency in `debian/control`
36
+ * [`057c7d0a`](https://gitlab.com/duplicity/duplicity/-/commit/057c7d0a):chg: Update doc cleanup pattern in `debian/rules`
37
+ * [`4eaee861`](https://gitlab.com/duplicity/duplicity/-/commit/4eaee861):chg: Update doc cleanup to remove `duplicity-*` files in `debian/rules`
38
+ * [`7cd8ddb6`](https://gitlab.com/duplicity/duplicity/-/commit/7cd8ddb6):chg: Add `get_data_files` for dynamic data file handling in `setup.py`
39
+ * [`e9bf8843`](https://gitlab.com/duplicity/duplicity/-/commit/e9bf8843):chg: Simplify doc handling by removing outdated duplicity docs
40
+ * [`4bc93712`](https://gitlab.com/duplicity/duplicity/-/commit/4bc93712):chg: Update dependencies, streamline configs, and refine CI
41
+ * [`ca78d6c5`](https://gitlab.com/duplicity/duplicity/-/commit/ca78d6c5):chg: Update release-prep script to use `check_tags`
42
+ * [`60ae51f3`](https://gitlab.com/duplicity/duplicity/-/commit/60ae51f3):chg: Update release-prep script to fix tag removal and file refs
43
+ * [`45495e09`](https://gitlab.com/duplicity/duplicity/-/commit/45495e09):chg: Update pipeline triggers for push, web, and merge request events
44
+ * [`f8fc71e3`](https://gitlab.com/duplicity/duplicity/-/commit/f8fc71e3):chg: Improve process in `setup.py` and release prep script
45
+ * [`f36c9922`](https://gitlab.com/duplicity/duplicity/-/commit/f36c9922):chg: Refactor versioning and metadata handling
46
+ * [`84afa6f2`](https://gitlab.com/duplicity/duplicity/-/commit/84afa6f2):chg: Refactor string concatenations to f-strings across codebase
47
+ * [`480cbc23`](https://gitlab.com/duplicity/duplicity/-/commit/480cbc23):chg: Clean up and refactor `pyproject.toml` and `Makefile`
48
+ * [`42d4838d`](https://gitlab.com/duplicity/duplicity/-/commit/42d4838d):chg: Rewrite `makechangelog` script in Python
49
+ * [`1dee9e31`](https://gitlab.com/duplicity/duplicity/-/commit/1dee9e31):chg: b2backend prefer b2sdk.v3
50
+ * [`4f4e052e`](https://gitlab.com/duplicity/duplicity/-/commit/4f4e052e):chg: Cleanup some minor issues
51
+ * [`1e0a97dc`](https://gitlab.com/duplicity/duplicity/-/commit/1e0a97dc):chg: Format with Black/PEP8 and ensure file flush before rename
52
+ * [`7514a7e2`](https://gitlab.com/duplicity/duplicity/-/commit/7514a7e2):fix: Correct string formatting in help output and improve test stability
53
+ * [`c179caf1`](https://gitlab.com/duplicity/duplicity/-/commit/c179caf1):fix: Fix GPG sleep processes on verify, modernize tests, and update guidelines
54
+ * [`90f9137e`](https://gitlab.com/duplicity/duplicity/-/commit/90f9137e):fix: Fix subpath creation for rsync #943
55
+ * [`ed58fae5`](https://gitlab.com/duplicity/duplicity/-/commit/ed58fae5):fix: Restore Python versions, dependencies, and revert migration to 'python-gnupg'.
56
+ * [`22da1a0d`](https://gitlab.com/duplicity/duplicity/-/commit/22da1a0d):fix: Resolve PEP8 style issues and whitespace in backend and main modules
57
+ * [`06858c9a`](https://gitlab.com/duplicity/duplicity/-/commit/06858c9a):fix: Replace `os.system` calls with safer Python alternatives.
58
+ * [`da745307`](https://gitlab.com/duplicity/duplicity/-/commit/da745307):fix: Add --ignore-installed flag for pip in Dockerfiles
59
+ * [`883cca1e`](https://gitlab.com/duplicity/duplicity/-/commit/883cca1e):fix: restore issue: AssertionError: (b'keys', [...]) not empty
60
+ * [`aa0b23e7`](https://gitlab.com/duplicity/duplicity/-/commit/aa0b23e7):fix: Replace `log.FatalError` with `raise errors.FatalError`.
61
+ * [`c3a45713`](https://gitlab.com/duplicity/duplicity/-/commit/c3a45713):fix: Add support for "sync" action and handle passphrase checks.
62
+ * [`db99858e`](https://gitlab.com/duplicity/duplicity/-/commit/db99858e):fix: Enhance error handling and debug logging in Python modules
63
+ * [`dbb899ad`](https://gitlab.com/duplicity/duplicity/-/commit/dbb899ad):fix: Use 'python-gnupg' instead of our 'gpginterface.py'.
64
+ * [`4d6e9f8c`](https://gitlab.com/duplicity/duplicity/-/commit/4d6e9f8c):fix: PCABackend GET URL needs prefix if one is defined
65
+ * [`d7cd05d8`](https://gitlab.com/duplicity/duplicity/-/commit/d7cd05d8):fix: Could not release lockfile
66
+ * [`fcbe3a7a`](https://gitlab.com/duplicity/duplicity/-/commit/fcbe3a7a):fix: Enforce --force requirement for destructive operations
67
+ * [`c6c8b26a`](https://gitlab.com/duplicity/duplicity/-/commit/c6c8b26a):fix: Enhance BackupSet.delete signature cleanup and fix lock release
68
+ * [`3f0ab55b`](https://gitlab.com/duplicity/duplicity/-/commit/3f0ab55b):fix: Prevent premature deletion of full backups during incremental starts
69
+ * [`9819e4d4`](https://gitlab.com/duplicity/duplicity/-/commit/9819e4d4):fix: Add get_last_continuous_volume for reliable backup resumption
70
+ * [`5d737d07`](https://gitlab.com/duplicity/duplicity/-/commit/5d737d07):fix: Postpone metadata promotion to prevent orphaned cache files
71
+
72
+ rel.3.2.0.2 / 2026-08-22
73
+ ========================
74
+
75
+ * [`f7ccc81b`](https://gitlab.com/duplicity/duplicity/-/commit/f7ccc81b):chg: Update Python3 version and dependencies in `debian/control`
76
+
77
+ rel.3.2.0.1 / 2026-08-15
78
+ ========================
79
+
80
+ * [`3865b348`](https://gitlab.com/duplicity/duplicity/-/commit/3865b348):chg: Add `python3-gnupg` as a build dependency in `debian/control`
81
+ * [`efefc8b2`](https://gitlab.com/duplicity/duplicity/-/commit/efefc8b2):chg: Update doc cleanup pattern in `debian/rules`
82
+ * [`955713e7`](https://gitlab.com/duplicity/duplicity/-/commit/955713e7):chg: Update doc cleanup to remove `duplicity-*` files in `debian/rules`
83
+ * [`e8c0bc1a`](https://gitlab.com/duplicity/duplicity/-/commit/e8c0bc1a):chg: Add `get_data_files` for dynamic data file handling in `setup.py`
84
+ * [`137ae81d`](https://gitlab.com/duplicity/duplicity/-/commit/137ae81d):chg: Simplify doc handling by removing outdated duplicity docs
85
+ * [`f0fb534c`](https://gitlab.com/duplicity/duplicity/-/commit/f0fb534c):chg: Update dependencies, streamline configs, and refine CI
86
+ * [`6d719e1c`](https://gitlab.com/duplicity/duplicity/-/commit/6d719e1c):fix: Resolve PEP8 style issues and whitespace in backend and main modules
87
+
7
88
  rel.3.2.0 / 2026-08-10
8
89
  ======================
9
90
 
10
91
  * [`8612b567`](https://gitlab.com/duplicity/duplicity/-/commit/8612b567):new: Add get_version() to librsync to retrieve underlying library version
11
92
  * [`9dddcfc4`](https://gitlab.com/duplicity/duplicity/-/commit/9dddcfc4):new: Add pure Python librsync implementation using ctypes as fallback
12
93
  * [`acaedcfe`](https://gitlab.com/duplicity/duplicity/-/commit/acaedcfe):new: Add coverage configuration and Makefile targets for testing.
13
- * [`6feeafb1`](https://gitlab.com/duplicity/duplicity/-/commit/6feeafb1):new: Add PyCharm devcontainer configuration and base Dockerfile.
14
94
  * [`b3c4b349`](https://gitlab.com/duplicity/duplicity/-/commit/b3c4b349):chg: Update release-prep script to use `check_tags`
15
95
  * [`8befb2cf`](https://gitlab.com/duplicity/duplicity/-/commit/8befb2cf):chg: Update release-prep script to fix tag removal and file refs
16
96
  * [`33544f8c`](https://gitlab.com/duplicity/duplicity/-/commit/33544f8c):chg: Update pipeline triggers for push, web, and merge request events
@@ -21,11 +101,6 @@ rel.3.2.0 / 2026-08-10
21
101
  * [`59ed8f9e`](https://gitlab.com/duplicity/duplicity/-/commit/59ed8f9e):chg: Rewrite `makechangelog` script in Python
22
102
  * [`ffc31818`](https://gitlab.com/duplicity/duplicity/-/commit/ffc31818):chg: b2backend prefer b2sdk.v3
23
103
  * [`78da5b67`](https://gitlab.com/duplicity/duplicity/-/commit/78da5b67):chg: Cleanup some minor issues
24
- * [`64264da1`](https://gitlab.com/duplicity/duplicity/-/commit/64264da1):chg: Remove unused Tahoe-LAFS installation steps in Snapcraft
25
- * [`f4123b7e`](https://gitlab.com/duplicity/duplicity/-/commit/f4123b7e):chg: Add support for additional architectures in Snapcraft
26
- * [`6f015221`](https://gitlab.com/duplicity/duplicity/-/commit/6f015221):chg: Update Snapcraft to core26 and Python 3.14
27
- * [`938764f7`](https://gitlab.com/duplicity/duplicity/-/commit/938764f7):chg: Add setuptools dependency to requirements.dev for Python 3.12+
28
- * [`b17da54e`](https://gitlab.com/duplicity/duplicity/-/commit/b17da54e):chg: Update dependencies in requirements.txt for compatibility.
29
104
  * [`47c21150`](https://gitlab.com/duplicity/duplicity/-/commit/47c21150):fix: Replace `os.system` calls with safer Python alternatives.
30
105
  * [`12c98f2a`](https://gitlab.com/duplicity/duplicity/-/commit/12c98f2a):fix: Add --ignore-installed flag for pip in Dockerfiles
31
106
  * [`b1508a6d`](https://gitlab.com/duplicity/duplicity/-/commit/b1508a6d):fix: restore issue: AssertionError: (b'keys', [...]) not empty
@@ -37,6 +112,89 @@ rel.3.2.0 / 2026-08-10
37
112
  * [`c823ed36`](https://gitlab.com/duplicity/duplicity/-/commit/c823ed36):fix: Could not release lockfile
38
113
  * [`3d9eab94`](https://gitlab.com/duplicity/duplicity/-/commit/3d9eab94):fix: Comprehensive fix for backup, restart, and cleanup logic.
39
114
 
115
+ rel.3.2.1.dev3 / 2026-09-23
116
+ ===========================
117
+
118
+ * [`d7da150b`](https://gitlab.com/duplicity/duplicity/-/commit/d7da150b):new: Create subpath in rsyncd.
119
+ * [`e181a9e9`](https://gitlab.com/duplicity/duplicity/-/commit/e181a9e9):chg: Improve error handling and signature file filtering logic; add unit tests for B2 and PAR2 backends
120
+ * [`58a54680`](https://gitlab.com/duplicity/duplicity/-/commit/58a54680):chg: Add regex cache invalidation for file prefix changes; update tests
121
+ * [`fcd6920a`](https://gitlab.com/duplicity/duplicity/-/commit/fcd6920a):chg: Add deprecation warnings for CloudFiles, Pyrax, and Hubic backends
122
+ * [`1842e4de`](https://gitlab.com/duplicity/duplicity/-/commit/1842e4de):chg: Remove `python3-gnupg` and restore `gpginterface` module and unit tests.
123
+ * [`a201453e`](https://gitlab.com/duplicity/duplicity/-/commit/a201453e):chg: Plan to remove obsolete Pyrax, CloudFiles, and Hubic backends; standardize on python-swiftclient
124
+ * [`abdf9a0e`](https://gitlab.com/duplicity/duplicity/-/commit/abdf9a0e):chg: Remove unused gnupg import from gpg.py for cleanup.
125
+ * [`bd649791`](https://gitlab.com/duplicity/duplicity/-/commit/bd649791):chg: Split wildcard and multiline imports into individual lines for improved clarity and compliance with coding standards
126
+ * [`993cc651`](https://gitlab.com/duplicity/duplicity/-/commit/993cc651):chg: Decouple selection parsing from core engine and refactor tests
127
+ * [`1af57ea4`](https://gitlab.com/duplicity/duplicity/-/commit/1af57ea4):chg: Add support and tests for new CLI options
128
+ * [`df643666`](https://gitlab.com/duplicity/duplicity/-/commit/df643666):chg: Update Python3 version and dependencies in `debian/control`
129
+ * [`7514a7e2`](https://gitlab.com/duplicity/duplicity/-/commit/7514a7e2):fix: Correct string formatting in help output and improve test stability
130
+ * [`c179caf1`](https://gitlab.com/duplicity/duplicity/-/commit/c179caf1):fix: Fix GPG sleep processes on verify, modernize tests, and update guidelines
131
+ * [`90f9137e`](https://gitlab.com/duplicity/duplicity/-/commit/90f9137e):fix: Fix subpath creation for rsync #943
132
+ * [`ed58fae5`](https://gitlab.com/duplicity/duplicity/-/commit/ed58fae5):fix: Restore Python versions, dependencies, and revert migration to 'python-gnupg'.
133
+
134
+ rel.3.2.1.dev2 / 2026-08-20
135
+ ===========================
136
+
137
+ * [`855c6f1c`](https://gitlab.com/duplicity/duplicity/-/commit/855c6f1c):chg: Remove outdated comment for `python3-gnupg` in `debian/control`
138
+ * [`22fae925`](https://gitlab.com/duplicity/duplicity/-/commit/22fae925):chg: Sync README files in `setup.py` and clean up verbosity flags
139
+ * [`978355b4`](https://gitlab.com/duplicity/duplicity/-/commit/978355b4):chg: Enable verbose mode in debian/rules
140
+ * [`626cdccb`](https://gitlab.com/duplicity/duplicity/-/commit/626cdccb):chg: Remove redundant `apt` commands in `debian/rules`
141
+ * [`ba71d094`](https://gitlab.com/duplicity/duplicity/-/commit/ba71d094):chg: Update setuptools to >=61.0.0 in dev dependencies and `debian/rules`
142
+ * [`2b55864a`](https://gitlab.com/duplicity/duplicity/-/commit/2b55864a):chg: Simplify `gnupg` import logic in `gpg.py`
143
+ * [`80abbd02`](https://gitlab.com/duplicity/duplicity/-/commit/80abbd02):chg: Adjust dependencies in `requirements.txt` and `debian/control`
144
+
145
+ rel.3.2.1.dev1 / 2026-08-15
146
+ ===========================
147
+
148
+ * [`df52d45b`](https://gitlab.com/duplicity/duplicity/-/commit/df52d45b):chg: Add `python3-gnupg` as a build dependency in `debian/control`
149
+ * [`057c7d0a`](https://gitlab.com/duplicity/duplicity/-/commit/057c7d0a):chg: Update doc cleanup pattern in `debian/rules`
150
+ * [`4eaee861`](https://gitlab.com/duplicity/duplicity/-/commit/4eaee861):chg: Update doc cleanup to remove `duplicity-*` files in `debian/rules`
151
+ * [`7cd8ddb6`](https://gitlab.com/duplicity/duplicity/-/commit/7cd8ddb6):chg: Add `get_data_files` for dynamic data file handling in `setup.py`
152
+ * [`e9bf8843`](https://gitlab.com/duplicity/duplicity/-/commit/e9bf8843):chg: Simplify doc handling by removing outdated duplicity docs
153
+ * [`22da1a0d`](https://gitlab.com/duplicity/duplicity/-/commit/22da1a0d):fix: Resolve PEP8 style issues and whitespace in backend and main modules
154
+
155
+ rel.3.2.1.dev0 / 2026-08-11
156
+ ===========================
157
+
158
+ * [`77c5107e`](https://gitlab.com/duplicity/duplicity/-/commit/77c5107e):new: Add get_version() to librsync to retrieve underlying library version
159
+ * [`b839f2c8`](https://gitlab.com/duplicity/duplicity/-/commit/b839f2c8):new: Add pure Python librsync implementation using ctypes as fallback
160
+ * [`ba7957c3`](https://gitlab.com/duplicity/duplicity/-/commit/ba7957c3):new: Add coverage configuration and Makefile targets for testing.
161
+ * [`6feeafb1`](https://gitlab.com/duplicity/duplicity/-/commit/6feeafb1):new: Add PyCharm devcontainer configuration and base Dockerfile.
162
+ * [`4bc93712`](https://gitlab.com/duplicity/duplicity/-/commit/4bc93712):chg: Update dependencies, streamline configs, and refine CI
163
+ * [`ca78d6c5`](https://gitlab.com/duplicity/duplicity/-/commit/ca78d6c5):chg: Update release-prep script to use `check_tags`
164
+ * [`60ae51f3`](https://gitlab.com/duplicity/duplicity/-/commit/60ae51f3):chg: Update release-prep script to fix tag removal and file refs
165
+ * [`45495e09`](https://gitlab.com/duplicity/duplicity/-/commit/45495e09):chg: Update pipeline triggers for push, web, and merge request events
166
+ * [`f8fc71e3`](https://gitlab.com/duplicity/duplicity/-/commit/f8fc71e3):chg: Improve process in `setup.py` and release prep script
167
+ * [`f36c9922`](https://gitlab.com/duplicity/duplicity/-/commit/f36c9922):chg: Refactor versioning and metadata handling
168
+ * [`84afa6f2`](https://gitlab.com/duplicity/duplicity/-/commit/84afa6f2):chg: Refactor string concatenations to f-strings across codebase
169
+ * [`480cbc23`](https://gitlab.com/duplicity/duplicity/-/commit/480cbc23):chg: Clean up and refactor `pyproject.toml` and `Makefile`
170
+ * [`42d4838d`](https://gitlab.com/duplicity/duplicity/-/commit/42d4838d):chg: Rewrite `makechangelog` script in Python
171
+ * [`1dee9e31`](https://gitlab.com/duplicity/duplicity/-/commit/1dee9e31):chg: b2backend prefer b2sdk.v3
172
+ * [`4f4e052e`](https://gitlab.com/duplicity/duplicity/-/commit/4f4e052e):chg: Cleanup some minor issues
173
+ * [`1e0a97dc`](https://gitlab.com/duplicity/duplicity/-/commit/1e0a97dc):chg: Format with Black/PEP8 and ensure file flush before rename
174
+ * [`64264da1`](https://gitlab.com/duplicity/duplicity/-/commit/64264da1):chg: Remove unused Tahoe-LAFS installation steps in Snapcraft
175
+ * [`f4123b7e`](https://gitlab.com/duplicity/duplicity/-/commit/f4123b7e):chg: Add support for additional architectures in Snapcraft
176
+ * [`6f015221`](https://gitlab.com/duplicity/duplicity/-/commit/6f015221):chg: Update Snapcraft to core26 and Python 3.14
177
+ * [`938764f7`](https://gitlab.com/duplicity/duplicity/-/commit/938764f7):chg: Add setuptools dependency to requirements.dev for Python 3.12+
178
+ * [`b17da54e`](https://gitlab.com/duplicity/duplicity/-/commit/b17da54e):chg: Update dependencies in requirements.txt for compatibility.
179
+ * [`06858c9a`](https://gitlab.com/duplicity/duplicity/-/commit/06858c9a):fix: Replace `os.system` calls with safer Python alternatives.
180
+ * [`da745307`](https://gitlab.com/duplicity/duplicity/-/commit/da745307):fix: Add --ignore-installed flag for pip in Dockerfiles
181
+ * [`883cca1e`](https://gitlab.com/duplicity/duplicity/-/commit/883cca1e):fix: restore issue: AssertionError: (b'keys', [...]) not empty
182
+ * [`aa0b23e7`](https://gitlab.com/duplicity/duplicity/-/commit/aa0b23e7):fix: Replace `log.FatalError` with `raise errors.FatalError`.
183
+ * [`c3a45713`](https://gitlab.com/duplicity/duplicity/-/commit/c3a45713):fix: Add support for "sync" action and handle passphrase checks.
184
+ * [`db99858e`](https://gitlab.com/duplicity/duplicity/-/commit/db99858e):fix: Enhance error handling and debug logging in Python modules
185
+ * [`dbb899ad`](https://gitlab.com/duplicity/duplicity/-/commit/dbb899ad):fix: Use 'python-gnupg' instead of our 'gpginterface.py'.
186
+ * [`4d6e9f8c`](https://gitlab.com/duplicity/duplicity/-/commit/4d6e9f8c):fix: PCABackend GET URL needs prefix if one is defined
187
+ * [`d7cd05d8`](https://gitlab.com/duplicity/duplicity/-/commit/d7cd05d8):fix: Could not release lockfile
188
+ * [`fcbe3a7a`](https://gitlab.com/duplicity/duplicity/-/commit/fcbe3a7a):fix: Enforce --force requirement for destructive operations
189
+ * [`c6c8b26a`](https://gitlab.com/duplicity/duplicity/-/commit/c6c8b26a):fix: Enhance BackupSet.delete signature cleanup and fix lock release
190
+ * [`3f0ab55b`](https://gitlab.com/duplicity/duplicity/-/commit/3f0ab55b):fix: Prevent premature deletion of full backups during incremental starts
191
+ * [`9819e4d4`](https://gitlab.com/duplicity/duplicity/-/commit/9819e4d4):fix: Add get_last_continuous_volume for reliable backup resumption
192
+ * [`5d737d07`](https://gitlab.com/duplicity/duplicity/-/commit/5d737d07):fix: Postpone metadata promotion to prevent orphaned cache files
193
+
194
+ rel.3.1.1.dev0 / 2026-06-16
195
+ ===========================
196
+
197
+
40
198
  rel.3.1.0 / 2026-06-16
41
199
  ======================
42
200
 
@@ -0,0 +1,100 @@
1
+ Metadata-Version: 2.4
2
+ Name: duplicity
3
+ Version: 3.2.1
4
+ Summary: Encrypted backup using rsync algorithm
5
+ Author-email: Kenneth Loafman <kenneth@loafman.com>
6
+ Maintainer: Edgar Soldin, Thomas Laubrock
7
+ Project-URL: Homepage, http://duplicity.us
8
+ Project-URL: Download, https://gitlab.com/duplicity/duplicity/-/releases
9
+ Project-URL: Issues, https://gitlab.com/duplicity/duplicity/-/issues
10
+ Project-URL: Contact, https://lists.nongnu.org/mailman/listinfo/duplicity-talk
11
+ Project-URL: Documentation, http://duplicity.us
12
+ Project-URL: Repository, https://gitlab.com/duplicity/duplicity
13
+ Project-URL: Changelog, https://gitlab.com/duplicity/duplicity/-/blob/main/CHANGELOG.md
14
+ Classifier: Development Status :: 6 - Mature
15
+ Classifier: Environment :: Console
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Operating System :: POSIX
18
+ Classifier: Programming Language :: C
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Topic :: System :: Archiving :: Backup
26
+ Requires-Python: <3.15,>=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: COPYING
29
+ License-File: AUTHORS.md
30
+ Requires-Dist: fasteners>=0.19
31
+ Requires-Dist: httplib2
32
+ Requires-Dist: pysocks
33
+ Requires-Dist: requests
34
+ Requires-Dist: requests-oauthlib
35
+ Requires-Dist: azure-storage-blob
36
+ Requires-Dist: b2sdk
37
+ Requires-Dist: boto3
38
+ Requires-Dist: botocore
39
+ Requires-Dist: boxsdk[jwt]
40
+ Requires-Dist: dropbox
41
+ Requires-Dist: gdata-python3
42
+ Requires-Dist: google-api-python-client
43
+ Requires-Dist: google-auth-oauthlib
44
+ Requires-Dist: jottalib
45
+ Requires-Dist: mediafire
46
+ Requires-Dist: megatools
47
+ Requires-Dist: paramiko
48
+ Requires-Dist: pexpect
49
+ Requires-Dist: pydrive2
50
+ Requires-Dist: pyrax
51
+ Requires-Dist: python-swiftclient
52
+ Dynamic: license-file
53
+
54
+ # Duplicity
55
+
56
+ Duplicity provides encrypted, bandwidth-efficient backups by producing encrypted tar-format volumes and uploading them to a remote or local file server. It uses the rsync algorithm for space-efficient incremental archives and GnuPG for security.
57
+
58
+ ## Key Features
59
+
60
+ - **Encrypted & Signed**: Backups are safe from spying and modification using GnuPG.
61
+ - **Bandwidth Efficient**: Only transmits changes since the last backup using the rsync algorithm.
62
+ - **Incremental Archives**: Saves space by storing only the parts of files that have changed.
63
+ - **Multiple Backends**: Supports a wide range of storage services (S3, Azure, B2, Google Drive, etc.) and protocols (SFTP, SCP, FTP, etc.).
64
+
65
+ ## Table of Contents
66
+
67
+ - [Installation](README-INSTALL.md)
68
+ - [Architecture](README-ARCH.md)
69
+ - [Repository Access](README-REPO.md)
70
+ - [Testing](README-TESTING.md)
71
+ - [Logging](README-LOG.md)
72
+ - [Release Process](README-RELEASE.md)
73
+ - [Snap Support](README-SNAP.md)
74
+ - [Development](#development)
75
+ - [Help](#help)
76
+
77
+ # DEVELOPMENT
78
+
79
+ For more information on downloading duplicity's source code from the
80
+ code repository and developing for duplicity, see [README-REPO](README-REPO.md).
81
+
82
+ For source docs: https://duplicity.readthedocs.io/
83
+
84
+ # HELP
85
+
86
+ For more information see the duplicity web site at:
87
+
88
+ https://duplicity.us
89
+
90
+ or at:
91
+
92
+ https://duplicity.gitlab.io
93
+
94
+ or post to the mailing list at:
95
+
96
+ https://lists.nongnu.org/mailman/listinfo/duplicity-talk
97
+
98
+ or post a new issue at:
99
+
100
+ https://gitlab.com/duplicity/duplicity/-/issues
@@ -0,0 +1,62 @@
1
+ # ARCHITECTURE
2
+
3
+ ```mermaid
4
+ graph TD
5
+ subgraph Interface
6
+ Main["__main__.py (Entry Point)"]
7
+ end
8
+
9
+ subgraph Orchestration
10
+ DupMain["dup_main.py (Orchestration)"]
11
+ end
12
+
13
+ subgraph Support_Config ["Support & Config"]
14
+ CLI["cli_main.py (Argument Parsing)"]
15
+ Config["config.py (Global Settings)"]
16
+ LogUtil["log.py / util.py (Logging/Support)"]
17
+ end
18
+
19
+ subgraph Core_Logic ["Core Logic"]
20
+ Selection["selection.py (File Selection)"]
21
+ Backend["backend.py (Storage Layer)"]
22
+ Errors["errors.py (Exception Mgmt)"]
23
+ end
24
+
25
+ subgraph Operation
26
+ DiffDir["diffdir.py (Backup Logic)"]
27
+ Backends["backends/ (Storage Drivers)"]
28
+ PatchDir["patchdir.py (Restore Logic)"]
29
+ end
30
+
31
+ subgraph Engines_Metadata ["Engines & Metadata"]
32
+ LibRsync["librsync.py (rsync delta)"]
33
+ GPG["gpg.py (Encryption)"]
34
+ Manifest["manifest.py (Metadata)"]
35
+ end
36
+
37
+ Main --> DupMain
38
+ DupMain --> CLI
39
+ DupMain --> Config
40
+ DupMain --> LogUtil
41
+
42
+ CLI --> Selection
43
+ Config --> Backend
44
+ LogUtil ~~~ Errors
45
+ Errors -.-> LogUtil
46
+
47
+ Selection --> DiffDir
48
+ Backend --> Backends
49
+
50
+ DiffDir --> Backends
51
+ PatchDir --> Backends
52
+
53
+ DiffDir --> LibRsync
54
+ DiffDir --> GPG
55
+ DiffDir --> Manifest
56
+
57
+ PatchDir --> LibRsync
58
+ PatchDir --> GPG
59
+ PatchDir --> Manifest
60
+
61
+ Backends --> GPG
62
+ ```
@@ -0,0 +1,158 @@
1
+ # INSTALLATION
2
+
3
+ Duplicity requires several system and Python dependencies. Choose one of the following methods to install them.
4
+
5
+ ## (1) Pipx Installation (Recommended)
6
+
7
+ This method is recommended for most users. It uses `pipx` to install duplicity into an isolated virtual environment, avoiding conflicts with system packages.
8
+
9
+ ### (1a) System Requirements
10
+ The following should be installed by `apt`, `yum`, etc., depending on your OS.
11
+ ```shell
12
+ sudo apt-get update
13
+ sudo apt-get install -y \
14
+ build-essential \
15
+ intltool \
16
+ lftp \
17
+ librsync-dev \
18
+ libffi-dev \
19
+ libssl-dev \
20
+ openssl \
21
+ megatools \
22
+ par2 \
23
+ python3-dev \
24
+ python3-lxml \
25
+ python3-cryptography \
26
+ python3-pip \
27
+ python3-venv \
28
+ python3 \
29
+ rclone \
30
+ rsync \
31
+ rdiff \
32
+ tzdata
33
+ ```
34
+
35
+ ### (1b) Install and Update Pipx
36
+ It is necessary to upgrade packaging tools to avoid installation failures.
37
+ ```shell
38
+ sudo python3 -m pip install --upgrade pip pipx
39
+ sudo pipx --global ensurepath # for all users
40
+ pipx ensurepath # for single user
41
+ ```
42
+
43
+ ### (1c) Uninstall Previous Versions
44
+ If you have an existing duplicity not installed by `pipx`, you must uninstall it first:
45
+ ```shell
46
+ which -a duplicity
47
+ # Use apt, yum, snap, or other command to remove existing instances.
48
+ ```
49
+
50
+ ### (1d) Install Duplicity
51
+ ```shell
52
+ # For all users
53
+ sudo pipx --global install duplicity
54
+
55
+ # For single user
56
+ pipx install duplicity
57
+ ```
58
+ *Note: Use `--suffix=version` to keep multiple versions (e.g., `duplicity-2.0`).*
59
+
60
+ ## (2) APT Only Installation (Production)
61
+
62
+ Use this method if you are on a Debian-based system and want to install all runtime dependencies via `apt`, avoiding `pip` entirely.
63
+
64
+ ```shell
65
+ sudo apt-get update
66
+ sudo apt-get install -y \
67
+ build-essential \
68
+ intltool \
69
+ lftp \
70
+ librsync-dev \
71
+ libffi-dev \
72
+ libssl-dev \
73
+ openssl \
74
+ megatools \
75
+ par2 \
76
+ python3-dev \
77
+ python3-lxml \
78
+ python3-pip \
79
+ python3-venv \
80
+ python3 \
81
+ rclone \
82
+ rsync \
83
+ rdiff \
84
+ tzdata \
85
+ python3-cryptography \
86
+ python3-fasteners \
87
+ python3-httplib2 \
88
+ python3-socks \
89
+ python3-requests \
90
+ python3-requests-oauthlib \
91
+ python3-azure-storage-blob \
92
+ python3-b2sdk \
93
+ python3-boto3 \
94
+ python3-botocore \
95
+ python3-dropbox \
96
+ python3-googleapi \
97
+ python3-google-auth-oauthlib \
98
+ python3-paramiko \
99
+ python3-pexpect \
100
+ python3-pydrive2 \
101
+ python3-swiftclient
102
+ ```
103
+
104
+ ## (3) APT Only Installation (Development)
105
+
106
+ Use this method for development or testing. It includes all runtime dependencies plus testing and documentation tools.
107
+
108
+ ```shell
109
+ sudo apt-get update
110
+ sudo apt-get install -y \
111
+ build-essential \
112
+ intltool \
113
+ lftp \
114
+ librsync-dev \
115
+ libffi-dev \
116
+ libssl-dev \
117
+ openssl \
118
+ megatools \
119
+ par2 \
120
+ python3-dev \
121
+ python3-lxml \
122
+ python3-pip \
123
+ python3-venv \
124
+ python3 \
125
+ rclone \
126
+ rsync \
127
+ rdiff \
128
+ tzdata \
129
+ python3-cryptography \
130
+ python3-fasteners \
131
+ python3-httplib2 \
132
+ python3-socks \
133
+ python3-requests \
134
+ python3-requests-oauthlib \
135
+ python3-azure-storage-blob \
136
+ python3-b2sdk \
137
+ python3-boto3 \
138
+ python3-botocore \
139
+ python3-dropbox \
140
+ python3-googleapi \
141
+ python3-google-auth-oauthlib \
142
+ python3-paramiko \
143
+ python3-pexpect \
144
+ python3-pydrive2 \
145
+ python3-swiftclient \
146
+ python3-setuptools \
147
+ python3-setuptools-gettext \
148
+ black \
149
+ python3-coverage \
150
+ python3-pycodestyle \
151
+ pylint \
152
+ python3-pytest \
153
+ python3-pytest-cov \
154
+ python3-pytest-timeout \
155
+ python3-pytest-xdist \
156
+ python3-myst-parser \
157
+ python3-sphinx
158
+ ```
@@ -0,0 +1,33 @@
1
+ # duplicity's Log Output
2
+
3
+ Duplicity's log output is meant as a means of reporting status and information
4
+ back to the caller. This makes the life of a frontend writer much easier.
5
+
6
+ The format consists of a stream of stanzas, each starting with a keyword and
7
+ some arguments, an optional suggested user text (each line of which starts with
8
+ ". ") and ending with an endline. Like so:
9
+
10
+ ```
11
+ KEYWORD 3\n
12
+ . Hello! All work and now play make Jack a...\n
13
+ . dull boy.\n
14
+ \n
15
+ ```
16
+
17
+ You can get this output by specifying either *--log-fd* or *--log-file*.
18
+
19
+ Currently, duplicity writes out status messages like WARNING or ERROR followed
20
+ by a message number. Each message number uniquely identifies a particular
21
+ warning or error so the frontend can take special action. For example, an ERROR
22
+ of 2 is a command line syntax error. Each message type has its own namespace
23
+ (i.e. a WARNING of 2 means something different than an ERROR of 2). A number
24
+ of 1 is a generic, non-unique number for messages without their own code.
25
+
26
+ For a list of current numbers, see log.py
27
+
28
+ ## HINTS FOR CONSUMERS
29
+
30
+ 1. Ignore any extra arguments on the keyword line.
31
+ 2. Ignore any stanzas that have a keyword you don't recognize.
32
+ 3. Ignore any lines in a stanza that start with a character you don't know.
33
+
@@ -0,0 +1,66 @@
1
+ # RELEASE PROCESS
2
+
3
+ ## Duplicity rel Checklist
4
+
5
+ 1. merge dev into main
6
+ 2. get Crowdin updates
7
+ - run "make pot"
8
+ - commit "chg:pkg: Run po/update-pot."
9
+ - wait for Crowdin MR
10
+ - fix & merge Crowdin MR
11
+ - add chg:pkg: to title
12
+ - click 'squash commits' and 'delete branch'
13
+ 3. run "tools/release-prep \<version\>"
14
+ 4. push to origin/main
15
+ 5. run "git push alpha : --tags"
16
+ 6. run "git push mirror : --tags"
17
+ 7. Launchpad PPAs
18
+ - [Release PPA](https://code.launchpad.net/~duplicity-team/+recipe/duplicity-release-git)
19
+ - edit the "Recipe contents" at the bottom to update the version number
20
+ 8. Launchpad SNAPs
21
+ - [Release SNAP](https://launchpad.net/~duplicity-team/duplicity/+snap/duplicity-rel)
22
+ - double check the settings so nothing is automatic
23
+ 9. "request builds" on both PPAs and SNAPS
24
+ 10. release pip version
25
+ - if the last pipeline for `main` was skipped:
26
+ - set CI_PIPELINE_SOURCE to "push"
27
+ - run new pipeline for `main`
28
+ - run jobs `wheels-linux` and `wheels-macos` once done
29
+ 11. update web pages in duplicity.gitlab.io
30
+ - set new version and date in index.wml
31
+ - commit and push
32
+ 12. release to GitLab releases
33
+ 13. send email to talk and announce
34
+ 14. send backup tarballs to sourceforge.net
35
+ 15. merge main into dev
36
+ 16. set next version in dev, e.g. 3.2.1-->3.2.2.dev0
37
+ 17. check builds for Launchpad PPAs, SNAPs, and wheels
38
+
39
+ ## Duplicity dev Checklist
40
+
41
+ 1. run "tools/release-prep \<version\>"
42
+ 2. Launchpad PPAs
43
+ - [Develop PPA](https://code.launchpad.net/~duplicity-team/+recipe/duplicity-develop-git)
44
+ - edit the "Recipe contents" at the bottom to update the version number
45
+ 3. Launchpad SNAPs
46
+ - [Develop SNAP](https://launchpad.net/~duplicity-team/duplicity/+snap/duplicity-dev)
47
+ - double check the settings so nothing is automatic
48
+ 4. run "git push alpha : --tags"
49
+ 5. run "git push mirror : --tags"
50
+ 6. "request builds" on both PPAs and SNAPS
51
+ 7. release pip version
52
+ - if the last pipeline for `main` was skipped:
53
+ - set CI_PIPELINE_SOURCE to "push"
54
+ - run new pipeline for `main`
55
+ - run jobs `wheels-linux` and `wheels-macos` once done
56
+ 8. set next version in dev, e.g. 3.2.1-->3.2.2.dev0
57
+ 9. check builds for Launchpad PPAs, SNAPs, and wheels
58
+
59
+ ## Versioning
60
+
61
+ - We use [semantic versioning](https://semver.org/).
62
+ - Dev releases are numbered like `3.2.1.dev0`.
63
+ - Full releases are numbered like `3.2.1`.
64
+ - We use `git tag rel.3.2.1.dev0` to mark dev releases.
65
+ - We use `git tag rel.3.2.1` to mark full releases.
66
+ - We no longer use alpha, beta, or rc for releases.
@@ -19,6 +19,6 @@ By the numbers:
19
19
  ```shell
20
20
  $ PYTHONPATH=$DUP_ROOT duplicity/__main__.py -V
21
21
  ```
22
- You should see something like "duplicity 3.0.0 May 16, 2024".
22
+ You should see something like "duplicity 3.2.1.dev0 August 11, 2026".
23
23
 
24
24
  Use PYTHONPATH to set the path each time that you use the binaries.