1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
###
# Standalone class to manage code distribution
# This class is intended to be mixed into another class
# (Thus the lack of ancestors)
###
::clay::define ::practcl::distribution {
method scm_info {} {
return {
scm None
hash {}
maxdate {}
tags {}
isodate {}
}
}
method DistroMixIn {} {
my define set scm none
}
method Sandbox {} {
if {[my define exists sandbox]} {
return [my define get sandbox]
}
if {[my clay delegate project] ni {::noop {}}} {
set sandbox [my <project> define get sandbox]
if {$sandbox ne {}} {
my define set sandbox $sandbox
return $sandbox
}
}
set sandbox [file normalize [file join $::CWD ..]]
my define set sandbox $sandbox
return $sandbox
}
method SrcDir {} {
set pkg [my define get name]
if {[my define exists srcdir]} {
return [my define get srcdir]
}
set sandbox [my Sandbox]
set srcdir [file join [my Sandbox] $pkg]
my define set srcdir $srcdir
return $srcdir
}
method ScmTag {} {}
method ScmClone {} {}
method ScmUnpack {} {}
method ScmUpdate {} {}
method Unpack {} {
set srcdir [my SrcDir]
if {[file exists $srcdir]} {
return
}
set pkg [my define get name]
if {[my define exists download]} {
# Utilize a staged download
set download [my define get download]
if {[file exists [file join $download $pkg.zip]]} {
::practcl::tcllib_require zipfile::decode
::zipfile::decode::unzipfile [file join $download $pkg.zip] $srcdir
return
}
}
my ScmUnpack
}
}
oo::objdefine ::practcl::distribution {
method Sandbox {object} {
if {[$object define exists sandbox]} {
return [$object define get sandbox]
}
if {[$object clay delegate project] ni {::noop {}}} {
set sandbox [$object <project> define get sandbox]
if {$sandbox ne {}} {
$object define set sandbox $sandbox
return $sandbox
}
}
set pkg [$object define get name]
set sandbox [file normalize [file join $::CWD ..]]
$object define set sandbox $sandbox
return $sandbox
}
method select object {
if {[$object define exists scm]} {
return [$object define get scm]
}
set pkg [$object define get name]
if {[$object define get srcdir] ne {}} {
set srcdir [$object define get srcdir]
} else {
set srcdir [file join [my Sandbox $object] $pkg]
$object define set srcdir $srcdir
}
set classprefix ::practcl::distribution.
if {[file exists $srcdir]} {
foreach class [::info commands ${classprefix}*] {
if {[$class claim_path $srcdir]} {
$object clay mixinmap distribution $class
set name [$class claim_option]
$object define set scm $name
return $name
}
}
}
foreach class [::info commands ${classprefix}*] {
if {[$class claim_object $object]} {
$object clay mixinmap distribution $class
set name [$class claim_option]
$object define set scm $name
return $name
}
}
if {[$object define get scm] eq {} && [$object define exists file_url]} {
set class ::practcl::distribution.snapshot
set name [$class claim_option]
$object define set scm $name
$object clay mixinmap distribution $class
return $name
}
error "Cannot determine source distribution method"
}
method claim_option {} {
return Unknown
}
method claim_object object {
return false
}
method claim_path path {
return false
}
}
|