Diff of /codesys-ide/scripts/gen-package-manifest.py [000000] .. [de765d]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/codesys-ide/scripts/gen-package-manifest.py
@@ -0,0 +1,169 @@
+import sys, os, glob
+import uuid
+import helper
+
+ManifestSkeleton="""<?xml version="1.0" encoding="ISO-8859-1"?>
+<Package>
+  <Strings>
+    <String Id="GeneralName">
+      <Neutral>%s</Neutral>
+    </String>
+    <String Id="GeneralVendor">
+      <Neutral>%s</Neutral>
+    </String>
+    <String Id="GeneralCopyright">
+      <Neutral>%s</Neutral>
+    </String>
+    <String Id="GeneralDescription">
+      <Neutral>%s</Neutral>
+    </String>    
+    <String Id="license">
+      <Neutral>%s</Neutral>
+    </String>        
+    <String Id="TargetDir">
+      <Neutral>Target directory</Neutral>
+    </String>
+    <String Id="TargetDirDescription">
+      <Neutral>The target directory where the projects are saved.</Neutral>
+    </String>
+  </Strings>
+  <General>
+    <Id>{%s}</Id>
+    <Version>1.0.0.0</Version>
+    <Name>$GeneralName</Name>
+    <Vendor>$GeneralVendor</Vendor>
+    <Copyright>$GeneralCopyright</Copyright>
+    <Description>$GeneralDescription</Description>    
+    <LicenseAgreement>$license</LicenseAgreement>        
+    <RequiredInstallerVersion>3.5.10.0</RequiredInstallerVersion>
+  </General>
+  <TargetDirectoryDefinitions>  
+    <TargetDirectoryDefinition>
+      <Id>1</Id>
+      <Name>$TargetDir</Name>
+      <Description>$TargetDirDescription</Description>
+      <PromptUser>True</PromptUser>
+      <DefaultValue>%%USERPROFILE%%\CODESYS Projects\</DefaultValue>
+    </TargetDirectoryDefinition>
+  </TargetDirectoryDefinitions>
+  <Components>                
+    <Component>
+      <General>
+    <Id>1</Id>
+    <Name>Default</Name>
+    <Description>Default Package</Description>
+    <Selectable>false</Selectable>
+    <SelectedByDefault>true</SelectedByDefault>
+      </General>
+      <Dependencies>            
+      </Dependencies>
+      <Items>
+%s
+      </Items>            
+    </Component>     
+  </Components>
+</Package>
+"""
+
+ManifestItemLibrary = """
+        <Library>
+          <Path>%s</Path>
+        </Library>
+"""
+
+ManifestItemDevDesc = """
+        <DeviceDescription>
+          <Path>%s</Path>
+        </DeviceDescription>
+"""
+
+ManifestItemProject = """
+        <File>
+          <Path>%s</Path>
+          <IgnoreArchiveFolder>True</IgnoreArchiveFolder>
+          <TargetFolder>$1</TargetFolder>
+          <Overwrite>
+            <Option>Yes</Option>
+          </Overwrite>
+        </File>
+"""
+
+
+class SearchBuildDo(helper.SearchBuild):
+    basepath=''
+    packageItems=''
+    license=''
+
+    # define basepath of the package
+    def setbasepath(self, path):
+       self.basepath=path
+
+    # Build rules for:
+    # - package.manifest
+    # search for all files that we want to pack
+    def doit(self, filename):
+        artifacts = list()
+
+        archname=filename[len(self.basepath)+1:]
+        if filename.endswith(".project"):
+            self.packageItems += ManifestItemProject % (archname)
+        if filename.endswith(".devdesc.xml"):
+            self.packageItems += ManifestItemDevDesc % (archname)
+        if filename.endswith(".library"):
+            self.packageItems += ManifestItemLibrary % (archname)
+        if filename == "license.txt":
+            self.license = archname;
+
+        return artifacts
+
+    def write(self, name, vendor, copyright, description):
+        # add an empty license file if none was found
+        if self.license == '':
+            file = open(os.path.join(self.basepath, "license.txt"), "w")
+            if file:
+                file.write("No license file found.")
+                file.close();
+            self.license = "license.txt"
+
+        guid = uuid.uuid1();
+        packageManifest = ManifestSkeleton % (name, vendor, copyright, description, self.license, guid, self.packageItems)
+
+        filename = os.path.join(self.basepath, 'package.manifest')
+        file = open(filename, "w")
+        if file:
+            file.write(packageManifest)
+            file.close();
+        self.artifacts.append(filename)
+
+
+packageFolders = list()
+# add trunk / master
+if os.path.isdir('trunk'):
+    packageFolders.append('trunk')
+else:
+    packageFolders.append('.')
+
+# add all branches
+if os.path.isdir('branches'):
+    for filename in glob.iglob('branches/**'):
+        if os.path.isdir(filename):
+            packageFolders.append(filename)
+
+
+
+for folder in packageFolders:
+    print ("creating manifest for folder %s." % folder)
+    sb = SearchBuildDo()
+    sb.setbasepath(folder)
+    sb.search(".library", ".")
+    sb.search(".project", ".")
+    sb.search(".devdesc.xml", ".")
+    sb.search("license.txt", ".")
+
+    name = folder
+    if name == ".":
+        name = "master"
+    sb.write(name, "unknown vendor", "unknown copyright", "no description")
+
+    sb.save(".", ".drone-artifacts")
+