SourceCodeCache.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 29 Jan 2013 14:40:26 +0000
branchjv
changeset 3121 19723298dd2c
parent 3042 48e76977cdc3
child 3128 87750af738dc
permissions -rw-r--r--
Bugfix: reading of Java class extensions methods.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3012
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     1
"
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     3
              All Rights Reserved
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     4
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     5
 This software is furnished under a license and may be used
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     6
 only in accordance with the terms of that license and with the
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
     9
 other person.  No title to or ownership of the software is
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    10
 hereby transferred.
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    11
"
2573
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    12
"{ Package: 'stx:libbasic3' }"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    13
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    14
Object subclass:#SourceCodeCache
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    15
	instanceVariableNames:''
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    16
	classVariableNames:'Default'
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    17
	poolDictionaries:''
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    18
	category:'System-SourceCodeManagement'
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    19
!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    20
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    21
!SourceCodeCache class methodsFor:'documentation'!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    22
3012
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    23
copyright
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    24
"
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    25
 COPYRIGHT (c) 2006 by eXept Software AG
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    26
              All Rights Reserved
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    27
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    28
 This software is furnished under a license and may be used
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    29
 only in accordance with the terms of that license and with the
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    31
 be provided or otherwise made available to, or used by, any
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    32
 other person.  No title to or ownership of the software is
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    33
 hereby transferred.
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    34
"
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    35
!
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
    36
2573
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    37
documentation
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    38
"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    39
    This class represents global source code cache for caching
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    40
    class source in multiple revisions. 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    41
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    42
    It is intended to replace caching (copy-paste) code in 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    43
    CVS/Perforce source code managers in #streamForClass:...
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    44
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    45
    More features are planned in future like setting a limit
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    46
    for cache size or compressing cached files in a .zip file
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    47
    to save disk space.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    48
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    49
    [author:]
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    50
        Jan Vrany <jan.vrany@fit.cvut.cz>
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    51
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    52
    [instance variables:]
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    53
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    54
    [class variables:]
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    55
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    56
    [see also:]
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    57
        CVSSourceCodeManager class>>streamForClass:fileName:revision:directory:module:cache:
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    58
        PerforceSourceCodeManager class>>streamForClass:fileName:revision:directory:module:cache:
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    59
"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    60
! !
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    61
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    62
!SourceCodeCache class methodsFor:'accessing'!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    63
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    64
default
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    65
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    66
    Default isNil ifTrue:[Default := self new].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    67
    ^Default
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    68
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    69
    "Created: / 11-10-2011 / 23:23:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    70
! !
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    71
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    72
!SourceCodeCache methodsFor:'accessing'!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    73
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    74
streamForClass:aClass fileName:classFileName revision:revisionString repository: repositoryId module:moduleDir directory:packageDir ifAbsent: block
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    75
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    76
    "Answers a stream for given class (stored in classFileName) at
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    77
     given revision. If the stream is not in the cache, then the
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    78
     block is called with the desired cached filename as an argument.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    79
     The block should return a stream (not necesarily on the filename
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    80
     passed)."
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    81
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    82
    | file stream |
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    83
    file := self cachedFileNameForRepository: repositoryId module: moduleDir directory: packageDir container: classFileName revision: revisionString.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    84
    file exists ifTrue:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    85
        ^file readStream.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    86
    ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    87
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    88
    [ 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    89
        file directory recursiveMakeDirectory 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    90
    ] on: Error do:[:ex|
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    91
        self error: 'Cannot make cache directory: ', ex description.        
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    92
    ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    93
    stream := block valueWithOptionalArgument: file.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    94
    stream isNil ifTrue:[^nil].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    95
    stream isPositionable ifFalse:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    96
        self error: 'Source stream is not positionable!!'.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    97
    ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    98
    stream isFileStream ifTrue:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
    99
        stream pathName ~= file pathName ifTrue:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   100
            stream pathName asFilename copyTo: file.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   101
        ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   102
    ] ifFalse:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   103
        file writingFileDo:[:cache|
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   104
            [ stream atEnd ] whileFalse:[
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   105
                cache nextPutAll: (stream next: 4096)
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   106
            ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   107
        ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   108
        stream position0Based: 0.
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   109
    ].
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   110
    ^stream
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   111
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   112
    "Created: / 12-10-2011 / 09:58:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   113
! !
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   114
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   115
!SourceCodeCache methodsFor:'private'!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   116
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   117
cachedFileNameForRepository: repositoryId module: module directory: package container: container revision: revision
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   118
2632
323af4a2a7f3 changed: #cachedFileNameForRepository:module:directory:container:revision:
vrany
parents: 2573
diff changeset
   119
    | cache |
323af4a2a7f3 changed: #cachedFileNameForRepository:module:directory:container:revision:
vrany
parents: 2573
diff changeset
   120
    cache := AbstractSourceCodeManager cacheDirectoryName.
323af4a2a7f3 changed: #cachedFileNameForRepository:module:directory:container:revision:
vrany
parents: 2573
diff changeset
   121
    cache isNil ifTrue:[AbstractSourceCodeManager initCacheDirPath].
323af4a2a7f3 changed: #cachedFileNameForRepository:module:directory:container:revision:
vrany
parents: 2573
diff changeset
   122
    cache := AbstractSourceCodeManager cacheDirectoryName.
323af4a2a7f3 changed: #cachedFileNameForRepository:module:directory:container:revision:
vrany
parents: 2573
diff changeset
   123
    ^ cache asFilename
2573
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   124
        "/ repositoryId "/ TODO: Ignored for now, discuss with Claus
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   125
        / module
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   126
        / (package copyReplaceAll:$/ with: Filename separator) 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   127
        / (container, '_' , revision)
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   128
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   129
    "
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   130
        SourceCodeCache default 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   131
            cachedFileNameForRepository: 'CVS01'
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   132
            module: 'stx' 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   133
            directory: 'goodies/sunit'
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   134
            container: 'TestCase.st' 
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   135
            revision: '1234'
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   136
    "
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   137
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   138
    "Created: / 12-10-2011 / 09:51:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   139
! !
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   140
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   141
!SourceCodeCache class methodsFor:'documentation'!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   142
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   143
version
3121
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   144
    ^ '$Header: SourceCodeCache.st 1909 2012-03-31 00:14:49Z vranyj1 $'
2573
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   145
!
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   146
3dae12b94fde initial checkin
vrany
parents:
diff changeset
   147
version_CVS
3011
1997ff6e7e55 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2632
diff changeset
   148
    ^ '§Header: /cvs/stx/stx/libbasic3/SourceCodeCache.st,v 1.2 2011/12/01 10:52:43 vrany Exp §'
3012
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
   149
!
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
   150
3121
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   151
version_HG
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   152
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   153
    ^ '$Changeset: <not expanded> $'
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   154
!
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   155
3012
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
   156
version_SVN
3121
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   157
    ^ '§Id: SourceCodeCache.st 1909 2012-03-31 00:14:49Z vranyj1 §'
3012
4f40b8304d54 Added InvalidChange
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3011
diff changeset
   158
! !
3121
19723298dd2c Bugfix: reading of Java class extensions methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3042
diff changeset
   159