MCFileTreeRepository.st
author Claus Gittinger <cg@exept.de>
Sat, 01 Sep 2018 17:31:58 +0200
changeset 1085 f86ba472fa45
child 1094 55a945c18a3e
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1085
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
MCDirectoryRepository subclass:#MCFileTreeRepository
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'readonly repositoryProperties'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'SCM-Monticello-FileTree-Core'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
MCFileTreeRepository class instanceVariableNames:'defaultPackageExtension defaultPropertyFileExtension'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
 No other class instance variables are inherited by this class.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
MCFileTreeRepository comment:'A file tree repository'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!MCFileTreeRepository class methodsFor:'instance creation'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
basicFromUrl: aZnUrl
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	^ self new directory: (self urlAsFileReference: aZnUrl)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
description
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    ^ 'filetree://'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!MCFileTreeRepository class methodsFor:'accessing'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
defaultPackageExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    ".tree, .pkg, .package are the only formats supported at the moment:
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	.tree         - original structure
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	.pkg          - snapshot structure
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	.package - cypress structure"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    defaultPackageExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
        ifNil: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
            defaultPackageExtension := MCFileTreePackageStructureStWriter useCypressWriter
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
                ifTrue: [ '.package' ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
                ifFalse: [ '.pkg' ] ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    ^ defaultPackageExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
defaultPackageExtension: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    ".tree and .pkg are the only two formats supported at the moment"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    "self defaultPackageExtension:'.package'"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    (#('.tree' '.pkg' '.package') includes: aString)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        ifFalse: [ self error: 'Unsupported package extension: ' , aString printString ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    defaultPackageExtension := aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
defaultPropertyFileExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
  defaultPropertyFileExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    ifNil: [ defaultPropertyFileExtension := '.json' ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
  ^ defaultPropertyFileExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
defaultPropertyFileExtension: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
  "self defaultPropertyFileExtension:'.ston'"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
  self validatePropertyFileExtension: aString.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
  defaultPropertyFileExtension := aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
urlSchemes
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	^ #(#filetree)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
validatePropertyFileExtension: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
  "see Issue #90: https://github.com/dalehenrich/filetree/issues/90"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
  (#('.json' '.ston') includes: aString)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    ifFalse: [ self error: 'Unsupported property file extension: ' , aString printString ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!MCFileTreeRepository class methodsFor:'utility'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
parseName: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    ^ self parseName: aString extension: self defaultPackageExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
parseName: aString extension: extension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    "picked up from GoferVersionReference>>parseName:"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    | info basicName package branch author versionNumber packageName |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    basicName := aString last isDigit
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        ifTrue: [ aString ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
        ifFalse: [ (aString copyUpToLast: $.) copyUpTo: $( ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    package := basicName copyUpToLast: $-.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    (package includes: $.)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
        ifFalse: [ branch := '' ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
        ifTrue: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
            branch := '.' , (package copyAfter: $.).
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
            package := package copyUpTo: $. ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    author := (basicName copyAfterLast: $-) copyUpToLast: $..
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    versionNumber := (basicName copyAfterLast: $-) copyAfterLast: $..
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    (versionNumber notEmpty and: [ versionNumber allSatisfy: [ :each | each isDigit ] ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
        ifTrue: [ versionNumber := versionNumber asNumber ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
        ifFalse: [ versionNumber := 0 ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    packageName := package , branch.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    ^ {packageName.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    author.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    versionNumber.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    (packageName , extension)}
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
urlAsFileReference: aZnUrl
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
	"Extracted from ZnUrl since the scheme is restricted.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	We need to keep host as a segment part."
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
	| path |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
	path := aZnUrl host
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
		ifNotNil: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
			((aZnUrl host = #/) and: [ aZnUrl pathSegments isEmpty ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
				ifTrue: [ ^ FileSystem root ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
			aZnUrl pathSegments copyWithFirst: aZnUrl host ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
		ifNil: [ aZnUrl pathSegments copyWithFirst: FileSystem disk delimiter asString ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	^ (String streamContents: 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
			[ :stream | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
			path 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
				asStringOn: stream 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
				delimiter: FileSystem disk delimiter asString ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
		asFileReference
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!MCFileTreeRepository methodsFor:'*Komitter-Models'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
isRemote
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
	^ true
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
!MCFileTreeRepository methodsFor:'*metacello-filetree'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
metacelloProjectClassFor: aScriptEngine
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    aScriptEngine versionString isEmptyOrNil
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
        ifFalse: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
            "If we have a version in the script, then a BaselineOf is not being referenced...use a MetacelloMCProject
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
	    	 see https://github.com/dalehenrich/metacello-work/issues/7"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
            ^ super metacelloProjectClassFor: aScriptEngine ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ^ MetacelloMCBaselineProject
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
repositoryBranchName
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
  "extract a branch name from the repository ... if possible"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
  (MetacelloPlatform current gitBranchNameFor: self directory fullName)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    ifNotNil: [ :sha | ^ sha ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
  ^ super repositoryBranchName
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
repositoryDescription
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
  ^ self description , ' [' , self repositoryVersionString , ':'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    , self repositoryBranchName , ']'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
repositoryVersionString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
  "extract a version string from the repository ... if possible"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
  (MetacelloPlatform current gitCommitShaFor: self directory fullName)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    ifNotNil: [ :sha | ^ sha ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
  ^ super repositoryVersionString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
!MCFileTreeRepository methodsFor:'*metacello-mc'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
versionInfoFromVersionNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
	^ self versionInfoForPackageDirectory: (self fileDirectoryOn: (aString, self packageExtension))
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!MCFileTreeRepository methodsFor:'accessing'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
allFileNames
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    ^ (self directory entries select: [ :entry | entry isDirectory and: [ self canReadFileNamed: entry name ] ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
        collect: [ :entry | entry name ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
allFileNamesForVersionNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
	^ self filterFileNames: self readableFileNames forVersionNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
asRepositorySpecFor: aMetacelloMCProject
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    ^ aMetacelloMCProject repositorySpec
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        description: self description;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
        type: 'filetree';
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
        yourself
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
defaultRepositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
  ^ Dictionary new
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    at: 'packageExtension' put: self class defaultPackageExtension;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
    at: 'propertyFileExtension' put: self propertyFileExtension;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    yourself
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
directory: aDirectory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
  super directory: aDirectory.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
  repositoryProperties := nil.	"force properties to be reloaded from new location"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
  self repositoryProperties	"NOW"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
fileUtils
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    ^ MCFileTreeFileUtils current
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
filterFileNames: aCollection forVersionNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
	^ aCollection select: [:ea | (self versionNameFromFileName: ea) = aString]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
goferVersionFrom: aVersionReference
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    "until we no longer find .tree directories in the wild"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    ((self readableFileNames collect: [ :fileName | self fileDirectoryOn: fileName ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
        select: [ :packageDirectory | self fileUtils directoryExists: packageDirectory ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
        collect: [ :packageDirectory | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
            (self versionInfoForPackageDirectory: packageDirectory) name = aVersionReference name
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
                ifTrue: [ ^ self loadVersionFromFileNamed: (self fileUtils directoryName: packageDirectory) ] ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    ^ nil
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
readonly
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    readonly ifNil: [ readonly := false ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    ^ readonly
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
readonly: anObject
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
	readonly := anObject
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
  repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    ifNil: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
      repositoryProperties := Dictionary new.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
      (self fileUtils directoryExists: directory)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
        ifFalse: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
          self
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
            error:
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
              'filetree:// repository '
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
                ,
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
                  (self fileUtils directoryPathString: self directory) printString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
                , ' does not exist.' ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
      (self directory entries
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
        detect: [ :entry | entry name = '.filetree' ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
        ifNone: [  ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
        ifNil: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
          repositoryProperties := self defaultRepositoryProperties.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
          self writeRepositoryProperties ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
        ifNotNil: [ :configEntry | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
          configEntry
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
            readStreamDo: [ :fileStream | repositoryProperties := MCFileTreeJsonParser parseStream: fileStream ] ] ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
  ^ repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
versionFrom: aVersionReferenceString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    "until we no longer find .tree directories in the wild"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
    (self readableFileNames collect: [ :fileName | self fileDirectoryOn: fileName ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
        select: [ :packageDirectory | self fileUtils directoryExists: packageDirectory ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
        thenCollect: [ :packageDirectory | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
            (self versionInfoForPackageDirectory: packageDirectory) name = aVersionReferenceString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
                ifTrue: [ ^ self loadVersionFromFileNamed: (self fileUtils directoryName: packageDirectory) ] ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ^ nil
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
versionFromFileNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
	^ self loadVersionFromFileNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
versionInfoFromFileNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	^ self loadVersionInfoFromFileNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
versionNameFromFileName: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
	| description |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
	description := self packageDescriptionFromPackageDirectory: (self fileDirectoryOn: aString).
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
	^ description first , '-' , description second , '.' , description third printString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
!MCFileTreeRepository methodsFor:'actions'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
fileDirectoryOn: directoryPath
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    ^ self fileUtils directoryFromPath: directoryPath relativeTo: self directory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
packageDescriptionFromPackageDirectory: packageDirectory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    | filename info extension |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    filename := self fileUtils current directoryName: packageDirectory.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    extension := filename copyFrom: (filename lastIndexOf: $.) to: filename size.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    ^ ((self packageExtension ~= '.package'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
        and: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
            (self fileUtils filePathExists: 'version' relativeTo: packageDirectory)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
                and: [ self fileUtils filePathExists: 'package' relativeTo: packageDirectory ] ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
        or: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
            | dir |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
            dir := self fileUtils
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
                directoryFromPath: MCFileTreeStCypressWriter monticelloMetaDirName
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
                relativeTo: packageDirectory.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
            self fileUtils directoryExists: dir ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
        ifTrue: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
            info := self versionInfoForPackageDirectory: packageDirectory.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
            self parseName: info name extension: extension ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
        ifFalse: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
            {(filename copyFrom: 1 to: (filename lastIndexOf: $.) - 1).
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
            'cypress'.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
            1.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
            filename} ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
packageDescriptionsFromReadableFileNames
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    ^ ((self readableFileNames collect: [ :fileName | self fileDirectoryOn: fileName ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
        select: [ :packageDirectory | self fileUtils directoryExists: packageDirectory ])
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
        collect: [ :packageDirectory | self packageDescriptionFromPackageDirectory: packageDirectory ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
versionInfoForPackageDirectory: packageDirectory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
    ^ ((MCReader readerClassForFileNamed: (self fileUtils directoryName: packageDirectory))
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
        on: (self fileUtils parentDirectoryOf: packageDirectory)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
        fileName: (self fileUtils directoryName: packageDirectory))
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
        loadVersionInfo;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
        info
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
!MCFileTreeRepository methodsFor:'caching'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
cachedFileNames
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
	^ #()
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
!MCFileTreeRepository methodsFor:'descriptions'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
description
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
    ^ self class description , super description
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!MCFileTreeRepository methodsFor:'i/o'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
readStreamForFileNamed: aString do: aBlock
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
    ^ aBlock value: self directory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
writeStreamForFileNamed: aString replace: aBoolean do: aBlock
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
	self error: 'we do not open a single stream, but write multiple files'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
!MCFileTreeRepository methodsFor:'interface'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
versionWithInfo: aVersionInfo ifAbsent: errorBlock
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
	(self allFileNamesForVersionNamed: aVersionInfo name)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
		ifNotEmpty: [ :aCollection | ^ self versionFromFileNamed: aCollection first ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
	^ errorBlock value
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
!MCFileTreeRepository methodsFor:'private'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
flushCache
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
  "force properties to be reread ... if the directory exists, otherwise let nature
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
   take it's course"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
  super flushCache.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
  directory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    ifNotNil: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
      (MCFileTreeFileUtils current directoryExists: directory)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
        ifTrue: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
          repositoryProperties := nil.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
          self repositoryProperties ] ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
packageExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
  ^ self repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
    at: 'packageExtension'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    ifAbsent: [ self class defaultPackageExtension ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
parseName: aString extension: extension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
    ^ self class parseName: aString extension: extension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
propertyFileExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
  ^ self repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
    at: 'propertyFileExtension'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    ifAbsent: [ self class defaultPropertyFileExtension ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
propertyFileExtension: propertyFileExtension
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
  self class validatePropertyFileExtension: propertyFileExtension.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
  self repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
    at: 'propertyFileExtension'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
    put: propertyFileExtension.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
  self writeRepositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
!MCFileTreeRepository methodsFor:'storing'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
basicStoreVersion: aVersion
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
  self readonly
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    ifTrue: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
      ^ self
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
        error:
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
          'The filetree repository: ' , self description printString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
            , ' was created read only.' ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
  MCFileTreeWriter fileOut: aVersion on: self
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
!MCFileTreeRepository methodsFor:'testing'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
canReadFileNamed: aString
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    ^ (aString endsWith: self packageExtension)
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
        or: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
            (aString endsWith: '.tree')
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
                or: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
                    "Cypress format"
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
                    aString endsWith: '.package' ] ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
writeRepositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
  self fileUtils
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
    writeStreamFor: '.filetree'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    in: self directory
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    do: [ :fileStream | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
      | keyCount propertyCount |
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
      repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
        ifNil: [ repositoryProperties := self defaultRepositoryProperties ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
      keyCount := repositoryProperties size.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
      propertyCount := 0.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
      fileStream lineEndConvention: #'lf'.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
      fileStream nextPutAll: '{'.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
      repositoryProperties
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
        keysAndValuesDo: [ :propertyName :propertyValue | 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
          propertyCount := propertyCount + 1.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
          fileStream
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
            nextPut: $";
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
            nextPutAll: propertyName asString;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
            nextPutAll: '" : "';
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
            nextPutAll: propertyValue asString;
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
            nextPut: $";
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
            yourself.
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
          propertyCount < keyCount
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
            ifTrue: [ 
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
              fileStream
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
                nextPutAll: ',';
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
                cr ] ].
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
      fileStream nextPutAll: ' }' ]
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
!MCFileTreeRepository class methodsFor:'documentation'!
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
version_CVS
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
    ^ '$Header$'
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
! !
f86ba472fa45 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457