DataBaseSourceCodeManager.st
author Claus Gittinger <cg@exept.de>
Thu, 14 Jun 2018 17:02:40 +0200
changeset 4329 f1a534377d1e
parent 4309 7f5421ee319d
child 4413 934abbca7d85
permissions -rw-r--r--
#UI_ENHANCEMENT by cg class: SourceCodeManagerUtilities class definition changed: #checkoutClass:askForRevision:askForMerge:askForConfirmation: optout the "only version methods are different..." dialog
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,
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   293
        - no new record is required if a chunk uis unchanged,
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
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   298
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   299
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   300
manifestOfStoredClassDefinitionOf:aClass db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   301
    "save a class definition; 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   302
     return a manifest line"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   303
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   304
    |dfn id|
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 := aClass theNonMetaclass definition.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   307
    id := self keyForChunk:dfn.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   308
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   309
    self insertChunk:dfn key:id db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   310
    ^ 'definition: ' , id.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   311
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   312
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   313
manifestOfStoredMethod:aMethod selector:aSymbol meta:isMeta db:dbConnection
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   314
    "save a method; 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   315
     return a manifest line"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   316
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   317
    |src id|
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 := aMethod source.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   320
    id := self keyForChunk:src.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   321
    self insertChunk:src key:id db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   322
    ^ (isMeta ifTrue:'class method: ' ifFalse:'method: ') 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   323
        , aSymbol , ' ' 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   324
        , id.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   325
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   326
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   327
savePreferencesOn:aStream
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   328
    aStream nextPutLine:'DataBaseSourceCodeManager notNil ifTrue:['.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   329
    self repositoryInfoPerModule notEmptyOrNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   330
        aStream nextPutLine:'    DataBaseSourceCodeManager repositoryInfoPerModule:' , self repositoryInfoPerModule storeString , '.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   331
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   332
    (Smalltalk at:#SourceCodeManager) == self ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   333
        aStream nextPutLine:'    Smalltalk at:#SourceCodeManager put:DataBaseSourceCodeManager.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   334
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   335
    aStream nextPutLine:'    DataBaseSourceCodeManager repositoryName:' , self repositoryName storeString , '.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   336
    aStream nextPutLine:'].'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   337
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   338
    "Created: / 09-11-2006 / 15:09:25 / cg"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   339
    "Modified: / 22-12-2011 / 00:48:25 / cg"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   340
    "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
   341
! !
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   342
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
!DataBaseSourceCodeManager class methodsFor:'queries'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
defaultRepositoryName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    "/ '<db-type>:[<user>[.<password>]@][<host>]<db-name>[:<table-name>]'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
    ^ 'sqlite:repository.db'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    "Created: / 22-12-2011 / 00:19:43 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
enabled
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
    ^ true "/ false.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    "Created: / 21-12-2011 / 17:53:34 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
3675
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   359
getDBNameForModule:anString
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   360
    "for now, one repository for all modules"
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   361
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   362
    ^ self repositoryName.
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
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   365
initialRevisionString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   366
    ^ '0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   367
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   368
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
isContainerBased
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    "true, if the SCM uses some kind of source container (,v files).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
     False, if it is like a database or filesystem."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
    ^ false
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
    "Created: / 21-12-2011 / 18:53:55 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
isResponsibleForPackage:aString
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
    ^ true.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
    "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
   382
    "Modified (format): / 22-12-2011 / 00:05:39 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
managerTypeName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
    ^ 'DBRepository'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    "Created: / 16-08-2006 / 11:05:56 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
nameOfVersionMethodForExtensions
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    ^ #'extensionsVersion_DB'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
    "Modified: / 22-12-2011 / 00:06:15 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
nameOfVersionMethodInClasses
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
    ^ #'version_DB'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
    "Modified: / 22-12-2011 / 00:06:21 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
repositoryNameForPackage:packageId 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
    "superclass AbstractSourceCodeManager class says that I am responsible to implement this method"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
    ^ self getDBNameForModule:(packageId upTo:$: )
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
    "Created: / 21-12-2011 / 23:07:02 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
settingsApplicationClass
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    "link to my settings application (needed for the settings dialog"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    ^ DataBaseSourceCodeManagementSettingsAppl
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    "Created: / 19-04-2011 / 12:43:29 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
    "Modified: / 22-12-2011 / 00:06:53 / cg"
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   418
!
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   419
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   420
versionInfoClass
3598
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
    ^DBVersionInfo
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
!DataBaseSourceCodeManager class methodsFor:'source code administration'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   427
basicCheckinClass:aClass fileName:classFileName directory:packageDir module:moduleDir logMessage:logMessage force:force
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   428
    "low level checkin of a class into the source repository. 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   429
     Does not deal with any version method updates.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   430
     Return true if ok, false if not."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   431
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   432
    |dbConnection author state|
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
    aClass isPrivate ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   435
        self reportError:'refuse to check in private classes.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   436
        ^ false.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   437
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   438
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   439
    dbConnection := self dbHandleForModule:moduleDir.
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
        |collectedVersionSpec hashKey basicRevisionString revisionString 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   442
         oldRevision newRevision oldInfo symbolicVersion|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   443
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   444
        collectedVersionSpec := self checkInClassAndCollectManifestOf:aClass db:dbConnection.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   445
        hashKey := self keyForChunk:collectedVersionSpec.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   446
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   447
        self insertChunk:collectedVersionSpec key:hashKey db:dbConnection.
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
        oldRevision := aClass revisionOfManager:self.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   450
        newRevision := hashKey.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   451
        oldRevision ~= newRevision ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   452
            oldInfo := aClass revisionInfoOfManager:self.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   453
            oldInfo isNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   454
                symbolicVersion := '1.0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   455
            ] ifFalse:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   456
                symbolicVersion := oldInfo symbolicVersionName ? '1.0'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   457
            ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   458
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   459
            basicRevisionString := (self revisionStringFor:aClass inModule:moduleDir directory:packageDir container:classFileName revision:hashKey).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   460
            revisionString := basicRevisionString,', SymbolicVersion: ',symbolicVersion.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   461
            self updateVersionMethodOf:aClass for:revisionString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   462
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   463
            author := OperatingSystem getFullUserName.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   464
            author isEmptyOrNil ifTrue:[ author := OperatingSystem getLoginName ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   465
            author isEmptyOrNil ifTrue:[ author := 'unknown' ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   466
            state := ''.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   467
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   468
            [
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   469
                "/ (versionId primary key, name, packageId, author, timestamp)
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   470
                dbConnection 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   471
                    executeQuery:(
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   472
                        '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
   473
                            bindWith:newRevision
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   474
                            with:(symbolicVersion withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   475
                            with:(aClass package withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   476
                            with:(author withCEscapes copyReplaceString:'''' withString:'''''')
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   477
                            with:(UtcTimestamp now printStringIso8601)
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   478
                            with:state).
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   479
            ] on:SqliteError do:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   480
                "/ already there?
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   481
                |rslt|
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   482
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   483
                rslt := dbConnection executeQuery:( 'select * from versions where key = ''%1''' bindWith:newRevision).
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   484
                rslt next isNil ifTrue:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   485
                    "/ not there - error
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   486
                    self error:'cannot insert chunk int db'
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   487
                ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   488
                "/ already there.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   489
                Dialog information:'An identical version was already present in the repository.'.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   490
            ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   491
        ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   492
    ] ensure:[
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   493
        dbConnection close
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   494
    ].
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   495
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   496
    ^ true.
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
    "
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   499
     SourceCodeManager checkinClass:Array
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
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   502
4223
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   503
checkForExistingContainer:fileName inModule:moduleName directory:packageDirName
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   504
    "check for a container to exist. Return a boolean result."
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   505
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   506
    ^ self checkForExistingModule:moduleName directory:packageDirName
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
    "Created: / 21-12-2011 / 17:56:23 / cg"
4223
635b1741716f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4143
diff changeset
   509
    "Modified (format): / 24-02-2017 / 11:32:29 / cg"
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
checkForExistingModule:moduleDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
    "check for a package directory to be present"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   515
    ^ true.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
"/    dir := self moduleDirectoryFor:moduleDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
"/    ^ dir exists
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    "Created: / 21-12-2011 / 18:37:28 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
checkForExistingModule:moduleDir directory:packageDir
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   524
    "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
   525
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   526
    |handle packagePresent packageName|
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   527
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   528
    handle := self dbHandleForModule:moduleDir.
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   529
    packageName := moduleDir,':',packageDir.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   531
    packagePresent := false.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   532
    handle
3678
a4ef1d7abbc4 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3675
diff changeset
   533
        withResultForQuery: ('select 1 from packages where name = "%1"' bindWith:packageName) 
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   534
        do:[:result |
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   535
            packagePresent := result numRows > 0.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   536
        ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   537
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   538
    ^ packagePresent
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
    "Created: / 21-12-2011 / 18:03:33 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
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
   544
    "Return true if ok, false if not."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
4309
7f5421ee319d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4223
diff changeset
   546
    self halt:'should not be called (not needed for a classFile)'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
createModule:moduleDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
    "create a module directory"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   552
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
"/    |dir|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
"/    dir := self moduleDirectoryFor:moduleDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
"/    dir recursiveMakeDirectory.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
"/    ^ dir exists.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
    "Created: / 21-12-2011 / 18:38:22 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
createModule:moduleDir directory:packageDir
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
    "create a package directory"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
2687
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   565
    |handle id name|
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   566
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   567
    id := UUID new.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   568
    name := (moduleDir,':',packageDir).
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   569
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   570
    handle := self dbHandleForModule:moduleDir.
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   571
    handle
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   572
        withResultForQuery: ('insert into packages values (''%1'', ''%2'')' bindWith:id with:name) 
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   573
        do:[:result |
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   574
        ].
9336f40dbf61 class definition
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   575
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   576
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
"/    |dir|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
"/    dir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
"/    dir recursiveMakeDirectory.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
"/    ^ dir exists.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
    "Created: / 21-12-2011 / 18:44:20 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
initialRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
    "return a string usable as initial revision string"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
    ^ self 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
        revisionStringFor:aClass 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
        inModule:moduleDir 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
        directory:packageDir 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
        container:fileName 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
        revision:'1'
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
    "Created: / 21-12-2011 / 18:14:03 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   599
revisionInfoFromString:aString  
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
    "{ Pragma: +optSpace }"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
    "return a VersionInfo object filled with revision info.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
     This extracts the relevant info from aString."
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
3675
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   605
    |info versionName stringWithoutDelimiters|
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   606
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   607
    stringWithoutDelimiters := aString.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   608
    (aString startsWith:'$') ifTrue:[
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   609
        stringWithoutDelimiters := aString copyButFirst:1.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   610
        (aString endsWith:'$') ifTrue:[
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   611
            stringWithoutDelimiters := aString copyButLast:1.
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   612
        ].
71459bb0865d class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3664
diff changeset
   613
    ].
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   614
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   615
    info := self revisionInfoFromStandardVersionString:aString.
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
    versionName := self extractKeyValueFor:'SymbolicVersion' fromRevisionString:aString.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   618
    info symbolicVersionName:versionName.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   619
    ^ info
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
    "
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   622
     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
   623
    "
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   626
revisionLogOf:clsOrNil 
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   627
    fromRevision:rev1OrNil toRevision:rev2OrNil numberOfRevisions:limitOrNil 
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   628
    fileName:classFileName directory:packageDir module:moduleDir 
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   630
    self halt:'unimplemented'.
3598
96223506d5ff class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3356
diff changeset
   631
    ^ nil
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
"/    |info log targetDir count newestRevision|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
"/    targetDir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
"/    targetDir exists ifFalse:[^ nil ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
"/    info := IdentityDictionary new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
"/    log := OrderedCollection new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
"/    count := 0.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
"/    (targetDir filesMatching:(classFileName,'_*')) do:[:eachVersionFile |
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
"/        |versionString cs versionChange info|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
"/        versionString := eachVersionFile copyFrom:(classFileName size + 2).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
"/        count := count + 1.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
"/        (newestRevision isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
"/        or:[ self isRevision:versionString after:newestRevision ]) ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
"/            newestRevision := versionString
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
"/        ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
"/        (rev1OrNil isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
"/            or:[ rev1OrNil = 0
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
"/            or:[ versionString = rev1OrNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
"/            or:[ self isRevision:versionString after:rev1OrNil ]]])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
"/        ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
"/            (rev2OrNil isNil 
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
"/                or:[ rev2OrNil = 0
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
"/                or:[ versionString = rev2OrNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
"/                or:[ self isRevision:rev2OrNil after:versionString ]]])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
"/            ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
"/                (limitOrNil isNil
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
"/                or:[ log size < limitOrNil ])
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
"/                ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
"/                    cs := ChangeSet fromFile:(targetDir construct:eachVersionFile).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
"/                    versionChange := cs detect:[:chg | chg isMethodChange
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
"/                                                       and:[chg selector = self nameOfVersionMethodInClasses]]
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
"/                                        ifNone:nil.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
"/                    versionChange notNil ifTrue:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
"/                        info := self revisionInfoFromString:versionChange source.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
"/                    ] ifFalse:[
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
"/                        info := VersionInfo new.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
"/                    ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
"/                    info revision:versionString.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
"/                    log add:info.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
"/                ]
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
"/            ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
"/        ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
"/    ].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
"/    log sort:[:a :b | self isRevision:b revision after:a revision].
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
"/    info at:#revisions put:log.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
"/    info at:#numberOfRevisions put:count.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
"/    info at:#newestRevision put:newestRevision.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
"/    ^ info
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
    "Created: / 21-12-2011 / 20:39:31 / cg"
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
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
   694
    self halt:'unimplemented'.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
"/    |targetDir oldFile|
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
"/
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
"/    targetDir := self packageDirectoryForModule:moduleDir package:packageDir.
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
"/    oldFile := (targetDir construct:classFileName,'_',revision).
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
"/    ^ oldFile readStream
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
    "Created: / 21-12-2011 / 20:49:01 / cg"
3664
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   702
!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   703
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   704
updateVersionMethodOf:aClass for:newRevisionString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   705
    "{ Pragma: +optSpace }"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   706
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   707
    "helper for the checkin procedure.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   708
     Update my #version_XXX method, to now return newRevisionString."
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   709
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   710
    self updateVersionMethod:(self nameOfVersionMethodInClasses) of:aClass for: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
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   713
!DataBaseSourceCodeManager::DBVersionInfo class methodsFor:'documentation'!
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   714
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   715
copyright
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 (c) 2014 by eXept Software AG
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   718
              All Rights Reserved
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   719
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   720
 This software is furnished under a license and may be used
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   721
 only in accordance with the terms of that license and with the
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   722
 inclusion of the above copyright notice.   This software may not
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   723
 be provided or otherwise made available to, or used by, any
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   724
 other person.  No title to or ownership of the software is
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   725
 hereby transferred.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   726
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   727
!
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
documentation
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
    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
   732
    This has been replaced by instances of VersionInfo and subclasses.
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   733
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   734
    DBVersionInfo adds some DataBaseManager specific data.
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
    [author:]
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   737
        cg 
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   738
"
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   739
! !
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
!DataBaseSourceCodeManager::DBVersionInfo methodsFor:'accessing'!
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
symbolicVersionName
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   744
    "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
   745
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   746
    ^ symbolicVersionName ? revision
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
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   749
symbolicVersionName:aString
f31558d6bb42 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 3598
diff changeset
   750
    symbolicVersionName := aString.
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
! !
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
!DataBaseSourceCodeManager class methodsFor:'documentation'!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
version
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
   756
    ^ '$Header$'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
!
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
version_CVS
4083
9139523ea829 #OTHER by mawalch
mawalch
parents: 3678
diff changeset
   760
    ^ '$Header$'
2674
7612087d1a82 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
! !
3356
6250bc835354 class: DataBaseSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 2843
diff changeset
   762