source: tol/tolbase/lib/toltk/tolpkg.tcl @ 23f300d

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

refs #1191,

  • el backup a veces falla en windows 7, lo hemos deshabilitado
  • el arbol se refrezca después de install/upgrade/update

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@4053 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                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
142  set clientRoot [ file join $localRoot Client ]
143  set dirs [ glob -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.