Skip to content

Commit 7c17620

Browse files
authored
Merge pull request #27 from rruiter87/minimize-id-changes
Minimize id changes
2 parents 721af8f + 1978067 commit 7c17620

11 files changed

Lines changed: 260 additions & 2 deletions

.pre-commit-hooks.yaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,10 @@
5151
description: Affixes newlines to ST segments
5252
entry: twincat-st-newline
5353
language: python
54-
files: .*\.(TcPOU|TcGVL|TcDUT)$
54+
files: .*\.(TcPOU|TcGVL|TcDUT)$
55+
- id: minimize-id-changes
56+
name: Check minimize id changes checked
57+
description: Checks if the minimize id changes option is checked in the plcproj file.
58+
entry: minimize-id-changes
59+
language: python
60+
files: .*\.plcproj$

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@ repos:
2525
files: \.(TcPOU|TcDUT|TcGVL)$
2626

2727
- repo: https://github.com/pcdshub/pre-commit-hooks.git
28-
rev: v1.5.0
28+
rev: v1.6.0
2929
hooks:
3030
- id: twincat-leading-tabs-remover
3131
- id: twincat-lineids-remover
3232
- id: twincat-xml-format
3333
- id: check-fixed-library-versions
3434
- id: no-product-version
3535
- id: twincat-st-newline
36+
# Check if minimize id changes is selected in the plc project file.
37+
# See https://www.youtube.com/watch?v=KKpBtaYjfWo&t=935s why to do this.
38+
- id: minimize-id-changes
3639
# Optional, if you use pytmc to generate EPICS IOCs:
3740
# - id: pytmc-pragma-linter
3841
```

forTwinCatRepos/.pre-commit-config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,8 @@ repos:
1717
- id: check-fixed-library-versions
1818
- id: no-product-version
1919
- id: twincat-st-newline
20+
# Check if minimize id changes is selected in the plc project file.
21+
# See https://www.youtube.com/watch?v=KKpBtaYjfWo&t=935s why to do this.
22+
- id: minimize-id-changes
2023
# Optional, if you use pytmc to generate EPICS IOCs:
2124
# - id: pytmc-pragma-linter
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import argparse
2+
import xml.etree.ElementTree as ET
3+
from importlib.abc import Traversable
4+
from typing import Union
5+
6+
7+
class PreCommitException(Exception):
8+
pass
9+
10+
11+
def minimize_id_changes_checked(filename: Union[Traversable, str]) -> None:
12+
tree = ET.parse(filename)
13+
root = tree.getroot()
14+
15+
combine_ids_element = root.find('.//{*}CombineIds')
16+
17+
if combine_ids_element is None or combine_ids_element.text.lower() == 'false':
18+
raise PreCommitException(
19+
f"Minimize id changes not checked in {filename}. "
20+
f"To enable this go to Project settings > Common and select 'Minimize Id changes in TwinCAT files.'")
21+
22+
23+
def main(args=None):
24+
if args is None:
25+
parser = argparse.ArgumentParser()
26+
parser.add_argument('filenames', nargs='*')
27+
args = parser.parse_args()
28+
try:
29+
for filename in args.filenames:
30+
minimize_id_changes_checked(filename)
31+
return 0
32+
except Exception as exc:
33+
print(exc)
34+
return 1
35+
36+
37+
if __name__ == "__main__":
38+
exit(main())

pre_commit_hooks/tests/__init__.py

Whitespace-only changes.

pre_commit_hooks/tests/data/__init__.py

Whitespace-only changes.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<FileVersion>1.0.0.0</FileVersion>
5+
<SchemaVersion>2.0</SchemaVersion>
6+
<ProjectGuid>{1361c63e-c3f2-4555-94a3-e0395dcf0a4c}</ProjectGuid>
7+
<SubObjectsSortedByName>True</SubObjectsSortedByName>
8+
<DownloadApplicationInfo>true</DownloadApplicationInfo>
9+
<WriteProductVersion>true</WriteProductVersion>
10+
<GenerateTpy>false</GenerateTpy>
11+
<Name>PLC</Name>
12+
<ProgramVersion>3.1.4024.0</ProgramVersion>
13+
<Application>{83206d8f-62b4-4fa8-ab05-c17a527dee56}</Application>
14+
<TypeSystem>{a1a8971a-d41a-466d-9815-2a15bc6b2b6a}</TypeSystem>
15+
<Implicit_Task_Info>{73d4ce07-8d5e-4312-9201-83b075010509}</Implicit_Task_Info>
16+
<Implicit_KindOfTask>{3f7c3e20-243c-4cff-be01-d0b2a5768750}</Implicit_KindOfTask>
17+
<Implicit_Jitter_Distribution>{342ed85c-270a-468b-aba0-643e68b731fd}</Implicit_Jitter_Distribution>
18+
<LibraryReferences>{a0dc4117-ad2d-4e28-9ee2-42c77070a57d}</LibraryReferences>
19+
<Released>false</Released>
20+
<CombineIds>true</CombineIds>
21+
</PropertyGroup>
22+
<ItemGroup>
23+
<Compile Include="PlcTask.TcTTO">
24+
<SubType>Code</SubType>
25+
</Compile>
26+
<Compile Include="POUs\MAIN.TcPOU">
27+
<SubType>Code</SubType>
28+
</Compile>
29+
</ItemGroup>
30+
<ItemGroup>
31+
<Folder Include="DUTs" />
32+
<Folder Include="GVLs" />
33+
<Folder Include="VISUs" />
34+
<Folder Include="POUs" />
35+
</ItemGroup>
36+
<ItemGroup>
37+
<PlaceholderReference Include="Tc2_Standard">
38+
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
39+
<Namespace>Tc2_Standard</Namespace>
40+
</PlaceholderReference>
41+
<PlaceholderReference Include="Tc2_System">
42+
<DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution>
43+
<Namespace>Tc2_System</Namespace>
44+
</PlaceholderReference>
45+
<PlaceholderReference Include="Tc3_Module">
46+
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
47+
<Namespace>Tc3_Module</Namespace>
48+
</PlaceholderReference>
49+
<PlaceholderReference Include="TcUnit">
50+
<DefaultResolution>TcUnit, * (www.tcunit.org)</DefaultResolution>
51+
</PlaceholderReference>
52+
</ItemGroup>
53+
<ProjectExtensions>
54+
<PlcProjectOptions>
55+
<XmlArchive>
56+
<Data>
57+
<o xml:space="preserve" t="OptionKey">
58+
<v n="Name">"&lt;ProjectRoot&gt;"</v>
59+
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
60+
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
61+
<o>
62+
<v n="Name">"{192FAD59-8248-4824-A8DE-9177C94C195A}"</v>
63+
<d n="SubKeys" t="Hashtable" />
64+
<d n="Values" t="Hashtable" />
65+
</o>
66+
<v>{8F99A816-E488-41E4-9FA3-846536012284}</v>
67+
<o>
68+
<v n="Name">"{8F99A816-E488-41E4-9FA3-846536012284}"</v>
69+
<d n="SubKeys" t="Hashtable" />
70+
<d n="Values" t="Hashtable" />
71+
</o>
72+
<v>{40450F57-0AA3-4216-96F3-5444ECB29763}</v>
73+
<o>
74+
<v n="Name">"{40450F57-0AA3-4216-96F3-5444ECB29763}"</v>
75+
<d n="SubKeys" t="Hashtable" />
76+
<d n="Values" t="Hashtable" ckt="String" cvt="String">
77+
<v>ActiveVisuProfile</v>
78+
<v>IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA=</v>
79+
</d>
80+
</o>
81+
</d>
82+
<d n="Values" t="Hashtable" />
83+
</o>
84+
</Data>
85+
<TypeList>
86+
<Type n="Hashtable">System.Collections.Hashtable</Type>
87+
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
88+
<Type n="String">System.String</Type>
89+
</TypeList>
90+
</XmlArchive>
91+
</PlcProjectOptions>
92+
</ProjectExtensions>
93+
</Project>
94+
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<FileVersion>1.0.0.0</FileVersion>
5+
<SchemaVersion>2.0</SchemaVersion>
6+
<ProjectGuid>{1361c63e-c3f2-4555-94a3-e0395dcf0a4c}</ProjectGuid>
7+
<SubObjectsSortedByName>True</SubObjectsSortedByName>
8+
<DownloadApplicationInfo>true</DownloadApplicationInfo>
9+
<WriteProductVersion>true</WriteProductVersion>
10+
<GenerateTpy>false</GenerateTpy>
11+
<Name>PLC</Name>
12+
<ProgramVersion>3.1.4024.0</ProgramVersion>
13+
<Application>{83206d8f-62b4-4fa8-ab05-c17a527dee56}</Application>
14+
<TypeSystem>{a1a8971a-d41a-466d-9815-2a15bc6b2b6a}</TypeSystem>
15+
<Implicit_Task_Info>{73d4ce07-8d5e-4312-9201-83b075010509}</Implicit_Task_Info>
16+
<Implicit_KindOfTask>{3f7c3e20-243c-4cff-be01-d0b2a5768750}</Implicit_KindOfTask>
17+
<Implicit_Jitter_Distribution>{342ed85c-270a-468b-aba0-643e68b731fd}</Implicit_Jitter_Distribution>
18+
<LibraryReferences>{a0dc4117-ad2d-4e28-9ee2-42c77070a57d}</LibraryReferences>
19+
</PropertyGroup>
20+
<ItemGroup>
21+
<Compile Include="PlcTask.TcTTO">
22+
<SubType>Code</SubType>
23+
</Compile>
24+
<Compile Include="POUs\MAIN.TcPOU">
25+
<SubType>Code</SubType>
26+
</Compile>
27+
</ItemGroup>
28+
<ItemGroup>
29+
<Folder Include="DUTs" />
30+
<Folder Include="GVLs" />
31+
<Folder Include="VISUs" />
32+
<Folder Include="POUs" />
33+
</ItemGroup>
34+
<ItemGroup>
35+
<PlaceholderReference Include="Tc2_Standard">
36+
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
37+
<Namespace>Tc2_Standard</Namespace>
38+
</PlaceholderReference>
39+
<PlaceholderReference Include="Tc2_System">
40+
<DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution>
41+
<Namespace>Tc2_System</Namespace>
42+
</PlaceholderReference>
43+
<PlaceholderReference Include="Tc3_Module">
44+
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
45+
<Namespace>Tc3_Module</Namespace>
46+
</PlaceholderReference>
47+
<PlaceholderReference Include="TcUnit">
48+
<DefaultResolution>TcUnit, * (www.tcunit.org)</DefaultResolution>
49+
</PlaceholderReference>
50+
</ItemGroup>
51+
<ProjectExtensions>
52+
<PlcProjectOptions>
53+
<XmlArchive>
54+
<Data>
55+
<o xml:space="preserve" t="OptionKey">
56+
<v n="Name">"&lt;ProjectRoot&gt;"</v>
57+
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
58+
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
59+
<o>
60+
<v n="Name">"{192FAD59-8248-4824-A8DE-9177C94C195A}"</v>
61+
<d n="SubKeys" t="Hashtable" />
62+
<d n="Values" t="Hashtable" />
63+
</o>
64+
<v>{8F99A816-E488-41E4-9FA3-846536012284}</v>
65+
<o>
66+
<v n="Name">"{8F99A816-E488-41E4-9FA3-846536012284}"</v>
67+
<d n="SubKeys" t="Hashtable" />
68+
<d n="Values" t="Hashtable" />
69+
</o>
70+
<v>{40450F57-0AA3-4216-96F3-5444ECB29763}</v>
71+
<o>
72+
<v n="Name">"{40450F57-0AA3-4216-96F3-5444ECB29763}"</v>
73+
<d n="SubKeys" t="Hashtable" />
74+
<d n="Values" t="Hashtable" ckt="String" cvt="String">
75+
<v>ActiveVisuProfile</v>
76+
<v>IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA=</v>
77+
</d>
78+
</o>
79+
</d>
80+
<d n="Values" t="Hashtable" />
81+
</o>
82+
</Data>
83+
<TypeList>
84+
<Type n="Hashtable">System.Collections.Hashtable</Type>
85+
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
86+
<Type n="String">System.String</Type>
87+
</TypeList>
88+
</XmlArchive>
89+
</PlcProjectOptions>
90+
</ProjectExtensions>
91+
</Project>
92+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from importlib.resources import files
2+
3+
import pre_commit_hooks.tests.data as test_data
4+
import pytest
5+
from pre_commit_hooks.minimize_id_changes import (PreCommitException,
6+
minimize_id_changes_checked)
7+
8+
9+
def test_missing_minimize_id_changes():
10+
plcproj_filename = files(test_data).joinpath("no-minimize-id-changes.plcproj")
11+
12+
with pytest.raises(PreCommitException):
13+
minimize_id_changes_checked(plcproj_filename)
14+
15+
16+
def test_enabled_minimize_id_changes():
17+
plcproj_filename = files(test_data).joinpath("minimize-id-changes-enabled.plcproj")
18+
19+
# Doesnt raise PreCommitException
20+
minimize_id_changes_checked(plcproj_filename)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
lxml
2+
pytest

0 commit comments

Comments
 (0)