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