Skip to content

Commit 598346e

Browse files
committed
Auto-update improvements
1 parent 040a7fb commit 598346e

File tree

4 files changed

+35
-64
lines changed

4 files changed

+35
-64
lines changed

vmd/cv_dashboard/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025-05-20
1+
2025-05-24

vmd/cv_dashboard/cv_dashboard.tcl

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,8 @@
2626
# - index group builder
2727

2828
set dir [file dirname [info script]]
29-
set version_file [open "${dir}/VERSION"]
30-
gets $version_file git_date
31-
close $version_file
32-
# Convert to Tcl-style package version number
33-
set CV_DASHBOARD_VERSION [string map { "-" "." } $git_date]
34-
package provide cv_dashboard $CV_DASHBOARD_VERSION
29+
set VERSION [::cv_dashboard::read_version $dir]
30+
package provide cv_dashboard $VERSION
3531

3632
namespace eval ::cv_dashboard {
3733
# General UI state
@@ -90,12 +86,6 @@ namespace eval ::cv_dashboard {
9086
# Array keping track of precomputed colvars trajectories for a given molecule
9187
# This is an array of dict, where the dictionary keys are colvar names
9288
array set colvar_trajectory {}
93-
94-
# Information for self-update
95-
variable version $CV_DASHBOARD_VERSION
96-
variable repo_user "Colvars"
97-
variable repo_name "colvars"
98-
variable branch "dashboard_update"
9989
}
10090

10191
set script_dir [file dirname [info script]]

vmd/cv_dashboard/cv_dashboard_update.tcl

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
####################################
22
# Self-update utilities
33

4-
namespace eval ::cv_dashboard {}
4+
namespace eval ::cv_dashboard {
5+
variable repo_user "Colvars"
6+
variable repo_name "colvars"
7+
variable branch "dashboard_update"
8+
}
59

610
proc ::cv_dashboard::check_version_file {} {
711
variable version
@@ -19,7 +23,7 @@ proc ::cv_dashboard::check_version_file {} {
1923
}
2024

2125
set fp [open $temp_file r]
22-
set remote_version [string trim [read $fp]]
26+
set remote_version [string map { "-" "." } [string trim [read $fp]]]
2327
close $fp
2428
file delete $temp_file
2529

@@ -29,8 +33,8 @@ proc ::cv_dashboard::check_version_file {} {
2933

3034
proc ::cv_dashboard::compare_versions {current latest} {
3135
# Versioned by date: e.g. 2025-05-21
32-
set current_parts [split $current "-"]
33-
set latest_parts [split $latest "-"]
36+
set current_parts [split $current "."]
37+
set latest_parts [split $latest "."]
3438

3539
# Pad with zeros if needed
3640
while {[llength $current_parts] < 3} {lappend current_parts 0}
@@ -180,7 +184,6 @@ proc ::cv_dashboard::self_update {{force false}} {
180184
download_directory_smart $repo_user $repo_name "vmd/cv_dashboard" $branch $temp_dir
181185

182186
# Replace current installation
183-
puts "Installing update..."
184187
file delete -force $package_dir
185188
file rename $temp_dir $package_dir
186189

@@ -245,23 +248,10 @@ proc ::cv_dashboard::cleanup_backups { package_dir {keep 2}} {
245248
}
246249
}
247250

248-
proc ::cv_dashboard::load_newer_version {} {
249-
250-
# Try to load updated local version
251-
set package_dir [get_local_dir]
252-
if {[file exists $package_dir]} {
253-
# Compare versions
254-
set version_file [open [file join $package_dir "cv_dashboard" VERSION]]
255-
gets $version_file LOCAL_VERSION
256-
close $version_file
257-
if { [string compare $LOCAL_VERSION $::cv_dashboard::version] > 0 } {
258-
puts "Superseding current version ($::cv_dashboard::version) with local installation of cv_dashboard from $package_dir ($LOCAL_VERSION)"
259-
package forget cv_dashboard
260-
namespace delete ::cv_dashboard
261-
source [file join $package_dir "cv_dashboard" pkgIndex.tcl]
262-
package require cv_dashboard
263-
return true
264-
}
265-
}
266-
return false
251+
proc ::cv_dashboard::read_version { path } {
252+
set version_file [open [file join $path VERSION]]
253+
gets $version_file git_date
254+
set version [string map { "-" "." } $git_date]
255+
close $version_file
256+
return $version
267257
}

vmd/cv_dashboard/pkgIndex.tcl

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,43 +11,34 @@
1111

1212
proc init {} {
1313
set dir [file dirname [info script]]
14-
set version_file [open "${dir}/VERSION"]
15-
gets $version_file git_date
16-
close $version_file
17-
# Convert to Tcl-style package version number
18-
set CV_DASHBOARD_VERSION [string map { "-" "." } $git_date]
14+
source [file join $dir cv_dashboard_update.tcl]
15+
set VERSION [::cv_dashboard::read_version $dir]
16+
set ::cv_dashboard::version $VERSION
1917

2018
# Compare with version with local package
21-
source [file join $dir cv_dashboard_update.tcl]
22-
set package_dir [::cv_dashboard::get_local_dir]
19+
set local_dir [file join [::cv_dashboard::get_local_dir] "cv_dashboard"]
2320

24-
if { $package_dir ne $dir && [file exists $package_dir]} {
21+
if { $local_dir ne [file dirname $dir] && [file exists $local_dir]} {
22+
# There is a local package separate from this instance
2523
# Compare versions
26-
set version_file [open [file join $package_dir "cv_dashboard" VERSION]]
27-
gets $version_file git_date
28-
close $version_file
29-
set LOCAL_VERSION [string map { "-" "." } $git_date]
30-
31-
if { [string compare $LOCAL_VERSION $CV_DASHBOARD_VERSION] > 0 } {
32-
puts "Overriding current version ($CV_DASHBOARD_VERSION) with local installation of cv_dashboard from $package_dir ($LOCAL_VERSION)"
33-
source [file join $package_dir "cv_dashboard" pkgIndex.tcl]
24+
set LOCAL_VERSION [::cv_dashboard::read_version $local_dir]
25+
26+
if { [string compare $LOCAL_VERSION $VERSION] > 0 } {
27+
puts "Overriding current version ($VERSION) with local installation of cv_dashboard from $local_dir ($LOCAL_VERSION)"
28+
source [file join $local_dir pkgIndex.tcl]
3429
return
3530
}
3631
}
3732

38-
# Only update local install
39-
if { $package_dir eq $dir } {
40-
set updated [::cv_dashboard::self_update]
41-
42-
if $updated {
43-
# Source ourselves! Hoping this doesn't loop
44-
source [file join $package_dir "cv_dashboard" pkgIndex.tcl]
45-
return
46-
}
33+
# Now try to update local package from remote repository
34+
if [::cv_dashboard::self_update] {
35+
# Reload if necessary
36+
source [file join $local_dir pkgIndex.tcl]
37+
return
4738
}
4839

49-
# Finish initializing package
50-
package ifneeded cv_dashboard $CV_DASHBOARD_VERSION "set env(CV_DASHBOARD_DIR) [list $dir]; [list source [file join $dir cv_dashboard.tcl]]"
40+
# Finish initializing this version
41+
package ifneeded cv_dashboard $VERSION "set env(CV_DASHBOARD_DIR) [list $dir]; [list source [file join $dir cv_dashboard.tcl]]"
5142
}
5243

5344
init

0 commit comments

Comments
 (0)