[64317] trunk/base/src
jmr at macports.org
jmr at macports.org
Mon Mar 1 19:09:34 PST 2010
Revision: 64317
http://trac.macports.org/changeset/64317
Author: jmr at macports.org
Date: 2010-03-01 19:09:31 -0800 (Mon, 01 Mar 2010)
Log Message:
-----------
add flat->sqlite receipt conversion, fix receipt_sqlite::entry_exists_for_name, fix reg2 uninstall --follow-dependents
Modified Paths:
--------------
trunk/base/src/macports1.0/macports.tcl
trunk/base/src/registry2.0/portuninstall.tcl
trunk/base/src/registry2.0/receipt_sqlite.tcl
trunk/base/src/registry2.0/registry.tcl
Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl 2010-03-02 01:27:53 UTC (rev 64316)
+++ trunk/base/src/macports1.0/macports.tcl 2010-03-02 03:09:31 UTC (rev 64317)
@@ -907,10 +907,16 @@
# init registry if needed
if {${registry.format} == "receipt_sqlite"} {
- registry::open [file join ${registry.path} registry registry.db]
+ set db_path [file join ${registry.path} registry registry.db]
+ set db_exists [file exists $db_path]
+ registry::open $db_path
# for the benefit of the portimage code that is called from multiple interpreters
global registry_open
set registry_open yes
+ # convert any flat receipts if we just created a new db
+ if {$db_exists == 0 && [file writable $db_path]} {
+ registry::convert_to_sqlite
+ }
}
}
Modified: trunk/base/src/registry2.0/portuninstall.tcl
===================================================================
--- trunk/base/src/registry2.0/portuninstall.tcl 2010-03-02 01:27:53 UTC (rev 64316)
+++ trunk/base/src/registry2.0/portuninstall.tcl 2010-03-02 03:09:31 UTC (rev 64317)
@@ -130,7 +130,7 @@
if {[info exists options(ports_uninstall_follow-dependents)] && $options(ports_uninstall_follow-dependents) eq "yes"} {
foreach depport [$port dependents] {
# make sure it's still installed, since a previous dep uninstall may have removed it
- if {[$depport state] == "imaged" || [$depport state] == "installed"} {
+ if {[registry::entry exists $depport] && ([$depport state] == "imaged" || [$depport state] == "installed")} {
set depname [$depport name]
set depver "[$depport version]_[$depport revision][$depport variants]"
portuninstall::uninstall $depname $depver [array get options]
Modified: trunk/base/src/registry2.0/receipt_sqlite.tcl
===================================================================
--- trunk/base/src/registry2.0/receipt_sqlite.tcl 2010-03-02 01:27:53 UTC (rev 64316)
+++ trunk/base/src/registry2.0/receipt_sqlite.tcl 2010-03-02 03:09:31 UTC (rev 64317)
@@ -72,7 +72,7 @@
# Check to see if an entry exists
proc entry_exists_for_name {name} {
- if {![catch {registry::entry search name $name}]} {
+ if {![catch {set ports [registry::entry search name $name]}] && [llength $ports] > 0} {
return 1
}
return 0
@@ -196,5 +196,29 @@
return $rlist
}
+# adds a registry entry from a list of keys and values
+proc create_entry_l {proplist} {
+ array set props $proplist
+ registry::write {
+ set regref [registry::entry create $props(name) $props(version) $props(revision) $props(variants) $props(epoch)]
+ $regref date $props(date)
+ $regref location $props(location)
+ $regref state $props(state)
+ $regref installtype $props(installtype)
+ if {$props(installtype) == "image"} {
+ $regref map $props(imagefiles)
+ if {$props(state) == "installed"} {
+ $regref activate $props(imagefiles) $props(files)
+ }
+ } else {
+ $regref map $props(files)
+ }
+ foreach dep_portname $props(depends) {
+ $regref depends $dep_portname
+ }
+ $regref portfile $props(portfile)
+ }
+}
+
# End of receipt_sqlite namespace
}
Modified: trunk/base/src/registry2.0/registry.tcl
===================================================================
--- trunk/base/src/registry2.0/registry.tcl 2010-03-02 01:27:53 UTC (rev 64316)
+++ trunk/base/src/registry2.0/registry.tcl 2010-03-02 03:09:31 UTC (rev 64317)
@@ -389,7 +389,65 @@
return [${macports::registry.format}::write_dep_map $args]
}
+# upgrade flat receipts to registry2.0 sqlite db
+proc convert_to_sqlite {} {
+ set ilist [receipt_flat::installed "" ""]
+ foreach installed $ilist {
+ set iname [lindex $installed 0]
+ set iversion [lindex $installed 1]
+ set irevision [lindex $installed 2]
+ set ivariants [lindex $installed 3]
+ set proplist [list name $iname version $iversion revision $irevision variants $ivariants]
+
+ set iref [receipt_flat::open_entry $iname $iversion $irevision $ivariants]
+
+ lappend proplist date [receipt_flat::property_retrieve $iref date]
+ lappend proplist epoch [receipt_flat::property_retrieve $iref epoch]
+
+ set installtype [receipt_flat::property_retrieve $iref installtype]
+ lappend proplist installtype $installtype
+ if { $installtype == "image" } {
+ set imagedir [receipt_flat::property_retrieve $iref imagedir]
+ set contents [receipt_flat::property_retrieve $iref contents]
+ set imagefiles [list]
+ set idlen [string length $imagedir]
+ foreach f $contents {
+ set fullpath [lindex $f 0]
+ # strip image dir from start
+ set path [string range $fullpath $idlen [string length $fullpath]]
+ lappend imagefiles $path
+ }
+ lappend proplist imagefiles $imagefiles
+ set active [receipt_flat::property_retrieve $iref active]
+ if {$active} {
+ set state installed
+ lappend proplist files [receipt_flat::port_registered $iname]
+ } else {
+ set state imaged
+ }
+ } else {
+ set imagedir ""
+ set state installed
+ lappend proplist files [receipt_flat::port_registered $iname]
+ }
+ lappend proplist location $imagedir
+ lappend proplist state $state
+
+ receipt_flat::open_dep_map
+ set deplist [receipt_flat::list_depends $iname]
+ set depnames [list]
+ foreach dep $deplist {
+ lappend depnames [lindex $dep 0]
+ }
+ lappend proplist depends $depnames
+
+ lappend proplist portfile ""
+
+ # add the entry to the db
+ receipt_sqlite::create_entry_l $proplist
+ }
+}
+
# End of registry namespace
}
-
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100301/8b6e8b9b/attachment-0001.html>
More information about the macports-changes
mailing list