Skip to content

Commit 26a2911

Browse files
committed
.
1 parent 7514744 commit 26a2911

16 files changed

Lines changed: 139 additions & 104 deletions

src/DeterministicIoPackaging/DeterministicPackage.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ static void DuplicateEntry(Entry sourceEntry, Archive targetArchive)
3030

3131
if (sourceEntry.IsRelationships())
3232
{
33-
var xml = Relationships.PatchRelationships(sourceStream);
33+
var xml = Relationships.Patch(sourceStream);
3434
SaveXml(xml, targetStream);
3535
return;
3636
}
3737

3838
if (sourceEntry.IsWorkbookRelationships())
3939
{
40-
var xml = Relationships.PatchWorkbookRelationships(sourceStream);
40+
var xml = WorkbookRelationships.Patch(sourceStream);
4141
SaveXml(xml, targetStream);
4242
return;
4343
}
@@ -64,21 +64,21 @@ static async Task DuplicateEntryAsync(Entry sourceEntry, Archive targetArchive,
6464
using var targetStream = await targetEntry.OpenAsync(cancel);
6565
if (sourceEntry.IsRelationships())
6666
{
67-
var xml = Relationships.PatchRelationships(sourceStream);
67+
var xml = await Relationships.Patch(sourceStream, cancel);
6868
await SaveXml(xml, targetStream, cancel);
6969
return;
7070
}
7171

7272
if (sourceEntry.IsWorkbookRelationships())
7373
{
74-
var xml = Relationships.PatchWorkbookRelationships(sourceStream);
74+
var xml = await WorkbookRelationships.Patch(sourceStream, cancel);
7575
await SaveXml(xml, targetStream, cancel);
7676
return;
7777
}
7878

7979
if (sourceEntry.IsWorkbookXml())
8080
{
81-
var xml = Workbook.Patch(sourceStream);
81+
var xml = await Workbook.Patch(sourceStream, cancel);
8282
await SaveXml(xml, targetStream, cancel);
8383
return;
8484
}

src/DeterministicIoPackaging/Relationships.cs renamed to src/DeterministicIoPackaging/Patching/Relationships.cs

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,24 @@
11
static class Relationships
22
{
3-
public static bool IsWorkbookRelationships(this Entry entry) =>
4-
entry.FullName is "xl/_rels/workbook.xml.rels";
5-
63
public static bool IsRelationships(this Entry entry) =>
74
entry.FullName is "_rels/.rels";
85

9-
public static XDocument PatchRelationships(Stream sourceStream)
6+
public static XDocument Patch(Stream stream)
107
{
11-
var xml = XDocument.Load(sourceStream);
12-
PatchRelationships(xml);
8+
var xml = XDocument.Load(stream);
9+
Patch(xml);
1310
return xml;
1411
}
1512

16-
public static XDocument PatchWorkbookRelationships(Stream sourceStream)
13+
public static async Task<XDocument> Patch(Stream stream, Cancel cancel)
1714
{
18-
var xml = XDocument.Load(sourceStream);
19-
PatchWorkbookRelationships(xml);
20-
return xml;
21-
}
15+
var xml = await XDocument.LoadAsync(stream, LoadOptions.None, cancel);
2216

23-
public static void PatchWorkbookRelationships(XDocument xml)
24-
{
25-
var root = xml.Root!;
26-
var relationships = root.Elements()
27-
.OrderBy(_ => _.Attribute("Type")!.Value)
28-
.ToList();
29-
root.ReplaceAll(relationships);
30-
}
17+
Patch(xml);
3118

32-
public static void PatchRelationships(XDocument xml)
19+
return xml;
20+
}
21+
static void Patch(XDocument xml)
3322
{
3423
var root = xml.Root!;
3524
var relationships = root.Elements()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
static class Sheet
2+
{
3+
internal static XDocument Patch(Stream stream)
4+
{
5+
var xml = XDocument.Load(stream);
6+
Patch(xml);
7+
return xml;
8+
}
9+
10+
static XNamespace xr = "http://schemas.microsoft.com/office/spreadsheetml/2014/revision";
11+
static XName xName = xr + "uid";
12+
13+
static void Patch(XDocument xml) =>
14+
xml.Root!.Attribute(xName)?.Remove();
15+
16+
public static bool IsWorksheetXml(this Entry entry)
17+
{
18+
var name = entry.FullName;
19+
return name.StartsWith("xl/worksheets/") &&
20+
name.EndsWith(".xml");
21+
}
22+
}

src/DeterministicIoPackaging/Workbook.cs renamed to src/DeterministicIoPackaging/Patching/Workbook.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,31 @@ static class Workbook
33
static XNamespace mc = "http://schemas.openxmlformats.org/markup-compatibility/2006";
44
static XNamespace x15ac = "http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac";
55

6-
public static XDocument Patch(Stream sourceStream)
6+
public static XDocument Patch(Stream stream)
77
{
8-
var xml = XDocument.Load(sourceStream);
8+
var xml = XDocument.Load(stream);
99

10+
Patch(xml);
11+
12+
return xml;
13+
}
14+
15+
public static async Task<XDocument> Patch(Stream stream, Cancel cancel)
16+
{
17+
var xml = await XDocument.LoadAsync(stream, LoadOptions.None, cancel);
18+
19+
Patch(xml);
20+
21+
return xml;
22+
}
23+
24+
static void Patch(XDocument xml)
25+
{
1026
var absPath = xml
1127
.Descendants(mc + "AlternateContent")
1228
.FirstOrDefault(_ => _.Descendants(x15ac + "absPath").Any());
1329

1430
absPath?.Remove();
15-
16-
return xml;
1731
}
1832

1933
public static bool IsWorkbookXml(this Entry entry) =>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
static class WorkbookRelationships
2+
{
3+
public static bool IsWorkbookRelationships(this Entry entry) =>
4+
entry.FullName is "xl/_rels/workbook.xml.rels";
5+
6+
public static XDocument Patch(Stream sourceStream)
7+
{
8+
var xml = XDocument.Load(sourceStream);
9+
Patch(xml);
10+
return xml;
11+
}
12+
13+
public static async Task<XDocument> Patch(Stream stream, Cancel cancel)
14+
{
15+
var xml = await XDocument.LoadAsync(stream, LoadOptions.None, cancel);
16+
17+
Patch(xml);
18+
19+
return xml;
20+
}
21+
static void Patch(XDocument xml)
22+
{
23+
var root = xml.Root!;
24+
var relationships = root.Elements()
25+
.OrderBy(_ => _.Attribute("Type")!.Value)
26+
.ToList();
27+
root.ReplaceAll(relationships);
28+
}
29+
}

src/DeterministicIoPackaging/Sheet.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/Tests/RelationshipsTests.Run.DotNet.verified.xml renamed to src/Tests/Patching/RelationshipsTests.Patch.DotNet.verified.xml

File renamed without changes.

src/Tests/RelationshipsTests.Run.Net.verified.xml renamed to src/Tests/Patching/RelationshipsTests.Patch.Net.verified.xml

File renamed without changes.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[TestFixture]
2+
public class RelationshipsTests
3+
{
4+
[Test]
5+
public Task Patch()
6+
{
7+
var xml = Relationships.Patch(
8+
new MemoryStream(
9+
"""
10+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
11+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
12+
<Relationship
13+
Id="rId2"
14+
Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
15+
Target="docProps/core.xml"/>
16+
<Relationship
17+
Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"
18+
Target="docProps/app.xml"/>
19+
<Relationship
20+
Id="rId1"
21+
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
22+
Target="xl/workbook.xml"/>
23+
<Relationship
24+
Id="rId4"
25+
Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
26+
Target="package/services/metadata/core-properties/f81c51cec5594be694368ed6b7beba9.psmdcp"/>
27+
</Relationships>
28+
"""u8.ToArray()));
29+
30+
return Verify(xml);
31+
}
32+
}
File renamed without changes.

0 commit comments

Comments
 (0)