@cloudant/couchbackup 2.9.10-SNAPSHOT.112 → 2.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.scannerwork/report-task.txt +2 -2
- package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
- package/.scannerwork/scanner-report/analysis.log +1 -1
- package/.scannerwork/scanner-report/changesets-2.pb +1 -0
- package/.scannerwork/scanner-report/changesets-3.pb +1 -0
- package/.scannerwork/scanner-report/changesets-52.pb +1 -0
- package/.scannerwork/scanner-report/changesets-56.pb +1 -0
- package/.scannerwork/scanner-report/changesets-67.pb +1 -0
- package/.scannerwork/scanner-report/changesets-68.pb +1 -0
- package/.scannerwork/scanner-report/component-1.pb +2 -2
- package/.scannerwork/scanner-report/component-10.pb +1 -1
- package/.scannerwork/scanner-report/component-11.pb +1 -1
- package/.scannerwork/scanner-report/component-12.pb +1 -1
- package/.scannerwork/scanner-report/component-13.pb +1 -1
- package/.scannerwork/scanner-report/component-14.pb +1 -1
- package/.scannerwork/scanner-report/component-15.pb +1 -1
- package/.scannerwork/scanner-report/component-19.pb +1 -1
- package/.scannerwork/scanner-report/component-2.pb +1 -0
- package/.scannerwork/scanner-report/component-20.pb +1 -1
- package/.scannerwork/scanner-report/component-21.pb +1 -1
- package/.scannerwork/scanner-report/component-22.pb +1 -1
- package/.scannerwork/scanner-report/component-23.pb +1 -1
- package/.scannerwork/scanner-report/component-24.pb +1 -1
- package/.scannerwork/scanner-report/component-25.pb +1 -1
- package/.scannerwork/scanner-report/component-26.pb +1 -1
- package/.scannerwork/scanner-report/component-27.pb +1 -1
- package/.scannerwork/scanner-report/component-28.pb +1 -1
- package/.scannerwork/scanner-report/component-29.pb +1 -1
- package/.scannerwork/scanner-report/component-3.pb +1 -0
- package/.scannerwork/scanner-report/component-30.pb +1 -1
- package/.scannerwork/scanner-report/component-31.pb +1 -1
- package/.scannerwork/scanner-report/component-32.pb +1 -1
- package/.scannerwork/scanner-report/component-33.pb +1 -1
- package/.scannerwork/scanner-report/component-35.pb +1 -1
- package/.scannerwork/scanner-report/component-4.pb +1 -1
- package/.scannerwork/scanner-report/component-47.pb +1 -1
- package/.scannerwork/scanner-report/component-48.pb +1 -1
- package/.scannerwork/scanner-report/component-49.pb +1 -1
- package/.scannerwork/scanner-report/component-5.pb +1 -1
- package/.scannerwork/scanner-report/component-50.pb +1 -1
- package/.scannerwork/scanner-report/component-51.pb +1 -1
- package/.scannerwork/scanner-report/component-52.pb +1 -0
- package/.scannerwork/scanner-report/component-54.pb +1 -1
- package/.scannerwork/scanner-report/component-56.pb +1 -1
- package/.scannerwork/scanner-report/component-59.pb +1 -1
- package/.scannerwork/scanner-report/component-6.pb +1 -1
- package/.scannerwork/scanner-report/component-60.pb +1 -1
- package/.scannerwork/scanner-report/component-65.pb +1 -1
- package/.scannerwork/scanner-report/component-66.pb +1 -1
- package/.scannerwork/scanner-report/component-67.pb +1 -0
- package/.scannerwork/scanner-report/component-68.pb +1 -0
- package/.scannerwork/scanner-report/component-7.pb +1 -1
- package/.scannerwork/scanner-report/component-8.pb +1 -1
- package/.scannerwork/scanner-report/component-9.pb +1 -1
- package/.scannerwork/scanner-report/coverages-10.pb +0 -0
- package/.scannerwork/scanner-report/coverages-11.pb +0 -0
- package/.scannerwork/scanner-report/coverages-12.pb +0 -0
- package/.scannerwork/scanner-report/coverages-13.pb +0 -0
- package/.scannerwork/scanner-report/coverages-14.pb +0 -0
- package/.scannerwork/scanner-report/coverages-15.pb +0 -0
- package/.scannerwork/scanner-report/coverages-19.pb +0 -0
- package/.scannerwork/scanner-report/coverages-20.pb +0 -0
- package/.scannerwork/scanner-report/coverages-21.pb +0 -0
- package/.scannerwork/scanner-report/coverages-22.pb +0 -0
- package/.scannerwork/scanner-report/coverages-23.pb +0 -0
- package/.scannerwork/scanner-report/coverages-24.pb +0 -0
- package/.scannerwork/scanner-report/coverages-25.pb +0 -0
- package/.scannerwork/scanner-report/coverages-26.pb +0 -0
- package/.scannerwork/scanner-report/coverages-27.pb +0 -0
- package/.scannerwork/scanner-report/coverages-28.pb +0 -0
- package/.scannerwork/scanner-report/coverages-29.pb +0 -0
- package/.scannerwork/scanner-report/coverages-3.pb +0 -0
- package/.scannerwork/scanner-report/coverages-30.pb +0 -0
- package/.scannerwork/scanner-report/coverages-31.pb +0 -0
- package/.scannerwork/scanner-report/coverages-32.pb +0 -0
- package/.scannerwork/scanner-report/coverages-33.pb +0 -0
- package/.scannerwork/scanner-report/coverages-35.pb +0 -0
- package/.scannerwork/scanner-report/coverages-4.pb +0 -0
- package/.scannerwork/scanner-report/coverages-47.pb +0 -0
- package/.scannerwork/scanner-report/coverages-48.pb +0 -0
- package/.scannerwork/scanner-report/coverages-49.pb +0 -0
- package/.scannerwork/scanner-report/coverages-5.pb +0 -0
- package/.scannerwork/scanner-report/coverages-50.pb +0 -0
- package/.scannerwork/scanner-report/coverages-51.pb +0 -0
- package/.scannerwork/scanner-report/coverages-52.pb +0 -0
- package/.scannerwork/scanner-report/coverages-56.pb +0 -0
- package/.scannerwork/scanner-report/coverages-59.pb +0 -0
- package/.scannerwork/scanner-report/coverages-6.pb +0 -0
- package/.scannerwork/scanner-report/coverages-60.pb +0 -0
- package/.scannerwork/scanner-report/coverages-67.pb +0 -0
- package/.scannerwork/scanner-report/coverages-7.pb +0 -0
- package/.scannerwork/scanner-report/coverages-8.pb +0 -0
- package/.scannerwork/scanner-report/coverages-9.pb +0 -0
- package/.scannerwork/scanner-report/duplications-2.pb +2 -0
- package/.scannerwork/scanner-report/duplications-21.pb +3 -0
- package/.scannerwork/scanner-report/duplications-22.pb +0 -3
- package/.scannerwork/scanner-report/duplications-23.pb +0 -2
- package/.scannerwork/scanner-report/duplications-27.pb +2 -0
- package/.scannerwork/scanner-report/duplications-29.pb +2 -0
- package/.scannerwork/scanner-report/duplications-32.pb +3 -0
- package/.scannerwork/scanner-report/duplications-35.pb +0 -3
- package/.scannerwork/scanner-report/duplications-4.pb +2 -0
- package/.scannerwork/scanner-report/duplications-48.pb +0 -3
- package/.scannerwork/scanner-report/duplications-49.pb +0 -2
- package/.scannerwork/scanner-report/duplications-5.pb +0 -2
- package/.scannerwork/scanner-report/duplications-52.pb +3 -0
- package/.scannerwork/scanner-report/duplications-59.pb +2 -0
- package/.scannerwork/scanner-report/duplications-60.pb +2 -0
- package/.scannerwork/scanner-report/duplications-68.pb +0 -0
- package/.scannerwork/scanner-report/measures-10.pb +0 -0
- package/.scannerwork/scanner-report/measures-11.pb +0 -0
- package/.scannerwork/scanner-report/measures-12.pb +0 -0
- package/.scannerwork/scanner-report/measures-13.pb +0 -0
- package/.scannerwork/scanner-report/measures-14.pb +0 -0
- package/.scannerwork/scanner-report/measures-15.pb +0 -0
- package/.scannerwork/scanner-report/measures-19.pb +0 -0
- package/.scannerwork/scanner-report/measures-20.pb +0 -0
- package/.scannerwork/scanner-report/measures-21.pb +0 -0
- package/.scannerwork/scanner-report/measures-22.pb +0 -0
- package/.scannerwork/scanner-report/measures-23.pb +0 -0
- package/.scannerwork/scanner-report/measures-24.pb +0 -0
- package/.scannerwork/scanner-report/measures-25.pb +0 -0
- package/.scannerwork/scanner-report/measures-26.pb +0 -0
- package/.scannerwork/scanner-report/measures-27.pb +0 -0
- package/.scannerwork/scanner-report/measures-28.pb +0 -0
- package/.scannerwork/scanner-report/measures-29.pb +0 -0
- package/.scannerwork/scanner-report/measures-3.pb +16 -0
- package/.scannerwork/scanner-report/measures-30.pb +0 -0
- package/.scannerwork/scanner-report/measures-31.pb +0 -0
- package/.scannerwork/scanner-report/measures-32.pb +0 -0
- package/.scannerwork/scanner-report/measures-33.pb +0 -0
- package/.scannerwork/scanner-report/measures-35.pb +0 -0
- package/.scannerwork/scanner-report/measures-4.pb +0 -0
- package/.scannerwork/scanner-report/measures-47.pb +0 -0
- package/.scannerwork/scanner-report/measures-48.pb +0 -0
- package/.scannerwork/scanner-report/measures-49.pb +0 -0
- package/.scannerwork/scanner-report/measures-5.pb +0 -0
- package/.scannerwork/scanner-report/measures-50.pb +0 -0
- package/.scannerwork/scanner-report/measures-51.pb +0 -0
- package/.scannerwork/scanner-report/measures-52.pb +0 -0
- package/.scannerwork/scanner-report/measures-54.pb +0 -0
- package/.scannerwork/scanner-report/measures-56.pb +0 -0
- package/.scannerwork/scanner-report/measures-59.pb +0 -0
- package/.scannerwork/scanner-report/measures-6.pb +0 -0
- package/.scannerwork/scanner-report/measures-60.pb +0 -0
- package/.scannerwork/scanner-report/measures-65.pb +0 -0
- package/.scannerwork/scanner-report/measures-66.pb +0 -0
- package/.scannerwork/scanner-report/measures-67.pb +0 -0
- package/.scannerwork/scanner-report/measures-7.pb +0 -0
- package/.scannerwork/scanner-report/measures-8.pb +0 -0
- package/.scannerwork/scanner-report/measures-9.pb +0 -0
- package/.scannerwork/scanner-report/metadata.pb +0 -0
- package/.scannerwork/scanner-report/source-10.txt +258 -23
- package/.scannerwork/scanner-report/source-11.txt +92 -103
- package/.scannerwork/scanner-report/source-12.txt +24 -82
- package/.scannerwork/scanner-report/source-13.txt +110 -145
- package/.scannerwork/scanner-report/source-14.txt +72 -249
- package/.scannerwork/scanner-report/source-15.txt +24 -14
- package/.scannerwork/scanner-report/source-19.txt +93 -121
- package/.scannerwork/scanner-report/source-20.txt +14 -8
- package/.scannerwork/scanner-report/source-21.txt +224 -14
- package/.scannerwork/scanner-report/source-22.txt +15 -223
- package/.scannerwork/scanner-report/source-23.txt +595 -115
- package/.scannerwork/scanner-report/source-24.txt +13 -26
- package/.scannerwork/scanner-report/source-25.txt +135 -15
- package/.scannerwork/scanner-report/source-26.txt +120 -339
- package/.scannerwork/scanner-report/source-27.txt +128 -19
- package/.scannerwork/scanner-report/source-28.txt +11 -43
- package/.scannerwork/scanner-report/source-29.txt +227 -559
- package/.scannerwork/scanner-report/source-3.txt +178 -0
- package/.scannerwork/scanner-report/source-30.txt +71 -47
- package/.scannerwork/scanner-report/source-31.txt +125 -46
- package/.scannerwork/scanner-report/source-32.txt +101 -62
- package/.scannerwork/scanner-report/source-33.txt +48 -127
- package/.scannerwork/scanner-report/source-35.txt +24 -96
- package/.scannerwork/scanner-report/source-4.txt +72 -98
- package/.scannerwork/scanner-report/source-47.txt +46 -83
- package/.scannerwork/scanner-report/source-48.txt +47 -110
- package/.scannerwork/scanner-report/source-49.txt +344 -271
- package/.scannerwork/scanner-report/source-5.txt +84 -65
- package/.scannerwork/scanner-report/source-50.txt +9 -136
- package/.scannerwork/scanner-report/source-51.txt +84 -19
- package/.scannerwork/scanner-report/source-52.txt +119 -0
- package/.scannerwork/scanner-report/source-54.txt +167 -114
- package/.scannerwork/scanner-report/source-56.txt +418 -509
- package/.scannerwork/scanner-report/source-59.txt +172 -59
- package/.scannerwork/scanner-report/source-6.txt +147 -37
- package/.scannerwork/scanner-report/source-60.txt +142 -385
- package/.scannerwork/scanner-report/source-65.txt +509 -175
- package/.scannerwork/scanner-report/source-66.txt +509 -190
- package/.scannerwork/scanner-report/source-67.txt +77 -0
- package/.scannerwork/scanner-report/source-7.txt +56 -154
- package/.scannerwork/scanner-report/source-8.txt +34 -21
- package/.scannerwork/scanner-report/source-9.txt +14 -63
- package/.scannerwork/scanner-report/symbols-10.pb +354 -20
- package/.scannerwork/scanner-report/symbols-11.pb +29 -32
- package/.scannerwork/scanner-report/symbols-12.pb +18 -40
- package/.scannerwork/scanner-report/symbols-13.pb +32 -125
- package/.scannerwork/scanner-report/symbols-14.pb +42 -354
- package/.scannerwork/scanner-report/symbols-15.pb +17 -13
- package/.scannerwork/scanner-report/symbols-19.pb +28 -116
- package/.scannerwork/scanner-report/symbols-20.pb +17 -9
- package/.scannerwork/scanner-report/symbols-21.pb +394 -10
- package/.scannerwork/scanner-report/symbols-22.pb +14 -394
- package/.scannerwork/scanner-report/symbols-23.pb +1254 -102
- package/.scannerwork/scanner-report/symbols-24.pb +10 -27
- package/.scannerwork/scanner-report/symbols-25.pb +112 -11
- package/.scannerwork/scanner-report/symbols-26.pb +85 -494
- package/.scannerwork/scanner-report/symbols-27.pb +102 -14
- package/.scannerwork/scanner-report/symbols-28.pb +9 -34
- package/.scannerwork/scanner-report/symbols-29.pb +406 -1174
- package/.scannerwork/scanner-report/symbols-3.pb +144 -0
- package/.scannerwork/scanner-report/symbols-30.pb +60 -45
- package/.scannerwork/scanner-report/symbols-31.pb +115 -42
- package/.scannerwork/scanner-report/symbols-32.pb +97 -60
- package/.scannerwork/scanner-report/symbols-33.pb +36 -85
- package/.scannerwork/scanner-report/symbols-35.pb +27 -77
- package/.scannerwork/scanner-report/symbols-4.pb +44 -30
- package/.scannerwork/scanner-report/symbols-47.pb +42 -68
- package/.scannerwork/scanner-report/symbols-48.pb +45 -97
- package/.scannerwork/scanner-report/symbols-49.pb +458 -450
- package/.scannerwork/scanner-report/symbols-5.pb +58 -43
- package/.scannerwork/scanner-report/symbols-50.pb +9 -112
- package/.scannerwork/scanner-report/symbols-51.pb +68 -16
- package/.scannerwork/scanner-report/symbols-52.pb +77 -0
- package/.scannerwork/scanner-report/symbols-56.pb +610 -0
- package/.scannerwork/scanner-report/symbols-59.pb +180 -30
- package/.scannerwork/scanner-report/symbols-6.pb +126 -15
- package/.scannerwork/scanner-report/symbols-60.pb +146 -603
- package/.scannerwork/scanner-report/symbols-67.pb +30 -0
- package/.scannerwork/scanner-report/symbols-7.pb +43 -141
- package/.scannerwork/scanner-report/symbols-8.pb +12 -15
- package/.scannerwork/scanner-report/symbols-9.pb +13 -45
- package/.scannerwork/scanner-report/syntax-highlightings-10.pb +250 -29
- package/.scannerwork/scanner-report/syntax-highlightings-11.pb +75 -91
- package/.scannerwork/scanner-report/syntax-highlightings-12.pb +29 -81
- package/.scannerwork/scanner-report/syntax-highlightings-13.pb +86 -170
- package/.scannerwork/scanner-report/syntax-highlightings-14.pb +78 -247
- package/.scannerwork/scanner-report/syntax-highlightings-15.pb +21 -16
- package/.scannerwork/scanner-report/syntax-highlightings-19.pb +103 -99
- package/.scannerwork/scanner-report/syntax-highlightings-20.pb +28 -13
- package/.scannerwork/scanner-report/syntax-highlightings-21.pb +293 -14
- package/.scannerwork/scanner-report/syntax-highlightings-22.pb +21 -296
- package/.scannerwork/scanner-report/syntax-highlightings-23.pb +832 -172
- package/.scannerwork/scanner-report/syntax-highlightings-24.pb +13 -31
- package/.scannerwork/scanner-report/syntax-highlightings-25.pb +188 -24
- package/.scannerwork/scanner-report/syntax-highlightings-26.pb +154 -593
- package/.scannerwork/scanner-report/syntax-highlightings-27.pb +194 -21
- package/.scannerwork/scanner-report/syntax-highlightings-28.pb +22 -58
- package/.scannerwork/scanner-report/syntax-highlightings-29.pb +354 -582
- package/.scannerwork/scanner-report/syntax-highlightings-3.pb +243 -0
- package/.scannerwork/scanner-report/syntax-highlightings-30.pb +70 -70
- package/.scannerwork/scanner-report/syntax-highlightings-31.pb +98 -46
- package/.scannerwork/scanner-report/syntax-highlightings-32.pb +144 -72
- package/.scannerwork/scanner-report/syntax-highlightings-33.pb +59 -155
- package/.scannerwork/scanner-report/syntax-highlightings-35.pb +27 -117
- package/.scannerwork/scanner-report/syntax-highlightings-4.pb +56 -79
- package/.scannerwork/scanner-report/syntax-highlightings-47.pb +46 -69
- package/.scannerwork/scanner-report/syntax-highlightings-48.pb +74 -146
- package/.scannerwork/scanner-report/syntax-highlightings-49.pb +346 -375
- package/.scannerwork/scanner-report/syntax-highlightings-5.pb +92 -49
- package/.scannerwork/scanner-report/syntax-highlightings-50.pb +14 -189
- package/.scannerwork/scanner-report/syntax-highlightings-51.pb +70 -28
- package/.scannerwork/scanner-report/syntax-highlightings-52.pb +158 -0
- package/.scannerwork/scanner-report/syntax-highlightings-54.pb +938 -127
- package/.scannerwork/scanner-report/syntax-highlightings-56.pb +445 -3544
- package/.scannerwork/scanner-report/syntax-highlightings-59.pb +200 -78
- package/.scannerwork/scanner-report/syntax-highlightings-6.pb +179 -20
- package/.scannerwork/scanner-report/syntax-highlightings-60.pb +156 -590
- package/.scannerwork/scanner-report/syntax-highlightings-65.pb +3733 -199
- package/.scannerwork/scanner-report/syntax-highlightings-66.pb +3724 -202
- package/.scannerwork/scanner-report/syntax-highlightings-67.pb +103 -0
- package/.scannerwork/scanner-report/syntax-highlightings-7.pb +55 -203
- package/.scannerwork/scanner-report/syntax-highlightings-8.pb +23 -19
- package/.scannerwork/scanner-report/syntax-highlightings-9.pb +15 -65
- package/CHANGES.md +7 -0
- package/package.json +4 -4
- package/test-16-results.xml +151 -151
- package/test-18-results.xml +143 -143
- package/test-iam-18-results.xml +49 -49
- package/.scannerwork/scanner-report/changesets-16.pb +0 -1
- package/.scannerwork/scanner-report/changesets-17.pb +0 -1
- package/.scannerwork/scanner-report/changesets-54.pb +0 -1
- package/.scannerwork/scanner-report/changesets-58.pb +0 -1
- package/.scannerwork/scanner-report/changesets-65.pb +0 -1
- package/.scannerwork/scanner-report/changesets-66.pb +0 -1
- package/.scannerwork/scanner-report/component-16.pb +0 -1
- package/.scannerwork/scanner-report/component-17.pb +0 -1
- package/.scannerwork/scanner-report/component-18.pb +0 -1
- package/.scannerwork/scanner-report/component-58.pb +0 -1
- package/.scannerwork/scanner-report/component-61.pb +0 -1
- package/.scannerwork/scanner-report/coverages-16.pb +0 -0
- package/.scannerwork/scanner-report/coverages-54.pb +0 -0
- package/.scannerwork/scanner-report/coverages-65.pb +0 -0
- package/.scannerwork/scanner-report/coverages-66.pb +0 -0
- package/.scannerwork/scanner-report/duplications-17.pb +0 -2
- package/.scannerwork/scanner-report/duplications-65.pb +0 -2
- package/.scannerwork/scanner-report/duplications-66.pb +0 -2
- package/.scannerwork/scanner-report/measures-16.pb +0 -0
- package/.scannerwork/scanner-report/measures-18.pb +0 -0
- package/.scannerwork/scanner-report/measures-61.pb +0 -0
- package/.scannerwork/scanner-report/source-16.txt +0 -111
- package/.scannerwork/scanner-report/source-18.txt +0 -167
- package/.scannerwork/scanner-report/source-61.txt +0 -509
- package/.scannerwork/scanner-report/symbols-16.pb +0 -59
- package/.scannerwork/scanner-report/symbols-54.pb +0 -28
- package/.scannerwork/scanner-report/symbols-65.pb +0 -153
- package/.scannerwork/scanner-report/symbols-66.pb +0 -180
- package/.scannerwork/scanner-report/syntax-highlightings-16.pb +0 -133
- package/.scannerwork/scanner-report/syntax-highlightings-18.pb +0 -949
- package/.scannerwork/scanner-report/syntax-highlightings-61.pb +0 -3748
- /package/.scannerwork/scanner-report/{coverages-17.pb → coverages-2.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-58.pb → coverages-68.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-16.pb → duplications-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-3.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-54.pb → duplications-56.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-58.pb → duplications-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-22.pb → issues-21.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-19.pb → issues-31.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-24.pb → issues-35.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-26.pb → issues-49.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-17.pb → measures-2.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-58.pb → measures-68.pb} +0 -0
- /package/.scannerwork/scanner-report/{source-17.txt → source-2.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-58.txt → source-68.txt} +0 -0
- /package/.scannerwork/scanner-report/{symbols-17.pb → symbols-2.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-58.pb → symbols-68.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-17.pb → syntax-highlightings-2.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-58.pb → syntax-highlightings-68.pb} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017
|
|
1
|
+
// Copyright © 2017 IBM Corp. All rights reserved.
|
|
2
2
|
//
|
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -13,106 +13,80 @@
|
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const stream = require('stream');
|
|
18
|
+
const liner = require('./liner.js');
|
|
19
|
+
|
|
20
|
+
const onLine = function(onCommand, getDocs) {
|
|
21
|
+
const change = new stream.Transform({ objectMode: true });
|
|
22
|
+
|
|
23
|
+
change._transform = function(line, encoding, done) {
|
|
24
|
+
if (line && line[0] === ':') {
|
|
25
|
+
const obj = {
|
|
26
|
+
command: null,
|
|
27
|
+
batch: null,
|
|
28
|
+
docs: []
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
let matches;
|
|
32
|
+
|
|
33
|
+
// extract command
|
|
34
|
+
matches = line.match(/^:([a-z_]+) ?/);
|
|
35
|
+
if (matches) {
|
|
36
|
+
obj.command = matches[1];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// extract batch
|
|
40
|
+
matches = line.match(/ batch([0-9]+)/);
|
|
41
|
+
if (matches) {
|
|
42
|
+
obj.batch = parseInt(matches[1]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// extract doc ids
|
|
46
|
+
if (getDocs && obj.command === 't') {
|
|
47
|
+
const json = line.replace(/^.* batch[0-9]+ /, '').trim();
|
|
48
|
+
obj.docs = JSON.parse(json);
|
|
49
|
+
}
|
|
50
|
+
onCommand(obj);
|
|
51
|
+
}
|
|
52
|
+
done();
|
|
30
53
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
Return CLI default settings.
|
|
35
|
-
*/
|
|
36
|
-
function cliDefaults() {
|
|
37
|
-
const defaults = apiDefaults();
|
|
38
|
-
|
|
39
|
-
// add additional legacy settings
|
|
40
|
-
defaults.db = 'test';
|
|
41
|
-
defaults.url = 'http://localhost:5984';
|
|
42
|
-
|
|
43
|
-
// add CLI only option
|
|
44
|
-
defaults.quiet = false;
|
|
45
|
-
|
|
46
|
-
return defaults;
|
|
47
|
-
}
|
|
54
|
+
return change;
|
|
55
|
+
};
|
|
48
56
|
|
|
49
57
|
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// if we have a specified buffer size
|
|
64
|
-
if (typeof process.env.COUCH_BUFFER_SIZE !== 'undefined') {
|
|
65
|
-
opts.bufferSize = parseInt(process.env.COUCH_BUFFER_SIZE);
|
|
66
|
-
}
|
|
58
|
+
* Generate a list of remaining batches from a download file.
|
|
59
|
+
*
|
|
60
|
+
* @param {string} log - log file name
|
|
61
|
+
* @param {function} callback - callback with err, {changesComplete: N, batches: N}.
|
|
62
|
+
* changesComplete signifies whether the log file appeared to
|
|
63
|
+
* have completed reading the changes feed (contains :changes_complete).
|
|
64
|
+
* batches are remaining batch IDs for download.
|
|
65
|
+
*/
|
|
66
|
+
module.exports = function(log, callback) {
|
|
67
|
+
// our sense of state
|
|
68
|
+
const state = {
|
|
67
69
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// if we are instructed to resume
|
|
84
|
-
if (typeof process.env.COUCH_RESUME !== 'undefined' && process.env.COUCH_RESUME === 'true') {
|
|
85
|
-
opts.resume = true;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// if we are given an output filename
|
|
89
|
-
if (typeof process.env.COUCH_OUTPUT !== 'undefined') {
|
|
90
|
-
opts.output = path.normalize(process.env.COUCH_OUTPUT);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// if we only want a shallow copy
|
|
94
|
-
if (typeof process.env.COUCH_MODE !== 'undefined' && process.env.COUCH_MODE === 'shallow') {
|
|
95
|
-
opts.mode = 'shallow';
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// if we are instructed to be quiet
|
|
99
|
-
if (typeof process.env.COUCH_QUIET !== 'undefined' && process.env.COUCH_QUIET === 'true') {
|
|
100
|
-
opts.quiet = true;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// if we have a specified API key
|
|
104
|
-
if (typeof process.env.CLOUDANT_IAM_API_KEY !== 'undefined') {
|
|
105
|
-
opts.iamApiKey = process.env.CLOUDANT_IAM_API_KEY;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// if we have a specified IAM token endpoint
|
|
109
|
-
if (typeof process.env.CLOUDANT_IAM_TOKEN_URL !== 'undefined') {
|
|
110
|
-
opts.iamTokenUrl = process.env.CLOUDANT_IAM_TOKEN_URL;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
70
|
+
};
|
|
71
|
+
let changesComplete = false;
|
|
72
|
+
|
|
73
|
+
// called with each line from the log file
|
|
74
|
+
const onCommand = function(obj) {
|
|
75
|
+
if (obj.command === 't') {
|
|
76
|
+
state[obj.batch] = true;
|
|
77
|
+
} else if (obj.command === 'd') {
|
|
78
|
+
delete state[obj.batch];
|
|
79
|
+
} else if (obj.command === 'changes_complete') {
|
|
80
|
+
changesComplete = true;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
113
83
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
84
|
+
// stream through the previous log file
|
|
85
|
+
fs.createReadStream(log)
|
|
86
|
+
.pipe(liner())
|
|
87
|
+
.pipe(onLine(onCommand, false))
|
|
88
|
+
.on('finish', function() {
|
|
89
|
+
const obj = { changesComplete: changesComplete, batches: state };
|
|
90
|
+
callback(null, obj);
|
|
91
|
+
});
|
|
118
92
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright ©
|
|
1
|
+
// Copyright © 2017 IBM Corp. All rights reserved.
|
|
2
2
|
//
|
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -12,89 +12,52 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
/* global describe it */
|
|
15
16
|
'use strict';
|
|
16
17
|
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const onlyInDb1 = (difference(allDocs1, allDocs2));
|
|
29
|
-
const onlyInDb2 = (difference(allDocs2, allDocs1));
|
|
30
|
-
|
|
31
|
-
let databasesSame = isEmpty(onlyInDb1) && isEmpty(onlyInDb2);
|
|
32
|
-
|
|
33
|
-
if (!databasesSame) {
|
|
34
|
-
console.log(onlyInDb1.length + ' documents only in db 1.');
|
|
35
|
-
console.log('Document IDs only in db 1: ' + onlyInDb1);
|
|
36
|
-
console.log(onlyInDb2.length + ' documents only in db 2.');
|
|
37
|
-
console.log('Document IDs only in db 2: ' + onlyInDb2);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// check revs same in docs common to both dbs
|
|
41
|
-
const partitionSize = 500;
|
|
42
|
-
const batches = chunk(union(allDocs1, allDocs2), partitionSize);
|
|
43
|
-
|
|
44
|
-
const missingRevsInDb2 = await getMissingRevs(client, database1, database2, batches);
|
|
45
|
-
const missingRevsInDb1 = await getMissingRevs(client, database2, database1, batches);
|
|
46
|
-
|
|
47
|
-
databasesSame = databasesSame && isEmpty(missingRevsInDb1) && isEmpty(missingRevsInDb2);
|
|
48
|
-
|
|
49
|
-
if (!databasesSame) {
|
|
50
|
-
console.log('Missing revs in db 1:' + JSON.stringify(missingRevsInDb1));
|
|
51
|
-
console.log('Missing revs in db 2:' + JSON.stringify(missingRevsInDb2));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return databasesSame;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const getMissingRevs = async(client, databaseName1, databaseName2, batcheses) => {
|
|
58
|
-
const fakeRevisionId = '9999-a';
|
|
59
|
-
|
|
60
|
-
const missing = {};
|
|
61
|
-
|
|
62
|
-
// look in db1 - use a fake revision ID to fetch all leaf revisions
|
|
63
|
-
|
|
64
|
-
for (const batches of batcheses) {
|
|
65
|
-
const documentRevisions = {};
|
|
66
|
-
batches.forEach(id => (documentRevisions[id] = [fakeRevisionId]));
|
|
67
|
-
|
|
68
|
-
const result1 = await client.postRevsDiff({ db: databaseName1, documentRevisions });
|
|
69
|
-
const revsDiffRequestDb2 = {};
|
|
70
|
-
forOwn(result1.result, (v, k) => (revsDiffRequestDb2[k] = v.possible_ancestors));
|
|
71
|
-
// look in db2
|
|
72
|
-
const result2 = await client.postRevsDiff({ db: databaseName2, documentRevisions: revsDiffRequestDb2 });
|
|
73
|
-
forOwn(result2.result, (v, k) => {
|
|
74
|
-
if ('missing' in v) {
|
|
75
|
-
missing[k] = v.missing;
|
|
18
|
+
const fs = require('fs');
|
|
19
|
+
const u = require('./citestutils.js');
|
|
20
|
+
|
|
21
|
+
describe('Event tests', function() {
|
|
22
|
+
it('should get a finished event when using stdout', function(done) {
|
|
23
|
+
u.setTimeout(this, 40);
|
|
24
|
+
// Use the API so we can get events
|
|
25
|
+
const params = { useApi: true };
|
|
26
|
+
const backup = u.testBackup(params, 'animaldb', process.stdout, function(err) {
|
|
27
|
+
if (err) {
|
|
28
|
+
done(err);
|
|
76
29
|
}
|
|
77
30
|
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
31
|
+
backup.on('finished', function() {
|
|
32
|
+
try {
|
|
33
|
+
// Test will time out if the finished event is not emitted
|
|
34
|
+
done();
|
|
35
|
+
} catch (err) {
|
|
36
|
+
done(err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
it('should get a finished event when using file output', function(done) {
|
|
41
|
+
u.setTimeout(this, 40);
|
|
42
|
+
// Use the API so we can get events
|
|
43
|
+
const params = { useApi: true };
|
|
44
|
+
const actualBackup = `./${this.fileName}`;
|
|
45
|
+
// Create a file and backup to it
|
|
46
|
+
const output = fs.createWriteStream(actualBackup);
|
|
47
|
+
output.on('open', function() {
|
|
48
|
+
const backup = u.testBackup(params, 'animaldb', output, function(err) {
|
|
49
|
+
if (err) {
|
|
50
|
+
done(err);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
backup.on('finished', function() {
|
|
54
|
+
try {
|
|
55
|
+
// Test will time out if the finished event is not emitted
|
|
56
|
+
done();
|
|
57
|
+
} catch (err) {
|
|
58
|
+
done(err);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017 IBM Corp. All rights reserved.
|
|
1
|
+
// Copyright © 2017, 2021 IBM Corp. All rights reserved.
|
|
2
2
|
//
|
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -12,120 +12,57 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
/* global
|
|
15
|
+
/* global beforeEach afterEach */
|
|
16
16
|
'use strict';
|
|
17
17
|
|
|
18
|
+
const { CloudantV1 } = require('@ibm-cloud/cloudant');
|
|
19
|
+
const url = new URL((process.env.COUCH_BACKEND_URL) ? process.env.COUCH_BACKEND_URL : 'https://no-couch-backend-url-set.test');
|
|
20
|
+
const { BasicAuthenticator, NoAuthAuthenticator } = require('ibm-cloud-sdk-core');
|
|
21
|
+
const authenticator = (url.username) ? new BasicAuthenticator({ username: url.username, password: decodeURIComponent(url.password) }) : new NoAuthAuthenticator();
|
|
22
|
+
const serviceOpts = {
|
|
23
|
+
authenticator: authenticator
|
|
24
|
+
};
|
|
25
|
+
const cloudant = new CloudantV1(serviceOpts);
|
|
26
|
+
// Remove auth from URL before using for service
|
|
27
|
+
cloudant.setServiceUrl(new URL(url.pathname, url.origin).toString());
|
|
28
|
+
const uuid = require('uuid').v4;
|
|
18
29
|
const fs = require('fs');
|
|
19
|
-
const u = require('./citestutils.js');
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
describe(u.scenario('Basic backup and restore', params), function() {
|
|
23
|
-
it('should backup animaldb to a file correctly', function(done) {
|
|
24
|
-
// Allow up to 40 s to backup and compare (it should be much faster)!
|
|
25
|
-
u.setTimeout(this, 40);
|
|
26
|
-
const actualBackup = `./${this.fileName}`;
|
|
27
|
-
// Create a file and backup to it
|
|
28
|
-
const output = fs.createWriteStream(actualBackup);
|
|
29
|
-
output.on('open', function() {
|
|
30
|
-
u.testBackup(params, 'animaldb', output, function(err) {
|
|
31
|
-
if (err) {
|
|
32
|
-
done(err);
|
|
33
|
-
} else {
|
|
34
|
-
u.readSortAndDeepEqual(actualBackup, './test/fixtures/animaldb_expected.json', done);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
});
|
|
31
|
+
// Mocha hooks that will be at the root context so run for all tests
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
});
|
|
54
|
-
});
|
|
33
|
+
beforeEach('Create test database', function(done) {
|
|
34
|
+
// Don't run hook for unit tests, just for CI
|
|
35
|
+
if (!this.currentTest.fullTitle().includes('#unit')) {
|
|
36
|
+
// Allow 10 seconds to create the DB
|
|
37
|
+
this.timeout(10 * 1000);
|
|
38
|
+
const unique = uuid();
|
|
39
|
+
this.fileName = `${unique}`;
|
|
40
|
+
this.dbName = 'couchbackup_test_' + unique;
|
|
41
|
+
cloudant.putDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
|
|
42
|
+
} else {
|
|
43
|
+
done();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
55
46
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
u.readSortAndDeepEqual(actualBackup, './test/fixtures/animaldb_expected_shallow.json', done);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
});
|
|
47
|
+
afterEach('Delete test database', function(done) {
|
|
48
|
+
// Don't run hook for unit tests, just for CI
|
|
49
|
+
if (!this.currentTest.fullTitle().includes('#unit')) {
|
|
50
|
+
// Allow 10 seconds to delete the DB
|
|
51
|
+
this.timeout(10 * 1000);
|
|
52
|
+
deleteIfExists(this.fileName);
|
|
53
|
+
deleteIfExists(`${this.fileName}.log`);
|
|
54
|
+
cloudant.deleteDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
|
|
55
|
+
} else {
|
|
56
|
+
done();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
73
59
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
u.testBackupAndRestoreViaFile(p, 'animaldb', actualBackup, this.dbName, done);
|
|
82
|
-
});
|
|
83
|
-
it('should backup/restore animaldb with backup buffer > restore buffer', function(done) {
|
|
84
|
-
// Allow up to 60 s for backup and restore of animaldb
|
|
85
|
-
u.setTimeout(this, 60);
|
|
86
|
-
const actualBackup = `./${this.fileName}`;
|
|
87
|
-
const logFile = `./${this.fileName}` + '.log';
|
|
88
|
-
const dbName = this.dbName;
|
|
89
|
-
const p = u.p(params, { opts: { log: logFile, bufferSize: 2 } }); // backup
|
|
90
|
-
const q = u.p(params, { opts: { bufferSize: 1 } }); // restore
|
|
91
|
-
u.testBackupToFile(p, 'animaldb', actualBackup, function(err) {
|
|
92
|
-
if (err) {
|
|
93
|
-
done(err);
|
|
94
|
-
} else {
|
|
95
|
-
// restore
|
|
96
|
-
u.testRestoreFromFile(q, actualBackup, dbName, function(err) {
|
|
97
|
-
if (!err) {
|
|
98
|
-
u.dbCompare('animaldb', dbName, done);
|
|
99
|
-
} else {
|
|
100
|
-
done(err);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
it('should backup/restore animaldb with backup buffer < restore buffer', function(done) {
|
|
107
|
-
// Allow up to 60 s for backup and restore of animaldb
|
|
108
|
-
u.setTimeout(this, 60);
|
|
109
|
-
const actualBackup = `./${this.fileName}`;
|
|
110
|
-
const logFile = `./${this.fileName}` + '.log';
|
|
111
|
-
const dbName = this.dbName;
|
|
112
|
-
const p = u.p(params, { opts: { log: logFile, bufferSize: 1 } }); // backup
|
|
113
|
-
const q = u.p(params, { opts: { bufferSize: 2 } }); // restore
|
|
114
|
-
u.testBackupToFile(p, 'animaldb', actualBackup, function(err) {
|
|
115
|
-
if (err) {
|
|
116
|
-
done(err);
|
|
117
|
-
} else {
|
|
118
|
-
// restore
|
|
119
|
-
u.testRestoreFromFile(q, actualBackup, dbName, function(err) {
|
|
120
|
-
if (!err) {
|
|
121
|
-
u.dbCompare('animaldb', dbName, done);
|
|
122
|
-
} else {
|
|
123
|
-
done(err);
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
60
|
+
function deleteIfExists(fileName) {
|
|
61
|
+
fs.unlink(fileName, function(err) {
|
|
62
|
+
if (err) {
|
|
63
|
+
if (err.code !== 'ENOENT') {
|
|
64
|
+
console.error(`${err.code} ${err.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
130
67
|
});
|
|
131
|
-
}
|
|
68
|
+
}
|