fedora-migrate 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +6 -8
- data/README.md +3 -1
- data/fedora-migrate.gemspec +2 -2
- data/lib/fedora_migrate/file_configurator.rb +1 -1
- data/lib/fedora_migrate/migration_options.rb +5 -0
- data/lib/fedora_migrate/migration_report.rb +32 -6
- data/lib/fedora_migrate/repository_migrator.rb +53 -30
- data/lib/fedora_migrate/version.rb +1 -1
- data/spec/fixtures/reports/failed/sufia_5m60qr94g.json +7 -0
- data/spec/fixtures/reports/failed/sufia_5m60qr95r.json +58 -0
- data/spec/fixtures/reports/failed/sufia_5m60qr961.json +58 -0
- data/spec/fixtures/reports/failed/sufia_5m60qr979.json +34 -0
- data/spec/fixtures/reports/failed/sufia_rb68xc089.json +7 -0
- data/spec/fixtures/reports/failed/sufia_rb68xc09k.json +21 -0
- data/spec/fixtures/reports/failed/sufia_rb68xc10b.json +49 -0
- data/spec/fixtures/reports/failed/sufia_rb68xc11m.json +49 -0
- data/spec/fixtures/reports/failed/sufia_xp68km39w.json +54 -0
- data/spec/fixtures/reports/sample/scholarsphere_000000000.json +26 -0
- data/spec/fixtures/reports/sample/scholarsphere_000000018.json +102 -0
- data/spec/fixtures/reports/sample/scholarsphere_05741r698.json +26 -0
- data/spec/fixtures/reports/sample/scholarsphere_6395wb555.json +5 -0
- data/spec/fixtures/reports/sample/scholarsphere_x346dm27k.json +5 -0
- data/spec/integration/repository_migration_spec.rb +21 -10
- data/spec/integration/versions_spec.rb +1 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/example_model.rb +8 -1
- data/spec/unit/migration_options_spec.rb +18 -0
- data/spec/unit/migration_report_spec.rb +16 -13
- data/spec/unit/repository_migrator_spec.rb +2 -8
- metadata +35 -11
- data/spec/fixtures/failed-report.json +0 -339
- data/spec/fixtures/sample-report.json +0 -166
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "rb68xc09k",
|
5
|
+
"class": "Batch",
|
6
|
+
"content_datastreams": [
|
7
|
+
|
8
|
+
],
|
9
|
+
"rdf_datastreams": [
|
10
|
+
|
11
|
+
],
|
12
|
+
"permissions": null,
|
13
|
+
"dates": {
|
14
|
+
"uploaded": null,
|
15
|
+
"modified": null
|
16
|
+
}
|
17
|
+
},
|
18
|
+
"relationships": [
|
19
|
+
|
20
|
+
]
|
21
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "rb68xc10b",
|
5
|
+
"class": "GenericFile",
|
6
|
+
"content_datastreams": [
|
7
|
+
{
|
8
|
+
"ds": "content",
|
9
|
+
"versions": [
|
10
|
+
|
11
|
+
]
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"ds": "thumbnail",
|
15
|
+
"versions": [
|
16
|
+
{
|
17
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"ds": "characterization",
|
23
|
+
"versions": [
|
24
|
+
{
|
25
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"rdf_datastreams": [
|
31
|
+
|
32
|
+
],
|
33
|
+
"permissions": [
|
34
|
+
"read_groups = []",
|
35
|
+
"edit_groups = []",
|
36
|
+
"discover_groups = []",
|
37
|
+
"read_users = []",
|
38
|
+
"edit_users = [\"jilluser@example.com\"]",
|
39
|
+
"discover_users = []"
|
40
|
+
],
|
41
|
+
"dates": {
|
42
|
+
"uploaded": null,
|
43
|
+
"modified": null
|
44
|
+
}
|
45
|
+
},
|
46
|
+
"relationships": [
|
47
|
+
"http://localhost:8983/fedora/rest/test/rb68xc10b--info:fedora/fedora-system:def/relations-external#isPartOf--http://localhost:8983/fedora/rest/test/rb68xc09k"
|
48
|
+
]
|
49
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "rb68xc11m",
|
5
|
+
"class": "GenericFile",
|
6
|
+
"content_datastreams": [
|
7
|
+
{
|
8
|
+
"ds": "content",
|
9
|
+
"versions": [
|
10
|
+
|
11
|
+
]
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"ds": "thumbnail",
|
15
|
+
"versions": [
|
16
|
+
{
|
17
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"ds": "characterization",
|
23
|
+
"versions": [
|
24
|
+
{
|
25
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"rdf_datastreams": [
|
31
|
+
|
32
|
+
],
|
33
|
+
"permissions": [
|
34
|
+
"read_groups = []",
|
35
|
+
"edit_groups = []",
|
36
|
+
"discover_groups = []",
|
37
|
+
"read_users = []",
|
38
|
+
"edit_users = [\"otherUser\"]",
|
39
|
+
"discover_users = []"
|
40
|
+
],
|
41
|
+
"dates": {
|
42
|
+
"uploaded": null,
|
43
|
+
"modified": null
|
44
|
+
}
|
45
|
+
},
|
46
|
+
"relationships": [
|
47
|
+
"http://localhost:8983/fedora/rest/test/rb68xc11m--info:fedora/fedora-system:def/relations-external#isPartOf--http://localhost:8983/fedora/rest/test/rb68xc09k"
|
48
|
+
]
|
49
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "xp68km39w",
|
5
|
+
"class": "GenericFile",
|
6
|
+
"content_datastreams": [
|
7
|
+
{
|
8
|
+
"ds": "content",
|
9
|
+
"versions": [
|
10
|
+
|
11
|
+
]
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"ds": "thumbnail",
|
15
|
+
"versions": [
|
16
|
+
{
|
17
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"ds": "characterization",
|
23
|
+
"versions": [
|
24
|
+
{
|
25
|
+
"error": "Nil source -- it's probably defined in the target but not present in the source"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"rdf_datastreams": [
|
31
|
+
{
|
32
|
+
"ds": "descMetadata",
|
33
|
+
"status": [
|
34
|
+
|
35
|
+
]
|
36
|
+
}
|
37
|
+
],
|
38
|
+
"permissions": [
|
39
|
+
"read_groups = []",
|
40
|
+
"edit_groups = []",
|
41
|
+
"discover_groups = []",
|
42
|
+
"read_users = []",
|
43
|
+
"edit_users = [\"awead@psu.edu\"]",
|
44
|
+
"discover_users = []"
|
45
|
+
],
|
46
|
+
"dates": {
|
47
|
+
"uploaded": null,
|
48
|
+
"modified": null
|
49
|
+
}
|
50
|
+
},
|
51
|
+
"relationships": [
|
52
|
+
|
53
|
+
]
|
54
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "000000000",
|
5
|
+
"class": "Batch",
|
6
|
+
"content_datastreams": [
|
7
|
+
|
8
|
+
],
|
9
|
+
"rdf_datastreams": [
|
10
|
+
{
|
11
|
+
"ds": "descMetadata",
|
12
|
+
"status": [
|
13
|
+
|
14
|
+
]
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"permissions": null,
|
18
|
+
"dates": {
|
19
|
+
"uploaded": null,
|
20
|
+
"modified": null
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"relationships": [
|
24
|
+
|
25
|
+
]
|
26
|
+
}
|
@@ -0,0 +1,102 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "000000018",
|
5
|
+
"class": "GenericFile",
|
6
|
+
"content_datastreams": [
|
7
|
+
{
|
8
|
+
"ds": "characterization",
|
9
|
+
"versions": [
|
10
|
+
{
|
11
|
+
"name": "",
|
12
|
+
"mime_type": "text/xml",
|
13
|
+
"original_date": "2013-03-15T11:08:21Z"
|
14
|
+
}
|
15
|
+
]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"ds": "content",
|
19
|
+
"versions": [
|
20
|
+
{
|
21
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
22
|
+
"mime_type": "application/pdf",
|
23
|
+
"original_date": "2012-09-26T16:09:14Z"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
27
|
+
"mime_type": "application/pdf",
|
28
|
+
"original_date": "2012-11-26T03:11:55Z"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
32
|
+
"mime_type": "application/pdf",
|
33
|
+
"original_date": "2012-11-26T03:12:07Z"
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
37
|
+
"mime_type": "application/pdf",
|
38
|
+
"original_date": "2012-11-26T03:12:10Z"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
42
|
+
"mime_type": "application/pdf",
|
43
|
+
"original_date": "2012-11-26T03:12:13Z"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
47
|
+
"mime_type": "application/pdf",
|
48
|
+
"original_date": "2012-11-26T03:12:17Z"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"name": "Open_Up_Your_RepositoryWith_a_SWORD_.pdf",
|
52
|
+
"mime_type": "application/pdf",
|
53
|
+
"original_date": "2012-11-26T03:13:12Z"
|
54
|
+
}
|
55
|
+
]
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"ds": "thumbnail",
|
59
|
+
"versions": [
|
60
|
+
{
|
61
|
+
"name": "",
|
62
|
+
"mime_type": "image/jpeg",
|
63
|
+
"original_date": "2014-09-10T15:12:43Z"
|
64
|
+
}
|
65
|
+
]
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"ds": "full_text",
|
69
|
+
"versions": [
|
70
|
+
{
|
71
|
+
"name": "File Datastream",
|
72
|
+
"mime_type": "application/octet-stream",
|
73
|
+
"original_date": "2013-03-14T10:03:13Z"
|
74
|
+
}
|
75
|
+
]
|
76
|
+
}
|
77
|
+
],
|
78
|
+
"rdf_datastreams": [
|
79
|
+
{
|
80
|
+
"ds": "descMetadata",
|
81
|
+
"status": [
|
82
|
+
|
83
|
+
]
|
84
|
+
}
|
85
|
+
],
|
86
|
+
"permissions": [
|
87
|
+
"read_groups = [\"public\"]",
|
88
|
+
"edit_groups = []",
|
89
|
+
"discover_groups = []",
|
90
|
+
"read_users = []",
|
91
|
+
"edit_users = [\"mjg36\"]",
|
92
|
+
"discover_users = []"
|
93
|
+
],
|
94
|
+
"dates": {
|
95
|
+
"uploaded": "2012-09-26T16:09:13.394Z",
|
96
|
+
"modified": "2015-01-02T22:16:02.961Z"
|
97
|
+
}
|
98
|
+
},
|
99
|
+
"relationships": [
|
100
|
+
"http://ssrepo2qa.dlt.psu.edu:8080/SSqaFedora4/rest/prod/00/00/00/01/000000018--info:fedora/fedora-system:def/relations-external#isPartOf--http://ssrepo2qa.dlt.psu.edu:8080/SSqaFedora4/rest/prod/00/00/00/00/000000000"
|
101
|
+
]
|
102
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"status": true,
|
3
|
+
"object": {
|
4
|
+
"id": "05741r698",
|
5
|
+
"class": "Batch",
|
6
|
+
"content_datastreams": [
|
7
|
+
|
8
|
+
],
|
9
|
+
"rdf_datastreams": [
|
10
|
+
{
|
11
|
+
"ds": "descMetadata",
|
12
|
+
"status": [
|
13
|
+
|
14
|
+
]
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"permissions": null,
|
18
|
+
"dates": {
|
19
|
+
"uploaded": null,
|
20
|
+
"modified": null
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"relationships": [
|
24
|
+
|
25
|
+
]
|
26
|
+
}
|
@@ -80,26 +80,37 @@ describe "Migrating the repository" do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
context "with an existing report" do
|
83
|
-
let(:
|
84
|
-
let(:
|
83
|
+
let(:sample_report) { "spec/fixtures/reports/failed" }
|
84
|
+
let(:failed_report) { "failed" }
|
85
|
+
let(:new_report) { FedoraMigrate::MigrationReport.new(failed_report) }
|
86
|
+
let(:original_report) { FedoraMigrate::MigrationReport.new(sample_report) }
|
87
|
+
let(:sample_pid) { "sufia:rb68xc089" }
|
85
88
|
before do
|
86
|
-
FileUtils.
|
87
|
-
|
88
|
-
migrator.report
|
89
|
+
FileUtils.rm_rf(failed_report)
|
90
|
+
FileUtils.cp_r(sample_report, failed_report)
|
91
|
+
migrator = FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata", report: failed_report})
|
89
92
|
end
|
90
|
-
after { FileUtils.
|
93
|
+
after { FileUtils.rm_rf(failed_report) }
|
91
94
|
it "only migrates the objects that have failed" do
|
92
95
|
expect(GenericFile.all.count).to eql 1
|
93
96
|
expect(Batch.all.count).to eql 1
|
94
97
|
expect(Collection.all.count).to eql 0
|
95
98
|
expect(new_report.total_objects).to eql 9
|
96
|
-
expect(
|
99
|
+
expect(original_report.results[sample_pid]["status"]).to be false
|
100
|
+
expect(new_report.results[sample_pid]["status"]).to be true
|
101
|
+
expect(new_report.results[sample_pid]["object"]).to_not be_nil
|
97
102
|
end
|
98
103
|
end
|
99
104
|
|
100
|
-
|
101
|
-
|
105
|
+
context "with a blacklist" do
|
106
|
+
let(:pid1) { "sufia:rb68xc089" }
|
107
|
+
let(:pid2) { "sufia:xp68km39w" }
|
108
|
+
let(:report) { FedoraMigrate::MigrationReport.new }
|
109
|
+
before { FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata", blacklist: [pid1, pid2]}) }
|
110
|
+
subject { report.results.keys }
|
111
|
+
it { is_expected.to_not include(pid1)}
|
112
|
+
end
|
102
113
|
|
114
|
+
end
|
103
115
|
|
104
116
|
end
|
105
|
-
|
@@ -24,6 +24,7 @@ describe "Versions" do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should be migrated in the order they were created with their original creation dates" do
|
27
|
+
pending "Requires fix to Fedora 4.4; awaiting release"
|
27
28
|
expect(desc_metadata_source_versions[0].createDate.to_i).to eql date_created_by_application("version1")
|
28
29
|
expect(desc_metadata_source_versions[1].createDate.to_i).to eql date_created_by_application("version2")
|
29
30
|
expect(desc_metadata_source_versions[2].createDate.to_i).to eql date_created_by_application("version3")
|
data/spec/spec_helper.rb
CHANGED
@@ -33,6 +33,7 @@ RSpec.configure do |config|
|
|
33
33
|
config.before(:each) do
|
34
34
|
ActiveFedora::Cleaner.clean!
|
35
35
|
ActiveFedora::SolrService.instance.conn.delete_by_query('*:*', params: {'softCommit' => true})
|
36
|
+
FileUtils.rm_rf(FedoraMigrate::MigrationReport::DEFAULT_PATH)
|
36
37
|
end
|
37
38
|
|
38
39
|
config.order = :random
|
@@ -8,8 +8,13 @@ Gem::Specification.all.each do |g|
|
|
8
8
|
HAC_DIR = g.gem_dir if g.name.match("hydra-access-controls")
|
9
9
|
HCL_DIR = g.gem_dir if g.name.match("hydra-collections")
|
10
10
|
HCR_DIR = g.gem_dir if g.name.match("hydra-core")
|
11
|
+
BKL_DIR = g.gem_dir if g.name.match("blacklight")
|
11
12
|
end
|
12
13
|
|
14
|
+
# Load Rails-specific bits of blacklight
|
15
|
+
require BKL_DIR+'/app/controllers/concerns/blacklight/request_builders'
|
16
|
+
require BKL_DIR+'/app/controllers/concerns/blacklight/search_helper'
|
17
|
+
|
13
18
|
# Load Rails-specific bits of hydra-access-controls
|
14
19
|
require HAC_DIR+'/app/vocabularies/acl'
|
15
20
|
require HAC_DIR+'/app/vocabularies/hydra/acl'
|
@@ -27,6 +32,8 @@ require HAC_DIR+'/app/validators/hydra/future_date_validator'
|
|
27
32
|
# Loading hydra-collections
|
28
33
|
require 'hydra-collections'
|
29
34
|
require HCR_DIR+'/app/models/concerns/hydra/model_methods'
|
35
|
+
require HCL_DIR+'/app/models/concerns/hydra/collections/metadata'
|
36
|
+
require HCL_DIR+'/app/models/concerns/hydra/collections/relations'
|
30
37
|
require HCL_DIR+'/app/models/concerns/hydra/collection'
|
31
38
|
|
32
39
|
module ExampleModel
|
@@ -45,7 +52,7 @@ module ExampleModel
|
|
45
52
|
end
|
46
53
|
|
47
54
|
class VersionedDatastream < ActiveFedora::File
|
48
|
-
|
55
|
+
self.versionable = true
|
49
56
|
end
|
50
57
|
|
51
58
|
class VersionedContent < ActiveFedora::Base
|