DataBaseSourceCodeManager.st
author Stefan Vogel <sv@exept.de>
Fri, 31 Mar 2017 15:57:47 +0200
changeset 4232 f02d9d68eabc
parent 4223 635b1741716f
child 4309 7f5421ee319d
permissions -rw-r--r--
#FEATURE by stefan class: CVSSourceCodeManager class changed: #checkinClass:fileName:directory:module:source:logMessage:force: #checkinClass:fileName:directory:module:source:logMessage:force:asBranch: prepare for branch support (unfinished yet)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2011 by Claus Gittinger
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic3' }"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
    14
"{ NameSpace: Smalltalk }"
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
    15
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
AbstractSourceCodeManager subclass:#DataBaseSourceCodeManager
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
    17
	instanceVariableNames:''
2733
e164eb9dbd69 shownInSourceCodeManager from superclass
Claus Gittinger <cg@exept.de>
parents: 2717
diff changeset
    18
	classVariableNames:'Verbose RepositoryName ModuleDBs CachedDBHandles'
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
    19
	poolDictionaries:''
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
    20
	category:'System-SourceCodeManagement'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    23
VersionInfo subclass:#DBVersionInfo
4143
dc0b0f28be0e #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4083
diff changeset
    24
	instanceVariableNames:'symbolicVersionName'
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    25
	classVariableNames:''
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    26
	poolDictionaries:''
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    27
	privateIn:DataBaseSourceCodeManager
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    28
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
    29
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!DataBaseSourceCodeManager class methodsFor:'documentation'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
copyright
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 COPYRIGHT (c) 2011 by Claus Gittinger
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
              All Rights Reserved
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 This software is furnished under a license and may be used
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
 only in accordance with the terms of that license and with the
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
 inclusion of the above copyright notice.   This software may not
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
 be provided or otherwise made available to, or used by, any
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
 other person.  No title to or ownership of the software is
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 hereby transferred.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
documentation
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
"
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    48
    A simple database sourceCodeManager, which saves versions in a relational db
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    50
    unfinished
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    [author:]
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        Claus Gittinger
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!DataBaseSourceCodeManager class methodsFor:'accessing'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    59
getRepositoryDBForModule:aModuleName
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    "internal: used when accessing a source repository.
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    61
     Return the db-name for a particular module.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    62
     If no specific db was defined for that module, return the value of
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    63
     the global (fallBack) repositoryDB.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
     Nil is returned if no repository is available." 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    66
    ModuleDBs isNil ifTrue:[^ RepositoryName].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    67
    aModuleName isNil ifTrue:[^ RepositoryName].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    68
    ^ ModuleDBs at:aModuleName ifAbsent:RepositoryName.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    "Modified: / 20-05-1998 / 16:30:12 / cg"
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    71
    "Created: / 26-12-2011 / 00:30:17 / cg"
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
knownModules
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    "return the modules, we currently know"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    77
    ModuleDBs isEmptyOrNil ifTrue:[^ #() ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    78
    ^ ModuleDBs keys
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    79
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    80
    "Modified: / 26-12-2011 / 00:48:51 / cg"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    81
!
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    83
repositoryInfoPerModule
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
    84
    "return the dictionary, which associates repository paths to module names.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    85
     If no entry is contained in this dictionary for some module,
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    86
     the default path will be used."
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    87
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    88
    ^ ModuleDBs ? #()
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    89
!
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    90
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    91
repositoryInfoPerModule:aDictionary
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
    92
    "set the dictionary, which associates repository paths to module names.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    93
     If no entry is contained in this dictionary for some module,
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    94
     the default path will be used."
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    95
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    96
    ModuleDBs := aDictionary
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    97
!
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
    98
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
    99
repositoryName
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   100
    "return the default repository"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   101
2717
45a75154a883 default
Claus Gittinger <cg@exept.de>
parents: 2706
diff changeset
   102
    ^ RepositoryName ? self defaultRepositoryName
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   103
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   104
    "Created: / 26-12-2011 / 00:34:14 / cg"
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   107
repositoryName:aDBSpec
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   108
    "set the default repository"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   109
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   110
    RepositoryName := aDBSpec.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   111
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   112
    "Created: / 26-12-2011 / 01:13:59 / cg"
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   113
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   114
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   115
utilities
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   116
    "Returns a 'utilities' object that can be used by tools."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   117
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   118
    ^ DataBaseSourceCodeManagerUtilities forManager: self
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   119
! !
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   120
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   121
!DataBaseSourceCodeManager class methodsFor:'private'!
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   122
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   123
closeAllCachedConnections
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   124
    CachedDBHandles notNil ifTrue:[
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   125
        CachedDBHandles do:[:each |
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   126
            each close
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   127
        ].
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   128
        CachedDBHandles := nil.
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   129
    ].
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   130
!
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   131
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   132
dbHandleForModule:aModuleName
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   133
    |dbName handle|
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   134
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   135
    CachedDBHandles isNil ifTrue:[
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   136
        CachedDBHandles := WeakValueDictionary new.
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   137
    ].
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   139
    handle := CachedDBHandles at:aModuleName ifAbsent:nil.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   140
    handle notNil ifTrue:[^ handle ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   141
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   142
    dbName := self getRepositoryDBForModule:aModuleName.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   143
    dbName isNil ifTrue:[
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   144
        self error:'no database'.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   145
        ^ nil
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   146
    ].
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   148
    handle := self openDB:dbName.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   149
    handle isNil ifTrue:[
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   150
        self error:'no database'.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   151
        ^ nil
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   152
    ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   153
    CachedDBHandles at:aModuleName put:handle.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   154
    ^ handle.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   155
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   156
    "Created: / 26-12-2011 / 00:59:49 / cg"
2684
4fed20db7ecb added: #repositoryPath: (fixes preference save/load problem)
vrany
parents: 2674
diff changeset
   157
!
4fed20db7ecb added: #repositoryPath: (fixes preference save/load problem)
vrany
parents: 2674
diff changeset
   158
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   159
openDB:aDBName
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   160
    |idx dbType dbSpec|
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   161
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   162
    idx := aDBName indexOf:$:.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   163
    dbType := aDBName copyTo:idx-1.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   164
    dbSpec := aDBName copyFrom:idx+1.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   165
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   166
    dbType = 'sqlite' ifTrue:[
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   167
        ^ self openSQLite:dbSpec
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   168
    ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   169
    dbType = 'odbc' ifTrue:[
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   170
        ^ self openODBC:dbSpec
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   171
    ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   172
    self error:'unsupported dbtype'
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   173
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   174
    "Created: / 26-12-2011 / 01:05:57 / cg"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   175
!
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   176
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   177
openODBC:dbSpec
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   178
    self halt:'unimplemented'.
2684
4fed20db7ecb added: #repositoryPath: (fixes preference save/load problem)
vrany
parents: 2674
diff changeset
   179
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   180
    "Created: / 26-12-2011 / 01:06:41 / cg"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   181
!
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   182
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   183
openSQLite:dbSpec
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   184
    |file con crsr tables row|
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   185
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   186
    file := dbSpec.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   187
    con := SQLiteConnection fileNamed:file.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   188
    con open.
2684
4fed20db7ecb added: #repositoryPath: (fixes preference save/load problem)
vrany
parents: 2674
diff changeset
   189
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   190
    tables := OrderedCollection new.
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   191
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   192
    SqliteError handle:[:ex |
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   193
    ] do:[
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   194
        crsr := con executeQuery:'SELECT * FROM sqlite_master WHERE type=''table'';'. 
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   195
    ].
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   196
    crsr notNil ifTrue:[
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   197
        [ 
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   198
            crsr next.
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   199
            row := crsr rowAsDictionary.
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   200
            row notNil 
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   201
        ] whileTrue:[
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   202
            tables add:(row at:'name')
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   203
        ].
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   204
    ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   205
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   206
    (tables includes:'versions') ifTrue:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   207
        Transcript showCR:'DBSourceCodeManager: table "versions" already present.'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   208
    ] ifFalse:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   209
        Transcript showCR:'DBSourceCodeManager: creating table "versions"...'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   210
        con executeQuery:'CREATE table versions (versionId primary key, name, packageId, author, timestamp, state);'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   211
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   212
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   213
    (tables includes:'packages') ifTrue:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   214
        Transcript showCR:'DBSourceCodeManager: table "packages" already present.'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   215
    ] ifFalse:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   216
        Transcript showCR:'DBSourceCodeManager: creating table "packages"...'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   217
        con executeQuery:'CREATE table packages (packageId primary key, name);'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   218
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   219
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   220
    (tables includes:'classes') ifTrue:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   221
        Transcript showCR:'DBSourceCodeManager: table "classes" already present.'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   222
    ] ifFalse:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   223
        Transcript showCR:'DBSourceCodeManager: creating table "classes"...'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   224
        con executeQuery:'CREATE table classes (id primary key, name, superclass, category, definition, packageId, versionId, methodIdList);'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   225
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   226
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   227
    (tables includes:'methods') ifTrue:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   228
        Transcript showCR:'DBSourceCodeManager: table "methods" already present.'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   229
    ] ifFalse:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   230
        Transcript showCR:'DBSourceCodeManager: creating table "methods"...'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   231
        con executeQuery:'CREATE table methods (id primary key, className, selector, source, bytecode, packageId, versionId);'.
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   232
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   233
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   234
    (tables includes:'chunks') ifTrue:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   235
        Transcript showCR:'DBSourceCodeManager: table "chunks" already present.'.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   236
    ] ifFalse:[
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   237
        Transcript showCR:'DBSourceCodeManager: creating table "chunks"...'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   238
        con executeQuery:'CREATE table chunks (id primary key, source);'.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   239
    ].
2689
0c20a2edaac8 variable renamed in: #dbHandleForModule:
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   240
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   241
    ^ con
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   242
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   243
    "Created: / 26-12-2011 / 01:06:37 / cg"
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   246
!DataBaseSourceCodeManager class methodsFor:'private-saving'!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   247
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   248
checkInClassAndCollectManifestOf:aClass db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   249
    "check in a class; write one record for the definition,
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   250
     then one for each method.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   251
     Return a manifest, which lists each save chunk's key."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   252
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   253
    ^ String streamContents:[:s |
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   254
        s nextPutLine:(self manifestOfStoredClassDefinitionOf:aClass db:dbConnection).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   255
        aClass theMetaclass selectorsAndMethodsDo:[:sel :mthd |
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   256
            (self isVersionMethodSelector:sel) ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   257
                Transcript showCR:'skip ',sel.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   258
            ] ifFalse:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   259
                s nextPutLine:(self manifestOfStoredMethod:mthd selector:sel meta:true db:dbConnection).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   260
            ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   261
        ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   262
        aClass theNonMetaclass selectorsAndMethodsDo:[:sel :mthd |
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   263
            s nextPutLine:(self manifestOfStoredMethod:mthd selector:sel meta:false db:dbConnection).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   264
        ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   265
    ].    
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   266
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   267
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   268
insertChunk:chunkData key:key db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   269
    [
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   270
        dbConnection 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   271
            executeQuery:( 'insert into chunks values (''%1'', ''%2'')'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   272
                            bindWith:key
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   273
                            with:(chunkData withCEscapes copyReplaceString:'''' withString:'''''')).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   274
    ] on:SqliteError do:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   275
        "/ already there?
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   276
        |rslt|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   277
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   278
        rslt := dbConnection executeQuery:( 'select 1 from chunks where id = ''%1''' bindWith:key).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   279
        rslt next isNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   280
            "/ not there - error
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   281
            self error:'cannot insert chunk int db'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   282
        ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   283
        "/ ok - already there.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   284
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   285
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   286
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   287
keyForChunk:aString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   288
    "chunks are keyed by their sha1 hash value.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   289
     This has the advantage, that:
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   290
        - the key alone shows if anything has changed,
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   291
        - no new record is required if a chunk uis unchanged,
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   292
        - going back to an old version automatically reuses/refers to the old chunk,
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   293
        - two independently changed methods will generate the same key"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   294
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   295
    ^ (SHA1Stream hashValueOf:aString) hexPrintString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   296
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   297
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   298
manifestOfStoredClassDefinitionOf:aClass db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   299
    "save a class definition; 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   300
     return a manifest line"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   301
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   302
    |dfn id|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   303
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   304
    dfn := aClass theNonMetaclass definition.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   305
    id := self keyForChunk:dfn.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   306
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   307
    self insertChunk:dfn key:id db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   308
    ^ 'definition: ' , id.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   309
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   310
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   311
manifestOfStoredMethod:aMethod selector:aSymbol meta:isMeta db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   312
    "save a method; 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   313
     return a manifest line"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   314
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   315
    |src id|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   316
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   317
    src := aMethod source.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   318
    id := self keyForChunk:src.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   319
    self insertChunk:src key:id db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   320
    ^ (isMeta ifTrue:'class method: ' ifFalse:'method: ') 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   321
        , aSymbol , ' ' 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   322
        , id.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   323
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   324
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   325
savePreferencesOn:aStream
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   326
    aStream nextPutLine:'DataBaseSourceCodeManager notNil ifTrue:['.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   327
    self repositoryInfoPerModule notEmptyOrNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   328
        aStream nextPutLine:'    DataBaseSourceCodeManager repositoryInfoPerModule:' , self repositoryInfoPerModule storeString , '.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   329
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   330
    (Smalltalk at:#SourceCodeManager) == self ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   331
        aStream nextPutLine:'    Smalltalk at:#SourceCodeManager put:DataBaseSourceCodeManager.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   332
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   333
    aStream nextPutLine:'    DataBaseSourceCodeManager repositoryName:' , self repositoryName storeString , '.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   334
    aStream nextPutLine:'].'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   335
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   336
    "Created: / 09-11-2006 / 15:09:25 / cg"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   337
    "Modified: / 22-12-2011 / 00:48:25 / cg"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   338
    "Modified: / 01-01-2012 / 17:02:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   339
! !
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   340
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
!DataBaseSourceCodeManager class methodsFor:'queries'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
defaultRepositoryName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
    "/ '<db-type>:[<user>[.<password>]@][<host>]<db-name>[:<table-name>]'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    ^ 'sqlite:repository.db'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
    "Created: / 22-12-2011 / 00:19:43 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
enabled
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    ^ true "/ false.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
    "Created: / 21-12-2011 / 17:53:34 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
3675
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   357
getDBNameForModule:anString
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   358
    "for now, one repository for all modules"
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   359
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   360
    ^ self repositoryName.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   361
!
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   362
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   363
initialRevisionString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   364
    ^ '0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   365
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   366
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
isContainerBased
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    "true, if the SCM uses some kind of source container (,v files).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
     False, if it is like a database or filesystem."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    ^ false
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
    "Created: / 21-12-2011 / 18:53:55 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
isResponsibleForPackage:aString
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
    ^ true.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
    "Created: / 09-07-2011 / 14:32:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    "Modified (format): / 22-12-2011 / 00:05:39 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
managerTypeName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    ^ 'DBRepository'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
    "Created: / 16-08-2006 / 11:05:56 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
nameOfVersionMethodForExtensions
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
    ^ #'extensionsVersion_DB'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    "Modified: / 22-12-2011 / 00:06:15 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
nameOfVersionMethodInClasses
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
    ^ #'version_DB'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
    "Modified: / 22-12-2011 / 00:06:21 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
repositoryNameForPackage:packageId 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
    "superclass AbstractSourceCodeManager class says that I am responsible to implement this method"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
    ^ self getDBNameForModule:(packageId upTo:$: )
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
    "Created: / 21-12-2011 / 23:07:02 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
settingsApplicationClass
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
    "link to my settings application (needed for the settings dialog"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    ^ DataBaseSourceCodeManagementSettingsAppl
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    "Created: / 19-04-2011 / 12:43:29 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
    "Modified: / 22-12-2011 / 00:06:53 / cg"
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   416
!
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   417
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   418
versionInfoClass
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   419
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   420
    ^DBVersionInfo
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
!DataBaseSourceCodeManager class methodsFor:'source code administration'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   425
basicCheckinClass:aClass fileName:classFileName directory:packageDir module:moduleDir logMessage:logMessage force:force
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   426
    "low level checkin of a class into the source repository. 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   427
     Does not deal with any version method updates.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   428
     Return true if ok, false if not."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   429
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   430
    |dbConnection author state|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   431
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   432
    aClass isPrivate ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   433
        self reportError:'refuse to check in private classes.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   434
        ^ false.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   435
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   436
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   437
    dbConnection := self dbHandleForModule:moduleDir.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   438
    [
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   439
        |collectedVersionSpec hashKey basicRevisionString revisionString 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   440
         oldRevision newRevision oldInfo symbolicVersion|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   441
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   442
        collectedVersionSpec := self checkInClassAndCollectManifestOf:aClass db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   443
        hashKey := self keyForChunk:collectedVersionSpec.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   444
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   445
        self insertChunk:collectedVersionSpec key:hashKey db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   446
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   447
        oldRevision := aClass revisionOfManager:self.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   448
        newRevision := hashKey.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   449
        oldRevision ~= newRevision ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   450
            oldInfo := aClass revisionInfoOfManager:self.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   451
            oldInfo isNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   452
                symbolicVersion := '1.0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   453
            ] ifFalse:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   454
                symbolicVersion := oldInfo symbolicVersionName ? '1.0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   455
            ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   456
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   457
            basicRevisionString := (self revisionStringFor:aClass inModule:moduleDir directory:packageDir container:classFileName revision:hashKey).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   458
            revisionString := basicRevisionString,', SymbolicVersion: ',symbolicVersion.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   459
            self updateVersionMethodOf:aClass for:revisionString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   460
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   461
            author := OperatingSystem getFullUserName.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   462
            author isEmptyOrNil ifTrue:[ author := OperatingSystem getLoginName ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   463
            author isEmptyOrNil ifTrue:[ author := 'unknown' ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   464
            state := ''.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   465
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   466
            [
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   467
                "/ (versionId primary key, name, packageId, author, timestamp)
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   468
                dbConnection 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   469
                    executeQuery:(
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   470
                        'insert into versions (key, name, packageId, author, timestamp) values (''%1'', ''%2'', ''%3'', ''%4'', ''%5'', ''%6'')'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   471
                            bindWith:newRevision
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   472
                            with:(symbolicVersion withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   473
                            with:(aClass package withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   474
                            with:(author withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   475
                            with:(UtcTimestamp now printStringIso8601)
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   476
                            with:state).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   477
            ] on:SqliteError do:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   478
                "/ already there?
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   479
                |rslt|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   480
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   481
                rslt := dbConnection executeQuery:( 'select * from versions where key = ''%1''' bindWith:newRevision).
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   482
                rslt next isNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   483
                    "/ not there - error
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   484
                    self error:'cannot insert chunk int db'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   485
                ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   486
                "/ already there.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   487
                Dialog information:'An identical version was already present in the repository.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   488
            ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   489
        ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   490
    ] ensure:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   491
        dbConnection close
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   492
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   493
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   494
    ^ true.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   495
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   496
    "
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   497
     SourceCodeManager checkinClass:Array
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   498
    "
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   499
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   500
4223
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   501
checkForExistingContainer:fileName inModule:moduleName directory:packageDirName
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   502
    "check for a container to exist. Return a boolean result."
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   503
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   504
    ^ self checkForExistingModule:moduleName directory:packageDirName
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    "Created: / 21-12-2011 / 17:56:23 / cg"
4223
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   507
    "Modified (format): / 24-02-2017 / 11:32:29 / cg"
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
checkForExistingModule:moduleDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
    "check for a package directory to be present"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   513
    ^ true.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
"/    dir := self moduleDirectoryFor:moduleDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
"/    ^ dir exists
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
    "Created: / 21-12-2011 / 18:37:28 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
checkForExistingModule:moduleDir directory:packageDir
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   522
    "check for a package directory to be present; return true, if it does"
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   523
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   524
    |handle packagePresent packageName|
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   525
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   526
    handle := self dbHandleForModule:moduleDir.
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   527
    packageName := moduleDir,':',packageDir.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   529
    packagePresent := false.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   530
    handle
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   531
        withResultForQuery: ('select 1 from packages where name = "%1"' bindWith:packageName) 
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   532
        do:[:result |
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   533
            packagePresent := result numRows > 0.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   534
        ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   535
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   536
    ^ packagePresent
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    "Created: / 21-12-2011 / 18:03:33 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
checkinClass:aClass fileName:classFileName directory:packageDir module:moduleDir source:sourceFile logMessage:logMessage force:force
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
    "Return true if ok, false if not."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   544
    self halt:'should not be called (not need for a classFile)'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
createModule:moduleDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
    "create a module directory"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   550
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
"/    |dir|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
"/    dir := self moduleDirectoryFor:moduleDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
"/    dir recursiveMakeDirectory.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
"/    ^ dir exists.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
    "Created: / 21-12-2011 / 18:38:22 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
createModule:moduleDir directory:packageDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
    "create a package directory"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   563
    |handle id name|
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   564
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   565
    id := UUID new.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   566
    name := (moduleDir,':',packageDir).
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   567
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   568
    handle := self dbHandleForModule:moduleDir.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   569
    handle
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   570
        withResultForQuery: ('insert into packages values (''%1'', ''%2'')' bindWith:id with:name) 
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   571
        do:[:result |
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   572
        ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   573
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   574
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
"/    |dir|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
"/    dir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
"/    dir recursiveMakeDirectory.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
"/    ^ dir exists.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
    "Created: / 21-12-2011 / 18:44:20 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
initialRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
    "return a string usable as initial revision string"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
    ^ self 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
        revisionStringFor:aClass 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
        inModule:moduleDir 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
        directory:packageDir 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
        container:fileName 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
        revision:'1'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
    "Created: / 21-12-2011 / 18:14:03 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   597
revisionInfoFromString:aString  
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
    "{ Pragma: +optSpace }"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
    "return a VersionInfo object filled with revision info.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
     This extracts the relevant info from aString."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
3675
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   603
    |info versionName stringWithoutDelimiters|
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   604
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   605
    stringWithoutDelimiters := aString.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   606
    (aString startsWith:'$') ifTrue:[
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   607
        stringWithoutDelimiters := aString copyButFirst:1.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   608
        (aString endsWith:'$') ifTrue:[
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   609
            stringWithoutDelimiters := aString copyButLast:1.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   610
        ].
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   611
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   612
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   613
    info := self revisionInfoFromStandardVersionString:aString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   614
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   615
    versionName := self extractKeyValueFor:'SymbolicVersion' fromRevisionString:aString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   616
    info symbolicVersionName:versionName.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   617
    ^ info
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
    "
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   620
     self revisionInfoFromString:'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826 SymbolicVersion: foo' 
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
    "
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   624
revisionLogOf:clsOrNil 
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   625
    fromRevision:rev1OrNil toRevision:rev2OrNil numberOfRevisions:limitOrNil 
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   626
    fileName:classFileName directory:packageDir module:moduleDir 
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   628
    self halt:'unimplemented'.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   629
    ^ nil
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
"/    |info log targetDir count newestRevision|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
"/    targetDir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
"/    targetDir exists ifFalse:[^ nil ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
"/    info := IdentityDictionary new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
"/    log := OrderedCollection new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
"/    count := 0.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
"/    (targetDir filesMatching:(classFileName,'_*')) do:[:eachVersionFile |
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
"/        |versionString cs versionChange info|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
"/        versionString := eachVersionFile copyFrom:(classFileName size + 2).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
"/        count := count + 1.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
"/        (newestRevision isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
"/        or:[ self isRevision:versionString after:newestRevision ]) ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
"/            newestRevision := versionString
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
"/        ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
"/        (rev1OrNil isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
"/            or:[ rev1OrNil = 0
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
"/            or:[ versionString = rev1OrNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
"/            or:[ self isRevision:versionString after:rev1OrNil ]]])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
"/        ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
"/            (rev2OrNil isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
"/                or:[ rev2OrNil = 0
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
"/                or:[ versionString = rev2OrNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
"/                or:[ self isRevision:rev2OrNil after:versionString ]]])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
"/            ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
"/                (limitOrNil isNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
"/                or:[ log size < limitOrNil ])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
"/                ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
"/                    cs := ChangeSet fromFile:(targetDir construct:eachVersionFile).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
"/                    versionChange := cs detect:[:chg | chg isMethodChange
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
"/                                                       and:[chg selector = self nameOfVersionMethodInClasses]]
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
"/                                        ifNone:nil.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
"/                    versionChange notNil ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
"/                        info := self revisionInfoFromString:versionChange source.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
"/                    ] ifFalse:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
"/                        info := VersionInfo new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
"/                    ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
"/                    info revision:versionString.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
"/                    log add:info.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
"/                ]
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
"/            ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
"/        ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
"/    ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
"/    log sort:[:a :b | self isRevision:b revision after:a revision].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
"/    info at:#revisions put:log.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
"/    info at:#numberOfRevisions put:count.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
"/    info at:#newestRevision put:newestRevision.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
"/    ^ info
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
    "Created: / 21-12-2011 / 20:39:31 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
streamForClass:aClass fileName:classFileName revision:revision directory:packageDir module:moduleDir cache:doCache
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   692
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
"/    |targetDir oldFile|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
"/    targetDir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
"/    oldFile := (targetDir construct:classFileName,'_',revision).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
"/    ^ oldFile readStream
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
    "Created: / 21-12-2011 / 20:49:01 / cg"
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   700
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   701
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   702
updateVersionMethodOf:aClass for:newRevisionString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   703
    "{ Pragma: +optSpace }"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   704
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   705
    "helper for the checkin procedure.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   706
     Update my #version_XXX method, to now return newRevisionString."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   707
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   708
    self updateVersionMethod:(self nameOfVersionMethodInClasses) of:aClass for:newRevisionString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   709
! !
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   710
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   711
!DataBaseSourceCodeManager::DBVersionInfo class methodsFor:'documentation'!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   712
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   713
copyright
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   714
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   715
 COPYRIGHT (c) 2014 by eXept Software AG
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   716
              All Rights Reserved
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   717
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   718
 This software is furnished under a license and may be used
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   719
 only in accordance with the terms of that license and with the
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   720
 inclusion of the above copyright notice.   This software may not
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   721
 be provided or otherwise made available to, or used by, any
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   722
 other person.  No title to or ownership of the software is
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   723
 hereby transferred.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   724
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   725
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   726
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   727
documentation
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   728
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   729
    In ancient times, Class used to return a Dictionary when asked for versionInfo.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   730
    This has been replaced by instances of VersionInfo and subclasses.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   731
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   732
    DBVersionInfo adds some DataBaseManager specific data.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   733
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   734
    [author:]
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   735
        cg 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   736
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   737
! !
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   738
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   739
!DataBaseSourceCodeManager::DBVersionInfo methodsFor:'accessing'!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   740
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   741
symbolicVersionName
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   742
    "return an additional symbolic version name, which is used for human readers (and not unique)"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   743
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   744
    ^ symbolicVersionName ? revision
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   745
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   746
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   747
symbolicVersionName:aString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   748
    symbolicVersionName := aString.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
!DataBaseSourceCodeManager class methodsFor:'documentation'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
version
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
   754
    ^ '$Header$'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
version_CVS
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
   758
    ^ '$Header$'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
! !
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   760