MCRepositoryGroup.st
author Claus Gittinger <cg@exept.de>
Sat, 01 Sep 2018 17:33:15 +0200
changeset 1092 8d0ea96a3d72
parent 1046 2c62588b53ed
permissions -rw-r--r--
initial checkin class: MCFileTreeFileSystemUtils class: MCFileTreeFileSystemUtils class added:17 methods

"{ Encoding: utf8 }"

"{ Package: 'stx:goodies/monticello' }"

"{ NameSpace: Smalltalk }"

Object subclass:#MCRepositoryGroup
	instanceVariableNames:'repositories'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Monticello-Versioning'
!

MCRepositoryGroup class instanceVariableNames:'default'

"
 No other class instance variables are inherited by this class.
"
!

MCRepositoryGroup comment:'A singleton class, holds the list of repositories. Can look for a requested VersionInfo among its repositories.'
!


!MCRepositoryGroup class methodsFor:'as yet unclassified'!

default
    default isNil ifTrue: [default := self new].
    ^default

    "Modified: / 04-04-2012 / 11:04:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

new
	^ self basicNew initialize
! !

!MCRepositoryGroup methodsFor:'as yet unclassified'!

addRepository: aRepository
    ((repositories includes: aRepository) or: [aRepository == MCCacheRepository default])
	ifFalse: [
	    repositories add: aRepository.
	    self class default addRepository: aRepository.
	    self changed: #repositories
    ].

    "Modified: / 04-12-2011 / 09:04:24 / cg"
!

flushRepositories
    "/ cg: mhmh - what should we do here ?
    "/ called by UserPreferences >> mcRepositories:

    self initializeRepositoriesFromUserSettings

    "Created: / 01-12-2011 / 20:35:13 / cg"
    "Modified (comment): / 24-01-2012 / 09:51:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

includes: aRepository
	^ self repositories includes: aRepository
!

includesVersionNamed: aString
	self repositoriesDo: [:ea | (ea includesVersionNamed: aString) ifTrue: [^ true]].
	^ false
!

initialize
    "/ repositories _ OrderedCollection new
    self initializeRepositoriesFromUserSettings

    "Modified: / 04-12-2011 / 09:07:23 / cg"
!

initializeRepositoriesFromUserSettings
    |litArray reps dir rep|

    litArray := UserPreferences current mcRepositories.
    litArray == false ifTrue:[
        "there is no entry in the UserPreferences, so false - the default value - is returned"
        reps := #().
    ] ifFalse:[
        reps := litArray decodeAsLiteralArray.
    ].
    repositories := reps asOrderedCollection.

    ((dir := Filename downloadsDirectory) notNil and:[dir exists]) ifTrue:[
        rep := MCDirectoryRepository directory:dir pathName.
        repositories add:rep
    ].
    ((dir := Smalltalk packageDirectoryForPackageId:'stx:goodies/monticello_packages') notNil and:[dir exists]) ifTrue:[
        rep := MCDirectoryRepository directory:dir pathName.
        repositories add:rep
    ].

    "Created: / 04-12-2011 / 09:06:53 / cg"
    "Modified: / 04-04-2012 / 11:08:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

removeRepository: aRepository
	repositories remove: aRepository ifAbsent: [].
	self changed: #repositories
!

repositories
    ^ ((OrderedSet with:MCCacheRepository default)
                addAll:repositories;
                yourself)
            asOrderedCollection
        select: [ :ea | ea isValid ]

    "Modified: / 04-12-2011 / 09:04:42 / cg"
!

repositories: anOrderedCollection

    repositories := anOrderedCollection copy.
    "Ensure, that repositories contain cache as first"
    repositories remove: MCCacheRepository default ifAbsent:[].
    repositories addFirst: MCCacheRepository default.
    self == self class default ifTrue:[
        UserPreferences current mcRepositories: repositories asArray literalArrayEncoding
    ].

    "Created: / 04-04-2012 / 11:05:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

repositoriesDo: aBlock
	self repositories do: [:ea | [aBlock value: ea] on: Error do: []]
! !

!MCRepositoryGroup methodsFor:'searching'!

versionWithInfo: aVersionInfo
	^self versionWithInfo: aVersionInfo ifNone: [ self error: 'Could not find version ', aVersionInfo name printString,'. Maybe you need to add a repository?' ]
!

versionWithInfo: aVersionInfo ifNone: aBlock
	self repositoriesDo: [:ea | (ea versionWithInfo: aVersionInfo) ifNotNilDo: [:v | ^ v]].
	^aBlock value
! !

!MCRepositoryGroup class methodsFor:'documentation'!

version
    ^ '$Header$'
! !