~duplicity-team/duplicity/0.7-series

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
Changes made in trunk only since 0.8-series is now stable
and this version only runs on Python 2 which is end-of-life
as of 1/1/2020.  0.7.19 is the last of this series.
-----------------------------
* Merged in lp:~mgorse/duplicity/0.7-series
  - Fix bug 1828869: refresh CollectionsStatus after sync
* Merged in lp:~aaron-whitehouse/duplicity/07-snap
  - Add snapcraft packaging instructions for 0.7 series


New in v0.7.19 (2019/04/29)
-----------------------------
* Fixed bug #1798206 and bug #1798504
  - Made paramiko a global with import during __init__ so it would
    not be loaded unless needed.
* Merged in lp:~mterry/duplicity/pydrive-root-0.7
  - Just a tiny fix to clean up the temporary file we create to find the root ID.
    It's a little surprising for the user if they wind up with this file called
    "i_am_in_root" that they don't know where it came from. Almost sounds like
    they were hacked.
* Merged in lp:~yajo/duplicity/duplicity
  - Support partial metadata sync.
  - Fixes bug #1823858 by letting the user to choose partial syncing. Only the metadata for the target chain
    will be downloaded. If older (or newer) chains are encrypted with a different passphrase, the user will
    be able to restore to a given time by supplying only the passphrase for the chain selected by
    the `--restore-time` option when using this new option.
  - A side effect is that using this flag reduces dramatically the sync time when moving files from one to
    another location, in cases where big amounts of chains are found.
* Prep for release.


New in v0.7.18.2 (2018/10/17)
-----------------------------
* Fixed bug #1788558 again
  - If we get None for size skip check.


New in v0.7.18.1 (2018/08/27)
-----------------------------
* Fixed bug #1788558
  - Treat None as zero when printing log.
* Revert fix for bug #1788599.
  - Was causing problems with directory names


New in v0.7.18 (2018/08/21)
---------------------------
* Fixed bug #1756550 Online html man page is showing a 0 byte file
* Partial fix of bug #1734144 with patch from Joris van Eijden
  - Note: this is really just a partial fix for now, since it only covers
    the case where the local size does not yet match the remote size.  A
    case where -1 is the returned length is not fixed.
  - Number of retries is now same as globals.num_retries.
  - Added standoff delay of 0.5 sec per attempt.
* Fixed bug #1764432 with patch from Robke Geenen
  - Just join the parts together.
* Fixed bug #1717935 with suggestion from strainu
  - Use urllib.quote_plus() to properly quote pathnames passed via URL
* Fixed bug #1780617 Test fail when GnuPG >= 2.2.8
  - Relevant change in GnuPG 2.2.8: https://dev.gnupg.org/T3981
  - Added '--ignore-mdc-error' to all gpg calls made.
* Fixed bug #1785520 with patch from Chris Hunt
  - Fix for B2 version 1.3.4 just released
* Fix a 2to3 error in ssh_paramiko_backend.py


New in v0.7.17 (2018/02/26)
---------------------------
* Removed changes made in bug #1044715 Provide a file history feature
  - Changes required too much memory to carry in the manifest
  - The option --file-changed in collection-status is now invalid
  - This will close bugs: #1730451, #896728, #1526557, #1550176
  - Starting a full backup will be needed to fully utilize this fix
* Fix update of Launchpad Translations.  Translations were not being picked
  up on a daily basis and we got several months behind.


New in v0.7.16 (2018/01/12)
---------------------------
* Fixed bug #1733057 AttributeError: 'GPGError' object has no attribute 'decode'
  - Replaced call to util.ufn() with call to util.uexc().  Stupid typo!
* More fixes for Unicode handling
  - Default to 'utf-8' if sys.getfilesystemencoding() returns 'ascii' or None
  - Fixed bug #1386373 with suggestion from Eugene Morozov
* Patched in lp:~crosser/duplicity/fix-oauth-flow
  - Fixed bug #1638236 "BackendException with oauth2client 4.0.0"
* Patched in lp:~crosser/duplicity/dpbx-fix-file-listing
  - Fixed bug #1639664 "Dropbox support needs to be updated for Dropbox SDK v7.1"
* Patched in lp:~crosser/duplicity/fix-small-file-upload
  - Fixed small file upload changes made in Dropbox SDK v7.1
* Fix pylint error in webdavbackend.py


New in v0.7.15 (2017/11/13)
---------------------------
* Fixed bug introduced in new megabackend.py where process_commandline()
  takes a string not a list.  Now it takes both.
* Updated web page for new megabackend requirements.
* Patched in lp:~mterry/duplicity/more-decode-issues
  - Here's some fixes for another couple UnicodeDecodeErrors.
  - The duplicity/dup_time.py fixes when a user passes a utf8 date string (or a string with bogus
    utf8 characters, but they have to really try to do that). This is bug 1334436.
  - The bin/duplicity change from str(e) to util.uexc(e) fixes bug 1324188.
  - The rest of the changes (util.exception_traceback and bin/duplicity changes to use it) are to
    make the printing of exceptions prettier. Without this, if you see a French exception, you see
    "accept\xe9es" instead of "acceptées".
  - You can test all of these changes in one simple line:
    $ LANGUAGE=fr duplicity remove-older-than $'accept\xffées'
* Fix backend.py to allow string, list, and tuple types to support megabackend.py.
* Fixed bug #1715650 with patch from Mattheww S
  - Fix to make duplicity attempt a get first, then create, a container
    in order to support container ACLs.
* Fixed bug #1714663 "Volume signed by XXXXXXXXXXXXXXXX, not XXXXXXXX"
  - Normalized comparison length to min length of compared keys before comparison
  - Avoids comparing mix of short, long, or fingerprint size keys.
* Merged in lp:~mterry/duplicity/rename-dep
  - Make rename command a dependency for LP build
* Fixed bug #1654756 with new b2backend.py module from Vincent Rouille
  - Faster (big files are uploaded in chunks)
  - Added upload progress reporting support
* Fixed bug #1448094 with patch from Wolfgang Rohdewald
  - Don't log incremental deletes for chains that have no incrementals
* Fixed bug #1724144 "--gpg-options unused with some commands"
  - Add --gpg-options to get version run command
* Fixed bug #1720159 - Cannot allocate memory with large manifest file since 0.7.03
  - filelist is not read if --file-changed option in collection-status not present
  - This will keep memory usage lower in non collection-status operations
* Fixed bug #1723890 with patch from Killian Lackhove
  - Fixes error handling in pydrivebackend.py
* Fixed bug #1730902 GPG Error Handling
  - use util.ufn() not str() to handle encoding


New in v0.7.14 (2017/08/31)
---------------------------
* Merged in lp:~dawgfoto/duplicity/skip_sync_collection_status
  - collection-status should not sync metadata
  - up-to-date local metadata is not needed as collection-status is
    generated from remote file list
  - syncing metadata might require to download several GBs
* Fixed slowness in 'collection-status' by basing the status on the
  remote system only.  The local cache is treated as empty.
* Fixed encrypted remote manifest handling to merely put out a non-fatal
  error message and continue if the private key is not available.
* Patched in lp:~mterry/duplicity/giobackend-display-name
  - giobackend: handle a wider variety of gio backends by making less assumptions;
    in particular, this fixes the google-drive: backend
* Fixed bug #1709047 with suggestion from Gary Hasson
  - fixed so default was to use original filename
* Fixed PEP8 errors in bin/duplicity
* Merged in lp:~mterry/duplicity/gio_child_for_display_name_0.7
  - gio: be slightly more correct and get child GFiles based on display name
* Fixed bug #1711905 with suggestion from Schneider
  - log.Warn was invoked with log.warn in webdavbackend.py
* Merged in lp:~mterry/duplicity/gpg-tag-versions
  - Support gpg versions numbers that have tags on them.
  - This can happen if you build gpg from git trunk (e.g. 2.1.15-beta20). Or if you run
    against the freedesktop flatpak runtime (e.g. 2.1.14-unknown).
* Fixed bug #1394386 with new module megabackend.py from Tomas Vondra
  - uses megatools from https://megatools.megous.com/ instead of mega.py library
    which has been deprecated
  - fixed copyright and PEP8 issues
  - replaced subprocess.call() with self.subprocess_popen() to standardize
* Fixed bug #1713640 with patch from Aleksandar Ivanisevic
  - replace 2.7 syntax with 2.6 equivalent
* Fixed bug #1538333 Assertion error in manifest.py: assert filecount == ...
  - Made sure to never pass .part files as true manifest files
  - Changed assert to log.Error to warn about truncated/corrupt filelist
  - Added unit test to make sure detection works
  - Note: while this condition is serious, it will not affect the basic backup and restore
    functions.  Interactive options like --list-files-changed and --file-changed will not
    work correctly for this backup set, so it is advised to run a full backup as soon as
    possible after this error occurs.
* Fixed bug #1638033 Remove leading slash on --file-to-restore
  - code already used rstrip('/') so change to just strip('/')


New in v0.7.13.1 (2017/06/18)
-----------------------------
* Fixed problem in dist/makedist when building on Mac where AppleDouble
  files were being created in the tarball.  See:
  https://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x


New in v0.7.13 (2017/06/12)
---------------------------
* Fixed bug #1680682 with patch supplied from Dave Allan
  - Only specify --pinentry-mode=loopback when --use-agent is not specified
* Fixed man page that had 'cancel' instead of 'loopback' for pinentry mode
* Fixed bug #1684312 with suggestion from Wade Rossman
  - Use shutil.copyfile instead of os.system('cp ...')
  - Should reduce overhead of os.system() memory usage.
* Fixed bug #1320832 with suggestion from Oskar Wycislak
  - Use chunks instead of reading it all in swiftbackend
* Fixed bug #1689632 with patch from Howard Kaye
  - On MacOS, the tempfile.TemporaryFile call erroneously raises an
    IOError exception saying that too many files are open. This causes
    restores to fail randomly, after thousands of files have been restored.
* Fixed bug #1320641 and others regarding lockfile
  - swap from lockfile to fasteners module
  - use an fcntl() style lock for process lock of duplicity cache
  - lockfile will now clear if duplicity is killed or crashes
* May have finally fixed bug #1556553, "Too many open files...".
  - Applied patch from Howard Kaye, question #631423.  The fix is to dup
    the file descriptor, and then close the file in the deallocator
    routine in the glue code. Duping the file lets the C code and the Python
    code each close the file when they are done with it.
  - Invalidated and removed the fix put in for bug #1320832.
  - Caveat: long incremental chains will still eat up a large number of file
    descriptors.  It's a very risky practice, so I'm not inclined to fix it.
* Revisited bug #670891 with patch from Edgar Soldin
  - Forced librsync.PatchedFile() to extract file object from TemporaryFile()
    object when on Windows or Cygwin systems.  This allows us to avoid the
    problem of tmpfile() use which creates temp files in the wrong place.
  - See discussion at https://bugs.launchpad.net/duplicity/+bug/670891
* Fix bug #1672540 with patch from Benoit Nadeau
  - Rename would fail to move par files when moving across filesystems.
  - Patch uses shutil.move() to do the rename instead.
* Fixed bug #1265765 with patches from Matthias Larisch and Edgar Soldin
  - SSH Paramiko backend now uses BufferedFile implementation to enable
    collecting the entire list of files on the backend.
* Copy.com is gone so remove copycombackend.py.
* Merged in lp:~xlucas/duplicity/swift-multibackend-bug
  - Fix a bug when swift backend is used in a multibackend configuration.
* Merged in lp:~duplicity-team/duplicity/po-updates


New in v0.7.12 (2017/03/21)
---------------------------
* Fixed bug #1623342 with patch supplied by Daniel Jakots
  - Failing test on OpenBSD because tar/gtar not found
* Fixed bug #1654220 with patch supplied by Kenneth Newwood
  - Duplicity fails on MacOS because GPG version parsing fails
* Fixed bug #1655268 "--gpg-binary option not working"
  - If gpg binary is specified rebuild gpg profile using new binary location
* Fixed bug #1658283 "Duplicity 0.7.11 broken with GnuPG 2.0"
  - Made gpg version check more robust than just major version
  - Now use --pinentry-mode=loopback on gpg 2.1 and greater
  - Removed check for non-Linux systems, a false problem
* Merged in lp:~matthew-t-bentley/duplicity/duplicity
  - Sets a user agent. Backblaze asked for this in case there are errors that originate
    from the Duplicity B2 backend
  - Only retrieves a new upload URL when the current one expires, to bring it in line
    with their best practices for integrations: https://www.backblaze.com/b2/docs/integration_checklist.html
* Add detail about import exceptions in onedrivebackend.py
* Fixed bug #1657916 with patch supplied by Daniel Harvey
  - B2 provider cannot handle two backups in the same bucket
* Fixed bug #1603704 with patch supplied by Maciej Bliziński
  - Crash with UnicodeEncodeError
* Some fixes to gpg.py to handle gpg1 & gpg2 & gpg2.1 commandline issues
  - --gpg-agent is optional on gpg1, but on gpg2 it is used automatically
  - --pinentry-mode is not a valid opt until gpg2.1, so condition on that
* Fixed bug #1367675 - IMAP Backend does not work with Yahoo server
  - added the split() as needed in 'nums=list[0].strip().split(" ")'
  - the other fixes mentioned in the bug report comments were already done
* Fixed bug #1671852 - Code regression caused by revision 1108
  - change util.uexc() back to bare uexc()
* Fixed bug #1668750 - Don't mask backend errors
  - added exception prints to module import errors


New in v0.7.11 (2016/12/31)
---------------------------
* Fixed bugs #815510 and #1615480
  - Changed default --volsize to 200MB
* Merged in lp:~mstoll-de/duplicity/duplicity
  - Backblaze announced a new domain for the b2 api
* Merged in lp:~aaron-whitehouse/duplicity/bug_1620085_exclude-if-present-locked-folder
  - Fixes Bug #1620085: --exclude-if-present gives OSError looking for tag in locked folders
* Fixed bug #1623342 with patch from Daniel Jakots
  - failing test on OpenBSD because tar/gtar not found
* Merged in lp:~mwilck/duplicity/duplicity
  - GPG: enable truly non-interactive operation with gpg2
  - This patch fixes the IMO unexpected behavior that, when using GnuPG2, a pass phrase dialog always pops up for
    saving backups. This is particularly annoying when trying to do unattended / fully automatic backups.
* Fixed bug #1621194 with code from Tornhoof
  - Do backup to google drive working without a service account
* Fixed bug #1642098 - does not create PAR2 archives when '--par2-options' is used
  - Missing space between par2-options plus default options
* Fix bug using 40-char sign keys, from Richard McGraw on mail list
  - Remove truncation of argument and adjust comments
* Merged in lp:~dernils/duplicity/robust-dropbox-backend
  - Added new command line option --backend-retry-delay
    that allows to determine the time that duplicity sleeps
    before retrying after an error has occured.
  - Added some robustness to dpbxbackend.py that ensures re-authentication
    happens in case that a socket is changed (e.g. due to a forced reconnect
    of a dynamic internet connection).
* Merged in lp:~ed.so/duplicity/manpage.fixes
  - Fix html output via rman on the website
* Merged in lp:~horgh/duplicity/copy-symlink-targets-721599
  - Add --copy-links to copy symlink contents, not just the link itself.
* Merged in lp:~aaron-whitehouse/duplicity/Bug_1624725_files_within_folder_slash
  - Fixed Bug #1624725, so that an include glob ending in "/" now includes folder contents (for globs with
    and without special characters). This preserves the behaviour that an expression ending in "/" only
    matches a folder, but now the contents of any matching folder is included.
* Fix problem with gpg2 in yakety and zesty
* Fix Bug #1642813 with patch from Ravi
  - If stat() returns None, don't attempt to set perms.
* Merged in lp:~breunigs/duplicity/amazondrive3
  - As reported on the mailinglist, if a space is entered while duplicity asks for the URL, it fails.
    Since all important spaces are URL encoded anyway, this should be fine even if there are spaces in
    the URL at all. I also patched it in the onedrive backend, because it must have similar issues.
* Prep for 0.7.11


New in v0.7.10 (2016/08/20)
---------------------------
* Merged in lp:~mwilck/duplicity/0.7-series
  - Speedup of path_matches_glob() by about 8x.  See
    https://code.launchpad.net/~mwilck/duplicity/0.7-series/+merge/301332
    for more details.
* Remove -w from setsid in functional tests.
* Fixed conflict in merge from Martin Wilck and applied
  - https://code.launchpad.net/~mwilck/duplicity/0.7-series/+merge/301492
  - merge fixes setsid usage in functional testing.
* Fixed bug #1612472 with patch from David Cuthbert
  - Restore from S3 fails with --with-prefix-archive if prefix includes '/'
* Merged in lp:~arashad.ahamad/duplicity/duplicity_latest
  - Changes for connecting to IBM Bluemix ObjectStorage.  See man page.
* Merged in lp:~fenisilius/duplicity/acd_init_mkdir
  - Allow duplicity to create remote folder


New in v0.7.09 (2016/07/24)
---------------------------
* Fixed bug #1600692 with patch from Wolfgang Rohdewald
  - Allow symlink to have optional trailing slash during verify.
* Merged in lp:~aaron-whitehouse/duplicity/07-fix_deja_dup_error_on_locked_files
  - Revert log.Error to log.Warn, as it was prior to the merge in rev 1224,
    as this was affecting other applications (e.g. deja dup; Bug #1605939).
* Merged in lp:~duplicity-team/duplicity/po-updates


New in v0.7.08 (2016/07/02)
---------------------------
* Merged in lp:~noizyland/duplicity/fix_azurebackend_typo
  - Fix typo in error handling code
* Merged in lp:~ghoz/duplicity/swift-prefix
  - adds the abiliy to use path in the swift backend, in order to have multiple
    backups to the same container neatly organized.
* Fixed bug #1573957 with patches from Dmitry Nezhevenko
  - upload last chunk with files_upload_session_finish to avoid extra request
  - upload small files using non-chunked api
* Fixed bug #1586934 with patches from Dmitry Nezhevenko
  - fixes error handling in wrapper
* Fixed bug #1586992 with patches from Dmitry Nezhevenko
  - Patch adds _delete_list to Par2Backend. And _delete_list fallbacks to
    _delete calls if wrapped backend has no _delete_list.
* Fixed bug #1589038 with patches from Malte Schröder
  - Added ignore_case option to selection functions
* Merged in lp:~mstoll-de/duplicity/b2-reauth
  - Fixes bug #1588503 b2: large uploads fail due to expired auth token
* Merged in lp:~aaron-whitehouse/duplicity/fix_pep8
  - Fix PEP8 error in onedrivebackend.py (space before bracket)
* Fixed bug #822697 ssh-options not passed in rsync over ssh
  - Added globals.ssh_options to rsync command line
* Increased default volume size to 200M, was 25M
* Fixed README-REPO to no longer mention 0.6-series
* Merged in lp:~aaron-whitehouse/duplicity/fix_stat_errors
  - Only give an error about not being able to access possibly locked file if
    that file is supposed to be included or scanned (i.e. not excluded).
    Fixes Bug #1089131
* Fixed bug #1594780 with patches from B. Reitsma
  - Use re.finditer() to speed processing
* Merged in lp:~aaron-whitehouse/duplicity/PEP8_W503_fixes
  - Fix PEP8 W503 errors (line break before binary operator) and enable the
    PEP8 test for this in test_code.CodeTest.
* Merged in lp:~aaron-whitehouse/duplicity/PEP8_line_length
  - Set line length error length to 120 (matching tox.ini) for PEP8 and
    fixed E501(line too long) errors.
* Merged in lp:~duplicity-team/duplicity/po-updates
* Fix bug using 40-char sign keys, from Richard McGraw on mail list
  - Remove truncation of argument and adjust comments


New in v0.7.07.1 (2016/04/19)
---------------------------
* Fixed bug #1568677 duplicity fails to use existing S3 bucket in boto backend
  - bug introduced by incomplete fix of bug #1296793
  - simplified setting of bucket locations
* Fixed bug #1569523 get_bucket unknown keyword location and my_location name error
  - bug introduced in improper fix of bug #1568677
  - gotta love those inconsistent APIs
* Fixed bug #1571134 incompatible with python-oauth2client version 2.x
  and #1558155 PyDrive backend broken, needs update to oauth2client library
  - used patch from https://bugs.debian.org/820725 but made changes
    to allow the user to continue using the old version
* Fixed bug #1570293 duplicity is very slow due to excessive fsync
  - removed flush() after write.
  - revert to previous version
* Merged in lp:~aaron-whitehouse/duplicity/07-fix_deja_dup_error_on_locked_files
  - Revert log.Error to log.Warn, as it was prior to the merge in rev 1224,
    as this was affecting other applications (e.g. deja dup; Bug #1605939).


New in v0.7.07 (2016/04/10)
---------------------------
* Merged in lp:~matthew-t-bentley/duplicity/b2
  - Fix import and error typos.
  - Allow multiple backups in the same bucket.
  - Fixes bug #1523498.
  - A couple fixes allowing multiple backups to be hosted in different
    folders in the same bucket as well as some logging for -v9.
* Random stuff:
  - remove RPM stuff from makedist
  - have makedist pull directly from VCS, not local dir
  - update po translation directory and build process
  - clean up some odd error messages
  - move Pep8 ignores to tox.ini
  - supply correct path for pydevd under Mac
  - fix some tests to run under Linux and Mac
* Partial fix for bug #1529606 - shell code injection in lftpbackend
  - still need to fix the other backends that spawn shell commands
* Make test_restart compatible with both GNUtar and BSDtar
* Fix stupid issue with functional test path for duplicity
* Applied patch from shaochun to fix bug #1531154,
  - --file-changed failed when file contains spaces
* Applied patch from abeverly to fix bug #1475890
  - allow port to be specified along with hostname on S3
  - adjusted help text and man page to reflect the change
* Undo changes to test_restart.py.  GNU tar is needed.
* Fix minor pep8 nit in collections.py
* Applied changes from ralle-ubuntu to fix bug 1072130.
  - duplicity does not support ftpes://
* Fixed bug #1296793 - Failed to create bucket
  - use S3Connection.lookup() to check bucket exists
  - skips Boto's Exception processing for this check
  - dupe of bug #1507109 and bug #1537185
* Merged in lp:~mifchip/duplicity/duplicity
  - fix bug #1313964, absolute path doesn't work for FTP
* Merged in lp:~fpytloun/duplicity/webdav-gssapi
  - support GSSAPI authentication in webdav backend
* Add more pylint ignore warnings tags
* Adjust so test_restart.py can run on Mac as well
* Fix for bug #1538333 - assert filecount == len(self.files_changed)
  - added flush after every write for all FileobjHooked files which
    should prevent some errors when duplicity is forcibly closed.
* Fix bug #1540279 - mistake in --help
* Applied patch from kay-diam to fix error handling in ssh pexpect,
  fixes bug #1541314
* Fixed a patching error in ssh_pexpect_backend.py
* Merged in lp:~fpytloun/duplicity/webdav-gssapi-fix
  - Make kerberos optional for webdav backend
* Merged in lp:~harningt/duplicity/multibackend-mirror
  - This changeset addresses multibackend handling to permit a
    mirroring option in addition to its "stripe" mode to make it
    a redundancy tool vs space-expansion tool. To do this without
    changing the configuration too much, I used the query string
    that would generally go unused for files to specify behavior
    that applies to all items inside the configuration file.
* Added acdclibackend.py from Stefan Breunig and Malay Shah
  - renamed from amazoncloudbackend to stress use of acd_cli
* Fixed some 2to3 and Pep8 issues that had crept in
* Backed out changes made by patching for bug #1541314.  These
  patches should not have been applied to the 0.7 series.
* Merged in lp:~rye/duplicity/mediafire
  - Backend for https://www.mediafire.com
  - Requires https://pypi.python.org/pypi/mediafire/ installed.
* Reverted changes made in rev 1164 w.r.t. getting the source from
  VCS rather than local directory.  Fixes bug #1548080.
* More fixes to dist/makedist to make it more OS agnostic.
* Merged in lp:~ed.so/duplicity/webdav.lftp.ssl-overhaul
    duplicity.1, commandline.py, globals.py
    - added --ssl-cacert-path parameter
    backend.py
    - make sure url path component is properly url decoded,
      in case it contains special chars (eg. @ or space)
    lftpbackend.py
    - quote _all_ cmd line params
    - added missing lftp+ftpes protocol
    - fix empty list result when chdir failed silently
    - added ssl_cacert_path support
    webdavbackend.py
    - add ssl default context support for python 2.7.9+
      (using system certs eg. in /etc/ssl/certs)
    - added ssl_cacert_path support for python 2.7.9+
    - gettext wrapped all log messages
    - minor refinements
* Applied patch from Dmitry Nezhevenko to upgrade dropbox backend:
  - update to SDK v2
  - use chunked upload
* Merged in lp:~aaron-whitehouse/duplicity/improve_present_get_sf_man_page
  - Improve man page entry for --exclude-if-present
* Merged in lp:~aaron-whitehouse/duplicity/split_glob_matching_from_select
  - Move glob matching code out of selection.py's Select function and
    into globmatch.py.
* Fix bug reported on the mailing list from Mark Grandi (assertion error
  while backing up).  In file_naming.parse() the filename was being lower
  cased prior to parsing.  If you had used a prefix with mixed case, we
  were writing the file properly, but could not find it in the backend.
* Merged in lp:~duplicity-team/duplicity/po-updates


New in v0.7.06 (2015/12/07)
---------------------------
* Merged in lp:~mnjul/duplicity/s3-infreq-access
  - This adds support for AWS S3's newly announced Infrequent Access
    storage class and is intended to implement Blueprint:
    https://blueprints.launchpad.net/duplicity/+spec/aws-s3-std-ia-class .
  - A new command line option, --s3-use-ia, is added, and boto backend
    will automatically use the correct storage class value depending on
    whether --s3-use-rrs and --s3-use-ia is set. Command line parser will
    prompt error if both --s3-use-ia and --s3-use-rrs are used together,
    as they conflict with each other.
  - The manpage has been updated giving a short explanation on the new
    option. Its wording derives from Amazon's official announcement:
    https://aws.amazon.com/about-aws/whats-new/2015/09/announcing-new-\
    amazon-s3-storage-class-and-lower-glacier-prices/
* The ptyprocess module no longer supports Python 2.6, so fix tox.ini to
  use an older version.  Make explicit environs for all tests.
* Upgrade to newest version of pep8 and pylint.   Add three ignores
  to test_pep8 and one to test_pylint to get the rest to pass.  They
* Applied patch from Alexander Zangerl to update to changes in lockfile
  API 0.9 and later.  Updated README to notify users.
* Modded tox.ini to use the latest lockfile.
* Merged in lp:~ed.so/duplicity/setup.shebang
  - Having the python interpreter searched in the PATH is much more
    flexible than the /usr/bin/python inserted into our scripts shebang
    by setuptools.  This patch prevents that. don't touch my shebang! :)
* Cleanup issues around Launchpad build, mainly lockfile >= 0.9.
* Merged in lp:~michal-s/duplicity/duplicity
  - WindowsAzureMissingResourceError and WindowsAzureConflictError
    changed due to SDK changes.
  are all valid in our case.
* Reversed previous changes to lockfile.  Now it will take any version
  extant in the LP build repository.  (PyPi is not avail in LP build).
* Merged in lp:~ed.so/duplicity/tempfile.tempdir
  - make sure packages using python's tempfile create temp files in
    duplicity's temp dir
* Fixed bug #1511308 - Cannot restore no-encryption, no-compression backup
  - Corrected code to include plain file in write_multivolume()
  - Added PlainWriteFile() to gpg.py
* Merged in lp:~michal-s/duplicity/duplicity
  - Fix azurebackend storage class import
* Merged in lp:~feraudet/duplicity/fix
  - Fix missing SWIFT_ENDPOINT_TYPE env var, bug 1519694.
* Fix bug #1520691 - Shell Code Injection in hsi backend
  - Replace use of os.popen3() with subprocess equivalent.
  - Added code to expand relative program path to full path.
  - Fix hisbackend where it expected a list not a string.
* Merged in lp:~noizyland/duplicity/azurebackend-fixes
  - Support new version of Azure Storage SDK
  - Refactor _list method to support containers with >5000 blobs
* Merged in lp:~matthew-t-bentley/duplicity/b2
  - Adds a backed for BackBlaze's (currently beta) B2 backup service.
  - This adds backends/b2backend.py, modifies log.py to add an
    error code and modifies commandline.py to add the b2://
    example to the help text.
* Pep8 corrections for recently released code.
* Fixed bug #1260666 universally by splitting the filelist for
  delete before passing to backend.
* Fixed bug #1369243 by adjusting messages to be more readable.
* Fixed bug #1375019 with patch from Eric Bavier (home to tmp).
* Fixed bug #1379575 with patch from Tim Ruffing (shorten webdav response).
* Fixed bug #1492301 with patch from askretov (manually refresh oauth).


New in v0.7.05 (2015/09/15)
---------------------------
* Merged in lp:~aaron-whitehouse/duplicity/fix_patch_error
  - Change use of mock.patch in unit tests to accommodate the obsolete
    version of python-mock on the build server.
* Fixed Bug 1476019 S3 storage bucket not being automatically created
  with patch from abeverley
* Merged in lp:~aaron-whitehouse/duplicity/launchpad_tox_profile
  - Add tox testing profile that mimics the packages installed on the
    Launchpad build server, to reduce the likelihood of tests passing
    our test suite, but failing on the build server (e.g. because of
    the out-of-date mock version).
* Merged in lp:~aaron-whitehouse/duplicity/disable_code_tests_for_lpbuildd
  - Set RUN_CODE_TESTS to 0 for lpbuildd tox profile, reflecting its value
    on the Launchpad build server (and therefore skipping PEP8, 2to3 and
    pylint). More accurately reflects the system we are mimicking and saves
    approximately 1 minute per test run.
* Fixed Bug 1438170 duplicity crashes on resume when using gpg-agent with
  patch from Artur Bodera (abodera).  Applied the same patch to incremental
  resumes as well.
* Merged in lp:~w.baranowski/duplicity/selection_debug
  - This little patch logs debug messages concerning path selection process,
    and so allows users to debug their include/exclude configuration.
* Merged in lp:~germar/duplicity/par2removefix
  - After reorganisation in revision 981 and the fix for bug #1406173 the
    par2backend does not remove .par2 files anymore when removing
    duplicity-*.gpg files.
  - This banch adds an unfiltered_list() method which is used in
    delete() and delete_list()
* Updated man pages to reflect more contributors.
* Fix bug #1493573.  Correct option typo in man page.
* Fix bug #1494228 CygWin: TypeError: basis_file must be a (true) file
  - The problem that caused the change to tempfile.TemporaryFile was due
    to the fact that os.tmpfile always creates its file in the system
    temp directory, not in the directory specified.  The fix applied was
    to use os.tmpfile in cygwin/windows and tempfile.TemporaryFile in all
    the rest.  This means that cygwin is now broken with respect to temp
    file placement of this one file (deleted automatically on close).
* Merged in lp:~bmerry/duplicity/pydrive-id-cache
  - This fixes the issue a number of users (including myself) have been
    having with duplicity creating files with duplicate filenames on
    Google Drive. It keeps a runtime cache of filename to object ID
    mappings, so that once it has uploaded an object it won't be fooled
    by weakly consistent directory listings.
* Merged in lp:~duplicity-team/duplicity/po-updates


New in v0.7.04 (2015/08/02)
---------------------------
* Merged in lp:~noizyland/duplicity/fix-progress
  - Fixes bug 1264744.  selection.filelist_globbing_get_sfs leaves the
    filelist file object's position at the end of the file. When the
    --progress option is used the filelists need to be read twice. On
    the second read nothing is read from the file because file has
    already been read and the position is EOF.  This patch calls seek(0)
    on the filelist to reset the position to BOF so that subsequent
    read() calls will return data.
* Added pylint ignore error in webdavbackend.py.
* Merged in lp:~bmerry/duplicity/pydrive-regular
  - This implements the proposal made by somebody else
    (http://lists.gnu.org/archive/html/duplicity-talk/2015-02/msg00037.html)
    to allow the pydrive backend to work with a normal drive account instead
    of a service account. It seems to be working for me: I was able to migrate
    seamlessly from the gdocs backend. It's set up so that a service account
    can still be used, depending on which environment variable is set.
    The man page is updated to describe how to use the new functionality.
* Merged in lp:~ed.so/duplicity/gdocs.pydrive
  - make pydrive new gdocs default backend
  - keep gdata backend as gdata+gdocs://
* Merged in lp:~raymii/duplicity/fix-swiftbackend-max-10000-files-in-list
  - Swiftclient by default returns at max 10000 files. By adding
    full_listing=True we make sure all objects are returned.
    Ref: https://lists.nongnu.org/archive/html/duplicity-talk/2015-05/msg00060.html
    and http://docs.openstack.org/developer/python-swiftclient/swiftclient.html#swiftclient.client.get_container
* Fix a couple of PEP8 glitches.
* Fixed bug 791794 - description of --gpg-options is misleading, Simply
  needed to add the '--' before the options as in "--opt1 --opt2=parm".
* Fixed bug 1465335 - pydrive still use files in trash can - with patch
  from Kuang-che Wu to ignore trashed files.
* Fixed bug 1452263 - par2 option not working on small processors - with patch
  from Kuang-che Wu to ignore default 30 second timeout.
* Fixed bug 1466160 - pydrive backend is slow to remove old backup set - with
  patch from Kuang-che Wu to implement _delete_list().
* Fixed bug 1466582 - reduce unnecessary syscall with --exclude-if-present - with
  patch from Kuang-che Wu to make sure resulting path is a directory.
* Merged in lp:~ed.so/duplicity/gpg.binary
  - new parameter --gpg-binary allows user to point to a different gpg binary,
    not necessarily in path
* Merged in lp:~aaron-whitehouse/duplicity/fix_POTFILES.in_and_run-tests
  - Fixed two filename references in po/POTFILES.in, a mistake which crept in in
    rev 1093 and caused testing/run-tests to fail with "IndexError: list index
    out of range".
* Merged in lp:~aaron-whitehouse/duplicity/reactivate_progress_test
  - Re-enable the test of the --progress option (test_exclude_filelist_progress_option),
    which was marked as an expected failure. The issue causing this test to fail was
    fixed in revision 1095 and the test now passes.
* Fixed bug 1471348 Multi back-end doesn't work with hubiC
  - added init of appropriate superclass in both cases.
* Fixed bug 1471348 Multi back-end doesn't work with hubiC (again)
  - hubiC should reach up to duplicity.backend.__init__
* Merged in lp:~aaron-whitehouse/duplicity/bug_884371
  - Fixed Bug #884371 - Stopped an exclude glob trumping an earlier scan glob, but also
    ensured that an exclude glob is not trumped by a later include. This fix is important,
    as without it files that are specified to be included are not being backed up as expected.
  - Fixed Bug #932482 - a trailing slash at the end of globs no longer prevents them working
    as expected.
* Merged in lp:~aaron-whitehouse/duplicity/reenable_tests
  - Re-enable unit.test_selection tests that had been temporarily commented out.
* Merged in lp:~aaron-whitehouse/duplicity/trailing_slash_match_dirs
  - Made globs with trailing slashes only match directories, not files, fixing Bug #1479545.
* Merged in lp:~aaron-whitehouse/duplicity/improve_tox_and_python2-6_testing
  - Testing improvements, particularly in relation to testing against Python version 2.6:
    * tox.ini fixed so that it is possible to run individual tests against both Python 2.6 and 2.7;
    * updated test_code.py to use unittest2 for Python versions < 2.7 (instead of failing);
    * ./run-tests now correctly runs all tests against both Python 2.6 and 2.7; and
    * improved testing directions in README-REPO.
* Merged in lp:~dag-stenstad/duplicity/swift_authversion_3_support
  - Added support for Openstack Identity v3 in the Swift backend.
* Merged in lp:~aaron-whitehouse/duplicity/fix_2to3_issues
  - Fixed 2to3 issues. Updated README-REPO with more test information. Updated pylint and
    test_diff2 descriptions to make it clear these require packages to be installed on the
    sytem to pass. All tests pass on Python 2.6 and Python 2.7 as at this revision.


New in v0.7.03 (2015/05/11)
---------------------------
* Merged in lp:~aaron-whitehouse/duplicity/filelist_combine
  - Merged globbing and non-globbing filelists to use the same code path
    and all accept globbing characters. Added deprecation warning to the
    --exclude-globbing-filelist and include-globbing-filelist options in
    commandline.py and hid them from help output. Updated the manual
    (and unit tests) accordingly.
  - Note that this does trigger a change in behaviour for duplicity.
    Previously, include patterns in include-filelist did not match files
    in a directory that was included, so /usr/local in an include file
    would not have matched /usr/local/doc. Now, this folder would be
    included, as would occur if --include or the old
    --include-globbing-filelist was used. Additional lines will therefore
    need to be added to filelists to unambiguously exclude unwanted
    subfolders, if this is intended.
  - Mark --include-filelist-stdin and --exclude-fielist-stdin for
    deprecation and hide from --help output.
* Fix bug 1432999 with hint from Antoine Afalo.
  - '/'s at end of destination cause problems with onedrivebackend.
* Fix bug 1434702 with help from Robin Nehls
  - incorrect response BackendException while downloading signatures file.
* Fix bug 1437789 with patch from pdf
  - par2backend.py incorrect syntax in get()
* Merge in lp:~stynor/duplicity/multi-backend
  - A new backend that allows use of more than one backend stores (e.g. to
    combine the available space from more than one cloud provider to make
    a larger store available to duplicity).
* Move requirements section lower in manpage.
* Merge in lp:~cemsbr/duplicity/duplicity
  - Fix bug 1432229 in Copy.com backend:
    Reply header has no content-type for JSON detection. Now, we also check
    whether the content starts with '{'.
* Fixed bug 1444404 with patch from Samu Nuutamo
  - rdiffdir patch crashes if a regular file is changed to a non-regular
    file (symlink, fifo, ...)
* Fixed bug 1448249 and bug 1449151 thanks to David Coppit.
  - When patching, close base file before renaming
  - Enable --ignore-errors flag in rdiffdir
* Added ability to get single file status from collection-status with
  patch from jitao (bug 1044715), like so:
  $ duplicity collection-status --file-changed c1 file://./foo
* Merge in lp:~sjakthol/duplicity/onedrive-error-message
  - Add proper error message for OneDrive backend when python-requests or
    python-requests-oauthlib is not installed (bug 1453355).


New in v0.7.02 (2015/03/10)
---------------------------
* Merged in lp:~vincegt/duplicity/swift_regionname
  - Fixes bug #1376628
  - Add mapping of SWIFT_REGIONNAME to select region inside SWIFT when a
    provider proposes more than one region.
* Merged in lp:~aaron-whitehouse/duplicity/progress_option_error
  - Added test_exclude_globbing_filelist_progress_option into
    functional/test_selection.py, which shows the error reported in
    Bug #1264744 - that the --exclude-globbing-filelist does not backup
    the correct files if the --progress option is used. Test is marked as
    an expected failure so as not to cause the test suite to fail.
* Merged in lp:~noizyland/duplicity/fix_azurebackend_container_names
  - Azure Backend examples have underscores in the container names.  These
    are not valid Azure container names.  The underscores have been replaced
    with hypens and a note about valid container names added to the man page.
  - Also corrects a problem where Azure Exceptions were returing unicode
    strings that were not being handled correctly.
* Merged in lp:~user3942934/duplicity/pydrive
  - Currently duplicity uses gdocs backend for Google Drive backups.
    gdocs uses deprecated API and don't allow backups for managed Google
    accounts.  (see https://bugs.launchpad.net/duplicity/+bug/1315684)
  - Added pydrive backend that solves both of those problems. Published
    also on https://github.com/westerngateguard/duplicity-pydrive-backend.
* Fixed some tabs/spaces problems that were causing install failures.
* Fixed variable typo in commandline.py that was causing build fails.
* Merged in lp:~duplicity-team/duplicity/po-updates
* Remove 'gs' and 's3+http' from uses_netloc[].  Fixes Bug 1411803.
* Fixed bug # 1414418
  - Aligned commandline.py options and help display contents.
  - Aligned commandline.py options and manpage contents.
* Changed --s3_multipart_max_timeout to --s3-multipart-max-timeout to be
  consistent with commandline option naming conventions.
* Applied patch from Adam Reichold to fix bug # 1413792.
* Merged in lp:~angusgr/duplicity/exclude-older-than
  - Add "--exclude-older-than" commandline option, that allows you to only
    back up files with a modification date newer than a particular threshold.
* Merged in lp:~aaron-whitehouse/duplicity/bug_884371_asterisks_in_includes
  - Added tests to unit/test_selection.py and funtional/test_selection.py
    to show the behaviour reported in Bug #884371, i.e. that selection is
    incorrect when there is a * or ** on an include line of a filelist or
    commandline --include.
* Merged in lp:~aaron-whitehouse/duplicity/bug_932482_trailing_slashes_and_wildcards_error
  - Added functional and unit tests to show Bug #932482 - that selection does
    not work correctly when excludes (in a filelist or in a commandline option)
    contain both a single or double asterisk and a trailing slash.
* Misc fixes for the following PEP8 issues:
  - E111, E121, E122, E124, E125, E126, E127, E128, E201, E202, E203,
    E231, E241, E251, E261, E262, E271, E272, E301, E302, E303, E401,
    E502, E701, E702, E703, E711, E721, W291, W292, W293, W391
  - to run pep8 on duplicity use 'pep8 --ignore=E501'
  - see http://pep8.readthedocs.org
* Fixes for 2to3 issues
* Fix spelling error in manpage, bug 1419314.
* Fix _librsyncmodule.c compilation, bug 1416344, thanks to Kari Hautio.
* Really fix bug 1416344 based on comment #5 by Roman Tereshonkov.
* Fix for --pydevd debug environment and location under Eclipse.
* Fix for bug where scp was actually working as scp and not working with
  rsync.net because of using extraneous test command in restricted shell.
  Was trying "test -d 'foo' || mkdir -p 'foo'", now only "mkdir -p foo".
* remove extraneous string format arg in previous scp fix.


New in v0.7.01 (2015/01/11)
---------------------------
Enhancements:
* Undid move of testing/test_code.py.  Instead I fixed it
  so that it would not run during PPA build.  It now needs
  the setting RUN_CODE_TESTS=1 in the environment which is
  supplied in the tox.ini file.
* Moved testing/test_code.py to testing/manual/code_test.py
  so PPA builds would succeed.  Should be moved back later.
* Remove valid_extension() check from file_naming.py.  It was
  causing failed tests for short filenames.  Thanks edso.
* Partial fix for PPA build failures, new backend name.
* Merged in lp:~ed.so/duplicity/fix.dpbx.import
  - fix dpbx import error import lazily
* Merged in lp:~hooloovoo/duplicity/fix-typo-in-test-description
  - Fixed spelling mistake/typo in a description of a test.
* Merged in lp:~mterry/duplicity/missing-unicode-escape
  - Convert restore_dir to unicode before printing.
* Merged in lp:~ed.so/duplicity/lftp.ncftp.and.prefixes
  - retire --ssh-backend, --use-scp parameters
  - introduce scheme prefixes for alternative backend selection
    e.g. ncftp+ftp://, see manpage
  - scp is now selected via scheme e.g. scp://
  - added lftp fish, webdav(s), sftp support
* Merged in lp:~mterry/duplicity/code-nits
  - Fix some pylint/pep8 nits that prevented the test_code.py test from passing.
* Merged in lp:~mterry/duplicity/debian-dir
  - Add a debian/ directory to make it easier to manage the PPAs for duplicity.
* In webdavbackend.py:
  - Fixed bug 1396106 with change by Tim Ruffing, mispelled member.
  - Added missing 'self.' before member in error message.
* Merged in lp:~adrien-delhorme/duplicity/hubic
  - Add Hubic support through pyrax and a custom pyrax_identity module.
* Fixed bug 1385599 with changes by Yannick Molin. SSL settings are now
  conditioned on protocol ftp or ftps.
* Partial fix of bug 1236248 with changes by az, manpage warning about
  --extra-clean, however, recovery with missing sig files is broken.
* Fixed bug 1255453 with changes by Gaudenz Steinlin, report backend import
  results, both normal and failed, at INFO log level.
* Manually merged in lp:~m4ktub/duplicity/0.6-reliability
  - Per fix proposed in Bug #1395341.
* Modded .bzrignore to ignore *.egg test dependencies, normalized, sorted.
* Merged in lp:~ed.so/duplicity/paramiko.identyfile
  - fix identity file parsing of --ssh-options for paramiko
  - manpage fixes
* Source formatted, using PyDev, all source files to fix some easily fixed
  PEP8 issues. Use ignore space when comparing against previous versions.
* Merge in lp:~andol/duplicity/signkeyformat
  - Allow --sign-key to use short format, long format alt. full fingerprint.
* Merge in lp:~hooloovoo/duplicity/verify-not-check-source
  - Tests to validate that duplicity does not check filesystem source during
    verify unless --compare-data is specified
* Merge in lp:~ed.so/duplicity/move_netloc
  - move netloc usage definitions into respective backends
  - fix "[Question #259173]: rsync backend fails"
    https://answers.launchpad.net/duplicity/+question/259173
* Make ssh an unsupported backend scheme
* Temporarily disable RsyncBackendTest and test_verify_changed_source_file
* Merge in lp:~hooloovoo/duplicity/test-verify-improvements
  - Fix up test_verify, which was a bit of a mess:
  - Simplify test_verify.py to just do a simple backup and verify on a
    single file in each test.
  - Modify tests to correctly use --compare-data option.
  - Add tests for when the source files have atime/mtime manipulated.
* Fix duplicity verify to ignore the file system when globals.compare_data is
  False.  This means that verify only validates the viability of the backup
  itself unless --compare-data is specified.
* Reenable test_verify_changed_source_file test
* Merged in lp:~hooloovoo/duplicity/add-additional-verify-tests-for-corrupted-archives
  - Add tests to test_verify.py to test that verify fails if the archive
    file is corrupted. Changed file objects to use the with keyword to ensure
    that the file is properly closed.
  - Small edit to find statement in verify_test.sh to make it work as
    expected (enclose string in quotes).
* Merged in lp:~hooloovoo/duplicity/add-else-to-badupload-try-except
  - Badupload test previously did not have an else in the try-except. The
    test passed if the except was triggered, but would also pass if the
    test did not trigger an error at all.
* Fixed bug 1406173 by applying patch supplied in report
  - Ignore .par2 files in remote file list
* Removed redundant shell test testing/verify_test.sh
* Misc fixes for the following PEP8 issues:
   - E211, E221, E222, E225, E226, E228
   - see http://pep8.readthedocs.org
* Fixed bug 1278529 by applying patch supplied in report
  - Use get_bucket() rather than lookup() on S3 to get proper error msg.
* Merged in lp:~stapelberg+ubuntu/duplicity/add-onedrive-backend
  - Add a Microsoft OneDrive backend
* Merged in lp:~hooloovoo/duplicity/filelist_select_bug_1408411
  - Adds functional test cases that fail because of Bug #1408411 (commented
    out), to assist in fixing that bug.
* Merged in lp:~hooloovoo/duplicity/process_filelists_for_spaces_etc
  - Process filelists to remove imperfections such as blank lines, comments
    and leading/trailing whitespace. Also correctly processes quoted folders
    containing spaces in their names. Extensive unit and functional tests to
    test these changes (and selection more generally).
  - The branch does add an additional folder to testfiles.tar.gz called
    select2. This included a folder with a trailing space, to test the quote
    test. The subfolders also have clearer names than in the "select" folder
    (eg "1sub2sub3") which makes it easier to keep track of issues in tests.
* Merged in lp:~9-sa/duplicity/FixBug1408289
  - Fix bug #1408289
  - Wrong attribute name prevented raise of client exception, working now
* Merged in lp:~noizyland/duplicity/azurebackend
  - Add backend for Azure Blob Storage Service


New in v0.7.00 (2014/10/23)
---------------------------
Enhancements:
* Adjust unit tests to expect single FTP backend
* Merged in lp:~moritzm/duplicity/duplicity
  - Use lftp for both FTP and FTPS
* Merged in lp:~ed.so/duplicity/0.7-dpbx.importfix
  - fix this showstopper with the dropbox backend
    "NameError: global name 'rest' is not defined"
* Merged in lp:~jflaker/duplicity/BugFix1325215
  - The reference to "--progress_rate" in the man page as a parameter is
    incorrect. Should be "--progress-rate".
* Merged in lp:~hooloovoo/duplicity/updated-README-REPO
  - Changes to README-REPO to reflect the restructuring of the directories.
* Fixed bug 1375304 with patch supplied by Aleksandar Ivanovic
* Merged in lp:~ed.so/duplicity/webdav200fix-0.7
  - webdav backend fix "BackendException: Bad status code 200 reason OK. " when
    restarting an interrupted backup and overwriting partially uploaded volumes.
* Merged in lp:~mterry/duplicity/require-2.6
  - Require at least Python 2.6.
  - Our code base already requires 2.6, because 2.6-isms have crept in. Usually
    because we or a contributor didn't think to test with 2.4. And frankly,
    I'm not even sure how to test with 2.4 on a modern system.
* Merged in lp:~mterry/duplicity/drop-pexpect
  - Drop our local copy of pexpect in favor of a system version.
  - It's only used by the pexpect ssh backend (and if you're opting into that,
    you probably can expect that you will need pexpect) and the tests.
  - I've done a quick smoketest (backed up and restored using
    --ssh-backend=pexpect) and it seemed to work fine with a modern version
    of pexpect.
* Merged in lp:~mterry/duplicity/2.6isms
  - Here's a whole stack of minor syntax modernizations that will become
    necessary in python3. They all work in python2.6.
  - I've added a new test to keep us honest and prevent backsliding on these
    modernizations. It runs 2to3 and will fail the test if 2to3 finds anything
    that needs fixing (with a specific set of exceptions carved out).
  - This branch has most of the easy 2to3 fixes, the ones with obvious and
    safe syntax changes.
  - We could just let 2to3 do them for us, but ideally we use 2to3 as little
    as possible, since it doesn't always know how to solve a given problem.
    I will propose a branch later that actually does use 2to3 to generate
    python3 versions of duplicity if they are requested. But this is a first
    step to clean up the code base.
* Merged in lp:~mterry/duplicity/drop-static
  - Drop static.py.
  - This is some of the oldest code in duplicity! A bzr blame says it is
    unmodified (except for whitespace / comment changes) since revision 1.
  - But it's not needed anymore. Not really even since we updated to python2.4,
    which introduced the @staticmethod decorator. So this branch drops it and
    its test file.
* Merged in lp:~mterry/duplicity/py3-map-filter
  - In py3, map and filter return iterable objects, not lists. So in each case
    we use them, I've either imported the future version or switched to a list
    comprehension if we really wanted a list.
* Merged in lp:~mterry/duplicity/backend-unification
  - Reorganize and simplify backend code.  Specifically:
    - Formalize the expected API between backends and duplicity.  See the new
      file duplicity/backends/README for the instructions I've given authors.
    - Add some tests for our backend wrapper class as well as some tests for
      individual backends.  For several backends that have some commands do all
      the heavy lifting (hsi, tahoe, ftp), I've added fake little mock commands
      so that we can test them locally.  This doesn't truly test our integration
      with those commands, but at least lets us test the backend glue code.
    - Removed a lot of duplicate and unused code which backends were using (or
      not using).  This branch drops 700 lines of code (~20%)
      in duplicity/backends!
    - Simplified expectations of backends.  Our wrapper code now does all the
      retrying, and all the exception handling.  Backends can 'fire and forget'
      trusting our wrappers to give the user a reasonable error message.
      Obviously, backends can also add more details and make nicer error
      messages.  But they don't *have* to.
    - Separate out the backend classes from our wrapper class.  Now there is no
      possibility of namespace collision.  All our API methods use one
      underscore.  Anything else (zero or two underscores) are for the backend
      class's use.
    - Added the concept of a 'backend prefix' which is used by par2 and gio
      backends to provide generic support for "schema+" in urls -- like par2+
      or gio+.  I've since marked the '--gio' flag as deprecated, in favor of
      'gio+'.  Now you can even nest such backends like
      par2+gio+file://blah/blah.
    - The switch to control which cloudfiles backend had a typo.  I fixed this,
      but I'm not sure I should have?  If we haven't had complaints, maybe we
      can just drop the old backend.
    - I manually tested all the backends we have (except hsi and tahoe -- but
      those are simple wrappers around commands and I did test those via mocks
      per above).  I also added a bunch more manual backend tests to
      ./testing/manual/backendtest.py, which can now be run like the above to
      test all the files you have configured in config.py or you can pass it a
      URL which it will use for testing (useful for backend authors).
* Merged in lp:~mterry/duplicity/py2.6.0
  - Support python 2.6.0.
  - Without this branch, we only support python >= 2.6.5 because that's when
    python's urlparse.py module became its more modern incarnation. (I won't
    get into the wisdom of them making such a change in the middle of the
    2.6 lifecycle.)
  - Also, the version of lockfile that I have (0.8) doesn't work with python
    2.6.0 or 2.6.1 due to their implementation of
    threading.current_thread().ident returning None unexpectedly. So this
    branch tells lockfile not to worry about adding the current thread's
    identifier to the lock filename (we don't need a separate lock per thread,
    since our locking is per process).
  - I've tested with 2.6.0 and 2.7.6 (both extremes of our current support).
* Update shebang line to python2 instead of python to avoid confusion.
* Merged in lp:~3v1n0/duplicity/copy.com-backend
  - I've added a backend for Copy.com cloud storage, this supports all the
    required operations and works as it should from my tests.
  - You can use it by calling duplicity with something like:
    copy://account@email.com:your-password@copy.com/duplicity
  - The only thing I've concerns with is the optimized support for _delete_list
    which can't be enabled here because the test_delete_list tries also to
    delete a not-existing files, and it requires the backend not to raise an
    exception in that case (is this somewhat wanted or could we do the same as
    for _delete or _query?)
* Merged in lp:~ed.so/duplicity/webdav200fix-0.7
  - webdav backend fix "BackendException: Bad status code 200 reason OK. " when
    restarting an interrupted backup and overwriting partially uploaded volumes.
* Merged in lp:~mterry/duplicity/webdav-fixes
  - This branch fixes two issues I saw when testing the webdav backend:
  - 1) Errors like the following: "Attempt 1 failed. BackendException: File
    /tmp/duplicity-LQ1a0i-tempdir/mktemp-u2aiyX-2 not found locally after get
    from backend".  These were caused by the _get() method not calling setdata()
    on the local path object, so the rest of the code thought it didn't exist.
  - 2) Some odd issues from stale responses/data. We have a couple places in
    webdavbackend.py where we close the connection before making a request
    because of this problem. But I've changed it to do it every time, more
    reliably, by putting a _close() call inside the request() method.
  - With this, the webdav backend seems fine to me.
* Merged in lp:~antmak/duplicity/0.7-par2-fix
  - Useful fix for verbatim par2cmdline options (like "-t" in par2-tbb version)
* Fixed bug 1327550: OverflowError: signed integer is greater than maximum
  - Major and minor device numbers are supposed to be one byte each.  Someone
    has crafted a special system image using OpenVZ where the major and minor
    device numbers are much larger (ploop devices).  We treat them as (0,0).
* Added sxbacked.py, Skylable backend.  Waiting on man page updates.
* Merged in lp:~ed.so/duplicity/manpage.verify
  - Clarify verify's functionality as wished for by a user surprised with a big
    bandwidth bill from rackspace.
* Merged in lp:~jeffreydavidrogers/duplicity/duplicity
  - This change fixes two small typos in the duplicity man page.
* Merged in lp:~johnleach/duplicity/1315437-swift-container-create
  - Check to see if the swift container exists before trying to create it,
    in case we don't have permissions to create containers. Fixes #1315437
* Merged in lp:~ed.so/duplicity/manpage.blocksize
  - add --max_blocksize doc
  - reorder 'a note on filename prefixes' into alphabetical order


New in v0.6.24 (2014/05/09)
---------------------------
Enhancements:
* Applied two patches from mailing list message at:
  https://lists.nongnu.org/archive/html/duplicity-talk/2014-01/msg00030.html
  "Added command line options to use different prefixes for duplicity files"
  This resolves https://bugs.launchpad.net/duplicity/+bug/1170161 and provides
  a workaround for https://bugs.launchpad.net/duplicity/+bug/1170113
* Merged in lp:~mterry/duplicity/gpg-encode
  - getpass.getpass(prompt) eventually calls str(prompt). Which is a no go,
    if the prompt contains unicode. Here's a patch to always pass getpass() a
    byte string.
  - Our tests didn't catch this because they always set PASSPHRASE. I've added
    a test that passes the passphrase via stdin.
* Merged in lp:~mterry/duplicity/pexpect-fix
  - duplicity has its own copy of pexpect. Use that instead of requiring one
    from the system.
* Merged in lp:~prateek/duplicity/s3-glacier
  - Fixes https://bugs.launchpad.net/duplicity/+bug/1039511
    - Adds support to detect when a file is on Glacier and initiates a restore
      to S3. Also merges overlapping code in the boto backends
  - Fixes https://bugs.launchpad.net/duplicity/+bug/1243246
    - Adds a --s3_multipart_max_timeout input option to limit the max execution
      time of a chunked upload to S3. Also adds debug message to calculate
      upload speed.
* Merged in lp:~ed.so/duplicity/fix.dpbx
  - Fix dpbx backend "NameError: global name 'rest' is not defined"
* Merged in lp:~prateek/duplicity/botoimportfix
  - Switches the boto backend back to using lazy imports so there are no
    complaints during the importing of backends.
* Merged in lp:~germer/duplicity/par2
  - This branch adds Par2 recovery files to duplicity. It is a wrapper backend
    which will create the recovery files and upload them all together with the
    wrapped backend. Corrupt archives will be detected and repaired (if
    possible) on the fly during restore.
  - It can be used with url-string par2+webdavs://USER@HOST/PATH
  - Fixes https://bugs.launchpad.net/duplicity/+bug/426282
* Merged in lp:~fredrik-loch/duplicity/duplicity-S3-SSE
  - Adds support for server side encryption as requested in Bug #996660
* Merged in lp:~mterry/duplicity/drop-u1
  - Ubuntu One is closing shop. So no need to support a u1 backend anymore.
* Merged in lp:~mterry/duplicity/fix-drop-u1
  - Looks like when the drop-u1 branch got merged, its conflict got resolved
    badly. Here is the right version of backend.py to use (and also drops
    u1backend.py from POTFILES).
* Merged in lp:~mterry/duplicity/drop-pexpect
  - Drop our local copy of pexpect in favor of a system version.
  - It's only used by the pexpect ssh backend (and if you're opting into that,
    you probably can expect that you will need pexpect) and the tests.
  - I've done a quick smoketest (backed up and restored using
    --ssh-backend=pexpect) and it seemed to work fine with a modern version
    of pexpect.
* Merged in lp:~mterry/duplicity/2.6isms
  - Here's a whole stack of minor syntax modernizations that will become
    necessary in python3. They all work in python2.6.
  - I've added a new test to keep us honest and prevent backsliding on these
    modernizations. It runs 2to3 and will fail the test if 2to3 finds anything
    that needs fixing (with a specific set of exceptions carved out).
  - This branch has most of the easy 2to3 fixes, the ones with obvious and
    safe syntax changes.
  - We could just let 2to3 do them for us, but ideally we use 2to3 as little
    as possible, since it doesn't always know how to solve a given problem.
    I will propose a branch later that actually does use 2to3 to generate
    python3 versions of duplicity if they are requested. But this is a first
    step to clean up the code base.
* Merged in lp:~mterry/duplicity/drop-static
  - Drop static.py.
  - This is some of the oldest code in duplicity! A bzr blame says it is
    unmodified (except for whitespace / comment changes) since revision 1.
  - But it's not needed anymore. Not really even since we updated to python2.4,
    which introduced the @staticmethod decorator. So this branch drops it and
    its test file.
* Merged in lp:~mterry/duplicity/encode-for-print
  - Encode translated strings before passing them to 'print'.
  - The print command can only apparently handle bytes. So when we pass it
    unicode, it freaks out. There were only four instances I saw where we used
    print, so I figured it was easiest to just convert them to use the log
    framework too.
  - That way all user-visible strings go through that framework and are subject
    to the same encoding rules.
* Merged in lp:~mterry/duplicity/more-test-reorg
  - Here's another test reorganization / modernization branch. It does the
    following things:
    - Drop duplicity/misc.py. It is confusing to have both misc.py and util.py,
      and most of the code in misc.py was no longer used. I moved the one
      function that was still used into util.py.
    - Consolidated the various ways to run tests into just one. I made tox runs
      go through ./setup.py test, rather than nosetests. And I made the
      ./testing/run-tests scripts just call tox. Now we no longer need nosetests
      as a test dependency (although you can still use it if you want).
    - Added two more code quality automated tests: a pep8 one and a pylint one.
      I disabled almost all checks in each program that gave a warning. These
      tests just establish a baseline for future improvement.
    - Moved the test helper code into TestCase subclasses that all tests can
      use. And used more code sharing and setUp/tearDown cleverness to remove
      duplicated code.
    - Reorganized the tests in ./testing/tests into ./testing/functional and
      ./testing/unit -- for whether they drive duplicity as a subprocess or
      whether they import and test code directly. Each dir can have specialized
      TestCase subclasses now.
    - Renamed the files in ./testing/unit to more clearly indicate which file
      in ./duplicity they are unit testing.
    - Added some helper methods for tests to set environment and globals.*
      parameters more safely (i.e. without affecting other tests) by
      automatically cleaning up any such changes during test tearDown.
    - Removed test_unicode.py, since it is kind of dumb. It used to be more
      useful, but now with py2.6, we are just testing that one line of code
      in it is actually there.
* Fixed bug #1312328 WebDAV backend can't understand 200 OK response to DELETE
  - Allow both 200 and 204 as valid response to delete
* Merged in lp:~mterry/duplicity/py3-map-filter
  - In py3, map and filter return iterable objects, not lists. So in each case
    we use them, I've either imported the future version or switched to a list
    comprehension if we really wanted a list.
* Merged in lp:~mterry/duplicity/backend-unification
  - Reorganize and simplify backend code.  Specifically:
    - Formalize the expected API between backends and duplicity.  See the new
      file duplicity/backends/README for the instructions I've given authors.
    - Add some tests for our backend wrapper class as well as some tests for
      individual backends.  For several backends that have some commands do all
      the heavy lifting (hsi, tahoe, ftp), I've added fake little mock commands
      so that we can test them locally.  This doesn't truly test our integration
      with those commands, but at least lets us test the backend glue code.
    - Removed a lot of duplicate and unused code which backends were using (or
      not using).  This branch drops 700 lines of code (~20%)
      in duplicity/backends!
    - Simplified expectations of backends.  Our wrapper code now does all the
      retrying, and all the exception handling.  Backends can 'fire and forget'
      trusting our wrappers to give the user a reasonable error message.
      Obviously, backends can also add more details and make nicer error
      messages.  But they don't *have* to.
    - Separate out the backend classes from our wrapper class.  Now there is no
      possibility of namespace collision.  All our API methods use one
      underscore.  Anything else (zero or two underscores) are for the backend
      class's use.
    - Added the concept of a 'backend prefix' which is used by par2 and gio
      backends to provide generic support for "schema+" in urls -- like par2+
      or gio+.  I've since marked the '--gio' flag as deprecated, in favor of
      'gio+'.  Now you can even nest such backends like
      par2+gio+file://blah/blah.
    - The switch to control which cloudfiles backend had a typo.  I fixed this,
      but I'm not sure I should have?  If we haven't had complaints, maybe we
      can just drop the old backend.
    - I manually tested all the backends we have (except hsi and tahoe -- but
      those are simple wrappers around commands and I did test those via mocks
      per above).  I also added a bunch more manual backend tests to
      ./testing/manual/backendtest.py, which can now be run like the above to
      test all the files you have configured in config.py or you can pass it a
      URL which it will use for testing (useful for backend authors).
* Merged in lp:~mterry/duplicity/encode-exceptions
  - Because exceptions often contain file paths, they have the same problem
    with Python 2.x's implicit decoding using the 'ascii' encoding that we've
    experienced before.  So I added a new util.uexc() method that uses the
    util.ufn() method to convert an exception to a unicode string and used it
    around the place.
  - Bugs fixed: 1289288, 1311176, 1313966
* Applied expat fix from edso.  See answer #12 in
  https://answers.launchpad.net/duplicity/+question/248020


New in v0.6.23 (2014/01/24)
---------------------------
Enhancements:
* Applied patch from bug 1216921 to fix ignore_missing().
  - merged lp:~mterry/duplicity/ignore-missing to fix patch.
* Merged in lp:~mterry/duplicity/catch-seq-copy-error
  - Any* exception when running patch_seq2ropath should be ignored (though
    logged) and duplicity should move on. This covers the two asserts in that
    function (bug 1155345 and bug 720525) as well as errors that happen during
    file copying (bug 662442).
* Merged in lp:~mterry/duplicity/argv
  - Fix use of argv when calling os.execve
* Merged in lp:~verb/duplicity/bucket_root_fix
  - Fix bug that prevents backing up to the root of a bucket with boto backend.
* Merged in lp:~gliptak/duplicity/415619
  - Better error message when chown fails
* Merged in lp:~mterry/duplicity/log-path-type
  - Any backup browser built on top of duplicity will need to indicate which
    files in the backup are folders and which are files. The current logging
    information doesn't provide this detail. So I've added a field to the
    log.InfoCode.file_list output that includes the path type.
* Merged in lp:~mterry/duplicity/manifest-oddities
  - We may accidentally end up with an oddly inconsistent manifest like so:
    Volume 1
    Volume 2
    Volume 3
    Volume 2
    As did get reported recently on the mailing list:
    http://lists.nongnu.org/archive/html/duplicity-talk/2013-11/msg00009.html
  - One way this can happen (the only way?) is if you back up, then duplicity
    gets interrupted between writing the manifest and uploading the volume.
    Then, when restarted, there is no longer enough data to create as many
    volumes as existed previously.
  - This situation can cause an exception when trying to restart the backup.
  - This branch fixes it by deleting any excess volume information encountered
    when loading in the manifest. We discard volume with higher numbers
    than the last one read.
* Merged in lp:~mterry/duplicity/disappearing-source
  - When restarting a backup, we may accidentally skip the first chunk of one of
    the source files. To reproduce this,:
    1) interrupt a backup
    2) delete the source file it was in the middle of
    3) restart the backup
  - When replaying the source iterator to find where to resume from, we can't
    notice that the file is gone until we've already iterated past where it
    would be!
  - The solution I came up with is to just let duplicity stuff the data we
    accidentally read back into the source iterator.
  - This is actually a data loss bug, because it's possible to back up
    corrupted files (that are missing their first chunk).
* Merged in lp:~mterry/duplicity/normalize-before-using
  - Avoid throwing an exception due to a None element in a patch sequence.
  - None elements in a (non-normalized) patch sequence are perfectly normal.
    With the current code in the patched function, it is certainly possible to
    hit a crash due a None.
    See http://lists.nongnu.org/archive/html/duplicity-talk/2013-11/msg00005.html
  - This branch fixes that by normalizing the sequence before using it in the
    logging code. It's acceptable to bring the normalize_ps() call outside the
    try/except block because normalize_ps is not expected to throw. It's
    relatively simple and doesn't really use its objects besides checking if
    they are None.
* Applied patch to fix "Access GDrive through gdocs backend failing"
  - see https://lists.nongnu.org/archive/html/duplicity-talk/2013-07/msg00007.html
* Merged in lp:~jkrauss/duplicity/pyrax
  - Rackspace has deprecated python-cloudfiles in favor of their pyrax
    library, which consolidates all Rackspace Cloud API functionality into
    a single library.  Tested it with Duplicity 0.6.21 on both Arch Linux
    and FreeBSD 8.3.0.
* Changed to default to pyrax backend rather than cloudfiles backend.
  To revert to the cloudfiles backend use '--cf-backend=cloudfiles'
* Merged in lp:~verb/duplicity/boto-min-version
  - Update documentation and error messages to match the current actual version
    requirements of boto backend.
* Merged in lp:~ed.so/duplicity/debian.paramiko.log
  - upstream debian patch "paramiko logging"
    http://patch-tracker.debian.org/package/duplicity/0.6.22-2
* Merged in lp:~ed.so/duplicity/debian.dav.mkdir
  - upstream debian patch "webdav create folder recursively"
    http://patch-tracker.debian.org/package/duplicity/0.6.22-2
* Nuke tabs
* Merged in lp:~mterry/duplicity/encoding
  - This branch hopefully fixes two filename encoding issues:
  - Users in bug 989496 were noticing a UnicodeEncodeError exception which
    happens (as far as I can tell) because some backends (like webdav) are
    returning unicode filenames from list(). When these filenames are combined
    with the utf8 translations of log messages, either (A) the default ascii
    encoding can't handle promoting the utf8 bytes or -- if there aren't any
    utf8 bytes in the translation -- (B) the resulting unicode string raises
    an error later when log.py tries to upgrade the string again to unicode
    for printing.
  - This fix is largely implemented by adding a wrapper for backend list()
    implementations. This wrapper ensures that duplicity internals always see
    a byte string. (I'd like to eventually use this same wrapping strategy to
    implement generic retry support without backends having to add any logic,
    but that's just a thought for the future.)
  - That is, the fix for issue #1 is completely inside backend.py and the
    changes to backends/*.py.
  - The rest of the invasive changes deal with filenames that may not be valid
    utf8. This is much rarer, but possible. For proper handling of this, we
    need to print using unicode, and convert filenames from the system filename
    encoding to unicode, gracefully handling conversion errors. Some of the
    filenames we print are remote names. Who knows what encoding they are in;
    it could be different than the system filename encoding. 99% of the time,
    everything will be utf8 and we're fine. If we do get conversion errors,
    the only effect should be some question mark characters in duplicity
    logging output.
  - I tried to convert as much of the actual codebase to use unicode for
    printing. But I stopped short of adding an assert in log.py to enforce
    unicode, because I didn't want to go through all the backend code and
    manually adjust those bits without being able to test each one.
* Restored missing line from patch of gdocsbackend.py
* Reverted changes to gdocsbackend.py
* Restored patch of gdocsbackend.py from original author (thanks ede)
* Applied patch from bug 1266753: Boto backend removes local cache if
  connection cannot be made
* Merged in lp:~louis-bouchard/duplicity/add-allow-concurrency
  - Implement locking mechanism to avoid concurrent execution under the same
    cache directory. This is the default behavior.
  - Also implement --alllow-concurrency option to disable the locking
    if required.
  - This functionality adds a dependency to python-lockfile


New in v0.6.22 (2013/08/22)
---------------------------
Enhancements:
* Applied patches from Laszlo Ersek to rdiffdir to "consume a chain of sigtar
  files in rdiffdir delta mode" which supports incremental sigtar files.
* Merged in lp:~jnoster/duplicity/dpbx-added
  - Add Dropbox backend
  - NB! In order to use the backend one must:
    1. Install Dropbox Python SDK first.
    2. Run the duplicity with Dropbox backend (dpbx://) first time
       *interactively* to catch and follow the oAuth URL.
* Merged in lp:~ed.so/duplicity/verify.data
  - add switch --compare-data, to selectively enable formerly always disabled
    data comparison on verify runs
* Merged in lp:~tblue/duplicity/paramiko-1.10.0
  - This fixes bug #1156746, making the Paramiko backend compatible with
    Paramiko 1.10.0. It keeps compatibility with older Paramiko versions.
* Merged in lp:~townsend/duplicity/fix-1161599-2
  - The fix in revno. 912 didn't take into account that the parameter "body"
    passed into request() is overloaded, so when it was NULL or of a type other
    than file, it would fail.  This checks if "body" is of type "file" before
    actually seek()'ing back to the beginning of the file.
* Merged in lp:~tblue/duplicity/paramiko-fix-delete-retry
  - This fixes bug #1115715, which is really annoying. Basically it makes
    using the Paramiko backend with the default settings impossible.
* Merged in lp:~juan-f/duplicity/progress
  - From time ago, there are people asking for a progress bar estimation in duplicity.
    There is even a script that circumvents the issue, getting info from the log so as
    to estimate the progress status ( https://github.com/quentin/Duplicity-progress )
    but does not give enough feedback and the estimation is rather plain.
  - I have developed a set of heuristics that gather information from the deltas and
    the transfer ratios of the backend so as to forecast % of progress, estimation of
    remaining time and average speed, for both full and incremental backup uploads.
  - The current implementation works for boto backend, but to port the other backends
    to use this feature would be quite easy (we can discuss the details if interested).
  - The algorithm is activated by the --progress command line flag, and will perform a
    first-pass dry-run to collect evidence for all the deltas. Next it will trigger the
    real upload, while a thread statistically estimates the ratio of changes and
    compression for the data in/out, and uses these ratios to forecast time remaining
    and % of completion.
  - The progress data will be logged each 3 seconds, or the --progress-rate flag.
* Merged in lp:~jnoster/duplicity/dpbx-added
  - The application key was approved as "production" one after some changes to the code
    to suit the requirements of Dropbox team (the keys are now obfuscated, for instance).
* Applied blocksize.patch from https://bugs.launchpad.net/duplicity/+bug/897423
  - New option --max-blocksize (default 2048) to allow increasing delta blocksize.
* Applied duplicity-ftps.patch from https://bugs.launchpad.net/duplicity/+bug/1104069
  - Don't try to delete an empty file list.
* Merged in lp:~scowcron/duplicity/ftp_password_pexpect
  - Use common backend.Backend get_password() rather than _ssh_pexpect.py specific code.
* Merged in lp:~mhu-s/duplicity/swiftbackend
  - This branch adds support for Swift, the OpenStack Object Storage service. See
    https://blueprints.launchpad.net/duplicity/+spec/swiftbackend
* Merged in lp:~verb/duplicity/boto-gcs
  - These patches add support for Google Cloud Storage via the boto backend.
  - boto has supported GCS in interoperability mode for a few years now. This change
    adds support by taking advantage of boto's storage_uri abstraction layer.
* Merged in lp:~ckornacker/duplicity/megacloud
  - Add support for Mega (mega.co.nz) backend.
* Applied patch from Eric S Raymond to man page to fix markup problems.
* Merged in lp:~ed.so/duplicity/man.page
  - update paramiko links
  - add command parameters to synopsis
  - add --compare-data
  - some polishing and several improvements


New in v0.6.21 (2013/01/23)
---------------------------
Enhancements:
* Merged in lp:~ed.so/duplicity/24syntaxfix
  - fix python 2.4 vs 2.5 syntax error
* Merged in lp:~mterry/duplicity/u1-oauthlib
  - As the Ubuntu packager for duplicity, I would prefer u1backend.py
    used oauthlib instead of oauth.  oauthlib is well maintained upstream
    (unlike oauth), has a python3 port (for the future), and is in Ubuntu
    main (so is oauth right now, but hopefully in the future we can drop
    it to universe, in which case duplicity can't use it anymore).
* Merged in lp:~mterry/duplicity/delete-new-sig-in-cache
  - In duplicity 0.6.20, we fixed bug 1031269. This means that we no longer
    leave sig files on the remote location.  Leaving sig files on the remote
    location also caused a bug with deleting cache files. Code used to leave
    remote new-sig but delete the locale cache new-sig; this meant that we would
    keep downloadoing the new-sig all the time from remote. We had worked around
    that by just not deleting the new-sig in the cache, which was sort of the
    wrong side of that problem to tackle.  Now that we handle the remote
    new-sigs better (by deleting them), I don't think we need this code anymore.
    Patch by az@debian.org.
* Merged in lp:~mterry/duplicity/u1-ascii-error
  - Fix for u1backend unicode error.  Patch by Paul Barker.
* Merged in lp:~satwell/duplicity/caching
  - Add a cache for password and group lookups. This significantly improves
    runtime with very large password and group configurations.
* Merged in lp:~ed.so/duplicity/manpage
  - more formatting fixes, clarifications in sections EXAMPLES, FILE SELECTION
* Merged in lp:~ed.so/duplicity/lftp.netrc
  - Allow .netrc auth for lftp backend
* Merged in lp:~mterry/duplicity/946988
  - This fixes bug 946988 by not duplicating the checks for when we should ask
    for the password (those same checks are done more correctly inside
    get_passphrase). And add a test to reproduce the bug.
* Merged in lp:~lenharo-h/duplicity/duplicity
  - Generate encrypted backups without revealing the user's key id
    via option --hidden-encrypt-key
* Merged in lp:~mterry/duplicity/u1-utf8
  - Make sure u1backend returns filenames as utf8
* Merged in lp:~carlos-abalde/duplicity/gdocs-backend-gdata-2.0.16.-upgrade
  - Upgrade of GoogleDocs backend to python gdata lib >= 2.0.15:
    Stop using get_everything method.
* Merged in lp:~ed.so/duplicity/webdav.fix-retry
  - bugfix: webdav retrying broke on ERRORS like "error: [Errno 32] Broken pipe" in
    socket.pyas reported here https://answers.launchpad.net/duplicity/+question/212966
    added a more generalized 'retry_fatal' decorator which makes retrying backend
    methods even easier
* Merged in lp:~ed.so/duplicity/manpage
  - Clear up PASSPHRASE reusage as sign passphrase.  Minor fixes.
* Merged in lp:~ed.so/duplicity/u1_and_manpage
  - Manpage
    - document Ubuntu One required python libs
    - added continuous contributors and backend author notes
  - U1backend
    - lazily import non standard python libs, fixes
    http://article.gmane.org/gmane.comp.sysutils.backup.duplicity.general/5753
    - fix "not bytearray" prevents PUT with python 2.6
    - don't hang after putting in credentials (cause it silently retries in background)
      but go through with backup
* Fixed 1091269 Data corruption when resuming with --no-encryption
  - Patches from Pascual Abellan that make block size consistent and
    that add -n (no-encryption) option to manual-ctrl-c-test.sh.
  - Modified gpg.py patch to use 64k block size so unit test passes.
* Merged in lp:~mterry/duplicity/static-corruption
  - This branch fixes three possible ways a backup could get data-corrupted.
    Inspired by bug 1091269.
      A) If resuming after a volume that ended in a one-block file, we would
         skip the first block of the next file.
      B) If resuming after a volume that ended in a multi-block file, we would
         skip the first block of the next file.
      C) If resuming after a volume that spanned a multi-block file, we would
         skip some data inside the file.
  - A and B are because when finding the right place in the source files to
    restart the backup, the iteration loop didn't handle None block numbers
    very well (which are used to indicate the end of a file).
  - C is what bug 1091269 talks about. This was because data block sizes would
    get smaller as the difftar file got closer and closer to the volsize.
    Standard block sizes were 64 * 1024.  But say we were close to the end of
    the difftar... When resuming, duplicity doesn't know the custom block sizes
    used by the previous run, so it uses standard block sizes. And it doesn't
    always match up, as you can imagine. So we would leave chunks of data out
    of the backed up file.
  - Tests added for these cases.
  - This branch is called 'static-corruption' because all these issues occur
    even when the source data doesn't change. I still think there are some
    corruption issues when a file changes in between duplicity runs. I haven't
    started looking into that yet, but that's next on my list.
  - C only happened without encryption (because the gpg writer function already
    happened to force a constant data block size). A and B happened with or
    without encryption.
* Merged in lp:~ed.so/duplicity/webdav.fix-retry
  - added ssl certificate verification (see man page)
  - more robust retry routine to survive ssl errors, broken pipe errors
  - added http redirect support
* Merged in lp:~ed.so/duplicity/webdav.manpage
  - explanation of webdav changes above
* Merged in lp:~mterry/duplicity/pygi
  - Python bindings for the gobject stack (used in the gio backend) have changed
    from static to dynamically-generated bindings. The old static bindings are
    deprecated. So here's a branch to change the gio backend from old to new ones.
* Merged in lp:~mterry/duplicity/py3rsync
  - This branch lets one build the _librsync module with Python 3. You can't
    really do anything useful with it, but it's a nicely-isolated piece to add
    Python 3 support for.
  - The changes are a mix of modernization and #ifdef logic.
  - All tests still pass in Python 2.7 and 2.4. I tested manually that the module
    worked as expected in Python 3.
* Merged in lp:~duplicity-team/duplicity/po-updates
  - Updated translations


New in v0.6.20 (2012/10/28)
---------------------------
Enhancements:
* Merged in lp:~ed.so/duplicity/ssh.manpage
  - added gdocs and rsync REQUIREMENTS
  - added cloudfiles documentation
* Merged in lp:~ed.so/duplicity/gpginterface
  - refactor GnuPGInterface to gpginterface.py
    reasoning can be found in README
* Merged in lp:~ed.so/duplicity/duplicity.helpfix
  - fix rare 'TypeError: encode() argument 1 must be string, not None'
  - http://lists.nongnu.org/archive/html/duplicity-talk/2012-09/msg00016.html
* Merged in lp:~ed.so/duplicity/duplicity.tmpspacefix
  - use tempfile.TemporaryFile() so unused temp files are deleted automagically
  - propbably solve bug 'Out of space error while restoring a file'
  - https://bugs.launchpad.net/duplicity/+bug/1005901
  - http://lists.gnu.org/archive/html/duplicity-talk/2012-09/msg00000.html
* Merged in lp:~mterry/duplicity/utf8-po
  - For some crazy reason, the gettext module defaults to giving you strings in
    whatever charset the po file happened to define.  Which means you never know
    what string of bytes you're going to get.  This module makes sure we always
    get utf-8 byte strings.  So we're at least predictable and reduces one
    source of UnicodeDecodeErrors (like in bug 989496)
* Merged in lp:~mterry/duplicity/1031277
  - ssh: actually delete all the requested files, not just the first one
* Merged in lp:~mterry/duplicity/leftover-sigtar
  - So currently, duplicity does not delete signature files when doing a
    remove-all-but-n operation. Seems wrong, since those signature files are now
    useless and take up space.
  - This branch does several things:
    1) Make remove-all-but-n operate on chains. In practice it did before, since
       the sets it operated on always came from complete chains (i.e. it never
       used only some of the sets from a chain)
    2) Add a new method to get all signature chains before a certain time.
    3) Use this new method to also delete signature chains during remove-all-but
       operations.
  - And it cleans up the cleanuptest.py file:
    1) Removes crufty, unused code
    2) Disallows changing the destination folder for the test, which no one
       would ever want to do and isn't really supported anyway
    3) Add some additional checks to the existing test
    4) Adds two new methods to test remove-all-but-n and
       remove-all-inc-of-but-n-full
* Merged in lp:~ed.so/duplicity/duplicity.manpage
  - disabled hyphenation and block justification for better readablility of
    command line examples.
  - reformatted REQUIREMENTS section for hopefully better online rendering
  - minor clarifications
* Merged in lp:~gregretkowski/duplicity/cf-retry-delete
  - This will retry cloudfile delete commands. With large numbers of archive
    files over mediocre links transient network errors will occasionally cause
    deletes to fail and these should be retried.
* Merged in lp:~mterry/duplicity/ropath.index
  - This branch does two main things:
    1) Skips base dir entries when compiling the list of deleted delta iters.
       (this gracefully recovers from the sort of situations that lead to bug
       929067). I'm reasonably confident this is an uninvasive change, but
       please confirm.
    2) Overwrites the sigtar file on backup-restart. This is because AFAICT,
       duplicity will rewrite the entire sigtar each restart. But we were
       opening the sigtar file as "ab", so we'd just dump the contents on top
       of the previous contents. Which was causing some confusion in bug 929067.
       If I'm wrong that we don't always rewrite the entire sigtar each time,
       this needs some rethink. Please also confirm that.
  - In addition, I added two tests for the above two changes and make some
    improvements elsewhere in the restarttest.py file while I was at it.
* Merged in lp:~ed.so/duplicity/ssh-pexpect-msgbug
  - Fixes 'UnboundLocalError: local variable 'msg' referenced before assignment'
    in _ssh_pexpect.py
* Merged in lp:~ed.so/duplicity/gpg.tmp
  - place gpg.py tempfiles in duplicity's tmp subfolder which is cleaned
    whatever happens
* Merged in lp:~mterry/duplicity/u1-402
  - Switch the code we check for out-of-space in u1backend.
* Applied patch for #1066625 ubuntu one backend
  - add delay between retries

Bugs closed in this release:
519948     remove-* commands don't remove signature-files
907077     assert len(chain_list) == 2 AssertionError
929067     crash during restore: "assert ropath.index == (), ropath.index"
995851     doc improvement for --encrypt-key, --sign-key
997691     Ubuntu One backend should check for 402 error for out-of-space
1031269    remove-all-but-n-full broken
1039001    --exclude-if-present and --exclude-other-filesystems causes crash
           with inaccessible other fs
1066625    ubuntu one backend does not work without gnome/dbus/x11 session


New in v0.6.19 (2012/05/22)
---------------------------
Enhancements:
* lots of work on the man page to clean up requirements, etc.
* use empty listbody for enhanced webdav compatibility
* initial folder creation on backend does not result in a ResponseNotReady
  anymore
* add ssh_config support (/etc/ssh/ssh_config + ~/.ssh/config) to paramiko
  sshbackend
* add missing_host_key prompt to new sshbackend similar to ssh procedure
* added --ssh-backend parameter to switch between paramiko,pexpect
* allow answering gio mount questions (albeit naively)
* if the gio backend wants to ask a question during its mount phase, it
  previously just aborted.
* a couple more warning error codes that Deja Dup is interested in noticing.
* ssh paramiko backend respects --num-retries now
* set retry delay for ssh backends to 10s
* ssh pexpect backend
 + sftp part does not claim 'Invalid SSH password' although it's only
   'Permission denied' now
 + sftp errors are now more talkative
* gpg.py
 + commented assert which broke otherwise working verify run

Bugs closed in this release:
588541     Connection failed, please check your password: Login dialog cancelled

Merges:
lp:~ed.so/duplicity/0.6-manpage
lp:~ed.so/duplicity/0.6-webdav_fixes
lp:~carlos-abalde/duplicity/gdocs-backend-gdata-2.0.16.-upgrade.
lp:~ed.so/duplicity/0.6-ssh_add_missinghostkey
lp:~ed.so/duplicity/0.6-readd_sshpexpect


New in v0.6.18 (2012/02/29)
---------------------------
Enhancements:
* fix extraneous '.py' in botobackend.py include
* tests: add delay between backups to avoid assertion error
* tests: use backup source that is more likely to be larger than 1M compressed
* tests: make other-filesystem check more robust against certain directories
  being mounts or not
* resuming an incremental results in a 'Restarting backup, but current
  encryption settings do not match original settings' error because curtime is
  incorrectly set away from previous incremental value
* added option to not compress the backup, when no encryption is selected
* always delay a little bit when a backend gives us errors
* Don't cache TarInfo files. Tests still pass, so I don't believe we need the
  members cache (and in the old tarfile.py, we didn't cache either).
* Adding --file-prefix option so different sets of backups can be stored in the
  same bucket.  See blueprint at
  https://blueprints.launchpad.net/duplicity/+spec/file-prefix-option
* two changes that help the test suite pass
* raise log level on backend import failure so it will be visible under default
  conditions
* file /etc/motd may not exist in test environment.  Use __file__ instead to
  point to a known plaintext source file.
* some code/import changes to make the ssh and boto backends compatible with
  Python 2.4.
* some changes to make roottest.py compatible with the new dir structure.

Bugs closed in this release:
884638     Python 2.5 / boto error
908228     possible memory leak
909031     SSH-Backend: Creating dirs separately causes a permissons-problems
916689     multipart upload fails on python 2.7.2
929465     UnsupportedBackendScheme: scheme not supported in url:
           scp://u123@u123.example.com/foo/
930727     ftpsbackend should respect num_retries for ftp commands
931175     duplicity crashes when PYTHONOPTIMIZE is set

Merges:
lp:~mterry/duplicity/always-delay
lp:~mterry/duplicity/memleak
lp:~mterry/duplicity/nopexpect
lp:~mterry/duplicity/resume-inc
lp:~mterry/duplicity/testfixes
lp:~nguyenqmai/duplicity/file-prefix-option
lp:~tobias-genannt/duplicity/nocompress


New in v0.6.17 (2011/11/25)
---------------------------
Enhancements:
* Added --rsync-options flag to allow user to pass options to rsync at will
* Added --s3-use-multiprocessing to select the new s3 multiprocessing backend.
  Default is to use the single processing backend.  A helper, filechunkio.py,
  requires Python 2.6+, so this option is not usable in earlier versions.

Bugs closed in this release:
411145     Misleading error message: "Invalid SSH password"
871875     File ... was corrupted during upload.
878220       UnsupportedBackendScheme: scheme not supported in url: s3+http
878964     Resuming a backup with a different password should throw an error
881070       Bugfix for S3 multipart upload on 0.6.16
881727       duplicity 0.6.16 lists all backup sets as incomplete
885670       Duplicity fails to add incremental backups to chain...

Merges:
lp:~mterry/duplicity/check-passphrase-on-restart
lp:~moss-d/duplicity/rsync-options


New in v0.6.16 (2011/10/16)
----------------------------
Enhancements:
* Usability enhancement: sign passphrase prompt has no second
  verification prompt anymore, symmetric passphrases are
  still verified
* Fixed Unicode errors when translations are used.
* Replaced old tarfile.py with Python 2.7 version, modded
  to support Python 2.4 syntax.

Bugs closed in this release:
485219     Fixed fields are not fixed, leading to buffer overflows...
676109     Amazon S3 backend multipart upload support
690549     uid and guid setting adversely affects integrity
739438     Local backend should always try renaming instead of copying
832149     Uploads to Rackspace fail silently
835892     duplicity crash: "AssertionError: rb None None"
838162     Duplicity URL Parser is not parsing IPv6 properly
838264     Duplicity thinks partial encrypted backups are not encrypted
870116     Duplicity does not handle UIDs higher than 60001

Merges:
lp:~ed.so/duplicity/reuse-passphrase-for-signing-fix
lp:~mterry/duplicity/cloudfiles-10k
lp:~duplicity-team/duplicity/check-volumes
lp:~mterry/duplicity/tarfile
lp:~mterry/duplicity/partial-encryption
lp:~mterry/duplicity/fix-local-backend-validation
lp:~ross-ross-williams/duplicity/gpg-agent-fix
lp:~mterry/duplicity/rbNoneNone
lp:~ed.so/duplicity/UnicodeDecodeError


New in v0.6.15 (2011/08/19)
---------------------------
Enhancements:
* Ignore 404 errors when deleting a file on Ubuntu One.
* Ignore ENOENT (file missing) errors where it is safe.
* Set minimum Python version to 2.4 in README.
* introduce --numeric-owner parameter
  patch courtesy of Lukas Anzinger <l.anzinger AT gmail.com>
* duplicity:restore_check_hash
  "Invalid data - *** hash mismatch" lists the offending filename
* fixes to unit tests to support SIGN_PASSPHRASE

Bugs closed in this release:
524922     duplicity does not have numeric uid/gid support
703142     AssertionError: assert len(chain_list) == 2
794576     Transport endpoint is not connected
815635     Bad passphrase can leave bogus sigtar in archive
818178     Shouldn't try to delete files it knows don't exist
821368     Error doing backup of the .evolution folder
823556     sftp errors after rev 740 change
824678     0.6.14 Fails to install on 8.04 LTS (Hardy)

Merges:
lp:~mterry/duplicity/u1-ignore-404
lp:~mterry/duplicity/guard-tarinfo
lp:~mterry/duplicity/enotconn
lp:~mterry/duplicity/look-at-partials-during-sync
lp:~mterry/duplicity/more-accurate-sync
lp:~mterry/duplicity/report-encrypted-chains
lp:~mterry/duplicity/815635
lp:~mterry/duplicity/retry-u1
lp:~mterry/duplicity/818178
lp:~ed.so/duplicity/encr-sign-key2
lp:~mterry/duplicity/u1-fixes
lp:~carlos-abalde/duplicity/google-docs
lp:~ed.so/duplicity/numowner+hashverbose


New in v0.6.14 (2011/06/18)
---------------------------
Enhancements:
452342     Provide Ubuntu One integration

Bugs closed in this release:
433591     AttributeError: FileobjHooked instance has no attribute 'name'
487720     Restore fails with "Invalid data - SHA1 hash mismatch"
507904     Cygwin: Backup fails with "IOError: [Errno 13] Permission denied"
512628     --exclude-filelist-stdin and gpg error with/without PASSPHRASE
680425     Endless retype passphrase when typo
705499     "include-filelist-stdin" not implemented on version 0.6.11
739438     [PATCH] Local backend should always try renaming instead of copying
753858     cannot import name S3ResponseError
761688     Difference found: File X has permissions 666, expected 666
777377     collection-status asking for passphrase
778215     ncftpls file delete fails in ftpbackend.py
782294     create tomporary files with sftp
782321     duplicity sftp backend should ignore removing a file not there
792704     Webdav(s) url scheme lacks port support
782294     create tomporary files with sftp
782337     sftp backend cannot create new subdirs on new backup
794123     Timeout on sftp command 'ls -1'
797758     Duplicity ignores some FatalErrors
793096     Allow to pass different passwords for --sign-key and --encrypt-key

Merges:
lp:~ed.so/duplicity/0.6-add_sftp
lp:~ed.so/duplicity/0.6-nonfatal-exclude
lp:~lekensteyn/duplicity/multipass
lp:~mterry/duplicity/797758
lp:~mterry/duplicity/gio-name
lp:~mterry/duplicity/levelName
lp:~mterry/duplicity/retry-decorator
lp:~mterry/duplicity/u1-status


New in v0.6.13 (2011/04/02)
---------------------------
Enhancements added this release:
New manual test to make Ctrl-C issues easier to replicate.
Use python-virtualenv to make testing multiple Python versions easier.
In boto backend check for existing bucket before trying to create.

Bugs closed in this release:
579958     Assertion error "time not moving forward at appropriate pace"
613244     silent data corruption with checkpoint/restore
731905     File "/usr/bin/duplicity", error after upgrade from 6.11 to 6.12


New in v0.6.12 (2011/03/08)
---------------------------
Enhancements added this release:
626915     ftps support using lftp (ftpsbackend)

Bugs closed in this release:
486489     Only full backups done on webdav
578663     Use log codes for common backend errors
581054     Inverted "Current directory" "Previous directory" in error message
620163     OSError: [Errno 2] No such file or directory
629136     sslerror: The read operation timed out with cf
629984     boto backend uses Python 2.5 conditional
655797     symbolic link ownership not preserved
670891     Cygwin: TypeError: basis_file must be a (true) file ...
681980     Duplicity 0.6.11 aborts if RSYNC_RSH not set
700390     Backup fails silently when target is full (sftp, verbosity=4)
704314     Exception in log module

Merges:
lp:~mterry/duplicity/backend-log-codes3
lp:~blueyed/duplicity/path-enodev-bugfix


New in v0.6.11 (2010/11/20)
---------------------------
Bugs closed in this release:
433970     Add an option to connect to S3 with regular HTTP (and not HTTPS)
578663     Use log codes for common backend errors
631275     missing ssh on rsyncd url - rsync: Failed to exec ssh: ...
635494     backed up to S3, wiped drive, reinstalled, unable to restore backup
637556     os.execve should get passed program as first argument
669225     sftp: "Couldn't delete file: Failure'" only logged on level 9
655468     0.6.10 does not work with S3
674506     RsyncBackend instance has no attribute 'subprocess_popen_persist'

Merges:
lp:~blueyed/duplicity/bug-669225
lp:~duplicity-team/duplicity/po-updates
lp:~ed.so/duplicity/0.6.10-backend_fixes
lp:~ed.so/duplicity/RSYNC_RSH-fix
lp:~ed.so/duplicity/sign_symmetric2
lp:~ed.so/duplicity/survive_spaces
lp:~l2g/duplicity/use-py.test
lp:~mbp/duplicity/433970-non-ssl


New in v0.6.10 (2010/09/19)
---------------------------
Bugs closed in this release:
542482     Offer command to remove old incremental backups from target
578663     Use log codes for common backend errors
589495     duplicity --short-filenames crashes with TypeError
612714     NameError: global name 'parsed_url' is not defined
613448     ftpbackend fails if target directory doesn't exist
615449     Command-line verbosity parsing crash


New in v0.6.09 (2010/07/25)
---------------------------
Bugs closed in this release:
502609     Unknown error while uploading duplicity-full-signatures
539393     Duplicity returns 1 when continuing an interrupted backup
550455     duplicity doesn't handle with large files well
567738     --ssh-options options passing options to ssh do not work
576564     username not url decoded in backend (at least rsync)
579958     Assertion error "time not moving forward at appropriate pace"
582962     Diminishing performance on large files

Upgraded tahoebackend to new parse_url.
Fix to warning message in sshbackend.


New in v0.6.08b (2010/03/11)
----------------------------
Fix bug where encrypted backup without --gpg-options crashes.
This was a followup issue to bug 490619 released in 0.6.07.
This is attempt #2 -- not sure what happened to the patch,
but it did not show up in 0.6-series like it should have.


New in v0.6.08a (2010/03/11)
----------------------------
Fix bug where encrypted backup without --gpg-options crashes.
This was a followup issue to bug 490619 released in 0.6.07.


New in v0.6.08 (2010/03/07)
---------------------------
Bugs closed in this release:
519110     Need accurate man page info on use of scp/sftp usage.
532051     rdiffdir attempts to reference undefined vars with some command args
529869     TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
530910     TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'


New in v0.6.07 (2010/02/28)
---------------------------
Bugs closed in this release:
459511     --tempdir option doesn't override TMPDIR
467391     [PATCH] WebDAV backend doesn't work
487686     re-add scp backend and make available via command line option
490619     Use optparse not getopt
497243     0.6.06, archive dir: cache desynchronization caused by remove*
501093     SSHBackend doesn't handle spaces in path
505739     "sslerror: The read operation timed out" with S3
520470     Don't Warn when there's old backup to delete
522544     OSError: [Errno 40] Too many levels of symbolic links
388673     Allow renaming paths as they are restored


New in v0.6.06 (2009/10/29)
---------------------------
Merged in lp:~mterry/duplicity/list-old-chains
List/keep old signature chains

Applied patches from Kasper Brand that fixed device file handling.
http://lists.gnu.org/archive/html/duplicity-talk/2009-09/msg00001.html

Merged in lp:~l2g/duplicity/flag-transl-comments which cleared up how
translation comments should be passed to the translators cleanly now.

Applied 422477; [PATCH] IMAP Backend Error in delete()

Merged in lp:~mterry/duplicity/iterate-warnings
Add machine codes to various warnings when iterating over source files

Fix problems with unittests under Jaunty.  It appears that redirection
in os.system() has changed for the worse, so a workaround for now.

Fix problem in restart where there were no manifest entries and no
remote volumes stored.  We clean out the partial and restart.

Fixed 435975 gpg asks for password in 0.6.05, but not in 0.5.18


New in v0.6.05 (2009/08/28)
---------------------------
Merged in lp:~l2g/duplicity/test-compat from Larry Gilbert which made
the testing compatible across more systems.  Also fixed the remaining
collectionstest bug which was trying to test with no cache present.

Bugs fixed this release:
407968  GIO backend can't restore
408059  Failure due to _logger.log failure for content with special
        characters: TypeError decoding Unicode not supported
409593  deja-dup (or duplicity) deletes all signatures
412667  "duplicity remove-older-than" asks for passphrase even though
        not required
418170  [PATCH] file names longer then 512 symbols are not supported


New in v0.6.04 (2009/08/01)
---------------------------
One major and one minor change.  The "No such file or directory" error
is bad enough that this should be released quickly.  For those of you
using encryption, this is not a problem, but for those of you that do
not use encryption (--no-encryption), then this will manifest itself if
the local cache gets out of sync with the remote store.

Bugs fixed this release:
405734  duplicity fails to restore files that contain a newline character
403790  Backup error: No such file or directory


New in v0.6.03 (2009/07/29)
---------------------------
Lots of small changes and some bug fixes.
* Restart error handling has been smoothed out a great deal and it
  "does what is right" in order to keep going.
* Backends are now optional, if they fail an Info message is put out
  to notify of the failure and why.
* There was more work on translations and internationalization.
Thanks to everyone!

Bugs fixed this release:
377528  --file-to-restore doesn't work with trailing slash
394757  Backend imports should be made optional
398230  Deja-dup backup fails with message: "Unable to locate last file"
401303  0.6.2 manpage inconsistent wrt. archive-dir/name
405646  Small i18n error
405975  duplicity.gpg.gpg_failed() breaks and spews on GnuPG error
402794  duplicity public-key-only incompatible with gnupg 2.0.11


New in v0.6.02 (2009/07/07)
---------------------------
Duplicity will now remove any spurious files left in the cache from
a previous run.  This will keep the metadata cache in sync with the
remote storage metadata.

Bugs fixed this release:
394629  Hang on first collection-status
379386  Fix 'list-current-files' with missing archive dir
395826  "No such file or directory" when backing up second time
394627  User-friendly archive dir print
388699  Manifest mismatch error


New in v0.6.01 (2009/07/01)
---------------------------
Fixed issues in Checkpoint/Restart:
* The --name backupname" option was added to allow the
  user to separate one archive from another.  If not
  specified, the default is an MD5 hash of the target
  URL, which should suffice for most uses.

* The archive_dir (cache) is now stored in a standard
  location, defaulting to ~/.cache/duplicity.  See
  http://standards.freedesktop.org/basedir-spec/latest/

* The interaction between the --archive-dir option and
  the --name option allows for four possible results
  for the location of the archive dir.
    - neither specified (default)
      ~/.cache/duplicity/hash-of-url
    - --archive-dir=~/arch, no --name
      ~/arch/hash-of-url
    - no --archive-dir, --name=foo
      ~/.cache/duplicity/foo
    - --archive-dir=~/arch, --name=foo
      ~/arch/foo

* duplicity will now copy needed metadata from the
  remote store to the local cache as needed.  This
  means that the first use after upgraded from 0.5.x
  will have the metadata copied to the local archive
  dir in order to sync both.

* cleanup will now work correctly with the archive
  dir and separates the local from the remote files.

Bugs fixed this release:
* 388034     Unable to backup
* 378940     python2-6 issue / UTF-8 charset / Ubuntu 9.04
* 379386     Fix list-current-files w/ missing archive dir
* 387102     Asynchronous upload not working properly
* 387218     Make scp/ssh into sftp-only backend
* 388992     List of Orphaned Files Growing
* 392905     NoneType object has no attribute 'startswith'
* 393372     Error creating directory
* 383412     Add InfoCodes for upload events
* 383419     Add gio backend


New in v0.6.00 (2009/06/08)
---------------------------
Checkpoint/Restart capability added.  Checkpoint is
done at every volume written and Restart is done at
start of the next volume in the set.  Changes to
normal operations include a permanent duplicity
archive-dir at ~/.duplicity to save state.

To accomplish this, the signature and archive files
in the archive-dir now have three states:
1) temporary until the first volume has been written,
2) partial until the final volume has been written and
   sent to remote storage,
3) permanent with the same name as always.

Assumptions are made that if a restart is needed, then
all arguments are the same as before and that no files
have been removed from the file system between runs.

From now on, the --archive-dir option can be used to
change the location of the archive dir, but you are
responsible for moving the files if you change it.

Other fixes:
Unicode filenames in log messages are now OK.

Fixed problem where Cygwin was returning -1 for the
hard max open file limit.


New in v0.5.18 (2009/05/20)
---------------------------
Added support for RackSpace's CloudFiles, cf+http.

Added support for Tahoe-LAFS from the patch,
patch #6743: Tahoe backend for duplicity
https://savannah.nongnu.org/patch/?6743

Only half of this bug is fixed but it's still useful.
bug #21792: pipe call fails with an error OSError:
            [Errno 24] Too many open files
https://savannah.nongnu.org/bugs/?21792

Changed from using ulimit external command to
resource.getrlimit to check open files limit.


New in v0.5.17 (2009/05/04)
---------------------------
Removed one line of code left from some testing that I
did that caused a crash when the target dir was empty
and collection-status was requested.

Moved from using the df command to get temp space
availability to Python's os.statvfs() call.  Not all
df commands work the same way.

patch #6813: Making changelist easy to read
https://savannah.nongnu.org/patch/?6813

patch #6814: Ignore comments in filelists
https://savannah.nongnu.org/patch/?6814


New in v0.5.16 (2009/04/21)
---------------------------
bug #24825: duplicity warn on insufficient TMPDIR
            space availability and low max open
            file limits pre-backup.
https://savannah.nongnu.org/bugs/?24825

bug #25594: wrong backup statistics
https://savannah.nongnu.org/bugs/?25594

bug #25976: Password requested when not needed.
https://savannah.nongnu.org/bugs/?25976

patch #6806: More graceful handling of old
             --short-filename files
https://savannah.nongnu.org/patch/?6806

Added tilde and variable expansion to the source or
target argument that is not a URL.


New in v0.5.15 (2009/04/09)
---------------------------
FTP backend was failing on PureFTPd when the "-x ''"
option was removed from the second ncftpls popen, a fix
that was implemented due to bug #24741.  This fix does
the ls in one pass by extracting the last entry on the
'ls -l' listing.

If a file is unreadable due to access rights or other
non-fatal errors, put out error message and continue
rather than dying messily with a traceback.

Added tilde '~' expansion and variable expansion in the
options that require a filename.  You can now have this
"--archive-dir=~/ArchDir/$SYSNAME" if you need it.  No
expansion is applied to the source or target URL's.

Fixed problem I caused, again, where sys.exit() was
trapping instead of exiting.  Added big note to not
to do that again.


New in v0.5.14 (2009/04/02)
---------------------------
After email voting among known duplicity contributors,
the decision was reached to revert to the GPL Version 2
license, so with their consensus, duplicity is now under
GPL Version 2.

Revert to calling NcFTP utilities (ls, get, put) directly
rather than scripting ncftp via pexpect by reverting to the
0.5.07 version of ftpbackend.py.

Changed fatal error regarding version 3.2.0 of ncftpput to
warning level since it has been reported that the problem
does not occur on most distributions.

Changed from log.Log with numbered log levels to log.Debug,
log.Info, log.Notice, log.Warn, log.FatalError as below:
    0    log.FatalError
    1-2  log.Warn
    3-4  log.Notice
    5-8  log.Info
    9 log.Debug
The -vN option has not changed.  Verbosity may also be one
of: character [ewnid], or word ['error', 'warning', 'notice',
'info', 'debug'].  The default is 4 (Notice).  The options
-v4, -vn, and -vnotice are functionally equivalent, as are
the mixed-case versions, -vN, -vNotice, -vNOTICE.

Normalized include statements and tried to insure that all
duplicity includes were from the duplicity module.

patch #6790: Add --exclude-if-present
https://savannah.nongnu.org/patch/?6790


New in v0.5.13 (2009/03/26)
---------------------------
Add more error detection to FTP backend.

Fix backends so sleep does not occur after last retry.

Fix so BackendException does not cause traceback except when
verbosity is at level 5 or higher (Info level).

Adjust log levels so some errors show up with default verbosity.

Fixed bug where an extra comma caused a traceback during a warning
about unnecessary sig files.  Plus fixed print so the real filename
would show up and not a Python object representation.

Add Changelog.GNU to website and distribution to add a bit of detail
showing the CVS changes via rcs2log.  Added dist/mkGNUChangelog.sh.

bug #22908: Don't block gpg-agent
https://savannah.nongnu.org/bugs/?22908

To fix the above, --use-agent was added as a command line option.
When this is specified and asymetric encryption is enabled, then all
GnuPG passphrases will come from the gpg-agent or equivalent program
and no passphrase prompt will be issued.

bug #25787: Usernames with escaped @-sign are not handled properly
https://savannah.nongnu.org/bugs/?25787

bug #25976: Password requested when not needed.
https://savannah.nongnu.org/bugs/?25976

patch #6787: import duplicity.GnuPGInterface explicitly
https://savannah.nongnu.org/patch/?6787


New in v0.5.12 (2009/03/15)
---------------------------
bug #25838: Backup fails / ncftp - remote file already exists
https://savannah.nongnu.org/bugs/?25838
With this fix we also get resume in ftp get/put.  If a put or
get fails part of the way through, ncftp will resume on the
next retry.

bug #25853: duplicity fails with boto passwords coming from ~/.boto
https://savannah.nongnu.org/bugs/?25853

patch #6773: Make user name optional in rsync backend
https://savannah.nongnu.org/patch/?6773

GPG errors will no longer cause tracebacks, but will produce a
log entry, from gpg, similar to the following:
===== Begin GnuPG log =====
gpg: BAD0BAD0: skipped: public key not found
gpg: [stdin]: encryption failed: public key not found
===== End GnuPG log =====
This will let the user know what really caused the GPG process
to fail, and what really caused errors like 'broken pipe'.

Add Epydoc output to web site and start adding documentation.
http://duplicity.nongnu.org/epydoc/index.html


New in v0.5.11 (2009/03/08)
---------------------------
bug #25787: Usernames with @-sign are not handled properly
https://savannah.nongnu.org/bugs/?25787

Bug #333057: GnuPGInterface prints exit statuses incorrectly
https://bugs.launchpad.net/bugs/333057

bug #25696: ncftp error w/0.5.09 -- nested target directories
https://savannah.nongnu.org/bugs/?25696

bug #15664: When restoring backup: "OverflowError:
            long int too large to convert to int"
https://savannah.nongnu.org/bugs/?15664

patch #6761: More robust pexpect handling of SSH authentication
https://savannah.nongnu.org/patch/?6761

patch #6762: Wrong exit() used for 2.3/2.4 Python
https://savannah.nongnu.org/patch/?6762


New in v0.5.10 (2009/03/01)
---------------------------
The default filename format has changed from W3 style to a long
numeric style, YYYYMMDDTHHMMSSZ, with no delimiters, thus is now
compatible with Windows/Samba filesystems.  The time is UTC, not
local, so there will be no timezone or daylight savings time issues.

Duplicity still recognizes the old long filename format, and will
continue incremental backup chains if found.  The old format is
still available via the --old-filenames option (pending deprecation).

Users of --short-filenames or --time-separator should stop using these
options on their next full backup.  The new filenames are compatible
with your system.

The following options are pending deprecation and will be removed in a
future release:
    --time-separator
    --short-filenames
    --old-filenames

bug #19988: Incompatibility to Samba/SMB share
https://savannah.nongnu.org/bugs/?19988

bug #25097: Allow listing files from any time, not just current time
https://savannah.nongnu.org/bugs/?25097

bug #25550: Error codes do not propagate from log to exit status
https://savannah.nongnu.org/bugs/?25550

bug #25308: Signatures orphaned if from another time zone
https://savannah.nongnu.org/bugs/?25308

Bug #229826: duplicity crashed with ValueError in port()
https://bugs.launchpad.net/duplicity/+bug/229826


New in v0.5.09 (2009/02/17)
---------------------------
FTP is now driven with pexpect rather than NcFTP utilities.
This closes the following bugs (and solves other problems):
bug #24741: ncftpls -x '' causes failure on Yahoo FTP server
bug #23516: duplicity/ncftpget not closing unlinked files, ...

bug #25509: Logic error in imapbackend.py [IMAP_SERVER]
https://savannah.nongnu.org/bugs/?25509

bug #25512: [Patch] Retry on Imap failure
https://savannah.nongnu.org/bugs/?25512

bug #25530: commandline passwd not working
https://savannah.nongnu.org/bugs/?25530


New in v0.5.08 (2009/02/02)
---------------------------
Turns out going backwards in the license is not as easy as
forwards.  Restoring GPLv3 license until consensus reached.


New in v0.5.07 (2009/01/31)
---------------------------
bug #25293: IOError: [Errno 22] Invalid argument
https://savannah.nongnu.org/bugs/?25293

bug #25379: sys.exit() causes traceback and should not
https://savannah.nongnu.org/bugs/?25379

bug #25403: 0.5.06 "manifests not equal, different volume numbers"
https://savannah.nongnu.org/bugs/?25403

patch #6729: New imap backend. Replaces current gmail backend
https://savannah.nongnu.org/patch/?6729

patch #6730: Fix timing out for SSH backend
https://savannah.nongnu.org/patch/?6730

patch #6733: Improve error handling in imapbackend.py
https://savannah.nongnu.org/patch/?6733

Increase default volume size (--volsize) to 25M from 5M.  This
reduces the number of volumes to accomodate larger backups.

Reworked patch 6701 to list collection one at a time rather than
writing all as one huge list.  Was causing memeory problems when
the collections got large.

Fix backendtest.py so that empty URL's in config.py cause the
backend test to be skipped rather than erroring.  Added notes
in config.py.tmpl explaining the change.

Add/update copyright statements in all distribution source files
and revert duplicity to GPL version 2 license.

Original fix to disallow use of ncftpput 3.2.0 mistyped the ErrorCode
used and resulted in an error rather than an explanation.


New in v0.5.06 (2009/01/09)
---------------------------
Fix to deprecation warnings about sha and md5 modules.
Uses hashlib if available, otherwise original module.

Added loop to run-all-tests.sh to run all tests against all supported
versions of Python if available.  Looks for 2.3, 2.4, 2.5, 2.6.

Noah Spurrier has given us permission to distribute pexpect.py along
with duplicity, so this will no longer be an install requirement.

NcFTP version 3.2.0 will not work with duplicity since we require the
use of both -f and -C options on ncftpput.  3.1.9, 3.2.1+ work fine.
I put in error checks for this situation in the FTP backend code.

bug #25230: --include-globbing-filelist only including first entry.
https://savannah.nongnu.org/bugs/?25230

bug #25239: Error during clean, wrong case in duplcicity
https://savannah.nongnu.org/bugs/?25239

patch #6709: Report correct number of volumes when restoring
https://savannah.nongnu.org/patch/?6709

sr #106583: document the need to use the --force option
https://savannah.nongnu.org/support/?106583


New in v0.5.05 (2008/12/30)
---------------------------
bug #25194: Duplicity 5.04 requires python-distutils-extra...
https://savannah.nongnu.org/bugs/?25194


New in v0.5.04 (2008/12/27)
---------------------------
patch #6678: Add progress metering
https://savannah.nongnu.org/patch/?6678

patch #6686: Add error codes for all fatal errors
https://savannah.nongnu.org/patch/?6686

bug #25090: Typos and trailing whitespace in duplicity manpage
https://savannah.nongnu.org/bugs/?25090

bug #24889: NCFTP cannot deal with some FTP servers
https://savannah.nongnu.org/bugs/?24889

patch #6692: Print collection status in a machine-readable way
https://savannah.nongnu.org/patch/?6692

patch #6693: Some FatalError's don't have codes still
https://savannah.nongnu.org/patch/?6693

patch #6694: Log exceptions
https://savannah.nongnu.org/patch/?6694

patch #6695: Log filenames
https://savannah.nongnu.org/patch/?6695

patch #6696: Consolidate get_delta_iter and get_delta_iter_w_sig
https://savannah.nongnu.org/patch/?6696

patch #6697: Always log at least one progress during dry run
https://savannah.nongnu.org/patch/?6697

patch #6700: Make duplicity translatable
https://savannah.nongnu.org/patch/?6700

patch #6701: Make current-list command machine-readable
https://savannah.nongnu.org/patch/?6701

patch #6702: handle unknown errnos in robust.py
https://savannah.nongnu.org/patch/?6702

GPG was throwing "gpg: [don't know]: invalid packet (ctb=14)" and apparently
this is non-fatal.  There is a fix for this being rolled into GPG 2.x.
http://lists.gnupg.org/pipermail/gnupg-devel/2006-September/023180.html
Copied from collections.py.  Fix supplied by
Simon Blandford <simon@onepointltd.com>


New in v0.5.03 (2008/11/17)
---------------------------
bug #24731: Documentation error: "if... if" in remove-older-than paragraph
https://savannah.nongnu.org/bugs/?24731

bug #24775: Digest Auth for WebDAV backend
https://savannah.nongnu.org/bugs/?24775

patch #6676: Raw delta stats aren't right for multivolumes
https://savannah.nongnu.org/patch/?6676

patch #6675: Add modelines
https://savannah.nongnu.org/patch/?6675

patch #6674: Add --log-* options to man page
https://savannah.nongnu.org/patch/?6674

patch #6673: Add --dry-run option
https://savannah.nongnu.org/patch/?6673

patch #6672: makedist doesn't ship util.py
https://savannah.nongnu.org/patch/?6672

patch #6670: Machine Readable Output
https://savannah.nongnu.org/patch/?6670

patch #6662: improve s3 backend error reporting
https://savannah.nongnu.org/patch/?6662

patch #6652: improve asynch scheduler (including the synchronous case)
https://savannah.nongnu.org/patch/?6652

patch #6642: make ParsedUrl() thread-safe with respect to itself
https://savannah.nongnu.org/patch/?6642

patch #6638: correct typo in reporting lack of sufficiently new boto backend
https://savannah.nongnu.org/patch/?6638

sr #106496: put install-from-cvs-notes in CVS-README
https://savannah.nongnu.org/support/?106496

sr #106534: GMail backups aren't stored in the correct location
https://savannah.nongnu.org/support/?106534


New in v0.5.02 (2008/09/21)
---------------------------
* Add -h option for help

* Change gpg logging so that logs are always collected.
The log is printed in the case of gpg IO errors.  Also,
verbosity level 5 or above (-v5) will print the logs.

patch #6297: Add IMAP/s/gmail support
https://savannah.nongnu.org/patch/?6297

bug #24260: backend.py missing re import
https://savannah.nongnu.org/bugs/?24260

bug #24274: asyncscheduler.py missing sys import
https://savannah.nongnu.org/bugs/?24274


New in v0.5.01 (2008/09/11)
---------------------------
bug #24234: Tabs Present In Source Files
https://savannah.nongnu.org/bugs/?24234

bug #24223: WebDAV backend broken in 0.5.00
https://savannah.nongnu.org/bugs/?24223

bug #24226: WebDAV Does Not Create Collection If Needed
https://savannah.nongnu.org/bugs/?24226


New in v0.5.00 (2008/09/06)
---------------------------
Changes to unit tests:
  - resolve circular imports after backend reorg
  - resolve exception error import - now in errors.py
  - remove need for temp2.tar to be in CVS repository

bug #23988: scp destination fails if no username is specified
https://savannah.nongnu.org/bugs/?23988

bug #23985: --no-encryption option does not work in 0.4.12
https://savannah.nongnu.org/bugs/?23985

patch #6623: slightly augment tempdir cleanup logging
https://savannah.nongnu.org/patch/?6623

patch #6596: re-organize backend module structure
https://savannah.nongnu.org/patch/?6596

patch #6589: S3 european bucket support
https://savannah.nongnu.org/patch/?6589

patch #6353: Concurrency for volume encryption and upload.
https://savannah.nongnu.org/patch/?6353


New in v0.4.12 (2008/07/22)
---------------------------
Dan Muresan created a patch to minimize the number of password
prompts.  To do so, it sometimes requests a password once without
confirmation; if later it turns out that a full backup is needed,
the user is prompted for confirmation.

bug #23540: doc bug in man page (environment FTP_PASSWORD)
https://savannah.nongnu.org/bugs/?23540

bug #23362: Documentation for --version, --time-separator <char>
https://savannah.nongnu.org/bugs/?23362

bug #23283: interactive passphrase query is suboptimal
https://savannah.nongnu.org/bugs/?23283

bug #23066 was not actually applied to 0.4.11.  Its here now.
https://savannah.nongnu.org/bugs/?23066

bug #22826: regressions caused by boto 1.1c
https://savannah.nongnu.org/bugs/?22826


New in v0.4.11 (2008/05/05)
---------------------------
Changes applied to allow duplicity to run under Python 2.3 again.

patch #6485: Reinstate patch #6340 with a detailed explanation.
https://savannah.nongnu.org/patch/?6485

bug #23066: ssh uris with given portnumbers are not handled correctly
https://savannah.nongnu.org/bugs/?23066


New in v0.4.10 (2008/03/27)
---------------------------
bug #22728: FTP backend fails on empty directory
https://savannah.nongnu.org/bugs/?22728

patch #6374: Duplicity --tempdir patch documentation.
https://savannah.nongnu.org/patch/?6374

patch #6375: Duplicity reports the epoch for a nonexistant last full backup date
https://savannah.nongnu.org/patch/?6375

patch #6380: add additional named logging levels
https://savannah.nongnu.org/patch/?6380

patch #6389: Possible Fix for pagefile.sys on Win32 systems
https://savannah.nongnu.org/patch/?6389

patch #6403: Restore by overwriting files/directories by using --force option
https://savannah.nongnu.org/patch/?6403

patch #6449: add additional debug level logging
https://savannah.nongnu.org/patch/?6449

patch #6453: handle absolute urls in webdav backend
https://savannah.nongnu.org/patch/?6453

Fix problem where S3 prefix was prepended with 'd'.  This caused
a failure in the regression tests.


New in v0.4.9 (2008/01/04)
--------------------------
NOTE: URL format correction in rsync://.  The rsync backend
now properly supports absolute and relative pathnames and
module access.  The formats are:
    rsync://user@host::/module/some_dir
    rsync://user@host/relative_path
    rsync://user@host//absolute_path

Fixed regression caused by changeover to new urlparse.py.
bug #21475: FTP Usernames that contain '@' are not recognized
https://savannah.nongnu.org/bugs/?21475

Added section URL FORMAT in the duplicity man page.

Added 2nd patch to bug #21475 that forces all versions of
Python to use the fixed urlparse.py.

Fixed so that remove-older-than and remove-all-but-n-full
will not request a GPG passphrase.

Fixed issue with Pure-FTPd that would always return an empty
directory listing and thus force a full backup every time.
A side effect of the change is that we now only make one call
to ncftpls to get the listing, thereby reducing the overhead
on systems with a large number of backup files.

bug #21896: Two problems with rsync under 0.4.8 + patch
https://savannah.nongnu.org/bugs/?21896

bug #21909: Problematic typo in compare_verbose() method
https://savannah.nongnu.org/bugs/?21909

patch #6354: S3 staight typo results in a bogus exception
https://savannah.nongnu.org/patch/?6354

patch #6356: Command line option for the temporary directory root.
https://savannah.nongnu.org/patch/?6356

patch #6357: Explicit restore action is missing from the command list,
https://savannah.nongnu.org/patch/?6357


New in v0.4.8 (2007/12/15)
--------------------------
First pass at bringing unittest cases up to date.
All unit tests are working, but more test cases need
to be added to handle the new protocols, plus there is
some print leakage even with logging turned off.

Allow pexpect to force the close of the child on sftp
calls.  We already do that with scp calls.  This cleans
up that exception.

bug #21751: rsync module urls do not work in 0.4.7
https://savannah.nongnu.org/bugs/?21751

bug #21752: Boto backend needs version 0.9d or later
https://savannah.nongnu.org/bugs/?21752

patch #6340: S3 short filename regression
https://savannah.nongnu.org/patch/?6340

patch #6344: S3 bad bad key key handling
http://savannah.nongnu.org/patch/?6344


New in v0.4.7 (2007/12/07)
--------------------------
Applied patch from Eric Hanchrow to fix logging error in
botoBackend, and fix delete() in rsyncBackend.

bug #21673: remove-all-but-n-full wrong arg usage
https://savannah.nongnu.org/bugs/?21673

bug #21686: NcFTPGet 3.2.0 tempfile incompatibility
https://savannah.nongnu.org/bugs/?21686

patch #6292: Amazon S3 bucket creation deferral
https://savannah.nongnu.org/patch/?6292

patch #6293: left-over patch from remove-all-but-n-full
https://savannah.nongnu.org/patch/?6293

patch #6296: Generic S3 url support for Duplicity 0.4.6
https://savannah.nongnu.org/patch/?6296

patch #6298: URI unquoting patch for FTP backend
https://savannah.nongnu.org/patch/?6298

patch #6299: re-design tempfile handling
https://savannah.nongnu.org/patch/?6299

patch #6300: Standard library replacement for ParsedUrl class
https://savannah.nongnu.org/patch/?6300

patch #6301: log sftp commands at verbosity 5
https://savannah.nongnu.org/patch/?6301


New in v0.4.6 (2007/11/28)
--------------------------
https://savannah.nongnu.org/bugs/?21508
bug #21508: Change delete implementation of ftpBackend to
only send one "DELE" instead of multiple per delete.

https://savannah.nongnu.org/bugs/?21646
bug #21646: --archive-dir causes delete of remote full
sigs and orphaned sig files

https://savannah.nongnu.org/bugs/?21651
bug #21651, add https support for webdav.

https://savannah.nongnu.org/bugs/?21657
bug #21657: ncftpls fails to create dir in ver 0.4.5

https://savannah.nongnu.org/patch/?6284
patch #6284: document TMPDIR and friends

https://savannah.nongnu.org/patch/?6284
patch #6285: security fix: eliminate use of mktemp()

https://savannah.nongnu.org/patch/?6289
patch #6289: Amazon S3 key prefix patch for Duplicity 0.4.5

https://savannah.nongnu.org/patch/?6291
patch #6291: Alternative WebDAV HTTPS patch


New in v0.4.5 (2007/11/26)
--------------------------
https://savannah.nongnu.org/bugs/?21646
Fix to handling of collections when --archive-dir is used.
Prior to this, duplicity would write the full sig files to
both local and remote, then delete the remote.  Now, it does
not delete the remote full sigs.

Applied the following patches from Peter Schuller
patch #6279, add command 'remove-all-but-n-full'
patch #6280, clarify --archive-dir option
patch #6281, --help should print to stdout, not stderr
patch #6282, collection-status: output in more consistent order


New in v0.4.4 (2007/11/23)
--------------------------
All the changes in RC1 through RC4 plus:

Changes to ftpBackend to use a temp login config file rather
than putting the username and password on the command line.
This requires the use of NcFTP 3.1.9 or later.

Thanks to a patch from Greg Hewgill the Amazon S3 backend now
uses --num-retries to retry IO repeatedly if needed.

Changes to commandline processing to allow non-ambiguous short
strings for commands, i.e. 'i', 'inc', 'incr' for 'incremental',
'f' for 'full', etc..  A warning message is printed if the short
command is not unique.  Note: this already works for options, so
I just applied the same idea to commands.

Applied a patch from Gregory Hartman to correct handling of DST
in time calculations.  This affects backups made the night of
a DST time switch.


New in v0.4.4.RC4 (2007/10/26)
------------------------------
WARNING:  COMMAND LINE CHANGES ARE NOT BACKWARDS COMPATIBLE!
There is a new command line syntax to separate actions and
options.  Refer to the new man page for full details of the
change.  The new syntax looks like:
    duplicity [full|incr] [options] source_dir target_url
    duplicity [restore] [options] source_url target_dir
    duplicity verify [options] source_url target_dir
    duplicity collection-status [options] target_url
    duplicity list-current-files [options] target_url
    duplicity cleanup [options] target_url
    duplicity remove-older-than time [options] target_url

Fixed issue in --time-separator where the current time string
was being set prior to setting the separator, causing errors
when trying to set the --time-separator for Windows systems.

Fix so that file mtime is always compared in full seconds.

Fix so that ftpBackend.delete() does not print file list.


New in v0.4.4.RC3 (2007/10/02)
------------------------------
Patch from Olivier Croquette to add --full-if-older-than=<time>
option to force a full backup at <time> rather than incremental.

Patch from Stefan Hoth to add :port option in FTP.

Patch from Mitchell Garnaat to get all keys from S3, rather
than just the first 1000.

Fix to sshBackend to version check for python-pexpect 2.1.

Fix one case in ftpBackend where host string was used instead of
url_string.  This only affected the creation of the target dir on
the remote system, if it did not exist, and only if the user or
port needed to be specified.


New in v0.4.4.RC2 (2007/09/26)
------------------------------
Added --timeout <seconds> (default 30) to allow users to change
duplicity's network timeout settings.

Added --time-separator <char> to allow users to change the time
separator from ':' to another character that will work on their
system.  HINT: For Windows SMB shares, use --time-separator='_'.
NOTE: '-' is not valid as it conflicts with date separator.

Add patch from Alexander Zangerl to suppress the GPG passphrase
prompt when a passphrase is not needed.
 - full and pubkey enc:  doesn't depend on old encrypted info
 - inc and pubkey enc and archive-dir: need manifest and sigs,
   which the archive dir contains unencrypted
 - with encryption disabled
 - listing files:  needs manifest, but the archive dir has that
 - collection status:  only looks at a repository

Add patch from Olivier Croquette to allow user@domain usernames,
making ftp://user@domain@domain.com/path a valid URL.

Added a bit of debug print to sshBackend for --verbosity=9.

Changed usage message to separate options and commands.


New in v0.4.4.RC1 (2007/09/19)
------------------------------
Patches applied from Debian
DP: fix #228388: old/aborted/offending sig files prohibit further action
DP: fixes manual page and usage msg for rsync url and --remove-older-than
DP: make tempfiles with useful names
DP: do not ask for a passphrase if none is required!

https://savannah.nongnu.org/bugs/?21123
duplicity 0.4.3 ftpBackend did not find backup sets when there was
more than 20 files in directory.

https://savannah.nongnu.org/patch/?6212
Large performance boost for large volume sizes.

https://savannah.nongnu.org/patch/?6211
Restore strict host checking in sshBackend.

https://savannah.nongnu.org/patch/?6205
Add option --librsync-dir for when its not found.


New in v0.4.3 (2007/08/20)
--------------------------
All the changes in RC1 through RC12 plus:

Move get_password() to Backend class to standardize.

Fix problem with ftpBackend to create target directory
if needed.  Note: this creates only one level.

Dropped ssh-command and added ssh-options to allow users
to add options to the scp and sftp commmands.

Removed use of tempfile.TemporaryFile().  This fixes the
restore problem on Windows that was due to Python bug
1776696 reported on Sourceforge.

Fixed Debian Bug#437694: Make bzip2 compression optional.
The default is not to do bzip2 compression.  To use bzip2
add the following command line option:
--gpg-options='--compress-algo=bzip2 --bzip2-compress-level=9'
Note: do not add spaces in the string value.

Fixed bug 20764 - unable to use port in ssh backend.
https://savannah.nongnu.org/bugs/?20764

Remove ssh_command option, add ssh_options.  This adds
options to the scp and sftp commands that are used by
the ssh backend.

Change ssh backend to send 'quit' instead of EOF when
using sftp.  This allows it to run under cron as long
as the password is supplied non-interactively.

Change ssh backend to not pass :port part of URL to
scp or sftp.  We already supply -oPort=xx for port.


New in v0.4.3.RC12 (2007/08/09)
-------------------------------
Fix index out of range in Bug 20730, triggered when there
is only one incremental in the list.
https://savannah.nongnu.org/bugs/?20730

Changed the file:, ftp:, and ssh: backends so that
the target directory will be created at start.

Changed the ftp: backend so that empty target dirs
do not error out.


New in v0.4.3.RC11 (2007/07/20)
-------------------------------
Duplicity is now covered under GPL version 3 (or later).

Duplicity now correctly processes scp URL's of the form:
  scp://user@host[:port]/
where the directory spec is empty.  This fixes a bug where the
user could not write into the home directory on the target.

The SSH/SCP backend has had an overhaul.  It now requires the
python-pexpect module.  Normally this can be obtained from your
distro's repository, but if you want, you can download pexpect
from http://pexpect.sourceforge.net.

The SSH/SCP backend work was done to allow the user to use password
authentication rather than public-key.  You may now enter a password,
either through the FTP_PASSWORD environment variable, or at the
console.  To activate this feature you will need to use the option
--ssh-askpass on the command line.  The default is public-key, which
does *not* look for a password from either source.

Various fixes to the man page for --ssh-askpass, --remove-older-than,
and --archive-dir.


New in v0.4.3.RC10 (2007/07/14)
-------------------------------
Add support for:
  --ftp-passive,
  --ftp-regular

Removed -m option on FTP put command.  This means that the remote
directory must exist prior to backup.

Changed ftpBackend from -f option back to commandline.  Various
versions of ncftp* interact differently when both -f and commandline
options are supplied.

The FTP password is munged in all log operations.

Added logging of filenames in the bucket when -v9 is used on
Amazon S3.


New in v0.4.3.RC9 (2007/07/09)
------------------------------
Change to a max block size of 2048 bytes for rsync difference buffer.
This may slow things down for truly large files, but will give much
smaller deltas on files with numerous small changes, such as database
files.

New S3 backend, Boto, from Eric Evans, replaces bitBucket.  Boto can
be obtained from http://code.google.com/p/boto/.  I did not make this
a requirement for setup since its not in the normal repositories.

New FTP backend from Thorsten Schnebeck that uses ncftp instead of
Pythons ftplib.  This seems to be much more solid.  I added the -f
option with a secure temp file to contain host, user, and password,
rather than having them on the command line.  I also added the -m
option to the put command to create the target directory and the -t
option to make sure it times out if there is a network problem.

The Backend class now contains a popen_persist function that acts like
run_command_persist.  Both use the new num_retries global.

Added a commandline option, '--num-retries=<int>', to set the number
of retries.  The default is 5.


New in v0.4.3.RC8 (2007/06/27)
------------------------------
Bug 20282 - Thomas Tuttle:
An out of range index when checking past history in the backup
sets caused a failure when trying to access later.

Bug 20149 - dAniel hAhler:
dAniel submitted a second patch for this for further cleanup.
The new patch prefers the latest intact backup set.

Bug 20039 - Andreas Schildbach: --and--
Patch 6030 - Alexander Zangerl <az@debian.org>:
Duplicity now uses bzip2 for compression.  This matches the way
the Debian distribution handles it.  I'll think about adding an
option to override later, if its needed.


New in v0.4.3.RC7 (2007/06/19)
------------------------------
Bug 20179 - dAniel hAhler:
When errors cause login to fail in FTP, reset and try again.

Patch 6015 -dAniel hAhler:
Better display of traceback when ftpBackend errors out.

Patch 6029 - Alexander Zangerl <az@debian.org>:
http://bugs.debian.org/370206
archive-dir together with incremental backup results in crash. the
patch is simple, the code in 0.4.2 did attempt to access strings as
objects.

Patch 6031 - Alexander Zangerl <az@debian.org>:
http://bugs.debian.org/369971
there's some problems with unattended encrypted dumps, if the user
doesn't want to hand duplicity the gpg passphrase and attempts to work
around this by using a local archive dir.  the patch makes it look at
a manifest in a local archive dir if gpg doesn't manage to decrypt a
remote one (no surprise without a passphrase).

Patch 6032 - Alexander Zangerl <az@debian.org>:
a new feature patch: i've recently gotten annoyed with having
gazillions of 5mb files and therefore added a --volsize option to
allow the user setting the chunk size. the patch is simple and
contains a manpage update as well.

Patch 6033 - Alexander Zangerl <az@debian.org>:
let's add a --help terse usage message and don't just direct the user
to the manual. this should come handy if somebody needs to restore
stuff without having the manual available.


New in v0.4.3.RC6 (2007/06/13)
------------------------------
Bug 20149 - dAniel hAhler: When errors cause an incomplete backup set,
flag the error with a message, rather than erroring out.  The user
then knows to run --cleanup.

Patch 5998 - Kuang-che Wu: Cache uid and gid lookup to speed
operations.

Patch 5993 - daacyy302@sneakemail.com: Make Amazon S3 backend
incrementally more robust for recovery.


New in v0.4.3.RC5 (2007/06/04)
------------------------------
GnuPG fails when trying to access stdin on an empty passphrase.
Changes allow empty passphrase on public-key encryption and now
respond gracefully on empty passphrase for symmetric encryption.

dAniel hAhler submitted a patch to change "Error initializing file
foo" (log level 2), where foo was a socket, to "Skipping socket foo"
(log level 7).  https://savannah.nongnu.org/patch/?5985

Change logging to flush after every write, unbuffering stdout and
stderr, thus producing logs that are coherent.


New in v0.4.3.RC4 (2007/06/02)
------------------------------
More fixes on FTP.  dAniel hAhler supplied a new patch for FTP that
cleans up the error handling and reduces the retry time to zero on the
first retry.


New in v0.4.3.RC3 (2007/05/31)
------------------------------
Fixed connection problem in FTP where it was not quitting on
connection reset and just logging in again.  This created many stale
logins on the remote system.

Changed attribution of a couple of patches to dAniel hAhler, who
actually wrote the patches, not just found them.


New in v0.4.3.RC2 (2007/05/30)
------------------------------
Fixed bug in tarfile.py that was causing ValueError exception.  Thanks
to dAniel hAhler for the patch that fixed the problem.  Refer to:
http://savannah.nongnu.org/bugs/?19998


New in v0.4.3.RC1 (2007/05/26)
------------------------------
Applied patches:
  https://savannah.nongnu.org/patch/?4486
  https://savannah.nongnu.org/patch/?5183
  https://savannah.nongnu.org/patch/?5185
  https://savannah.nongnu.org/patch/?5412
  https://savannah.nongnu.org/patch/?5413
  https://savannah.nongnu.org/patch/?5680
  https://savannah.nongnu.org/patch/?5681
  https://savannah.nongnu.org/patch/?5682
  https://savannah.nongnu.org/patch/?5794
  https://savannah.nongnu.org/patch/?5830

Fixed bugs:
  https://savannah.nongnu.org/bugs/?2441
  https://savannah.nongnu.org/bugs/?16711

ProFTPD resets the connection after returning 226 when NLSTing an
empty directory, so changed code to allow that exception.

ftpBackend now asks for a password if FTP_PASSWORD does not exist.

rsyncBackend was using full URL in the commandline and failing.
It now uses only server:path/, leaving off rsync://.

Added --sftp-command option, now that the scp backend uses sftp for
listing and deleting files.

Brian Sutherland has contributed a new backend for Amazon's S3 data
storage service.

Added some patches compiled by Andre Beckedorf:

    Tolerate more errors when listing an ftp directory (errors
    indicate an empty dir).

    Retry ftp commands when upon temporary error.  (Thanks to to
    Stefan Schimanski and dAniel hAhler for their patches.)


New in v0.4.2 (2006/02/02)
--------------------------
Mathias de Riese's substantial patch or patches appear to have been
applied to CVS years ago, but not released yet.  Sorry about that.

Followed suggestion by David Rigel, make user type passphrase twice to
confirm.

Eric Hanchrow's patch makes sure duplicity deletes older signatures
when using --remove-older-than.

Jiri Tyr's patch may fix some scp/sftp problems.

asdf's patch makes sure uids or gids over 2097151 don't corrupt the
tarfiles.

Cleaned up and documented --collection-status option, which lists the
backup chains and sets found in the repository.

FTP error 450 when listing a directory now understood to mean the
directory is empty (duplicity will not exit with error).

--remove-older-than now cannot delete the active backup chain, even if
you specify a time later than the chain (e.g. "--remove-older-than
now").


New in v0.4.1 (2003/08/09)
--------------------------
Applied (version of) Helmut Schneider's patch to display file mod
times with --list-current-files.

Fixed bug found by Rob Browning handling symlinks with long names that
have long names.

Applied Stephen Isard's patch to fix exclude-globbing-filelist.

Applied Sebastian Wilhelmi's patches to add rsync as a backend.

To improve large file performance, signature block size is now based
on file length.

duplicity should now build with librsync 0.9.6.  Much thanks to
Donovan Baarda for his work in this version of librsync.

duplicity should work with Python 2.3 now.


New in v0.4.0 (2002/11/30)
--------------------------
Changed restore procedure to download volumes from all backup sets
simultaneously.

Changed the verbosity level of some messages to 5, so level 4 is
cleaner.

Added --verify option, for checking whether a backup is up-to-date, or
to see what has changed since that backup.

GPG no longer needed: with --no-encryption option duplicity will write
gzipped volumes.  The checksums of volumes will still be verified, but
this will not stop a malicious attack because the manifest files can
be easily updated.

Earlier versions could crash when doing an incremental backup where no
files had changed.


New in v0.3.1 (2002/11/17)
--------------------------
Now by default the most recent files get restored, not the oldest.
You can get the old weird behavior by specifying --restore-time 1 (or
any other very early time).

Fixed a couple bugs where duplicity would crash if it found the remote
directory corrupted in various ways (for instance, if it contained a
file that looked like a duplicity file but had an invalid time
string).

Added --cleanup option, for deleting the files that may accumulate if
a duplicity session is aborted after it has uploaded some files.

Added --remove-older-than option, for safely deleting backup sets
older than the given time.

Suppress GPG log messages like "gpg: CAST5 encrypted data" if
verbosity is set to 3 or less.

short-filenames get even shorter---now use base 36 (0-9 and a-z) for
times and volume numbers.  This change is not backwards compatible but
probably I'm the only one affected.  If not, let me know and I can
probably write a little script.

Improved the way files are packed into the volumes so less space is
wasted per volume.

Decreased default volume size to 5MB (from 50MB) in preparation for
the new restore system planned for 0.4.0.


New in v0.3.0 (2002/11/10)
--------------------------
Added ftp backend.  Now the remote repository can accessed by ftp and
can be specified like "ftp://user@foo.bar/".

Added --ssh-command and --scp-command options, which can be used to
replace ssh and scp, or pass different arguments to them.  Requested
by Will Dyson.

Added --short-filenames option, for use when uploading to a file
system that can't have filenames longer than 30 characters (e.g. Mac
OS 8).

Added --list-current-files mode, which lists the files currently at
the given destination url.

Ported some statistics code from rdiff-backup.  Now by default
statistics are printed after a backup session.  This can be disabled
with the --no-print-statistics option.  Thanks to Mathieu Doidy for
requesting the above two features.

Added rdiff-backup-style --include/exclude-filelist-globbing options.
Now filelists with "+ /- " can be treated exactly like repeated
--include or --exclude options.

Fixed bug backing up normal files instead of directories.  Thanks to
Mathieu Doidy for bug report.


New in v0.2.1 (2002/10/31)
--------------------------
Security Fix:  Fixed bug where an rdiffdir patch containing a path
with a '..' component could overwrite files in parent directory.

Fixed bug where files without a username (only uid) would be marked as
changed every session.  Thanks to Peter Ehrenberg for bug report.

Now files with negative mtimes are treated as if they have mtime 0.
This prevents them from being marked as changed unnecessarily.  Thanks
to Peter Ehrenberg for report.


New in v0.2.0 (2002/09/29)
--------------------------
(Thanks to Peter Ehrenberg for his valuable suggestions on many of the
below.)

** IMPORTANT ** New syntax intended to make duplicity more
user-friendly.  Old duplicity invocation will not work so change your
scripts and read the man page.

By default no local archive dir will be read or created.
$HOME/.duplicity has no special significance.  However, one can be
specified with --archive-dir for faster operation.

If PASSPHRASE environment variable not set, ask user for passphrase
instead of exiting.

The source directory and hostname are now recorded, and rdiff-backup
will complain if you try to back up different directories to the same
location (but --allow-source-mismatch can override).

Changed some of the logging verbosity levels.  Level 5 now lists files
being backed up.

Fixed large file problems.  Files larger than 2GB should be backed up
correctly.

Significant additions to the manual page.

By default, duplicity now chooses whether to make a full or
incremental backup depending on whether up-to-date signatures can be
found on the remote side or local archive directory.  Overrideable
with (-f/--full and -i/--incremental).


New in v0.1.1 (2002/09/16)
--------------------------
Supports asymmetric encryption with GPG public keys using the
--encrypt-key option.

Added option --sign-key.  When backing up, files are signed with the
given key.  When restoring, remote files are required to be signed by
given key.

Now duplicity checks the hash data found in the manifest file.  The
previous version generated SHA1 hashes but did not check them when
restoring.

Fixed GnuPG broken pipe error.  In the previous version certain
partial restores would end with a spurious GnuPG error message.


New in v0.1.0 (2002/08/26)
--------------------------
First real version.