32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
puts stdout "usage:\
[file tail [info nameofexecutable]]\
[file tail [info script]] \[apiKey\] \[name\] \[version\] \[language\]\
\[fileName1\] ... \[fileNameN\]"
exit 1
}
#
# NOTE: Figure out the fully qualified path to the current script file.
# If necessary, add it to the auto-path for the interpreter. The
# necessary supporting packages (i.e. the Package Repository and
# other support packages) that are assumed to exist in the same
# directory as the current script file.
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
puts stdout "usage:\
[file tail [info nameofexecutable]]\
[file tail [info script]] \[apiKey\] \[name\] \[version\] \[language\]\
\[fileName1\] ... \[fileNameN\]"
exit 1
}
#
# NOTE: This procedure returns a string value, formatted for use within a
# script block being processed by the [string map] command. The
# value argument is the string value to format. No return value is
# reserved to indicate an error. This procedure may not raise any
# script errors.
#
proc formatStringMapValue { value } {
if {[string length $value] == 0} then {
return \"\"
}
set list [list $value]
if {$value eq $list} then {
return $value
} else {
return $list
}
}
#
#
#
proc getContainingDirectory { fileNames } {
set result ""
set resultParts [list]
foreach fileName $fileNames {
set directory [file dirname $fileName]
set directoryParts [file split $directory]
if {[llength $resultParts] == 0 || \
[llength $directoryParts] < [llength $resultParts]} then {
set result $directory
set resultParts $directoryParts
} elseif {[llength $directoryParts] == [llength $resultParts] && \
$directory ne $result} then {
set result [file dirname $directory]
set resultParts [file split $result]
}
}
return $result
}
#
#
#
proc getScriptChunkForFileNames { fileNames maximumLevels } {
set directory [getContainingDirectory $fileNames]
set directoryParts [file split $directory]
set fileNameIndex [expr {[llength $directoryParts] - 1}]
if {$fileNameIndex < 0} then {
error [appendArgs \
"bad file name index"]
}
set relativeFileNames [list]
foreach fileName $fileNames {
set fileNameParts [lrange [file split $fileName] $fileNameIndex end]
if {$maximumLevels > 0 && \
[llength $fileNameParts] > $maximumLevels} then {
error [appendArgs \
"depth for file name \"" $fileName \
"\" exceeds maximum (" $maximumLevels )]
}
set relativeFileName [eval file join $fileNameParts]
if {[string length $relativeFileName] == 0 || \
[file pathtype $relativeFileName] ne "relative"} then {
error [appendArgs \
"bad file name \"" $relativeFileName "\", not relative"]
}
lappend relativeFileNames $relativeFileName
}
set result ""
foreach relativeFileName $relativeFileNames {
if {[string length $result] > 0} then {
append result \n
}
append result { lappend fileNames [file join }
append result [file split $relativeFileName]
append result \]
}
return $result
}
#
#
#
proc createRepositoryScript { language version platform fileNames options } {
return [string trim [string map [list \r\n \n \
%language% [formatStringMapValue $language] \
%version% [formatStringMapValue $version] \
%platform% [formatStringMapValue $platform] \
%backslash% \\ %ns% ::PackageDownloader %fileNames% \
[getScriptChunkForFileNames \
$fileNames 2]] {
apply [list [list] {
package require Eagle.Package.Downloader
%ns%::resetCookieAndLoginSimple
set fileNames [list]
%fileNames%
set options [list %backslash%
-persistent false -usePgp true -useAutoPath true]
%ns%::downloadFiles %language% %version% %platform% $fileNames $options
%ns%::logoutAndResetCookie
}]
}]]
}
#
# NOTE: Figure out the fully qualified path to the current script file.
# If necessary, add it to the auto-path for the interpreter. The
# necessary supporting packages (i.e. the Package Repository and
# other support packages) that are assumed to exist in the same
# directory as the current script file.
|