source: tol/tolbase/lib/toltk/tolpkg.tcl @ 2c0158d

1941-docker-image-to-testdevel
Last change on this file since 2c0158d was 2c0158d, checked in by Jorge Pérez <josp.jorge@…>, 15 years ago

refs #1417, implementamos un metodo de wtree para facilitar la modificación/consulat de las columnas en items creados, el ícono del nodo de un paquete refleja el estado de sus hijos (paquetes con versión específica), se corrige un error cuando la ruta de instalación de los paquetes tiene espacio en el nombre

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@4078 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 9.8 KB
Line 
1namespace eval ::TolPkg {
2  variable cwd [ file normalize [ file dir [ info script ] ] ]
3}
4
5proc ::TolPkg::UpdateRepositoryInfo { } {
6  tol::console eval {
7    Real TolPackage::Client::RemoteUpdatePackSyncInfo(False);
8    Real TolPackage::Client::RemoteUpdateVersSyncInfo(False);
9  }
10  return
11}
12
13if { 0 } {
140 -- http://packages.localbayes.es/BayesPrivateTolPackages/repository.php
151 -- SSCC_P18_Maps
162 -- Maps for the sscc in Granada province.
173 --
184 -- v2.0.1 b.1
195 -- v999999999999999999
206 -- SSCC_P18_Maps.1.0
217 -- SSCC_P18_Maps.1.0
228 -- y2011m11d26h15i11s00.000
239 -- y2011m11d26h15i11s00.000
2410 -- 1154572
25}
26
27proc ::TolPkg::GetPkgDirectory { p } {
28  set localRoot [ file normalize \
29                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
30  return [ file join $localRoot "Client" $p ]
31}
32
33proc ::TolPkg::BackupPackage { p {delete 0}} {
34  # backup is not working, some problem has being reported on Windows 7
35  return 1
36  set path [ GetPkgDirectory $p ]
37  if { [ file exists $path ] } {
38    set bak "${path}.bak"
39    set op [ expr { $delete ? "rename" : "copy" } ]
40    puts "file $op -force $path $bak"
41    return [ file $op -force $path $bak ]
42  } else {
43    return 0
44  }
45}
46
47proc ::TolPkg::RestoreBackup { p { delete 0 } } {
48  # backup is not working, some problem has being reported on Windows 7
49  return 1
50  set path [ GetPkgDirectory $p ]
51  set bak "${path}.bak"
52  if { [ file exists $bak ] } {
53    set op [ expr { $delete ? "rename" : "copy" } ]
54    return [ file $op -force $bak $path ]
55  } else {
56    return 0
57  }
58}
59
60proc ::TolPkg::DeleteBackup { p } {
61  # backup is not working, some problem has being reported on Windows 7
62  return 1
63  set path [ GetPkgDirectory $p ]
64  set bak "${path}.bak"
65  return [ file delete -force $bak ]
66}
67
68proc ::TolPkg::GetPkgSyncInfo { } {
69  set localRoot [ file normalize \
70                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
71  set oza [ file join $localRoot "Client/PackSyncInfo.oza" ]
72  if { ![ file exists $oza ] || ![ file readable $oza ] } {
73    return {}
74  }
75  set tolScript [ string map [ list "%O" $oza ] {
76    Set { Ois.Load( "%O" )[1] }
77  } ]
78  # return a dictionary
79  set dict {}
80  foreach p [ lindex [ toltcl::eval $tolScript ] 0 ] {
81    set url        [ lindex $p 0 ]
82    set name       [ lindex $p 1 ]
83    set brief      [ lindex $p 2 ]
84    set mintol     [ lindex $p 4 ]
85    set maxtol     [ lindex $p 5 ]
86    set lastremote [ lindex $p 6 ]
87    set lastlocal  [ lindex $p 7]
88    lappend dict [ list $name \
89                       [ list url $url brief $brief mintol $mintol \
90                             maxtol $maxtol lastremote $lastremote \
91                             lastlocal $lastlocal ] ]
92  }
93  return $dict
94}
95
96if { 0 } {
970 -- http://packages.localbayes.es/BayesPrivateTolPackages/repository.php
981 -- MMS
992 -- MMS.0.6040
1003 --
1014 -- v2.0.1 b.4
1025 -- v999999999999999999
1036 -- GuiTools.3.2,BysMcmc.4.8,TolIpopt.2.1,IpoptCore.3.9,QltvRespModel.4.1,GrzLinModel.3.1,MatQuery.3.2,NonLinGloOpt.5.1,TolCint.2.1,BysPrior.2.1,MatAlg.1.1,BysInfDiag.2.1,BysSampler.4.1,BabelTool.1.4,ExtLib.1.5,RandVar.2.104,DecoTools.1.6
1047 -- y2011m11d07h10i45s00.000
1058 -- y2011m11d07h10i45s00.000
1069 -- 1474442
107}
108
109proc ::TolPkg::GetVersSyncInfo { } {
110  set localRoot [ file normalize \
111                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
112  set oza [ file join $localRoot "Client/VersSyncInfo.oza" ]
113  if { ![ file exists $oza ] || ![ file readable $oza ] } {
114    return {}
115  }
116  set tolScript [ string map [ list "%O" $oza ] {
117    Set { Ois.Load( "%O" )[1] }
118  } ]
119  # return a dictionary
120  set dict {}
121  foreach p [ lindex [ toltcl::eval $tolScript ] 0 ] {
122    set url          [ lindex $p 0 ]
123    set name         [ lindex $p 1 ]
124    set version      [ lindex $p 2 ]
125    set mintol       [ lindex $p 4 ]
126    set maxtol       [ lindex $p 5 ]
127    set dependencies [ split [ lindex $p 6 ] "," ]
128    set dateremote   [ lindex $p 7 ]
129    set datelocal    [ lindex $p 8 ]
130    lappend dict [ list $version \
131                       [ list url $url name $name mintol $mintol \
132                             maxtol $maxtol dateremote $dateremote \
133                             datelocal $datelocal \
134                             dependencies $dependencies ] ]
135  }
136  return $dict
137}
138
139proc ::TolPkg::GetLocalPackages { } {
140  set localRoot [ file normalize \
141                      [ lindex [ toltcl::eval { Text TolPackage::_.localRoot } ] 0 ] ]
142  set clientRoot [ file join $localRoot Client ]
143  set dirs [ glob -nocomplain -tail -dir $clientRoot -types {d r} * ]
144  set pkgsInfo {}
145  foreach d $dirs {
146    lappend pkgsInfo [ list $d [ GetLocalPackageInfo $d ] ]
147  }
148  return $pkgsInfo
149}
150
151proc ::TolPkg::GetLocalPackageInfo { p } {
152  set tolScript [ string map [ list %p $p ] {
153    Set TolPackage::Client::LocalInfo( "%p" );
154  } ]
155  return [ lindex [ toltcl::eval $tolScript -named 1 ] 1 ]
156}
157
158proc ::TolPkg::GetPackageInfoFromOZA { oza } {
159  puts "::TolPkg::GetPackageInfoFromOZA $oza"
160  set tolScript [ string map [ list "%O" $oza ] {
161    Set {
162      Set oza = Include( "%O" );
163      WriteLn( "%O" );
164      Set If( Grammar( oza[1] ) == "NameBlock", {
165        NameBlock pkg = oza[ 1 ];
166        Set If( And( ObjectExist( "Text", "pkg::_.autodoc.name" ),
167                     ObjectExist( "Text", "pkg::_.autodoc.brief" ),
168                     ObjectExist( "Text", "pkg::_.autodoc.description" ),
169                     ObjectExist( "Text", "pkg::_.autodoc.url" ),
170                     ObjectExist( "Real", "pkg::_.autodoc.version.high" ),
171                     ObjectExist( "Real", "pkg::_.autodoc.version.low"),
172                     ObjectExist( "Set",  "pkg::_.autodoc.authors" ),
173                     ObjectExist( "Text", "pkg::_.autodoc.minTolVersion" ) ), {
174                       Set aux = [[ Text name           = pkg::_.autodoc.name,
175                                    Text brief          = pkg::_.autodoc.brief,
176                                    Text description    = pkg::_.autodoc.description,
177                                    Text url            = pkg::_.autodoc.url,
178                                    Real version.high   = pkg::_.autodoc.version.high,
179                                    Real version.low    = pkg::_.autodoc.version.low,
180                                    Set dependencies    = pkg::_.autodoc.dependencies,
181                                    Set authors         = pkg::_.autodoc.authors,
182                                    Text versionControl = If( ObjectExist( "Text", "pkg::_.autodoc.versionControl" ),
183                                                              pkg::_.autodoc.versionControl, "" );
184                                    Text minTolVersion  = pkg::_.autodoc.minTolVersion,
185                                    Text maxTolVersion  = If( ObjectExist( "Text", "pkg::_.autodoc.maxTolVersion" ),
186                                                              pkg::_.autodoc.axTolVersion, "" ) ]];
187                       Text pkgName = pkg::_.autodoc.name << "." << pkg::_.autodoc.version.high
188                                      << "." << pkg::_.autodoc.version.low ;
189                       Set PutName( pkgName, aux )                       
190                     }, { WriteLn( "Empty 2" ), Copy( Empty )} ) }, { WriteLn( "Empty 1" ); Copy( Empty )}  )
191    };
192  } ]
193  #puts $tolScript
194  set result [ toltcl::eval $tolScript -named 1 ]
195  puts "::TolPkg::GetPackageInfoFromOZA END $oza"
196  return $result
197}
198
199
200proc ::TolPkg::GetRepositoryInfo { repo } {
201  set ask "${repo}?action=general_information"
202  set result [ toltcl::eval [ string map [ list %A $ask ] {
203    Set TolPackage::Client::GetRepositoryInfo( "%A" )
204  } ] ]
205  return [ lindex $result 0 ]
206}
207
208proc ::TolPkg::AddRepository { url } {
209  set tolexpr [ string map [ list %u $url ] {
210    Real TolPackage::Client::AddRepository( "%u" );
211  } ]
212  toltcl::eval $tolexpr
213}
214
215proc ::TolPkg::ZipInstall { pkg.zip } {
216  puts "::TolPkg::ZipInstall ${pkg.zip}"
217  set tolexpr [ string map [ list %p ${pkg.zip} ] {
218    Real TolPackage::Client::LocalInstallPackage( "%p" )
219  } ]
220  return [ toltcl::eval $tolexpr ]
221}
222
223proc ::TolPkg::RemoteInstall { pkg repo } {
224  puts "::TolPkg::RemoteInstall $pkg $repo"
225  BackupPackage $pkg 1
226  set tolexpr [ string map [ list %p $pkg %r $repo ] {
227    Real TolPackage::Client::RemoteInstall( "%r", "%p", 1 )
228  } ]
229  if { [ catch  { toltcl::eval $tolexpr } result ] } {
230    set result 0
231  }
232  if { [ string is boolean $result ] && $result } {
233    DeleteBackup $pkg
234  } else {
235    RestoreBackup $pkg 1
236  }
237  return $result
238}
239
240proc ::TolPkg::ExportPackage { pkg dest } {
241  puts "::TolPkg::ExportPackage $pkg to $dest"
242  set tolexpr [ string map [ list %p $pkg %d $dest ] {
243    Real TolPackage::Client::LocalExportPackage( "%p", "%d/" )
244  } ]
245  return [ toltcl::eval $tolexpr ]
246}
247
248proc ::TolPkg::CheckPackagesToInstall { pkgs } {
249  set members {}
250  foreach p $pkgs {
251    lappend members \"${p}\"
252  }
253  set tolexpr [ string map [ list %s "\[\[ [ join $members , ] \]\]" ] {
254    Set TolPackage::Client::GetDeepDependencies.all.last( %s );
255  } ]
256  return [ lindex [ toltcl::eval $tolexpr ] 0 ]
257}
258
259proc ::TolPkg::GetUpgradeConfig { } {
260  set tolexpr {
261    Set {
262      [[
263        Real checkTOL = TolConfigManager::Config::Upgrading::TolVersion::CheckAllowed;
264        Real localPKG = TolConfigManager::Config::Upgrading::TolPackage::LocalOnly
265       ]]
266    }
267  }
268  return [ lindex [ toltcl::eval $tolexpr -named 1 ] 1 ]
269}
270
271proc ::TolPkg::GetKnownRepositories { } {
272  return [ lindex [ toltcl::eval \
273                        {Set TolConfigManager::Config::Upgrading::TolPackage::Repositories} ] 0 ]
274}
275
276proc ::TolPkg::GetPackagesInfo { } {
277  return [ lindex [ toltcl::eval { Set TolPackage::Client::_.packSyncInfo } ] 0 ]
278}
279
280proc ::TolPkg::test_00 { } {
281  GetRepositoryInfo http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php
282}
283
284proc ::TolPkg::test_01 { } {
285  set oza /home/jsperez/.tol/TolPackage/1.1/Client/DecoTools.1.8/DecoTools.1.8.oza
286  ::TolPkg::GetPackageInfoFromOZA $oza
287}
288
289proc ::TolPkg::test_02 { } {
290  return [ llength [ ::TolPkg::GetLocalPackages ] ]
291}
Note: See TracBrowser for help on using the repository browser.