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

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

refs #1191, se implementa UpdateAll y UpgradeAll

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

  • Property mode set to 100644
File size: 9.6 KB
RevLine 
[5b6b63c]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
[0db54a1]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  set path [ GetPkgDirectory $p ]
35  if { [ file exists $path ] } {
36    set bak "${path}.bak"
37    set op [ expr { $delete ? "rename" : "copy" } ]
38    puts "file $op -force $path $bak"
39    return [ file $op -force $path $bak ]
40  } else {
41    return 0
42  }
43}
44
45proc ::TolPkg::RestoreBackup { p { delete 0 } } {
46  set path [ GetPkgDirectory $p ]
47  set bak "${path}.bak"
48  if { [ file exists $bak ] } {
49    set op [ expr { $delete ? "rename" : "copy" } ]
50    return [ file $op -force $bak $path ]
51  } else {
52    return 0
53  }
54}
55
56proc ::TolPkg::DeleteBackup { p } {
57  set path [ GetPkgDirectory $p ]
58  set bak "${path}.bak"
59  return [ file delete -force $bak ]
60}
61
[5b6b63c]62proc ::TolPkg::GetPkgSyncInfo { } {
63  set localRoot [ file normalize \
64                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
[e83ccac]65  set oza [ file join $localRoot "Client/PackSyncInfo.oza" ]
66  if { ![ file exists $oza ] || ![ file readable $oza ] } {
67    return {}
68  }
69  set tolScript [ string map [ list "%O" $oza ] {
[5b6b63c]70    Set { Ois.Load( "%O" )[1] }
71  } ]
72  # return a dictionary
73  set dict {}
74  foreach p [ lindex [ toltcl::eval $tolScript ] 0 ] {
75    set url        [ lindex $p 0 ]
76    set name       [ lindex $p 1 ]
77    set brief      [ lindex $p 2 ]
78    set mintol     [ lindex $p 4 ]
79    set maxtol     [ lindex $p 5 ]
80    set lastremote [ lindex $p 6 ]
81    set lastlocal  [ lindex $p 7]
82    lappend dict [ list $name \
83                       [ list url $url brief $brief mintol $mintol \
84                             maxtol $maxtol lastremote $lastremote \
85                             lastlocal $lastlocal ] ]
86  }
87  return $dict
88}
89
90if { 0 } {
910 -- http://packages.localbayes.es/BayesPrivateTolPackages/repository.php
921 -- MMS
932 -- MMS.0.6040
943 --
954 -- v2.0.1 b.4
965 -- v999999999999999999
976 -- 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
987 -- y2011m11d07h10i45s00.000
998 -- y2011m11d07h10i45s00.000
1009 -- 1474442
101}
102
103proc ::TolPkg::GetVersSyncInfo { } {
104  set localRoot [ file normalize \
105                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
[e83ccac]106  set oza [ file join $localRoot "Client/VersSyncInfo.oza" ]
107  if { ![ file exists $oza ] || ![ file readable $oza ] } {
108    return {}
109  }
110  set tolScript [ string map [ list "%O" $oza ] {
[5b6b63c]111    Set { Ois.Load( "%O" )[1] }
112  } ]
113  # return a dictionary
114  set dict {}
115  foreach p [ lindex [ toltcl::eval $tolScript ] 0 ] {
116    set url          [ lindex $p 0 ]
117    set name         [ lindex $p 1 ]
118    set version      [ lindex $p 2 ]
119    set mintol       [ lindex $p 4 ]
120    set maxtol       [ lindex $p 5 ]
121    set dependencies [ split [ lindex $p 6 ] "," ]
122    set dateremote   [ lindex $p 7 ]
123    set datelocal    [ lindex $p 8 ]
124    lappend dict [ list $version \
125                       [ list url $url name $name mintol $mintol \
126                             maxtol $maxtol dateremote $dateremote \
127                             datelocal $datelocal \
128                             dependencies $dependencies ] ]
129  }
130  return $dict
131}
132
133proc ::TolPkg::GetLocalPackages { } {
134  set localRoot [ file normalize \
135                      [ toltcl::eval { Text TolPackage::_.localRoot } ] ]
136  set clientRoot [ file join $localRoot Client ]
137  set dirs [ glob -tail -dir $clientRoot -types {d r} * ]
138  set pkgsInfo {}
139  foreach d $dirs {
[e83ccac]140    lappend pkgsInfo [ list $d [ GetLocalPackageInfo $d ] ]
[5b6b63c]141  }
142  return $pkgsInfo
143}
144
[e83ccac]145proc ::TolPkg::GetLocalPackageInfo { p } {
146  set tolScript [ string map [ list %p $p ] {
147    Set TolPackage::Client::LocalInfo( "%p" );
148  } ]
149  return [ lindex [ toltcl::eval $tolScript -named 1 ] 1 ]
150}
151
[5b6b63c]152proc ::TolPkg::GetPackageInfoFromOZA { oza } {
153  puts "::TolPkg::GetPackageInfoFromOZA $oza"
154  set tolScript [ string map [ list "%O" $oza ] {
155    Set {
156      Set oza = Include( "%O" );
157      WriteLn( "%O" );
158      Set If( Grammar( oza[1] ) == "NameBlock", {
159        NameBlock pkg = oza[ 1 ];
160        Set If( And( ObjectExist( "Text", "pkg::_.autodoc.name" ),
161                     ObjectExist( "Text", "pkg::_.autodoc.brief" ),
162                     ObjectExist( "Text", "pkg::_.autodoc.description" ),
163                     ObjectExist( "Text", "pkg::_.autodoc.url" ),
164                     ObjectExist( "Real", "pkg::_.autodoc.version.high" ),
165                     ObjectExist( "Real", "pkg::_.autodoc.version.low"),
166                     ObjectExist( "Set",  "pkg::_.autodoc.authors" ),
167                     ObjectExist( "Text", "pkg::_.autodoc.minTolVersion" ) ), {
168                       Set aux = [[ Text name           = pkg::_.autodoc.name,
169                                    Text brief          = pkg::_.autodoc.brief,
170                                    Text description    = pkg::_.autodoc.description,
171                                    Text url            = pkg::_.autodoc.url,
172                                    Real version.high   = pkg::_.autodoc.version.high,
173                                    Real version.low    = pkg::_.autodoc.version.low,
174                                    Set dependencies    = pkg::_.autodoc.dependencies,
175                                    Set authors         = pkg::_.autodoc.authors,
176                                    Text versionControl = If( ObjectExist( "Text", "pkg::_.autodoc.versionControl" ),
177                                                              pkg::_.autodoc.versionControl, "" );
178                                    Text minTolVersion  = pkg::_.autodoc.minTolVersion,
179                                    Text maxTolVersion  = If( ObjectExist( "Text", "pkg::_.autodoc.maxTolVersion" ),
180                                                              pkg::_.autodoc.axTolVersion, "" ) ]];
181                       Text pkgName = pkg::_.autodoc.name << "." << pkg::_.autodoc.version.high
182                                      << "." << pkg::_.autodoc.version.low ;
183                       Set PutName( pkgName, aux )                       
184                     }, { WriteLn( "Empty 2" ), Copy( Empty )} ) }, { WriteLn( "Empty 1" ); Copy( Empty )}  )
185    };
186  } ]
187  #puts $tolScript
188  set result [ toltcl::eval $tolScript -named 1 ]
189  puts "::TolPkg::GetPackageInfoFromOZA END $oza"
190  return $result
191}
192
193
194proc ::TolPkg::GetRepositoryInfo { repo } {
195  set ask "${repo}?action=general_information"
196  set result [ toltcl::eval [ string map [ list %A $ask ] {
197    Set TolPackage::Client::GetRepositoryInfo( "%A" )
198  } ] ]
199  return [ lindex $result 0 ]
200}
201
[633537f]202proc ::TolPkg::AddRepository { url } {
203  set tolexpr [ string map [ list %u $url ] {
204    Real TolPackage::Client::AddRepository( "%u" );
205  } ]
206  toltcl::eval $tolexpr
207}
208
209proc ::TolPkg::ZipInstall { pkg.zip } {
210  puts "::TolPkg::ZipInstall ${pkg.zip}"
211  set tolexpr [ string map [ list %p ${pkg.zip} ] {
212    Real TolPackage::Client::LocalInstallPackage( "%p" )
213  } ]
214  return [ toltcl::eval $tolexpr ]
215}
216
217proc ::TolPkg::RemoteInstall { pkg repo } {
218  puts "::TolPkg::RemoteInstall $pkg $repo"
[0db54a1]219  BackupPackage $pkg 1
[633537f]220  set tolexpr [ string map [ list %p $pkg %r $repo ] {
221    Real TolPackage::Client::RemoteInstall( "%r", "%p", 1 )
222  } ]
[455a6d5]223  if { [ catch  { toltcl::eval $tolexpr } result ] } {
224    set result 0
225  }
[0db54a1]226  if { [ string is boolean $result ] && $result } {
227    DeleteBackup $pkg
228  } else {
[455a6d5]229    RestoreBackup $pkg 1
[0db54a1]230  }
231  return $result
[633537f]232}
233
234proc ::TolPkg::ExportPackage { pkg dest } {
235  puts "::TolPkg::ExportPackage $pkg to $dest"
236  set tolexpr [ string map [ list %p $pkg %d $dest ] {
237    Real TolPackage::Client::LocalExportPackage( "%p", "%d/" )
238  } ]
239  return [ toltcl::eval $tolexpr ]
240}
241
242proc ::TolPkg::CheckPackagesToInstall { pkgs } {
243  set members {}
244  foreach p $pkgs {
245    lappend members \"${p}\"
246  }
247  set tolexpr [ string map [ list %s "\[\[ [ join $members , ] \]\]" ] {
248    Set TolPackage::Client::GetDeepDependencies.all.last( %s );
249  } ]
250  return [ lindex [ toltcl::eval $tolexpr ] 0 ]
251}
252
253proc ::TolPkg::GetUpgradeConfig { } {
254  set tolexpr {
255    Set {
256      [[
257        Real checkTOL = TolConfigManager::Config::Upgrading::TolVersion::CheckAllowed;
258        Real localPKG = TolConfigManager::Config::Upgrading::TolPackage::LocalOnly
259       ]]
260    }
261  }
262  return [ lindex [ toltcl::eval $tolexpr -named 1 ] 1 ]
263}
264
[5b6b63c]265proc ::TolPkg::GetKnownRepositories { } {
266  return [ lindex [ toltcl::eval \
267                        {Set TolConfigManager::Config::Upgrading::TolPackage::Repositories} ] 0 ]
268}
269
270proc ::TolPkg::GetPackagesInfo { } {
271  return [ lindex [ toltcl::eval { Set TolPackage::Client::_.packSyncInfo } ] 0 ]
272}
273
274proc ::TolPkg::test_00 { } {
275  GetRepositoryInfo http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php
276}
277
278proc ::TolPkg::test_01 { } {
279  set oza /home/jsperez/.tol/TolPackage/1.1/Client/DecoTools.1.8/DecoTools.1.8.oza
280  ::TolPkg::GetPackageInfoFromOZA $oza
281}
282
283proc ::TolPkg::test_02 { } {
284  return [ llength [ ::TolPkg::GetLocalPackages ] ]
285}
Note: See TracBrowser for help on using the repository browser.