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