Diff of /trunk/cforge/cforge/Package/CFORGE/Scripts/create-package.py [000000] .. [r47]  Maximize  Restore

Switch to unified view

a b/trunk/cforge/cforge/Package/CFORGE/Scripts/create-package.py
1
import sys, os
2
import zipfile
3
import cds_script
4
import uuid
5
import ui
6
7
ManifestSkeleton="""<?xml version="1.0" encoding="ISO-8859-1"?>
8
<Package>
9
  <Strings>
10
    <String Id="GeneralName">
11
      <Neutral>%s</Neutral>
12
    </String>
13
    <String Id="GeneralVendor">
14
      <Neutral>%s</Neutral>
15
    </String>
16
    <String Id="GeneralCopyright">
17
      <Neutral>%s</Neutral>
18
    </String>
19
    <String Id="GeneralDescription">
20
      <Neutral>%s</Neutral>
21
    </String>    
22
    <String Id="license">
23
      <Neutral>%s</Neutral>
24
    </String>        
25
    <String Id="TargetDir">
26
      <Neutral>Target directory</Neutral>
27
    </String>
28
    <String Id="TargetDirDescription">
29
      <Neutral>The target directory where the projects are saved.</Neutral>
30
    </String>
31
  </Strings>
32
  <General>
33
    <Id>{%s}</Id>
34
    <Version>1.0.0.0</Version>
35
    <Name>$GeneralName</Name>
36
    <Vendor>$GeneralVendor</Vendor>
37
    <Copyright>$GeneralCopyright</Copyright>
38
    <Description>$GeneralDescription</Description>    
39
    <LicenseAgreement>$license</LicenseAgreement>        
40
    <RequiredInstallerVersion>3.5.10.0</RequiredInstallerVersion>
41
  </General>
42
  <TargetDirectoryDefinitions>  
43
    <TargetDirectoryDefinition>
44
      <Id>1</Id>
45
      <Name>$TargetDir</Name>
46
      <Description>$TargetDirDescription</Description>
47
      <PromptUser>True</PromptUser>
48
      <DefaultValue>%%USERPROFILE%%\CODESYS Projects\</DefaultValue>
49
    </TargetDirectoryDefinition>
50
  </TargetDirectoryDefinitions>
51
  <Components>                
52
    <Component>
53
      <General>
54
    <Id>1</Id>
55
    <Name>Default</Name>
56
    <Description>Default Package</Description>
57
    <Selectable>false</Selectable>
58
    <SelectedByDefault>true</SelectedByDefault>
59
      </General>
60
      <Dependencies>            
61
      </Dependencies>
62
      <Items>
63
%s
64
      </Items>            
65
    </Component>     
66
  </Components>
67
</Package>
68
"""
69
70
ManifestItemLibrary = """
71
        <Library>
72
          <Path>%s</Path>
73
        </Library>
74
"""
75
76
ManifestItemDevDesc = """
77
        <DeviceDescription>
78
          <Path>%s</Path>
79
        </DeviceDescription>
80
"""
81
82
ManifestItemProject = """
83
        <File>
84
          <Path>%s</Path>
85
          <IgnoreArchiveFolder>True</IgnoreArchiveFolder>
86
          <TargetFolder>$1</TargetFolder>
87
          <Overwrite>
88
            <Option>Yes</Option>
89
          </Overwrite>
90
        </File>
91
"""
92
93
# This is a cforge command (script file)
94
# this will be run as ironpython script.
95
# the filename of this script is automatically the corresponding cforge command 
96
# with some magic functions you can easily integrate it nicely into cforge tool
97
98
# cforge_usage: 
99
# here you can return an array of all possible arguments and options that can 
100
# be passed to this command script
101
def cforge_usage():
102
    help = [ 
103
        ["<path to local repository>", "---"]
104
    ]
105
106
    return help
107
108
109
if len(sys.argv) <= 1:
110
    print("Oh, there are no arguments. Perhaps you forgot something?")
111
    sys.exit()
112
113
folder = sys.argv[1]
114
scriptpath = os.path.abspath(os.path.dirname(sys.argv[0]))
115
116
117
118
def zipdir(path, ziph):
119
    # ziph is zipfile handle
120
    for root, dirs, files in os.walk(path):
121
        for file in files:
122
            filename=os.path.join(root, file)
123
            archname=filename[len(path)+1:]
124
            print("Adding file: %s -> %s" % (filename, archname))
125
            ziph.write(filename, arcname=archname)
126
127
128
# Discover package content
129
packageItems = ""
130
license = ""
131
for root, dirs, files in os.walk(folder):
132
    for file in files:
133
        filename=os.path.join(root, file)
134
        archname=filename[len(folder)+1:]
135
        if file.endswith(".project"):
136
            packageItems += ManifestItemProject % (archname)
137
        if file.endswith(".devdesc"):
138
            packageItems += ManifestItemDevDesc % (archname)
139
        if file.endswith(".library"):
140
            packageItems += ManifestItemLibrary % (archname)
141
        if file == "license.txt":
142
            license = archname;
143
144
if license == "":
145
    file = open(os.path.join(folder, "license.txt"), "w")
146
    if file:
147
        file.write("Add license text...")
148
        file.close();
149
    license = "license.txt"
150
151
config = ui.Dialog("Create Package", PkgName=True, PkgVendor=True, PkgCopyright=True, PkgDescription=True)
152
153
if config != None:
154
    guid = uuid.uuid1();
155
    packageManifest = ManifestSkeleton % (config["PkgName"], config["PkgVendor"], config["PkgCopyright"], config["PkgDescription"], "LICENSE.TXT", guid, packageItems)
156
    file = open(os.path.join(folder, "package.manifest"), "w")
157
    if file:
158
        file.write(packageManifest)
159
        file.close();
160
    print packageManifest