CVSSourceCodeManager.st
author Claus Gittinger <cg@exept.de>
Fri, 25 Aug 2006 19:42:16 +0200
changeset 1736 2c44d15f1a0f
parent 1733 487d05e097da
child 1778 5c84a32c9fe4
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     1
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     3
              All Rights Reserved
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     4
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     5
 This software is furnished under a license and may be used
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     6
 only in accordance with the terms of that license and with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     8
 be provided or otherwise made available to, or used by, any
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
     9
 other person.  No title to or ownership of the software is
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    10
 hereby transferred.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    11
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    12
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    13
"{ Package: 'stx:libbasic3' }"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    14
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    15
AbstractSourceCodeManager subclass:#CVSSourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    16
	instanceVariableNames:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    17
	classVariableNames:'Verbose CVSRoot CVSWorkDirectory RemoteCVS CVSBinDir
1485
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
    18
		CVSModuleRoots CMD_checkout CVSTempDir DisabledModules
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
    19
		CVSCommandSemaphore'
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    20
	poolDictionaries:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    21
	category:'System-SourceCodeManagement'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    22
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    23
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    24
!CVSSourceCodeManager class methodsFor:'documentation'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    25
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    26
copyright
130
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    27
"
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    28
 COPYRIGHT (c) 1995 by Claus Gittinger
807
f84a9377278e Fix .stxCvsDummy / import stuff.
Stefan Vogel <sv@exept.de>
parents: 806
diff changeset
    29
              All Rights Reserved
130
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    30
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    31
 This software is furnished under a license and may be used
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    32
 only in accordance with the terms of that license and with the
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    33
 inclusion of the above copyright notice.   This software may not
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    34
 be provided or otherwise made available to, or used by, any
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    35
 other person.  No title to or ownership of the software is
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    36
 hereby transferred.
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    37
"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    38
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    39
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    40
documentation
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    41
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    42
    SourceCodeManager which accesses the sourcecode through cvs.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    43
    It requires the shell environment variable CVSROOT to be set
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    44
    to the top of the repository tree. (or alternatively, the CVSRoot
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    45
    variable being set by a private.rc file).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    46
    Under that top, for each module (especially the stx module itself), 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    47
    a subdirectory containing that modules directories must exist.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    48
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    49
    If not specified otherwise, the module defaults to 'stx'. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    50
    If a class has its home in another module, it has to be compiled
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    51
    with a corresponding entry in the package string (see below).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    52
    Within a module, classes are organized in classlibraries, and the corresponding
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    53
    source code is found in various subdirectories of CVSROOT. The directories
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    54
    name can also be provided by the package string - if not, it defaults to the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    55
    libraries name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    56
    The package string controls all this, and is REQUIRED in order for the sourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    57
    to be able to retrieve a classes source.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    58
    The package strings format is:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    59
        '...any infotext....(sourceCodeInfo)'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    60
    the sourceCOdeInfo consists of multiple entries, separated by colons.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    61
    The following formats are allowed:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    62
        (libraryName)                   - module defaults to 'stx'; directory to the name of the library
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    63
        (foo/bar/x)                     - module defaults to 'stx'; dir is 'foo/bar/x'; library name defaults to x
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    64
        (module:directory:libname)      - specifies all components
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    65
    The first formats are intermediate, for backward compatibility. We urge everyone
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    66
    to use the last format (by changing the Make.proto files and add a -P flag to
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    67
    the stc compiler flags (see libbasic/Make.proto as an example).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    68
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    69
    Notice, that the sourceCodeManager is (currently) only consulted, if no
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    70
    source subdirectory exists, or no source file is found there. If it does exist,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    71
    that one is supposed to contain an up-to-date version of the classes source
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    72
    (this is temporary - in the future the probe order will be reversed, trying
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    73
     the source repository first).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    74
    The source directory is required for systems which do NO source code control.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    75
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    76
    Setup:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    77
        - make certain, that the commands 'cvs' and 'co' are available on your system.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    78
        - add setup for the CVSROOT environment variable to your .bashrc / .login / .profile
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    79
        - Make certain that either no local source directory exists, or it is empty or it contains
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    80
          only source code for files NOT found in the repository (this will not be required in future versions).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    81
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    82
    Caveat:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    83
        currently, the rcs container is accessed directly, since cvs mangles the files ident-string and
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    84
        thus does not correctly recreate the original file (all source is offset by some characters w.r.t. the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    85
        compiled file).
1736
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    86
        Therefore, server-mode CVS is not supported.
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    87
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    88
    Comment:
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    89
        The code here is a copy-paste mess; it definitely needs some cleanup...
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    90
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    91
    [class variables:]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    92
        CVSTempDir      <String | nil>  where a directory tree is
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    93
                                        generated temporarily for checkin/checkout
1407
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
    94
                                        (default is nil -> systems tmp-dir)
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    95
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    96
        CVSRoot         <String>        the CVS root. Imported from the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    97
                                        CVSROOT shell variable.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    98
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
    99
        RemoteCVS       <Boolean>       if true, remote CVS access is used
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   100
                                        (i.e. via a socket to a CVS server).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   101
                                        if false, disk access is used;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   102
                                        files in CVSRoot must be accessable.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   103
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   104
        CVSWorkDirectory                not yet supported/implemented.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   105
                                        PLANNED: name of a directory hierarchy,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   106
                                        which is kept in sync with the current
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   107
                                        version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   108
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   109
        CVSBinDir                       where the CVS commands are found
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   110
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   111
        CVSModuleRoots  <Directory>     per-module roots.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   112
                                        If empty, or no entry is found for a
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   113
                                        module is found, CVSRoot is used.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   114
                                        Otherwise, specifies a per-module CVSRoot.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   115
                                        (allows multiple CVS hierarchies)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   116
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   117
    [author:]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   118
        Claus Gittinger
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   119
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   120
    [see also:]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   121
        ( cvs manual page :man: cvs )
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   122
        ( Coding style used in Smalltalk/X classes :html: programming/codingStyle.html )
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   123
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   124
    [restrictions:]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   125
        commercial version only
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   126
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   127
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   128
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   129
examples
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   130
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   131
    Default setup:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   132
        This setup accesses all sources from a single repository: /files/CVS.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   133
        Actually, this is the setup as used within eXept for development.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   134
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   135
            CVSSourceCodeManager initializeForRepository:'/files/CVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   136
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   137
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   138
    Dual repository setup:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   139
        This accesses all ST/X standard classes' source from the /files/CVS
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   140
        repository, while your private classes are created in and accessed from
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   141
        '/files/myCVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   142
        This setup is useful, if you need revision management on the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   143
        ST/X standard classes as well as for your own classes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   144
        In order to do this, you should (manually) check in all ST/X classes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   145
        into a private repository WHILE preserving the original revision numbers.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   146
        A shell-procedure similar to:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   147
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   148
            for i in lib*/*.st
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   149
            do
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   150
                id=`ident $i`
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   151
                set $id
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   152
                rev=$3
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   153
                ci -r$rev <CVSDIR>/$i $i
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   154
            done
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   155
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   156
        should acomplish this.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   157
        Now, that you have all ST/X files in your own repository (and with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   158
        original revision numbers), access is possible by defining CVSROOT
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   159
        as above. However, in order to have your own files being stored in
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   160
        another repository, you have to give a per-module repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   161
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   162
        This defines the default repository (for your containers):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   163
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   164
            CVSSourceCodeManager initializeForRepository:'/files/myCVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   165
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   166
        and this specifies a repository for all standard ST/X classes (in the stx module):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   167
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   168
            CVSSourceCodeManager repositoryName:'/files/CVS' forModule:'stx'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   169
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   170
    Dual repository setup for eXept customers with a full licence
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   171
    (these can access our in-house master repository, for convenient software update
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   172
     and uploading):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   173
        All class sourcees under the 'stx' module (i.e. packageID is 'stx:*') can be accessed
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   174
        from the eXept cvs server (i.e. CVSROOT for them is :pserver:userName@exept.de:/files/CVS/stc).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   175
        All local classes should be maintained in and accessed from a local cvs repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   176
        such as '/files/myCVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   177
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   178
        Then, tell the CVSSourceCodeManager about this;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   179
        first the default repository:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   180
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   181
            CVSSourceCodeManager initializeForRepository:'/files/myCVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   182
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   183
        and the repository for all standard ST/X classes (in the stx module):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   184
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   185
            CVSSourceCodeManager repositoryName:':pserver:userName@exept.de:/files/CVS' forModule:'stx'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   186
"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   187
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   188
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   189
!CVSSourceCodeManager class methodsFor:'initialization'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   190
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   191
forgetDisabledModules
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   192
    DisabledModules := nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   193
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   194
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   195
initCommands
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   196
    CMD_checkout := 'cvs -n checkout %1'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   197
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   198
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   199
initialize
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   200
    "check if $CVSROOT (the shell variable) or CVSRoot (the smalltalk global)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   201
     is set, check if cvs commands can be executed and install myself as the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   202
     SourceCodeManager if this works out ok"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   203
1494
d381ec86037e do not try to find cvs
Michael Beyl <mb@exept.de>
parents: 1493
diff changeset
   204
    | s f top ok cvsCmd cmdName |
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   205
1485
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   206
    CVSCommandSemaphore := Semaphore new:10.
1465
b28d95c4f867 *** empty log message ***
sr
parents: 1464
diff changeset
   207
    RemoteCVS := true.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   208
    DisabledModules := nil.
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   209
    CVSModuleRoots isNil ifTrue:[
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   210
        CVSModuleRoots := Dictionary new.
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   211
    ].
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   212
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   213
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   214
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   215
    "/ if CVSROOT is non-empty and both cvs and co are available
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   216
    "/ as commands, assume this system uses a cvs source code management.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   217
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   218
    CVSRoot ifNil:[
1407
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   219
        CVSRoot := OperatingSystem getEnvironment:'CVSROOT'.
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   220
        CVSRoot ifNil:[
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   221
            "disabled since $CVSROOT is not set"
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   222
            ^ self
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   223
        ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   224
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   225
1494
d381ec86037e do not try to find cvs
Michael Beyl <mb@exept.de>
parents: 1493
diff changeset
   226
    cvsCmd := 'cvs'.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   227
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   228
    CVSBinDir size > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   229
        OperatingSystem isMSDOSlike ifTrue:[
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   230
            cvsCmd := 'cvs.exe'.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   231
            cmdName := CVSBinDir asFilename constructString:cvsCmd.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   232
            ( OperatingSystem canExecuteCommand:cmdName) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   233
                CVSBinDir := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   234
            ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   235
                CVSBinDir := CVSBinDir asFilename pathName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   236
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   237
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   238
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   239
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   240
    CVSBinDir size == 0 ifTrue:[
1494
d381ec86037e do not try to find cvs
Michael Beyl <mb@exept.de>
parents: 1493
diff changeset
   241
        ok := OperatingSystem canExecuteCommand:cvsCmd.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   242
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   243
        ok := OperatingSystem canExecuteCommand:(CVSBinDir asFilename constructString:cvsCmd).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   244
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   245
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   246
    ok ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   247
        'CVSSourceCodeManager [warning]: disabled since no >> cvs << command found' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   248
        ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   249
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   250
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   251
    UseWorkTree := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   252
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   253
    CacheDirectoryName ifNil:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   254
        self initCacheDirPath.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   255
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   256
    CachingSources ifNil:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   257
        CachingSources := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   258
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   259
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   260
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   261
    "/ check if there is an stx directory there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   262
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   263
    ((f := CVSRoot asFilename) isDirectory 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   264
    and:[(top := f construct:'stx') isDirectory
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   265
    and:[top isReadable]]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   266
        RemoteCVS := false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   267
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   268
1493
079d236141ef leave SourceCodeManager uninitialized
Michael Beyl <mb@exept.de>
parents: 1489
diff changeset
   269
"/    Smalltalk at:#SourceCodeManager put:self.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   270
    DefaultManager := self.    
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   271
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   272
    ('CVSSourceCodeManager [info]: repository CVSROOT is ''' , CVSRoot , '''.') infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   273
    RemoteCVS ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   274
        'CVSSourceCodeManager [info]: assume remote CVS mode (no stx found in CVSROOT)' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   275
        ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   276
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   277
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   278
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   279
    "/ optionally set the WorkTreeDirectoryName from $STX_WORKTREE;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   280
    "/ if non-nil, a working tree is kept there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   281
    "/ and updated/commited files are not removed.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   282
    "/ If you use a regular (make-) tree, 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   283
    "/ set WorkTreeDirectoryName (or the environment variable) to that.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   284
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   285
    "/ this is not yet finished.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   286
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   287
    s := OperatingSystem getEnvironment:'STX_WORKTREE'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   288
    s notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   289
        WorkTreeDirectoryName := s.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   290
        UseWorkTree := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   291
    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   292
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   293
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   294
     AbstractSourceCodeManager initialize
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   295
     CVSSourceCodeManager initialize
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   296
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   297
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   298
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   299
     CVSRoot := '/files/CVS'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   300
     AbstractSourceCodeManager initialize.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   301
     CVSSourceCodeManager initialize.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   302
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   303
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   304
    "Created: / 4.11.1995 / 19:14:38 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   305
    "Modified: / 19.12.1995 / 14:25:46 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   306
    "Modified: / 5.12.2001 / 18:52:00 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   307
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   308
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   309
initializeForRepository:aDirectoryName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   310
    "set the global CVSROOT directory (i.e. the repositories name).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   311
     And reinitialize. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   312
     Can be used from the launcher to change/configure the repository."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   313
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   314
    self repositoryName:aDirectoryName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   315
    AbstractSourceCodeManager initialize.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   316
    CVSSourceCodeManager initialize.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   317
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   318
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   319
     CVSSourceCodeManager initializeForRepository:'/files/CVS'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   320
     CVSSourceCodeManager initializeForRepository:'ibm:/files/CVS'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   321
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   322
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   323
    "Created: / 13.8.1997 / 17:20:57 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   324
    "Modified: / 25.9.1997 / 12:28:05 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   325
    "Modified: / 2.11.1997 / 17:08:27 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   326
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   327
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   328
!CVSSourceCodeManager class methodsFor:'accessing'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   329
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   330
cvsBinDirectory
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   331
    "return the name of the bin repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   332
     Thats the directory, where the cvs / cvs.exe command is found."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   333
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   334
    ^ CVSBinDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   335
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   336
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   337
cvsBinDirectory:aString
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   338
    "set the name of the bin repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   339
     Thats the directory, where the cvs / cvs.exe command is found."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   340
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   341
    aString isEmpty ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   342
        CVSBinDir := aString
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   343
    ] ifFalse:[        
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   344
        CVSBinDir := aString asFilename pathName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   345
        (CVSBinDir endsWith:Filename separator) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   346
            CVSBinDir := CVSBinDir copyWithoutLast:1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   347
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   348
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   349
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   350
1407
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   351
cvsTmpDirectory
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   352
    "return the name of the tmp repository.
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   353
     Thats the directory, where temporary files are created for checkin/checkout.
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   354
     If nil, the systems default tempDirectory is used."
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   355
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   356
    ^ (CVSTempDir ? Filename tempDirectory pathName)
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   357
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   358
    "
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   359
     CVSTempDir := nil   
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   360
    "
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   361
!
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   362
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   363
cvsTmpDirectory:aPathNameString
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   364
    "set the name of the tmp repository.
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   365
     Thats the directory, where temporary files are created for checkin/checkout.
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   366
     If nil, the systems default tempDirectory is used."
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   367
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   368
    CVSTempDir := aPathNameString
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   369
!
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   370
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   371
knownModules
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   372
    "return the modules, we currently know"
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   373
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   374
    ^ CVSModuleRoots keys 
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   375
!
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   376
1482
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   377
knownRepositories
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   378
    "return the modules, we currently know"
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   379
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   380
    ^ CVSModuleRoots values copyWith:CVSRoot 
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   381
!
1492af4820e0 cvs history / show user name
Stefan Vogel <sv@exept.de>
parents: 1481
diff changeset
   382
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   383
repositoryInfoPerModule
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   384
    "return the dictionary, which associates CVSRoots to module names.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   385
     If no entry is contained in this dictionary for some module,
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   386
     the default cvsRoot (CVSRoot) will be used."
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   387
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   388
    ^ CVSModuleRoots ? #()
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   389
!
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   390
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   391
repositoryInfoPerModule:aDictionary
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   392
    "set the dictionary, which associates CVSRoots to module names.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   393
     If no entry is contained in this dictionary for some module,
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   394
     the default cvsRoot (CVSRoot) will be used."
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   395
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   396
    CVSModuleRoots := aDictionary
1526
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
   397
!
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
   398
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   399
repositoryName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   400
    "return the name of the global repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   401
     This is used, if no per-module repository is defined."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   402
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   403
    ^ CVSRoot
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   404
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   405
    "Created: 14.9.1996 / 13:22:05 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   406
    "Modified: 19.9.1997 / 06:12:02 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   407
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   408
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   409
repositoryName:aDirectoryName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   410
    "set the name of the repository;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   411
     thats the name of the global CVSROOT directory, which is used 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   412
     if no specific repository was defined for a module.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   413
     Can be used from an rc-script, to override the CVSROOT shell 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   414
     variable setting."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   415
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   416
    DisabledModules := nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   417
    CVSRoot := aDirectoryName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   418
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   419
    "Created: 14.9.1996 / 13:22:24 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   420
    "Modified: 19.9.1997 / 06:10:31 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   421
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   422
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   423
repositoryName:aRepositoryName forModule:aModuleName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   424
    "set the CVSROOT directory which provides the sources for all 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   425
     classes in a particular module.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   426
     This can be used from an rc-script, to specify a repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   427
     for a particular module.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   428
     If left unspecified, the global (i.e. fallBack) repository is used."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   429
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   430
    DisabledModules := nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   431
    CVSModuleRoots at:aModuleName put:aRepositoryName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   432
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   433
    "Modified: 19.9.1997 / 06:09:40 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   434
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   435
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   436
repositoryNameForModule:aModuleName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   437
    "return the CVSROOT directory which provides the sources for all 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   438
     classes in a particular module.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   439
     Nil is returned for unspecified moduleRoots; in this case, 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   440
     the global (i.e. fallBack) repository will be used for source access."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   441
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   442
    ^ CVSModuleRoots at:aModuleName ifAbsent:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   443
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   444
    "Modified: 19.9.1997 / 06:09:40 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   445
    "Created: 19.9.1997 / 06:13:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   446
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   447
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   448
repositoryNamesPerModule
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   449
    "return the dictionary, which associates CVSRoots to module names.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   450
     If no entry is contained in this dictionary for some module,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   451
     the default cvsRoot (CVSRoot) will be used."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   452
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   453
    self obsoleteMethodWarning:'use repositoryInfoPerModule'.
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
   454
    ^ CVSModuleRoots 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   455
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   456
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   457
repositoryNamesPerModule:aDictionary
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   458
    "set the dictionary, which associates CVSRoots to module names.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   459
     If no entry is contained in this dictionary for some module,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   460
     the default cvsRoot (CVSRoot) will be used."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   461
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
   462
    self obsoleteMethodWarning:'use repositoryInfoPerModule:'.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   463
    CVSModuleRoots := aDictionary
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   464
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   465
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   466
!CVSSourceCodeManager class methodsFor:'private'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   467
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   468
checkOut:relativeFilename module:moduleDir in:tempdir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   469
    "checkout realtiveFilename in tempdir"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   470
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   471
    |cmd|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   472
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   473
    cmd := 'checkout -l ' , relativeFilename.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   474
    ^ self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   475
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   476
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   477
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   478
        log:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   479
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   480
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   481
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   482
      self checkOut:'stx/libbasic/Integer.st' asFilename in:'/tmp' asFilename
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   483
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   484
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   485
    "Created: / 18.1.2000 / 20:30:01 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   486
    "Modified: / 18.1.2000 / 20:35:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   487
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   488
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   489
checkinTroubleDialog:title message:message log:log abortable:abortable option:optionTitle
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   490
    "trouble checking in - open a dialog"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   491
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   492
    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   493
        checkinTroubleDialog:title 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   494
        message:message 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   495
        log:log 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   496
        abortable:abortable 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   497
        option:optionTitle 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   498
        option2:nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   499
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   500
    "Created: 10.12.1995 / 17:34:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   501
    "Modified: 12.9.1996 / 02:39:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   502
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   503
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   504
checkinTroubleDialog:title message:message log:log abortable:abortable option:optionTitle option2:optionTitle2
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   505
    ^self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   506
        checkinTroubleDialog:title 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   507
        message:message 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   508
        log:log 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   509
        abortable:abortable 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   510
        option:optionTitle 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   511
        option2:optionTitle2 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   512
        option3:nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   513
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   514
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   515
checkinTroubleDialog:title message:message log:log abortable:abortable option:optionTitle option2:optionTitle2 option3:optionTitle3
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   516
    "trouble checking in - open a dialog"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   517
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   518
    |l box list listView optionPressed option2Pressed option3Pressed|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   519
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   520
    l := log collect:[:line | line withTabsExpanded].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   521
    list := SelectionInList with:l.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   522
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   523
    box := Dialog new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   524
    box label:(title).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   525
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   526
    (box addTextLabel:message) borderWidth:0.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   527
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   528
    listView := SelectionInListView on:list.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   529
    listView disable.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   530
    listView height:200.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   531
    box addComponent:(HVScrollableView forView:listView miniScrollerH:true) tabable:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   532
    box addVerticalSpace.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   533
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   534
    abortable ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   535
        box addAbortButton
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   536
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   537
    optionTitle notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   538
        box addOkButton:(Button label:optionTitle action:[optionPressed := true. box hide]).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   539
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   540
    optionTitle2 notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   541
        box addOkButton:(Button label:optionTitle2 action:[option2Pressed := true. box hide]).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   542
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   543
    optionTitle3 notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   544
        box addOkButton:(Button label:optionTitle3 action:[option3Pressed := true. box hide]).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   545
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   546
    box addOkButton.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   547
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   548
    box extent:(box preferredExtent).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   549
    box minExtent:box extent.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   550
    box maxExtent:box extent.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   551
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   552
    box open.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   553
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   554
    box destroy.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   555
    optionPressed == true ifTrue:[^ #option].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   556
    option2Pressed == true ifTrue:[^ #option2].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   557
    option3Pressed == true ifTrue:[^ #option3].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   558
    ^ box accepted
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   559
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   560
    "Created: 9.9.1996 / 19:12:45 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   561
    "Modified: 12.9.1996 / 02:39:10 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   562
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   563
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   564
createEntryFor:pathInRepository module:aModule in:aDirectory revision:rev date:date special:special overwrite:overwrite
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   565
    "create an CVS/Repository and CVS/Entries entry for filename. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   566
     If the path does not exist, it will be created
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   567
     If overwrite is true, an existing Entry will be overwritten.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   568
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   569
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   570
    |filename cvsRoot cvsDir name entries firstPart s path|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   571
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   572
    filename := pathInRepository asFilename.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   573
    cvsDir := (aDirectory asFilename construct:'CVS') recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   574
    entries := cvsDir construct:'Entries'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   575
    name := filename baseName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   576
    firstPart := '/', name, '/'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   577
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   578
    s := entries readStreamOrNil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   579
    s isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   580
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   581
        "/ no Repository yet, create one
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   582
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   583
        |index root|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   584
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   585
        cvsRoot := self getCVSROOTForModule:aModule.
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
   586
        root := self repositoryTopDirectoryFromCVSRoot:cvsRoot.
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
   587
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   588
        "/ create Repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   589
        "/ (notice, contents must be a Unix filename ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   590
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   591
        s := (cvsDir construct:'Repository') writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   592
        path := Filename components:filename directory name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   593
        path := path asStringWith:$/.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   594
        s nextPutLine:(root, '/', path).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   595
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   596
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   597
        "/ make new Entries file.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   598
        s := entries writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   599
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   600
        |newName newStream line|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   601
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   602
        newName := Filename newTemporaryIn:cvsDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   603
        newStream := newName writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   604
        [(line := s nextLine) notNil] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   605
            (line findString:firstPart) ~= 1 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   606
                "/ we have found an entry for ourself.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   607
                "/ If we do not want to overwrite it, clean up everything and return.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   608
                overwrite ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   609
                    newName remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   610
                    newStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   611
                    s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   612
                    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   613
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   614
                newStream nextPutLine:line
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   615
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   616
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   617
        newName renameTo:entries.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   618
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   619
        s := newStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   620
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   621
    s nextPutLine:firstPart, rev, '/', date, '/', special, '/'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   622
    s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   623
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   624
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   625
        self createEntryFor:'foo/xxx/yyy' in:'foo/xxx' revision:'1.22' date:'dummy' special:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   626
        self createEntryFor:'foo/xxx/yyy' in:'foo/xxx' revision:'3.44' date:'new dummy' special:'special'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   627
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   628
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
   629
    "Created: / 19-09-1997 / 06:21:02 / cg"
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
   630
    "Modified: / 07-01-1998 / 14:15:35 / stefan"
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
   631
    "Modified: / 21-06-2006 / 12:13:30 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   632
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   633
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   634
createLocalDirectory:packageDir inModule:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   635
    "create a local working directory for module/package.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   636
     To speed up things, we checkout the file '.cvsignore', to create
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   637
     the whole tree. If the file is not present, we will create it as empty file.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   638
     Return the name of a temporary directory containing the package"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   639
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   640
    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   641
        createLocalDirectory:packageDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   642
        inModule:moduleDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   643
        with:'.cvsignore'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   644
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   645
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   646
     self createLocalDirectory:'libbasic' inModule:'stx'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   647
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   648
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   649
    "Created: / 23.7.1999 / 19:14:28 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   650
    "Modified: / 26.7.1999 / 17:43:35 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   651
    "Modified: / 18.1.2000 / 20:56:19 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   652
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   653
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   654
createLocalDirectory:packageDir inModule:moduleDir with:fileToCheckout
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   655
    "create a local working directory for module/package, and checkout the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   656
     given file there.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   657
     Return the name of a temporary directory containing the package, or nil"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   658
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   659
    |path absolutePath tempdir workingDir unixPath|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   660
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   661
    path := (moduleDir asFilename construct:packageDir) construct:fileToCheckout.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   662
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   663
    tempdir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   664
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   665
        ('CVSSourceCodeManager [error]: no tempDir - cannot checkout') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   666
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   667
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   668
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   669
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   670
        OperatingSystem isUNIXlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   671
            unixPath := path name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   672
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   673
            OperatingSystem isVMSlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   674
                self error:'VMS case not yet implemented'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   675
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   676
            unixPath := path name copy replaceAll:$\ with:$/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   677
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   678
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   679
        (self checkOut:unixPath module:moduleDir in:tempdir) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   680
            "dummy file does not exist, so create it"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   681
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   682
            absolutePath := tempdir construct:path.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   683
            absolutePath directory recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   684
            "now create the file"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   685
            (absolutePath writeStream close) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   686
                ('CVSSourceCodeManager [error]: cannot create dummy') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   687
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   688
                ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   689
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   690
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   691
            "now create the dummy file in the repository"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   692
            (self import:moduleDir in:tempdir) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   693
                ('CVSSourceCodeManager [error]: cannot import dummy') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   694
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   695
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   696
            "remove the path, so that checkout works"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   697
            (tempdir construct:moduleDir) recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   698
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   699
            "checkout the dummy, the intermediate directories will be created"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   700
            (self checkOut:unixPath module:moduleDir in:tempdir) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   701
                ('CVSSourceCodeManager [warning]: import failed (to create working dir)') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   702
"/false ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   703
"/                "/ manually create it
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   704
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   705
"/                (tempdir construct:unixPath) directory recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   706
"/                workingDir := tempdir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   707
"/                unixPath asFilename directory components do:[:each |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   708
"/                    self executeCVSCommand:('add ' , each) module:moduleDir inDirectory:workingDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   709
"/                    workingDir := workingDir construct:each.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   710
"/                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   711
"/                (absolutePath writeStream close) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   712
"/                    ('CVSSourceCodeManager [error]: cannot create dummy') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   713
"/                    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   714
"/                    ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   715
"/                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   716
"/                self executeCVSCommand:('add ' , fileToCheckout) module:moduleDir inDirectory:workingDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   717
"/                self executeCVSCommand:('commit ' , fileToCheckout) module:moduleDir inDirectory:workingDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   718
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   719
"/                ^ tempdir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   720
"/].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   721
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   722
                ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   723
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   724
        ].
1406
725a5b2866f2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1405
diff changeset
   725
    ] ifCurtailed:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   726
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   727
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   728
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   729
    ^ tempdir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   730
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   731
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   732
     self createLocalDirectory:'libbasic' inModule:'stx'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   733
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   734
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   735
    "Modified: / 26.7.1999 / 17:43:35 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   736
    "Created: / 18.1.2000 / 20:55:52 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   737
    "Modified: / 18.1.2000 / 20:56:45 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   738
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   739
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   740
createTempDirectory:packageDir forModule:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   741
    "create a temp directory for checking out"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   742
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   743
    |tempdir dir|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   744
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   745
    "/ if CVSTempDir isNil, use current.
1407
f8314a9474cf tempDir handling
penk
parents: 1406
diff changeset
   746
    tempdir := Filename newTemporaryIn:(self cvsTmpDirectory).
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   747
    tempdir exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   748
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   749
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   750
    OperatingSystem errorSignal handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   751
        'SourceCodemanager [error]: cannot create temporary directory' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   752
        ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   753
    ] do:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   754
        tempdir makeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   755
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   756
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   757
    moduleDir notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   758
        dir := tempdir construct:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   759
        dir makeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   760
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   761
        packageDir notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   762
            dir := dir construct:packageDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   763
            dir recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   764
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   765
        dir exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   766
            tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   767
            'SourceCodemanager [error]: cannot create temporary directory' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   768
            ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   769
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   770
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   771
    ^ tempdir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   772
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   773
    "self createTempDirectory:'fooPackage' forModule:'fooModule'"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   774
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   775
    "Created: 9.12.1995 / 19:14:35 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   776
    "Modified: 19.12.1995 / 16:13:02 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   777
    "Modified: 18.8.1997 / 19:06:52 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   778
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   779
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   780
cvsTimeString:absoluteTime
1388
6fae02877da5 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 1387
diff changeset
   781
    "convert a Timestamp to a string suitable for the CVS/Entries file:
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   782
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   783
                         123456789012345678901234
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   784
                         Tue Dec 19 20:56:26 1995
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   785
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   786
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   787
    |date time stream|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   788
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   789
    date := absoluteTime asDate.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   790
    time := absoluteTime asTime.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   791
    stream := WriteStream on:(String new:24).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   792
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   793
    (#('Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat' 'Sun') at:(date dayInWeek)) printOn:stream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   794
    stream space.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   795
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   796
    (#('Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun' 'Jul' 'Aug' 'Sep' 'Oct' 'Nov' 'Dec') 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   797
        at:(date month)) printOn:stream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   798
    stream space.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   799
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   800
    date day printOn:stream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   801
    stream space.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   802
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   803
    time print24HourFormatOn: stream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   804
    stream space.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   805
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   806
    date year printOn:stream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   807
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   808
    ^ stream contents
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   809
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   810
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   811
    "
1388
6fae02877da5 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 1387
diff changeset
   812
     CVSSourceCodeManager cvsTimeString:(Timestamp now)
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   813
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   814
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   815
    "Modified: 20.12.1995 / 11:03:32 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   816
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   817
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   818
executeCVSCommand:cvsCommand module:moduleName inDirectory:dir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   819
    "execute command and prepend cvs command name and global options.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   820
     if dir ~= nil, execute command in that directory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   821
     This also leads to a log-entry to be added to cvs's logfile."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   822
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   823
    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   824
        executeCVSCommand:cvsCommand 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   825
        module:moduleName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   826
        inDirectory:dir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   827
        log:true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   828
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   829
    "Modified: / 20.5.1998 / 16:07:28 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   830
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   831
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   832
executeCVSCommand:cvsCommand module:moduleName inDirectory:dir log:doLog
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   833
    "execute command and prepend cvs command name and global options.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   834
     if dir ~= nil, execute command in that directory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   835
     The doLog argument, if false supresses a logEntry to be added 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   836
     in the cvs log file (used when reading / extracting history)"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   837
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   838
    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   839
        executeCVSCommand:cvsCommand module:moduleName inDirectory:dir log:doLog 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   840
        pipe:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   841
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   842
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   843
executeCVSCommand:cvsCommand module:moduleName inDirectory:dirArg log:doLog errorTo:errorStream 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   844
    ^ self 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   845
        executeCVSCommand:cvsCommand
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   846
        module:moduleName
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   847
        inDirectory:dirArg
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   848
        log:doLog
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   849
        outputTo:nil
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   850
        errorTo:errorStream
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   851
!
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   852
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   853
executeCVSCommand:cvsCommand module:moduleName inDirectory:dirArg log:doLog outputTo:outStream errorTo:errorStream
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   854
    "execute command and prepend cvs command name and global options.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   855
     execute command in the dirArg directory.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   856
     The doLog argument, if false supresses a logEntry to be added 
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   857
     in the cvs log file (used when reading / extracting history)"
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   858
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   859
    |command cvsRoot rslt ok pathOfDir p dir|
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   860
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   861
    dirArg notNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   862
        dir := dirArg asFilename.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   863
        pathOfDir := dir pathName.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   864
    ].
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   865
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   866
    cvsRoot := self getCVSROOTForModule:moduleName.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   867
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   868
    command := CVSBinDir.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   869
    command size > 0 ifTrue:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   870
        (command endsWith:Filename separator) ifFalse:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   871
            command := command , (Filename separator)
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   872
        ]
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   873
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   874
    command := command , 'cvs'.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   875
    (command includes:Character space) ifTrue:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   876
        command := '"' , command , '"'        
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   877
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   878
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   879
    doLog ifFalse:[
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
   880
"/ cvs  1.11.14 fails with -l option
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
   881
"/        command := command , ' -l'.
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   882
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   883
    command := command , ' -d "', cvsRoot, '" ', cvsCommand.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   884
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   885
    Verbose == true ifTrue:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   886
        ('CVSSourceCodeManager [info]: executing: ' , command , ' [in ' , pathOfDir , ']') infoPrintCR.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   887
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   888
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   889
    Processor isDispatching ifFalse:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   890
        rslt := ok := OperatingSystem executeCommand:command 
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   891
                                inputFrom:nil 
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   892
                                outputTo:outStream 
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   893
                                errorTo:errorStream 
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   894
                                auxFrom:nil
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   895
                                inDirectory:pathOfDir
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   896
                                lineWise:false
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   897
                                onError:[:status| false].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   898
    ] ifTrue:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   899
        p := [
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   900
            rslt := ok := OperatingSystem executeCommand:command
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   901
                                inputFrom:nil 
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   902
                                outputTo:outStream 
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   903
                                errorTo:errorStream 
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   904
                                auxFrom:nil
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   905
                                inDirectory:pathOfDir
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   906
                                lineWise:false
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   907
                                onError:[:status| false].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   908
        ] fork.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   909
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   910
        (p waitUntilTerminatedWithTimeout:300) ifTrue:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   911
            ('CVSSourceCodeManager [info]: command timeout: ' , command) errorPrintCR.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   912
            ^ false
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   913
        ]. 
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   914
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   915
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   916
    ok ifFalse:[
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   917
        ('CVSSourceCodeManager [info]: command failed: ' , command) errorPrintCR.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   918
    ].
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   919
    ^ rslt
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   920
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
   921
    "Modified: / 23-04-1996 / 15:24:00 / stefan"
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
   922
    "Created: / 20-05-1998 / 16:06:34 / cg"
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
   923
    "Modified: / 04-07-2006 / 16:47:53 / cg"
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   924
!
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
   925
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   926
executeCVSCommand:cvsCommand module:moduleName inDirectory:dirArg log:doLog pipe:doPipe
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   927
    "execute command and prepend cvs command name and global options.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   928
     execute command in the dirArg directory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   929
     The doLog argument, if false supresses a logEntry to be added 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   930
     in the cvs log file (used when reading / extracting history)"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   931
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   932
    |command cvsRoot rslt ok pathOfDir p|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   933
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   934
    dirArg notNil ifTrue:[    
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   935
        pathOfDir := dirArg asFilename pathName.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
   936
    ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   937
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   938
    cvsRoot := self getCVSROOTForModule:moduleName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   939
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   940
    command := CVSBinDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   941
    command size > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   942
        (command endsWith:Filename separator) ifFalse:[
1387
a3611183c69d separatorString / separator
Claus Gittinger <cg@exept.de>
parents: 1373
diff changeset
   943
            command := command , (Filename separator)
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   944
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   945
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   946
    command := command , 'cvs'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   947
    (command includes:Character space) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   948
        command := '"' , command , '"'        
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   949
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   950
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   951
    doLog ifFalse:[
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
   952
"/ cvs  1.11.14 fails with -l option
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
   953
"/        command := command , ' -l'.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   954
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   955
    command := command , ' -d "', cvsRoot, '" ', cvsCommand.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   956
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   957
    Verbose == true ifTrue:[
1508
06d441988888 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1507
diff changeset
   958
        ('CVSSourceCodeManager [info]: executing: ' , command , ' [in ' , (pathOfDir?'.') , ']') infoPrintCR.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   959
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   960
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   961
    doPipe ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   962
        rslt := PipeStream readingFrom:command inDirectory:pathOfDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   963
        ok := rslt notNil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   964
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   965
        Processor isDispatching ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   966
            rslt := ok := OperatingSystem executeCommand:command inDirectory:pathOfDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   967
        ] ifTrue:[
1485
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   968
            CVSCommandSemaphore critical:[
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   969
                p := [
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   970
                    rslt := ok := OperatingSystem executeCommand:command inDirectory:pathOfDir.
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   971
                ] fork.
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   972
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   973
                (p waitUntilTerminatedWithTimeout:300) ifTrue:[
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   974
                    ('CVSSourceCodeManager [info]: command timeout: ' , command) errorPrintCR.
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   975
                    ^ false
569481145695 limit: max 10 simult. CVS-executions in parallel
Claus Gittinger <cg@exept.de>
parents: 1484
diff changeset
   976
                ]. 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   977
            ]. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   978
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   979
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   980
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   981
    ok ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   982
        ('CVSSourceCodeManager [info]: command failed: ' , command) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   983
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   984
    ^ rslt
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   985
1508
06d441988888 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1507
diff changeset
   986
    "Modified: / 23-04-1996 / 15:24:00 / stefan"
06d441988888 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1507
diff changeset
   987
    "Created: / 20-05-1998 / 16:06:34 / cg"
06d441988888 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1507
diff changeset
   988
    "Modified: / 24-07-2006 / 15:45:00 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   989
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   990
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   991
getCVSROOTForModule:aModuleName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   992
    "internal: used when accessing a source repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   993
     Return the CVSROOT which provides the sources for a particular module.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   994
     If no specific root was defined for that module, return the value of
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   995
     the global (fallBack) CVSRoot.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   996
     Nil is returned if no repository is available." 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   997
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   998
    CVSModuleRoots isNil ifTrue:[^ CVSRoot].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
   999
    aModuleName isNil ifTrue:[^ CVSRoot].
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  1000
    ^ CVSModuleRoots at:aModuleName ifAbsent:CVSRoot.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1001
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1002
    "Created: / 19.9.1997 / 06:18:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1003
    "Modified: / 20.5.1998 / 16:30:12 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1004
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1005
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1006
getCVSROOTsPerModule
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1007
    "return a dictionary, which associates CVSRoots to modules" 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1008
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1009
    ^ CVSModuleRoots ? #()
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1010
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1011
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1012
import:moduleDir in:tempdir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1013
    "import the existing tree in tempdir as repository"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1014
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1015
    |cmd|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1016
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1017
    cmd := 'import -m "checkin from stx browser" . initialV initialR'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1018
    ^ self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1019
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1020
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1021
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1022
        log:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1023
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1024
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1025
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1026
      |f d|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1027
      f := 'stefan/dummy/fasel'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1028
      d := '/tmp/tt' asFilename construct:f.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1029
      d directory recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1030
      d writeStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1031
      self import:'stefan' in:'/tmp/tt/stefan' asFilename
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1032
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1033
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1034
    "Created: / 23.7.1999 / 19:19:34 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1035
    "Modified: / 26.7.1999 / 17:46:29 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1036
    "Modified: / 18.1.2000 / 20:21:32 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1037
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1038
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1039
readRevisionLogEntryFromStream:inStream
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1040
    "read and parse a single revision info-entry from the cvs log output.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1041
     Return nil on end.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1042
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1043
     The returned information is a structure (IdentityDictionary)
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1044
     filled with:
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1045
              #revision              -> the revision string
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1046
              #author                -> who checked that revision into the repository
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1047
              #date                  -> when was it checked in
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1048
              #state                 -> the RCS state
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1049
              #numberOfChangedLines  -> the number of changed line w.r.t the previous
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1050
              #logMessage            -> the checkIn log message
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1051
    "
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1052
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1053
    |revLine1 revLine2 record s line atEnd|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1054
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1055
    atEnd := false.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1056
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1057
    revLine1 := inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1058
    [revLine1 notNil and:[(revLine1 startsWith:'revision ') not]]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1059
        whileTrue:[inStream atEnd ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1060
                    revLine1 := nil
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1061
                   ] ifFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1062
                    revLine1 := inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1063
                  ]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1064
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1065
    revLine2 := inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1066
    (revLine1 notNil and:[revLine2 notNil]) ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1067
        record := IdentityDictionary new.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1068
        record at:#revision put:(revLine1 asCollectionOfWords at:2).
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1069
        "/ decompose date/author/state etc.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1070
        (revLine2 asCollectionOfSubstringsSeparatedBy:$;) do:[:info |
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1071
            |subEntry|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1072
            subEntry := info withoutSeparators.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1073
            #('date:'   #date
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1074
              'author:' #author 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1075
              'state:'  #state 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1076
              'lines:'  #numberOfChangedLines
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1077
             ) pairWiseDo:[:word :key |
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1078
                s := subEntry restAfter:word withoutSeparators:true.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1079
                s notNil ifTrue:[record at:key put:s.].                        
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1080
            ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1081
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1082
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1083
        "first revision does not hav a 'lines:' entry"
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1084
        (record includesKey:#numberOfChangedLines) ifFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1085
            record at:#numberOfChangedLines put:''
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1086
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1087
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1088
        s := nil.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1089
        line := inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1090
        [atEnd or:[line isNil or:[line startsWith:'--------']]] whileFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1091
            (line startsWith:'==========') ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1092
                atEnd := true.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1093
            ] ifFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1094
                (line withoutSpaces = '.') ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1095
                    line := '*** empty log message ***'
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1096
                ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1097
                s isNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1098
                    s := line
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1099
                ] ifFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1100
                    s := s , Character cr asString , line.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1101
                ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1102
                line := inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1103
            ]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1104
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1105
        record at:#logMessage put:s.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1106
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1107
    ^record.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1108
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1109
!
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  1110
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1111
releaseAndRemove:tempdir module:moduleDir outputTo:outputFilename
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1112
    "cleanup; release tree towards cvs and remove the temporary tree"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1113
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1114
    |cmd redirect|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1115
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1116
    outputFilename isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1117
        OperatingSystem isMSDOSlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1118
            redirect := 'NUL'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1119
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1120
            redirect := '/dev/null'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1121
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1122
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1123
        redirect := outputFilename name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1124
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1125
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1126
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1127
    "/ release it towards cvs
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1128
    "/
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
  1129
    cmd := 'release > ' , redirect.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1130
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1131
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1132
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1133
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1134
        log:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1135
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1136
"/        'CVSMGR: failed to release: ' errorPrint. cmd errorPrintNL.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1137
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1138
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1139
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1140
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1141
    "Modified: / 23.4.1996 / 14:29:49 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1142
    "Created: / 19.9.1997 / 06:28:02 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1143
    "Modified: / 20.5.1998 / 16:44:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1144
    "Modified: / 3.9.1999 / 14:51:29 / ps"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1145
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1146
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1147
repositoryTopDirectoryFromCVSRoot
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1148
    "return the top of the repository. This handles remote CVS connections
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1149
     as well"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1150
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1151
    CVSRoot isNil ifTrue:[^ nil].
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1152
    ^ self repositoryTopDirectoryFromCVSRoot:CVSRoot.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1153
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1154
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1155
     CVSSourceCodeManager repositoryTopDirectory
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1156
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1157
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1158
    "Modified: / 16-01-1998 / 17:33:31 / stefan"
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1159
    "Created: / 21-06-2006 / 12:06:18 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1160
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1161
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1162
repositoryTopDirectoryFromCVSRoot:aString
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1163
    "return the top of the repository (without remote prefix)"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1164
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1165
    |idx|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1166
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1167
    idx := aString indexOf:$/.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1168
    idx <= 1 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1169
        ^ aString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1170
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1171
    ^ aString copyFrom:idx.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1172
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1173
    "
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1174
     CVSSourceCodeManager repositoryTopDirectoryFromCVSRoot:':pserver:stefan@ibm.exept.de:/archiv/cvs'
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1175
     CVSSourceCodeManager repositoryTopDirectoryFromCVSRoot:'exept:/files/CVS'
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1176
     CVSSourceCodeManager repositoryTopDirectoryFromCVSRoot:'/archiv/cvs'
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1177
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1178
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1179
    "Modified: / 16-01-1998 / 17:32:03 / stefan"
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  1180
    "Created: / 21-06-2006 / 12:05:53 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1181
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1182
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1183
revisionStringFromLog:log entry:entry forClass:aClass
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1184
    "given a log entry, extract a revision string"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1185
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1186
    |oldRev idx special|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1187
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1188
    oldRev := aClass revisionString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1189
    special := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1190
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1191
    oldRev notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1192
        idx := oldRev lastIndexOf:$[.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1193
        idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1194
            idx := oldRev indexOf:$[ startingAt:idx+1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1195
            idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1196
                special := ' ' , (oldRev copyFrom:idx).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1197
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1198
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1199
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1200
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1201
    ^ '$Header: ' , (log at:#container) ,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1202
      ' ' , (entry at:#revision) ,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1203
      ' ' , (entry at:#date) , 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1204
      ' ' , (entry at:#author) , 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1205
      ' ' , (entry at:#state) ,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1206
      ' $' ,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1207
      special
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1208
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1209
    "Created: 16.9.1996 / 20:24:14 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1210
    "Modified: 3.3.1997 / 22:31:51 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1211
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1212
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1213
updatedRevisionStringOf:aClass forRevision:newRevision with:originalVersionString
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1214
    "update a revision string"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1215
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1216
    |idx leftPart rightPart vsnString newVsn|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1217
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1218
    "/ search for ,v
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1219
    idx := originalVersionString indexOfSubCollection:'.st,v'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1220
    idx == 0 ifTrue:[^ nil].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1221
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1222
    leftPart := originalVersionString copyTo:(idx - 1 + 5).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1223
    rightPart := (originalVersionString copyFrom:(idx + 5)) withoutSpaces.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1224
    idx := rightPart indexOfSeparator.
1484
0ea77138c0c5 fix revision string
Claus Gittinger <cg@exept.de>
parents: 1482
diff changeset
  1225
"/    idx == 0 ifTrue:[^ nil].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1226
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1227
    vsnString := rightPart copyTo:idx - 1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1228
    rightPart := rightPart copyFrom:idx + 1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1229
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1230
    newRevision isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1231
        (vsnString endsWith:'m') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1232
             "/ alread a modified class
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1233
"/            ('already modified: ' , vsnString) printNL.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1234
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1235
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1236
        newVsn := vsnString , 'm'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1237
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1238
        newVsn := newRevision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1239
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1240
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1241
    ^ leftPart , ' ' , newVsn , ' ' , rightPart
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1242
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1243
    "Created: 7.12.1995 / 20:23:38 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1244
    "Modified: 16.9.1996 / 20:24:28 / cg"
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  1245
!
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  1246
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  1247
use_rlog
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1248
    ^ true "/ OperatingSystem isMSWINDOWSlike not
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1249
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1250
    "Modified: / 04-07-2006 / 18:05:43 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1251
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1252
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1253
!CVSSourceCodeManager class methodsFor:'queries'!
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1254
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1255
managerTypeName
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1256
    ^ 'CVS'
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1257
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1258
    "Created: / 16-08-2006 / 11:05:56 / cg"
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1259
! !
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1260
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1261
!CVSSourceCodeManager class methodsFor:'source code access'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1262
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1263
checkin:containerFilename text:someText directory:packageDir module:moduleDir logMessage:logMessage force:force
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1264
    "enter some (source) code (which is someText)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1265
     into the source repository. If the force argument is true, no merge is done;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1266
     instead, the code is checked in as given (Dangerous).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1267
     Return true if ok, false if not."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1268
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1269
    |tempdir cmd checkoutName logMsg revision logTmp 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1270
     cmdOut whatHappened s  idx changeLog changesAsLogged l 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1271
     newRevision  msg answer didMerge
1408
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1272
     modulePath time 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1273
     editor checkInRepaired didAccept emphasizedText repairedText out 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1274
     emSep comment|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1275
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1276
    revision := self newestRevisionInFile:containerFilename directory:packageDir module:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1277
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1278
    logMsg := logMessage.
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  1279
    (logMsg isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1280
        logMsg := 'checkin from browser'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1281
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1282
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1283
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1284
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1285
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1286
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1287
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1288
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1289
    "/ in CVS, we have to checkout the file first, in order
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1290
    "/ to get up-to-date CVS entries, and also to be able to merge in
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1291
    "/ other users changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1292
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1293
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1294
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1295
    "/ first, create a temporary work tree
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1296
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1297
    tempdir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1298
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1299
        ('CVSSourceCodeManager [error]: no tempDir - cannot checkin ' , containerFilename) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1300
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1301
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1302
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1303
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1304
    "/ next, create CVS/Entries and CVS/Repository with version information of current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1305
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1306
    modulePath :=  moduleDir , '/' , packageDir. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1307
    checkoutName :=  modulePath , '/' , containerFilename.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1308
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1309
    revision isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1310
        "/ a new file ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1311
        ^ self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1312
            createContainerForText:someText inModule:moduleDir package:packageDir container:containerFilename
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1313
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1314
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1315
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1316
    "/ correct our current time, so that converting it will give us UTC
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1317
    "/
1507
883bdacd2617 use #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 1502
diff changeset
  1318
    time := Timestamp now asUtcTimestamp subtractSeconds:1.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1319
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1320
    self createEntryFor:checkoutName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1321
         module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1322
         in:(tempdir construct:modulePath) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1323
         revision:revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1324
         date:(self cvsTimeString:time)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1325
         special:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1326
         overwrite:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1327
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1328
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1329
    "/ copy-over our current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1330
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1331
    Stream errorSignal handle:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1332
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1333
        'CVSSourceCodeManager [error]: cannot copy-over filedOut class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1334
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1335
    ] do:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1336
        s := (tempdir construct:checkoutName) writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1337
        s nextPutAll:someText.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1338
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1339
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1340
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1341
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1342
    "/ synchronize i.e. merge in any changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1343
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1344
    self activityNotification:'merging ' , containerFilename , ' with repository version ...'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1345
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1346
    cmd := 'update ', containerFilename, ' >', '"' , cmdOut name , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1347
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1348
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1349
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1350
        inDirectory:((tempdir construct:moduleDir) constructString:packageDir)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1351
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1352
        force ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1353
            'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1354
            tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1355
            cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1356
            'CVSSourceCodeManager [error]: cannot merge current source with repository version' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1357
            ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1358
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1359
    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1360
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1361
        "/ check what happened - the contents of the cmdOut file may be:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1362
        "/   empty   -> nothing changed
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1363
        "/   M xxx   -> merged-in changes from other users
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1364
        "/   C xxx   -> a conflict occured and the differences have been merged into the source
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1365
        "/              needs special action
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1366
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1367
        (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1368
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1369
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1370
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1371
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1372
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  1373
    (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1374
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1375
        "/ no change
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1376
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1377
"/        Transcript showCR:'no change in ' , containerFilename , ' (repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1378
        force ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1379
            self information:'nothing changed in ' , containerFilename , ' (repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1380
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1381
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1382
        ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1383
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1384
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1385
    Verbose == true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1386
        ('CVSMGR: result is: ' , whatHappened) infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1387
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1388
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1389
    force ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1390
        revision isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1391
            changeLog := self revisionLogOfContainer:containerFilename directory:packageDir module:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1392
        ] ifFalse:[
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  1393
            changeLog := self revisionLogOfContainer:containerFilename module:moduleDir directory:packageDir fromRevision:(self revisionAfter:revision) toRevision:nil.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1394
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1395
        changeLog notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1396
            s := WriteStream on:String new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1397
            self writeRevisionLogMessagesFrom:changeLog withHeader:false to:s.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1398
            changesAsLogged := s contents.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1399
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1400
            "/ mhmh - that should not happen
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1401
            changesAsLogged := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1402
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1403
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1404
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1405
    didMerge := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1406
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1407
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1408
    "/ cvs above rel10 returns a multiline info ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1409
    "/ we have to extract the one line which states what happened.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1410
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1411
    whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1412
    whatHappened := whatHappened select:[:line |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1413
                        (line startsWith:'RCS file') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1414
                        and:[(line startsWith:'retrieving') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1415
                        and:[(line startsWith:'Merging') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1416
                        and:[line size > 0]]]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1417
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1418
    whatHappened := whatHappened asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1419
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1420
    (force or:[whatHappened startsWith:'M ']) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1421
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1422
        "/ merged in changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1423
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1424
        (force 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1425
        or:[changeLog isNil 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1426
        or:[(changeLog at:#revisions) isEmpty]]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1427
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1428
            "/ pretty good - nothing has changed in the meanwhile
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1429
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1430
            Transcript showCR:'checking in ' , containerFilename , ' ...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1431
        ] ifFalse:[
1408
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1432
            | mySource mergedSource |
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1433
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1434
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1435
            "/ someone else has changed things in the meanwhile, but there is no conflict
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1436
            "/ and version have been merged.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1437
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1438
            didMerge := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1439
            changesAsLogged := changesAsLogged asCollectionOfLines.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1440
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1441
            s := WriteStream on:String new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1442
            s nextPutAll:someText.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1443
            mySource := s contents asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1444
            mergedSource := (tempdir construct:checkoutName) readStream contents asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1445
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1446
            mySource = mergedSource ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1447
                msg := 'The source of ' , containerFilename , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1448
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1449
I have merged your version with the newest repository version, 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1450
and found no differences between the result and your current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1451
(i.e. your version seemed up-to-date).'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1452
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1453
                self checkinTroubleDialog:'Merging versions'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1454
                               message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1455
                               log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1456
                               abortable:false 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1457
                               option:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1458
                didMerge := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1459
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1460
                msg := 'The source of ' , containerFilename , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1461
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1462
If you continue, your new changes (based upon rev. ' , revision printString , ') will be MERGED
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1463
into the newest revision. This will combine the other version with your changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1464
into a new common revision which may be different from both. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1465
Although this is a nice feature, it may fail to create the expected result in certain situations. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1466
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1467
You should carefully check the result - by comparing the current version with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1468
most recent version in the repository. If that does not contain an acceptable version,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1469
change methods as required and check in again. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1470
Be aware, that after that, the actual repository version is different from your current classes,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1471
and you should update your class from the repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1472
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1473
Continue ?'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1474
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1475
                answer := self checkinTroubleDialog:'Merging versions'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1476
                               message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1477
                               log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1478
                               abortable:true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1479
                               option:'Stop - see first'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1480
                answer ~~ true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1481
                    answer == #option ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1482
                        DiffTextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1483
                            openOn:mySource
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1484
                            label:'current version'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1485
                            and:mergedSource
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1486
                            label:'merged version'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1487
                            
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1488
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1489
                    Transcript showCR:'checkin aborted - (no merge; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1490
                    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1491
                    ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1492
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1493
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1494
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1495
"/                changesAsLogged := (changesAsLogged asStringCollection collect:[:line | line withTabsExpanded]) asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1496
"/                msg := 'The source of ' , containerFilename , ' has been changed in the meanwhile as follows:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1497
"/' , changesAsLogged , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1498
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1499
"/If you continue, your new changes (based upon rev. ' , revision , ') will be MERGED
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1500
"/into the newest revision. This will combine the other version with your changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1501
"/into a new common revision which is different from both. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1502
"/Although convenient, it may fail to create the expected result in certain situations. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1503
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1504
"/You should carefully check the result - by comparing the current version with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1505
"/most recent version in the repository. If that does not contain an acceptable version,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1506
"/change methods as required and check in again. Be aware, that the actual repository version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1507
"/is different from your current classes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1508
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1509
"/Continue ?'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1510
"/                (self confirm:msg) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1511
"/                    Transcript showCR:'checkin aborted - (no merge; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1512
"/                    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1513
"/                    ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1514
"/                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1515
            Transcript showCR:'checking in ' , containerFilename , ' (merged other changes) ...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1516
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1517
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1518
        (whatHappened startsWith:'C ') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1519
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1520
            "/ conflict; someone else checked in something in the meanwhile,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1521
            "/ and there is a conflict between this version and the checked in version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1522
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1523
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1524
            changesAsLogged := changesAsLogged asCollectionOfLines.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1525
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1526
            msg := 'The source of ' , containerFilename , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1527
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1528
Your new changes (based upon rev. ' , revision printString , ') CONFLICT with those changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1529
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1530
You should fix things by comparing your class with the most recent repository version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1531
and change your methods avoiding conflicts. The checkin again.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1532
'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1533
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1534
            answer := self checkinTroubleDialog:'Version conflict'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1535
                 message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1536
                 log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1537
                 abortable:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1538
                 option:'show conflicts'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1539
                 option2:'resolve conflicts'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1540
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1541
            answer == #option ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1542
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1543
                "/ show conflicts in a 3-way DiffTextView ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1544
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1545
                Diff3TextView
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1546
                    openOnMergedText:(tempdir construct:checkoutName) readStream contents 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1547
                    label:'your version (checkin attempt)' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1548
                    label:'original (base version)' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1549
                    label:'newest repository version'. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1550
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1551
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1552
            checkInRepaired := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1553
            answer == #option2 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1554
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1555
                "/ allow checkin of repair version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1556
                "/ this is error prone ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1557
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1558
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1559
                "/ show merged version in an editor ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1560
                "/ ... accept will check it in.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1561
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1562
                emphasizedText := (tempdir construct:checkoutName) readStream contents.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1563
                emSep := (Array with:(#color->Color black)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1564
                             with:(#backgroundColor->Color green)).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1565
                emphasizedText := Diff3TextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1566
                            emphasizeMergedDiff3Text:emphasizedText 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1567
                            emphasize1:(Array with:(#color->Color white)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1568
                                              with:(#backgroundColor->Color blue))
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1569
                            emphasize2:(Array with:(#color->Color white)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1570
                                              with:(#backgroundColor->Color red))
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1571
                            emphasizeSep:emSep.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1572
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1573
                comment := 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1574
'"/ ***************************************************************
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1575
"/ This text contains your current versions code (blue)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1576
"/ merged with the conflicting code as found in the repository (red) which resulted
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1577
"/ from some other checkin.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1578
"/ Each such conflict is surrounded by green text (like this paragraph).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1579
"/ 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1580
"/ Please have a look at ALL the conflicts and fix things as appropriate.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1581
"/ Delete the green lines as a confirmation - I will not checkin the changed text,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1582
"/ unless no more green parts are present. This includes this comment at the top.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1583
"/ ***************************************************************
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1584
'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1585
                comment := (Text string:comment emphasis:emSep) asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1586
                emphasizedText := comment , emphasizedText.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1587
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1588
                didAccept := false. checkInRepaired := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1589
                [didAccept not and:[checkInRepaired]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1590
                    editor := RCSConflictEditTextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1591
                                setupWith:emphasizedText
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1592
                                title:'Resolve conflicts in ' , containerFilename , ', then accept & close to checkin'.    
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1593
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1594
                    editor acceptAction:[:dummy |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1595
                        repairedText := editor list.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1596
                        didAccept := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1597
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1598
                    didAccept := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1599
                    editor topView openModal.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1600
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1601
                    didAccept ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1602
                        (Dialog confirm:'You did not accept the new text. Edit again ?')
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1603
                        ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1604
                            checkInRepaired := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1605
                        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1606
                    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1607
                        "/ check if all green-stuff (separators) have been removed
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1608
                        (repairedText findFirst:[:line | line notNil and:[line notEmpty and:[(line emphasisAt:1) = emSep]]]) ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1609
                            self warn:'You have to look at ALL conflicts, and remove ALL green lines as a confirmation !!'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1610
                            didAccept := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1611
                        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1612
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1613
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1614
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1615
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1616
                checkInRepaired ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1617
                    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1618
                        out := (tempdir construct:checkoutName) writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1619
                        out nextPutAll:(repairedText asString string).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1620
                        didAccept := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1621
                        out close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1622
                    ] on:FileStream openErrorSignal do:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1623
                        self warn:'could not write file ' , (tempdir constructString:checkoutName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1624
                        checkInRepaired := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1625
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1626
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1627
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1628
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1629
            checkInRepaired ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1630
                Transcript showCR:'checking in ' , containerFilename , ' (manually repaired version) ...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1631
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1632
                'CVSSourceCodeManager [warning]: cannot (for now) checkin; conflicts found' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1633
                Transcript showCR:'checkin of ' , containerFilename , ' aborted (conflicting changes; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1634
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1635
                ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1636
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1637
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1638
            (whatHappened startsWith:'U ') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1639
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1640
                "/ nothing changed here, but the repository already contains
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1641
                "/ a newer version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1642
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1643
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1644
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1645
                self information:'nothing changed in your ''' , containerFilename , ''';
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1646
but repository already contains a newer version (repository unchanged).'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1647
                ^ true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1648
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1649
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1650
                "/ unexpected
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1651
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1652
                self warn:'unexpected message from CVS:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1653
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1654
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1655
No checkin performed.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1656
                Transcript showCR:'*** cannot checkin ' , containerFilename , ' (unexpected CVS response; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1657
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1658
                ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1659
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1660
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1661
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1662
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1663
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1664
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1665
    "/ now check it in again
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1666
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1667
    self activityNotification:'saving ' , containerFilename , ' in repository ...'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1668
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1669
    logMsg := logMsg replChar:$"  withString:'\"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1670
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1671
    OperatingSystem isUNIXlike ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1672
        "/ save the log message into another tempFile ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1673
        logTmp := Filename newTemporaryIn:tempdir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1674
        s := logTmp writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1675
        s nextPutAll:logMsg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1676
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1677
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1678
        cmd := 'commit -F "', logTmp baseName, '" ', checkoutName, ' >', '"' , cmdOut name , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1679
    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1680
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1681
        "/ CVS up to V1.9.14 prints the 'new revision' to stderr,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1682
        "/ CVS V1.9.16 to stdout.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1683
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1684
        cmd := 'commit -m "', logMsg, '" ', checkoutName, ' >', '"' , cmdOut name , '"' , ' 2>&1'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1685
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1686
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1687
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1688
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1689
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1690
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1691
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1692
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1693
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1694
        (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1695
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1696
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1697
            whatHappened := '<< no message >>'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1698
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1699
        self warn:'The following problem was reported by cvs:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1700
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1701
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1702
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1703
The class has NOT been checked into the repository.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1704
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1705
       ('CVSSourceCodeManager [error]: cvs: ' , whatHappened) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1706
       'CVSSourceCodeManager [error]: cannot checkin modified class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1707
        logTmp notNil ifTrue:[logTmp remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1708
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1709
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1710
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1711
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1712
    logTmp notNil ifTrue:[logTmp remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1713
    (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1714
        whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1715
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1716
        whatHappened := nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1717
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1718
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1719
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1720
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1721
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1722
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1723
    "/ fetch the new revision nr as found in the commit commands output
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1724
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1725
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  1726
    (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1727
        'CVSSourceCodeManager [error]: unexpected empty checkin command output' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1728
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1729
        whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1730
        idx := whatHappened indexOfLineStartingWith:'new revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1731
        idx == 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1732
            'CVSSourceCodeManager [error]: unexpected checkin command output (no new-revision info)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1733
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1734
            l := whatHappened at:idx.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1735
            newRevision := (l copyFrom:14 to:(l indexOf:$; startingAt:14)-1) withoutSpaces.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1736
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1737
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1738
    ^ true
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  1739
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  1740
    "Modified: / 23-08-2006 / 14:15:18 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1741
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1742
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1743
checkinClass:cls fileName:classFileName directory:packageDir module:moduleDir source:sourceFileName logMessage:logMessage force:forceArg
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1744
    "enter a classes source code (which has been already filed out into sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1745
     into the source repository. If the force argument is true, no merge is done;
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1746
     instead, the code is checked in as given (Dangerous).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1747
     Return true if ok, false if not."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1748
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1749
    |tempdir cmd checkoutName logMsg revision newestRevision logTmp 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1750
     cmdOut whatHappened s entry idx changeLog changesAsLogged l 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1751
     newRevision newString binRevision className msg answer didMerge
1408
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1752
     modulePath time 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1753
     editor checkInRepaired checkInNew didAccept emphasizedText repairedText out 
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1754
     emSep comment force newVersionString|
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1755
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1756
    force := forceArg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1757
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1758
    className := cls name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1759
    cls isPrivate ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1760
        self error:'refuse to check in private classes.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1761
    ].
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1762
    revision := cls revision.        
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1763
    (revision notNil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1764
    and:[revision endsWith:$m]) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1765
    ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1766
        "/ this class has already been checked in with a merge,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1767
        "/ but not reloaded from the repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1768
        "/ must use the original revision string.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1769
        revision := revision copyWithoutLast:1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1770
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1771
    (binRevision := cls binaryRevision) notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1772
        revision ~= binRevision ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1773
            ('CVSSourceCodeManager [info]: class ' , className , ' is based upon ' , binRevision , ' but has revision ' , (revision ? '?')) infoPrintCR
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1774
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1775
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1776
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1777
    revision isNil ifTrue:[
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1778
        revision := newestRevision := self newestRevisionOf:cls.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1779
        revision isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1780
            force ifTrue:[
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1781
                revision := newestRevision := self newestRevisionInFile:classFileName directory:packageDir module:moduleDir.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1782
            ] ifFalse:[
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1783
                revision := '1.0'   "/ initial checkin
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1784
            ]
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1785
        ] ifFalse:[
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1786
            revision == #deleted ifTrue:[
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1787
                revision := '0'     "/ to force cvs-adding, which resurrects the file from the Attic
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1788
            ].
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1789
        ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1790
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1791
1373
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1792
    logMessage isNil ifTrue:[
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1793
        logMsg := ''.
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1794
    ] ifFalse:[
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1795
        logMsg := logMessage asSingleByteStringIfPossible.
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1796
        logMsg bitsPerCharacter ~~ 8 ifTrue:[
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1797
            'CVSSourceCodeManager [error]: cvs cannot handle unicode in logMessage' errorPrintCR.
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1798
            ^ false.
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1799
        ].    
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1800
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1801
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1802
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1803
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1804
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1805
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1806
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1807
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1808
    "/ in CVS, we have to checkout the file first, in order
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1809
    "/ to get up-to-date CVS entries, and also to be able to merge in
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1810
    "/ other users changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1811
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1812
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1813
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1814
    "/ first, create a temporary work tree
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1815
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1816
    tempdir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1817
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1818
        ('CVSSourceCodeManager [error]: no tempDir - cannot checkin ' , className) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1819
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1820
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1821
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1822
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1823
    "/ next, create CVS/Entries and CVS/Repository with version information of current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1824
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1825
    modulePath :=  moduleDir , '/' , packageDir. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1826
    checkoutName :=  modulePath , '/' , classFileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1827
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1828
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1829
    "/ correct our current time, so that converting it will give us UTC
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1830
    "/
1507
883bdacd2617 use #asUtcTimestamp
Stefan Vogel <sv@exept.de>
parents: 1502
diff changeset
  1831
    time := Timestamp now asUtcTimestamp subtractSeconds:1.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1832
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1833
    self createEntryFor:checkoutName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1834
         module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1835
         in:(tempdir construct:modulePath) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1836
         revision:revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1837
         date:(self cvsTimeString:time)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1838
         special:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1839
         overwrite:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1840
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1841
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1842
    "/ copy-over our current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1843
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1844
    Error handle:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1845
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1846
        'CVSSourceCodeManager [error]: cannot copy-over filedOut class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1847
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1848
    ] do:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1849
        sourceFileName asFilename copyTo:(tempdir construct:checkoutName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1850
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1851
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1852
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1853
    "/ synchronize i.e. merge in any changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1854
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1855
    self activityNotification:'merging ' , cls name , ' with repository version ...'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1856
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1857
    cmd := 'update ', classFileName, ' >', '"' , cmdOut name , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1858
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1859
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1860
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1861
        inDirectory:((tempdir construct:moduleDir) constructString:packageDir)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1862
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1863
        force ifFalse:[
1736
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  1864
            tempdir recursiveRemove.
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  1865
            cmdOut remove.
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  1866
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1867
            "/ someone fiddled around with repository ?
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1868
            (cls binaryRevision notNil
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  1869
            and:[(self checkForExistingContainerInModule:moduleDir directory:packageDir container:classFileName) not ])
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1870
            ifTrue:[
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1871
                (Dialog confirm:('Someone seems to have removed the source container for ',cls name,'\\Force new checkin ?') withCRs)
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1872
                ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1873
                    cls setBinaryRevision:nil.
1373
65473183582d Check for unicode in cvs log message (cvs cannot handle this)
Stefan Vogel <sv@exept.de>
parents: 1365
diff changeset
  1874
                    ^ self checkinClass:cls fileName:classFileName directory:packageDir module:moduleDir source:sourceFileName logMessage:logMsg force:force.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1875
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1876
            ].
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1877
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1878
            "/ is the version correct ?
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1879
            newestRevision isNil ifTrue:[
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1880
                newestRevision := self newestRevisionOf:cls.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1881
            ].
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1882
            revision > newestRevision ifTrue:[
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1883
                (Dialog confirm:('The version-info of ',cls name allBold,' is wrong \(The class version (',revision allBold,') is newer than the newest version in the repository (',newestRevision allBold,').\\Patch the version and retry checkin ?') withCRs)
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1884
                ifTrue:[
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1885
                    newVersionString := self updatedRevisionStringOf:cls forRevision:newestRevision with:cls revisionString.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1886
                    cls updateVersionMethodFor:newVersionString.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1887
                    ^ self checkinClass:cls fileName:classFileName directory:packageDir module:moduleDir source:sourceFileName logMessage:logMsg force:force.
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1888
                ].
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1889
            ].
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  1890
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1891
            'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1892
            'CVSSourceCodeManager [error]: cannot merge current source with repository version' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1893
            ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1894
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1895
    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1896
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1897
        "/ check what happened - the contents of the cmdOut file may be:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1898
        "/   empty   -> nothing changed
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1899
        "/   M xxx   -> merged-in changes from other users
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1900
        "/   C xxx   -> a conflict occured and the differences have been merged into the source
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1901
        "/              needs special action
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1902
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1903
        (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1904
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1905
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1906
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1907
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1908
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  1909
    (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1910
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1911
        "/ no change
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1912
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1913
"/        Transcript showCR:'no change in ' , className , ' (repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1914
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1915
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1916
        force ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1917
"/            (ChangeSet current includesChangeForClass:cls) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1918
"/                (self confirm:('Nothing changed in %1 (repository unchanged).\\Remove entries from changeSet ?' bindWith:className) withCRs) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1919
"/                    ChangeSet current condenseChangesForClass:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1920
"/                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1921
"/            ] ifFalse:[
1425
c02c03705574 be less chatty.
Claus Gittinger <cg@exept.de>
parents: 1424
diff changeset
  1922
"/                self information:('Nothing changed in %1 (repository unchanged)' bindWith:className).
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1923
"/            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1924
            self postCheckInClass:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1925
        ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1926
            changeLog := self revisionLogOfContainer:classFileName directory:packageDir module:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1927
            (changeLog isNil or:[(changeLog at:#revisions) size ~~ 1]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1928
                'CVSSourceCodeManager [error]: failed to update revisionString (no log)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1929
                cls updateVersionMethodFor:'$' , 'Header' , '$'.  "/ concatenated to avoid RCS expansion
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1930
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1931
                entry := (changeLog at:#revisions) first.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1932
                newString := self revisionStringFromLog:changeLog entry:entry forClass:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1933
                cls updateVersionMethodFor:newString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1934
                cls revision ~= newRevision ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1935
                    'CVSSourceCodeManager [error]: failed to update revisionString' errorPrintCR
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1936
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1937
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1938
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1939
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1940
        ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1941
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1942
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1943
    Verbose == true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1944
        ('CVSMGR: result is: ' , whatHappened) infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1945
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1946
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1947
    force ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1948
        revision isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1949
            changeLog := self revisionLogOf:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1950
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1951
            changeLog := self revisionLogOf:cls fromRevision:(self revisionAfter:revision) toRevision:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1952
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1953
        changeLog notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1954
            s := WriteStream on:String new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1955
            self writeRevisionLogMessagesFrom:changeLog withHeader:false to:s.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1956
            changesAsLogged := s contents.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1957
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1958
            "/ mhmh - that should not happen
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1959
            changesAsLogged := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1960
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1961
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1962
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1963
    didMerge := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1964
    checkInRepaired := checkInNew := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1965
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1966
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1967
    "/ cvs above rel10 returns a multiline info ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1968
    "/ we have to extract the one line which states what happened.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1969
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1970
    whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1971
    whatHappened := whatHappened select:[:line |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1972
                        (line startsWith:'RCS file') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1973
                        and:[(line startsWith:'retrieving') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1974
                        and:[(line startsWith:'Merging') not
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1975
                        and:[line size > 0]]]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1976
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1977
    whatHappened := whatHappened asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1978
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1979
    (force or:[(whatHappened startsWith:'M ') or:[whatHappened startsWith:'A ']]) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1980
        "/
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  1981
        "/ merged in changes / resurrected
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1982
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1983
        (force 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1984
        or:[changeLog isNil 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1985
        or:[(changeLog at:#revisions) isEmpty]]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1986
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1987
            "/ pretty good - nothing has changed in the meanwhile
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1988
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1989
            Transcript showCR:'checking in ' , className , ' ...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1990
        ] ifFalse:[
1408
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1991
            |mySource mergedSource |
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  1992
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1993
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1994
            "/ someone else has changed things in the meanwhile, but there is no conflict
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1995
            "/ and version have been merged.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1996
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1997
            didMerge := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1998
            changesAsLogged := changesAsLogged asCollectionOfLines.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  1999
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2000
            s := WriteStream on:String new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2001
            cls fileOutOn:s withTimeStamp:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2002
            mySource := s contents asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2003
            mergedSource := (tempdir construct:checkoutName) readStream contents asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2004
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2005
            mySource = mergedSource ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2006
                msg := 'The source of ' , className , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2007
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2008
I have merged your version with the newest repository version, 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2009
and found no differences between the result and your current version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2010
(i.e. your version seemed up-to-date).'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2011
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2012
                self checkinTroubleDialog:'Merging versions'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2013
                               message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2014
                               log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2015
                               abortable:false 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2016
                               option:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2017
                didMerge := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2018
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2019
                msg := 'The source of ' , className , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2020
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2021
If you continue, your new changes (based upon rev. ' , revision printString , ') will be MERGED
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2022
into the newest revision. This will combine the other version with your changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2023
into a new common revision which may be different from both. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2024
Although this is a nice feature, it may fail to create the expected result in certain situations. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2025
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2026
You should carefully check the result - by comparing the current version with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2027
most recent version in the repository. If that does not contain an acceptable version,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2028
change methods as required and check in again. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2029
Be aware, that after that, the actual repository version is different from your current classes,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2030
and you should update your class from the repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2031
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2032
Continue ?'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2033
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2034
                answer := self checkinTroubleDialog:'Merging versions'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2035
                               message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2036
                               log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2037
                               abortable:true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2038
                               option:'Stop - see first'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2039
                               option2:'Do NOT Merge - Force my Code'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2040
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2041
                answer == #option2 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2042
                    (Dialog confirm:'Are you certain that you want to suppress a merge and force your code to be checked in ?')
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2043
                    ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2044
                        s := (tempdir construct:checkoutName) writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2045
                        cls fileOutOn:s withTimeStamp:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2046
                        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2047
                        answer := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2048
                    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2049
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2050
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2051
                answer ~~ true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2052
                    answer == #option ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2053
                        DiffTextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2054
                            openOn:mySource
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2055
                            label:'current version'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2056
                            and:mergedSource
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2057
                            label:'merged version'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2058
                            
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2059
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2060
                    Transcript showCR:'checkin aborted - (no merge; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2061
                    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2062
                    ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2063
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2064
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2065
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2066
"/                changesAsLogged := (changesAsLogged asStringCollection collect:[:line | line withTabsExpanded]) asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2067
"/                msg := 'The source of ' , className , ' has been changed in the meanwhile as follows:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2068
"/' , changesAsLogged , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2069
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2070
"/If you continue, your new changes (based upon rev. ' , revision , ') will be MERGED
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2071
"/into the newest revision. This will combine the other version with your changes
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2072
"/into a new common revision which is different from both. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2073
"/Although convenient, it may fail to create the expected result in certain situations. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2074
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2075
"/You should carefully check the result - by comparing the current version with the
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2076
"/most recent version in the repository. If that does not contain an acceptable version,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2077
"/change methods as required and check in again. Be aware, that the actual repository version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2078
"/is different from your current classes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2079
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2080
"/Continue ?'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2081
"/                (self confirm:msg) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2082
"/                    Transcript showCR:'checkin aborted - (no merge; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2083
"/                    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2084
"/                    ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2085
"/                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2086
            Transcript showCR:'checking in ' , className , ' (merged other changes) ...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2087
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2088
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2089
        (whatHappened startsWith:'C ') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2090
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2091
            "/ conflict; someone else checked in something in the meanwhile,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2092
            "/ and there is a conflict between this version and the checked in version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2093
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2094
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2095
            changesAsLogged := changesAsLogged asCollectionOfLines.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2096
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2097
            msg := 'The source of ' , className , ' has been changed in the meanwhile as listed below.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2098
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2099
Your new changes (based upon rev. ' , revision printString , ') CONFLICT with those changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2100
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2101
You should fix things by comparing your class with the most recent repository version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2102
and change your methods avoiding conflicts. The checkin again.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2103
'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2104
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2105
            answer := self checkinTroubleDialog:'Version conflict'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2106
                 message:msg 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2107
                 log:changesAsLogged
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2108
                 abortable:false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2109
                 option:'Show conflicts'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2110
                 option2:'Resolve conflicts'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2111
                 option3:'Do NOT Merge - Force my Code'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2112
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2113
            answer == #option ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2114
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2115
                "/ show conflicts in a 3-way DiffTextView ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2116
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2117
                Diff3TextView
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2118
                    openOnMergedText:(tempdir construct:checkoutName) readStream contents 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2119
                    label:'your version (checkin attempt)' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2120
                    label:'original (base version)' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2121
                    label:'newest repository version'. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2122
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2123
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2124
            answer == #option2 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2125
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2126
                "/ allow checkin of repair version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2127
                "/ this is error prone ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2128
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2129
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2130
                "/ show merged version in an editor ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2131
                "/ ... accept will check it in.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2132
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2133
                emphasizedText := (tempdir construct:checkoutName) readStream contents.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2134
                emSep := (Array with:(#color->Color black)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2135
                             with:(#backgroundColor->Color green)).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2136
                emphasizedText := Diff3TextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2137
                            emphasizeMergedDiff3Text:emphasizedText 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2138
                            emphasize1:(Array with:(#color->Color white)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2139
                                              with:(#backgroundColor->Color blue))
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2140
                            emphasize2:(Array with:(#color->Color white)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2141
                                              with:(#backgroundColor->Color red))
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2142
                            emphasizeSep:emSep.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2143
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2144
                comment := 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2145
'"/ ***************************************************************
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2146
"/ This text contains your current versions code (blue)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2147
"/ merged with the conflicting code as found in the repository (red) which resulted
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2148
"/ from some other checkin.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2149
"/ Each such conflict is surrounded by green text (like this paragraph).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2150
"/ 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2151
"/ Please have a look at ALL the conflicts and fix things as appropriate.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2152
"/ Delete the green lines as a confirmation - I will not checkin the changed text,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2153
"/ unless no more green parts are present. This includes this comment at the top.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2154
"/ ***************************************************************
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2155
'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2156
                comment := (Text string:comment emphasis:emSep) asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2157
                emphasizedText := comment , emphasizedText.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2158
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2159
                didAccept := false. checkInRepaired := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2160
                [didAccept not and:[checkInRepaired]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2161
                    editor := RCSConflictEditTextView 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2162
                                setupWith:emphasizedText
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2163
                                title:'Resolve conflicts in ' , className , ', then accept & close to checkin'.    
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2164
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2165
                    editor acceptAction:[:dummy |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2166
                        repairedText := editor list.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2167
                        didAccept := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2168
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2169
                    didAccept := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2170
                    editor topView openModal.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2171
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2172
                    didAccept ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2173
                        (Dialog confirm:'You did not accept the new text. Edit again ?')
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2174
                        ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2175
                            checkInRepaired := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2176
                        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2177
                    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2178
                        "/ check if all green-stuff (separators) have been removed
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2179
                        (repairedText findFirst:[:line | line notNil and:[line notEmpty and:[(line emphasisAt:1) = emSep]]]) ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2180
                            self warn:'You have to look at ALL conflicts, and remove ALL green lines as a confirmation !!'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2181
                            didAccept := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2182
                        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2183
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2184
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2185
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2186
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2187
                checkInRepaired ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2188
                    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2189
                        out := (tempdir construct:checkoutName) writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2190
                        out nextPutAll:(repairedText asString string).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2191
                        didAccept := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2192
                        out close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2193
                    ] on:FileStream openErrorSignal do:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2194
                        self warn:'could not write file ' , (tempdir constructString:checkoutName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2195
                        checkInRepaired := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2196
                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2197
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2198
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2199
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2200
            answer == #option3 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2201
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2202
                "/ force checkin of new version
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2203
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2204
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2205
                "/ show merged version in an editor ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2206
                "/ ... accept will check it in.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2207
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2208
                [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2209
                    out := (tempdir construct:checkoutName) writeStream.
1408
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  2210
                    cls fileOutOn:out withTimeStamp:false.
762e5320c296 oops - could checkIn nil-sourcecode (in force)
ca
parents: 1407
diff changeset
  2211
                    out close.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2212
                    didAccept := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2213
                    checkInNew := checkInRepaired := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2214
                ] on:FileStream openErrorSignal do:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2215
                    self warn:'could not write file ' , (tempdir constructString:checkoutName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2216
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2217
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2218
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2219
            checkInRepaired ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2220
                checkInNew ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2221
                    Transcript showCR:'checking in ' , className , ' (force new version)...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2222
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2223
                    Transcript showCR:'checking in ' , className , ' (manually repaired version)...'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2224
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2225
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2226
                'CVSSourceCodeManager [warning]: cannot (for now) checkin; conflicts found' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2227
                Transcript showCR:'checkin of ' , className , ' aborted (conflicting changes; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2228
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2229
                ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2230
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2231
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2232
            ((whatHappened startsWith:'U ') 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2233
            or:[ (whatHappened startsWith:'P ') ]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2234
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2235
                "/ nothing changed here, but the repository already contains
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2236
                "/ a newer version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2237
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2238
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2239
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2240
                self information:'nothing changed in your ''' , className , ''';
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2241
but repository already contains a newer version (repository unchanged).'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2242
                ^ true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2243
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2244
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2245
                "/ unexpected
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2246
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2247
                self warn:'unexpected message from CVS:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2248
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2249
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2250
No checkin performed.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2251
                Transcript showCR:'*** cannot checkin ' , className , ' (unexpected CVS response; repository unchanged)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2252
                tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2253
                ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2254
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2255
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2256
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2257
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2258
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2259
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2260
    "/ now check it in again
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2261
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2262
    self activityNotification:'saving ' , cls name , ' in repository ...'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2263
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2264
    logMsg := logMsg replChar:$"  withString:'\"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2265
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2266
    OperatingSystem isUNIXlike ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2267
        "/ save the log message into another tempFile ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2268
        logTmp := Filename newTemporaryIn:tempdir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2269
        s := logTmp writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2270
        s nextPutAll:logMsg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2271
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2272
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2273
        cmd := 'commit -F "', logTmp baseName, '" ', checkoutName, ' >', '"' , cmdOut name , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2274
    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2275
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2276
        "/ CVS up to V1.9.14 prints the 'new revision' to stderr,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2277
        "/ CVS V1.9.16 to stdout.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2278
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2279
        cmd := 'commit -m "', logMsg, '" ', checkoutName, ' >', '"', cmdOut name, '"' , ' 2>&1'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2280
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2281
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2282
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2283
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2284
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2285
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2286
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2287
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2288
        (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2289
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2290
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2291
            whatHappened := '<< no message >>'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2292
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2293
        self warn:'The following problem was reported by cvs:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2294
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2295
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2296
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2297
The class has NOT been checked into the repository.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2298
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2299
       'CVSSourceCodeManager [error]: cannot checkin modified class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2300
        logTmp notNil ifTrue:[logTmp remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2301
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2302
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2303
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2304
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2305
    logTmp notNil ifTrue:[logTmp remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2306
    (cmdOut exists and:[cmdOut fileSize > 0]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2307
        whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2308
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2309
        whatHappened := nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2310
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2311
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2312
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2313
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2314
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2315
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2316
    "/ fetch the new revision nr as found in the commit commands output
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2317
    "/
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  2318
    (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2319
        'CVSSourceCodeManager [error]: unexpected empty checkin command output' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2320
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2321
        whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2322
        idx := whatHappened indexOfLineStartingWith:'new revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2323
        idx == 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2324
            'CVSSourceCodeManager [error]: unexpected checkin command output (no new-revision info)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2325
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2326
            l := whatHappened at:idx.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2327
            newRevision := (l copyFrom:14 to:(l indexOf:$; startingAt:14)-1) withoutSpaces.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2328
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2329
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2330
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2331
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2332
    "/ if there was no merge (i.e. the current version has been checked in unchanged):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2333
    "/   patch the classes revisionInfo (but keep binaryRevision unchanged) to the new revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2334
    "/   this makes everyone here believe, that the incore version of the class is based upon
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2335
    "/   the newly checked in version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2336
    "/   (however, the binaryRevision must remain as it is - we will need it to fetch the sourceCode
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2337
    "/    correctly for all unchanged methodss)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2338
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2339
    "/ if there was a merge (i.e. the repository now contains a merge of the current and some
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2340
    "/ other version):
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2341
    "/    patch the classes revisionInfo (again, keep the binaryRevision) to the old revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2342
    "/    and add a 'm' (for merged).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2343
    "/    If we later checkin again, the new checkin will be again based on the current revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2344
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2345
    newRevision notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2346
        didMerge ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2347
            self activityNotification:'fetch new revision number of ', cls name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2348
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2349
            changeLog := self revisionLogOf:cls fromRevision:newRevision toRevision:newRevision.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2350
            (changeLog isNil or:[(changeLog at:#revisions) size ~~ 1]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2351
                force ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2352
                    changeLog := self revisionLogOfContainer:classFileName directory:packageDir module:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2353
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2354
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2355
            (changeLog isNil or:[(changeLog at:#revisions) size ~~ 1]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2356
                'CVSSourceCodeManager [error]: failed to update revisionString (no log)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2357
                cls updateVersionMethodFor:'$' , 'Header' , '$'.  "/ concatenated to avoid RCS expansion
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2358
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2359
                entry := (changeLog at:#revisions) first.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2360
                newString := self revisionStringFromLog:changeLog entry:entry forClass:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2361
                cls updateVersionMethodFor:newString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2362
                cls revision ~= newRevision ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2363
                    'CVSSourceCodeManager [error]: failed to update revisionString' errorPrintCR
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2364
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2365
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2366
        ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2367
            newString := self updatedRevisionStringOf:cls forRevision:nil with:cls revisionString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2368
            cls updateVersionMethodFor:newString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2369
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2370
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2371
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2372
    Class addChangeRecordForClassCheckIn:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2373
    self postCheckInClass:cls.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2374
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2375
    (checkInRepaired and:[checkInNew not]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2376
        self information:'Now the repository contains a merge between your and the other changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2377
However, the class in your image does NOT contain the other changes.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2378
This will lead to more conflict-resolving whenever you check this class in again later,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2379
unless you load the newest (merged) version of the class from the repository.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2380
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2381
I recommend doing this as soon as possible via your browsers checkout function.'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2382
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2383
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2384
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2385
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2386
     SourceCodeManager checkinClass:Array logMessage:'testing only'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2387
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2388
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2389
    "Created: / 11-09-1996 / 16:16:11 / cg"
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2390
    "Modified: / 26-02-1998 / 17:34:16 / stefan"
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2391
    "Modified: / 23-08-2006 / 13:55:16 / cg"
130
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
  2392
!
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
  2393
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2394
checkoutModule:aModule directory:aPackage andDo:aBlock
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2395
    "check out everything from a package into a temporary directory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2396
     Then evaluate aBlock, passing the name of that temp-directory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2397
     Afterwards, the tempDir is removed.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2398
     Return true, if OK, false if any error occurred."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2399
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2400
    |cvsRoot packageDir tempdir cmdOut cmd dirName|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2401
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2402
    cvsRoot := self getCVSROOTForModule:aModule.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2403
    cvsRoot isNil ifTrue:[^ false ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2404
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2405
    aPackage notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2406
        dirName := aModule , '/' , aPackage.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2407
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2408
        dirName := aModule.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2409
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2410
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2411
    self activityNotification:'checking out everything in ' , dirName , ' ...'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2412
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2413
    tempdir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2414
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2415
        ('CVSSourceCodeManager [error]: no tempDir - cannot checkout') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2416
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2417
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2418
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
  2419
    cmd := 'checkout ', dirName.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2420
    OperatingSystem isUNIXlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2421
        "/ can redirect output
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2422
        cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2423
        cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2424
            cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2425
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2426
        cmd := cmd , ' > ', '"'  , cmdOut name, '"' .
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2427
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2428
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2429
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2430
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2431
        module:aModule
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2432
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2433
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2434
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2435
        cmdOut notNil ifTrue:[cmdOut remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2436
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2437
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2438
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2439
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2440
    cmdOut notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2441
"/        listOfFiles := cmdOut contents.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2442
        cmdOut remove
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2443
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2444
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2445
    packageDir := (tempdir construct:dirName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2446
    (packageDir isDirectory) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2447
        'CVSSourceCodeManager [error]: checkout failed (no dir)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2448
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2449
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2450
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2451
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2452
    "/ now, invoke the block ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2453
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2454
        aBlock value:packageDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2455
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2456
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2457
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2458
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2459
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2460
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2461
    "Created: / 23-08-2006 / 14:07:05 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2462
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2463
1405
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2464
streamForClass:cls fileName:fileName revision:revision directory:packageDir module:moduleDir cache:cacheItArg
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2465
    "extract a source file and return an open readStream on it,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2466
     or nil if the extract failed. If revision is nil or (#newest), take
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2467
     the latest; otherwise, a specific revisions source is extracted.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2468
     The cls argument is currently ignored, but may be used in future versions,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2469
     to validate the correct container against the class.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2470
     To check out a file (i.e. not a classes file), leave it nil."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2471
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2472
    |dir cachedSourceFilename cachedFile cmd fullName revisionArg stream
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2473
     checkoutName checkoutNameLocal fullTempName fullCachedName tempdir cmdOut
1405
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2474
     classFileName cvsRoot tempFile revMsg cacheIt|
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2475
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2476
    cacheIt := cacheItArg.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2477
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2478
    (DisabledModules notNil and:[DisabledModules includes:moduleDir]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2479
        Transcript showCR:'cvs access for module ' , moduleDir , ' has been disabled (due to previous failure)'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2480
        Transcript showCR:'reenable using the launchers source&debugger dialog'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2481
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2482
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2483
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2484
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2485
    cvsRoot := self getCVSROOTForModule:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2486
    cvsRoot isNil ifTrue:[^ nil].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2487
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2488
    "/ if not already existing, create a cache directory
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2489
    "/ where we deposit sources.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2490
    "/ this is used as a cache for further requests, since
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2491
    "/ accessing the repository may be slow.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2492
    "/ (if cvs uses a remote connection via ppp, for example)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2493
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2494
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2495
    revision ~~ #newest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2496
        (dir := self sourceCacheDirectory) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2497
            'CVSSourceCodeManager [warning]: no source cache directory' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2498
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2499
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2500
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2501
    classFileName := fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2502
    (classFileName endsWith:',v') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2503
        classFileName := classFileName copyWithoutLast:2.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2504
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2505
    (classFileName endsWith:'.st') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2506
        cls notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2507
            classFileName := classFileName copyWithoutLast:3.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2508
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2509
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2510
    fullName := moduleDir , '/' , packageDir , '/' , classFileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2511
    cls notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2512
        fullName := fullName , '.st'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2513
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2514
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2515
    (revision isNil or:[revision == #newest]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2516
        cachedSourceFilename := classFileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2517
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2518
        cachedSourceFilename := classFileName , '_' , revision.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2519
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2520
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2521
    dir notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2522
        cachedFile := dir construct:cachedSourceFilename.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2523
        cachedFile exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2524
"/            cachedFile fileSize < 10 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2525
"/                ('CVSSourceCodeManager [warning]: existing: ', cachedFile name , ' seems corrupted.') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2526
"/                cachedFile remove
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2527
"/            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2528
"/            ('CVSSourceCodeManager [info]: found existing: ', cachedFile name) infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2529
                ^ cachedFile readStream
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2530
"/            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2531
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2532
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2533
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2534
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2535
    "/ first, create a temporary work tree
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2536
    "/ Do not make module and package directories, their existence cause cvs checkout to fail in server mode
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2537
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2538
    tempdir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2539
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2540
        ('CVSSourceCodeManager [error]: no tempDir - cannot checkout ' , classFileName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2541
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2542
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2543
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2544
"/    tempdir := Filename newTemporaryIn:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2545
"/    tempdir exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2546
"/        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2547
"/    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2548
"/    tempdir makeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2549
"/    dir := tempdir construct:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2550
"/    dir makeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2551
"/    dir := dir construct:packageDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2552
"/    dir recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2553
"/    dir exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2554
"/        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2555
"/        'CVSMGR: cannot create temporary directory' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2556
"/        ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2557
"/    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2558
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2559
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2560
    "/ check it out there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2561
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2562
    checkoutName :=  fullName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2563
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2564
    checkoutNameLocal := (moduleDir asFilename construct:packageDir) constructString:(fullName asFilename baseName).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2565
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2566
    (revision isNil or:[revision == #newest]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2567
        cachedSourceFilename := classFileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2568
        revisionArg := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2569
        revMsg := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2570
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2571
        cachedSourceFilename := classFileName , '_' , revision.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2572
        revisionArg := ' -r ' , revision.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2573
        revMsg := ' (' , revision , ')'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2574
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2575
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2576
    self activityNotification:'checking out source ' , checkoutName , revMsg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2577
    OperatingSystem isUNIXlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2578
        "/ can redirect output
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2579
        cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2580
        cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2581
            cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2582
        ].
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
  2583
        cmd := 'checkout' , revisionArg , ' ', checkoutName , ' > ' , '"' , cmdOut name, '"' .
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2584
    ] ifFalse:[
1393
28d04a5111c6 cvs V1.11.14 does not support the 'cvs -l' option any longer and breaks
Stefan Vogel <sv@exept.de>
parents: 1390
diff changeset
  2585
        cmd := 'checkout' , revisionArg , ' ', checkoutName.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2586
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2587
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2588
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2589
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2590
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2591
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2592
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2593
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2594
        cmdOut notNil ifTrue:[cmdOut remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2595
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2596
        ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
1477
bea2ad3479eb no longer automatically disable a CVS module !
Claus Gittinger <cg@exept.de>
parents: 1465
diff changeset
  2597
bea2ad3479eb no longer automatically disable a CVS module !
Claus Gittinger <cg@exept.de>
parents: 1465
diff changeset
  2598
false ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2599
        "/ see if there is CVS access at all ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2600
        (self checkForExistingModule:moduleDir) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2601
            "/ disable
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2602
            DisabledModules isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2603
                DisabledModules := Set new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2604
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2605
            DisabledModules add:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2606
            ('CVSSourceCodeManager [warning]: disabled repository access for module ' , moduleDir) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2607
        ].
1477
bea2ad3479eb no longer automatically disable a CVS module !
Claus Gittinger <cg@exept.de>
parents: 1465
diff changeset
  2608
].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2609
        ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2610
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2611
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2612
    cmdOut notNil ifTrue:[cmdOut remove].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2613
    fullTempName := tempdir construct:checkoutNameLocal.
1405
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2614
    CacheDirectoryName isNil ifTrue:[
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2615
        cacheIt := false
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2616
    ] ifFalse:[
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2617
        fullCachedName := CacheDirectoryName asFilename constructString:cachedSourceFilename.
cd6a25ddc6fe *** empty log message ***
penk
parents: 1393
diff changeset
  2618
    ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2619
    fullTempName exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2620
        ('CVSSourceCodeManager [error]: failed to checkout ', fullTempName pathName, ' (file does not exist after cvs co)') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2621
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2622
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2623
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2624
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2625
    (cacheIt 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2626
    and:[cachedFile notNil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2627
    and:[fullTempName exists]])
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2628
    ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2629
        (OperatingSystem errorSignal catch:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2630
            fullTempName moveTo:fullCachedName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2631
        ]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2632
            ('CVSSourceCodeManager [error]: failed to rename ', fullTempName pathName, ' to ', cachedSourceFilename) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2633
            tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2634
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2635
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2636
        fullCachedName asFilename exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2637
            stream := fullCachedName asFilename readStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2638
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2639
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2640
        OperatingSystem isUNIXlike ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2641
            "/ cannot remove files which are still open ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2642
            "/ sigh - need a delete-on-close flag in FileStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2643
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2644
            tempFile := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2645
            fullTempName copyTo:tempFile.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2646
            stream := tempFile readStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2647
            stream notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2648
                stream removeOnClose:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2649
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2650
        ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2651
            stream := fullTempName readStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2652
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2653
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2654
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2655
    self releaseAndRemove:tempdir module:moduleDir outputTo:nil. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2656
    ^ stream
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2657
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2658
    "Created: / 4.11.1995 / 19:46:20 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2659
    "Modified: / 20.8.1997 / 16:37:11 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2660
    "Modified: / 23.8.2001 / 12:28:59 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2661
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2662
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2663
!CVSSourceCodeManager class methodsFor:'source code administration'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2664
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2665
checkForExistingContainerInModule:moduleDir directory:packageDir container:fileName
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2666
    "check for a container to exist"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2667
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2668
    |fullName ret ret2 cvsRoot cmd tempDir outputStream errorStream|
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2669
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2670
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2671
    fullName := moduleDir , '/' , packageDir , '/' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2672
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2673
    RemoteCVS ifFalse:[
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  2674
        cvsRoot := self getCVSROOTForModule:moduleDir.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2675
        cvsRoot asFilename exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2676
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2677
            "/ with local CVS - simply check if that file exists
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2678
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2679
            (fullName endsWith:',v') ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2680
                fullName := fullName , ',v'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2681
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2682
            ^ (cvsRoot , '/' , fullName) asFilename exists.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2683
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2684
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2685
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2686
    tempDir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2687
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2688
    "With remote CVS, do a no-op rtag command, which doesn't
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2689
     need a working directory, but reports missing files"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2690
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2691
    (fullName endsWith:',v') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2692
        fullName := fullName copyWithoutLast:2.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2693
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2694
1488
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2695
    "/ cg: the code below smells - it depends upon no output being generated by cvs.
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2696
    "/ (which is NOT true, as the -l flag generates a warning message (sigh).
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2697
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2698
    "/ cmd := '-n rtag -l -F dummy '.
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2699
    cmd := '-n rtag -F dummy '.
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2700
    [  
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2701
        errorStream := '' writeStream.
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2702
        outputStream := '' writeStream.
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2703
        
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2704
        ret := self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2705
                    executeCVSCommand:cmd , fullName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2706
                    module:moduleDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2707
                    "/ cg; cannot do it in current dir, in case it contains a CVS subDirectory,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2708
                    "/ with a different CVSRoot in its CVS/Root file ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2709
                    "/ cvs would complain then.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2710
                    inDirectory:(tempDir pathName) 
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2711
                    log:false
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2712
                    outputTo:outputStream
1390
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2713
                    errorTo:errorStream.
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2714
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2715
        "cannot check for exit status starting at cvs 1.11.5, because an exit status 0
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2716
         is returned even if the file does not exist"
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2717
5ca713ed160e Fix for cvs 1.11.6 and following
Stefan Vogel <sv@exept.de>
parents: 1388
diff changeset
  2718
        "But: if there is any output, the command failed and the container does not exist"
1488
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2719
        "/ cg: read comment above.
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2720
        ret2 := errorStream size == 0.
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2721
        ret2 ifFalse:[
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2722
            ret2 := (errorStream contents asCollectionOfLines 
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2723
                        reject:[:l | l isBlank or:[(l includesString:'WARNING:')] ]) size == 0 
1488
52af296c5910 rtag again - getting mad at CVS !!!!
Claus Gittinger <cg@exept.de>
parents: 1485
diff changeset
  2724
        ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2725
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2726
        tempDir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2727
    ].
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2728
    ^ ret2
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2729
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2730
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2731
     CVSSourceCodeManager 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2732
        checkForExistingContainerInModule:'stx' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2733
        package:'libbasic' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2734
        container:'Integer.st'     
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2735
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2736
     CVSSourceCodeManager 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2737
        checkForExistingContainerInModule:'stx' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2738
        package:'libtool' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2739
        container:'AboutBox.st'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2740
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2741
     CVSSourceCodeManager 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2742
        checkForExistingContainerInModule:'stx' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2743
        package:'libtool' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2744
        container:'AboutBox.st,v'     
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2745
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2746
     CVSSourceCodeManager 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2747
        checkForExistingContainerInModule:'stx' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2748
        package:'libtool' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2749
        container:'FooBar.st'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2750
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2751
     CVSSourceCodeManager 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2752
        checkForExistingContainerInModule:'DPU' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2753
        package:'test' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2754
        container:'marks'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2755
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2756
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  2757
    "Modified: / 23-07-1999 / 17:36:58 / stefan"
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2758
    "Created: / 23-08-2006 / 13:53:45 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2759
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2760
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2761
checkForExistingModule:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2762
    "check for a module to exist"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2763
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2764
    |ret cvsRoot cmd tempDir|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2765
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2766
    self activityNotification:'checking for existing module ' , moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2767
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2768
    cvsRoot := self getCVSROOTForModule:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2769
    cvsRoot isNil ifTrue:[^ false].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2770
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2771
    RemoteCVS ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2772
        cvsRoot asFilename exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2773
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2774
            "/ with local CVS - simply check if that directory exists
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2775
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2776
            ^ (cvsRoot , '/' , moduleDir) asFilename isDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2777
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2778
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2779
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2780
    tempDir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2781
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2782
    "With remote CVS, do a no-op rtag command, which doesn't
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2783
     need a working directory, but reports missing files"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2784
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2785
    cmd := '-n rtag -l dummy '.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2786
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2787
        ret := self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2788
                    executeCVSCommand:cmd , moduleDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2789
                    module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2790
                    "/ cg; cannot do it in current dir, in case it contains a CVS subDirectory,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2791
                    "/ with a different CVSRoot in its CVS/Root file ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2792
                    "/ cvs would complain then.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2793
                    inDirectory:(tempDir pathName) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2794
                    log:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2795
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2796
        tempDir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2797
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2798
    ^ ret
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2799
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2800
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2801
     CVSSourceCodeManager checkForExistingModule:'stx'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2802
     CVSSourceCodeManager checkForExistingModule:'DPU'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2803
     CVSSourceCodeManager checkForExistingModule:'cg'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2804
     CVSSourceCodeManager checkForExistingModule:'aeg' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2805
     CVSSourceCodeManager checkForExistingModule:'foo'   
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2806
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2807
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2808
    "Created: / 9.12.1995 / 19:13:37 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2809
    "Modified: / 1.3.1999 / 19:32:59 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2810
    "Modified: / 23.7.1999 / 17:38:59 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2811
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2812
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2813
checkForExistingModule:moduleDir directory:directory
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2814
    "check for a package to exist"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2815
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2816
    |ret cvsRoot cmd tempDir fullName |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2817
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2818
    self activityNotification:'checking for existing package ' , directory.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2819
1365
ad41e246bd9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  2820
    cvsRoot := self getCVSROOTForModule:moduleDir.
ad41e246bd9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  2821
    cvsRoot isNil ifTrue:[^ false].
ad41e246bd9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  2822
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2823
    fullName := moduleDir , '/' , directory.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2824
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2825
    RemoteCVS ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2826
        cvsRoot asFilename exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2827
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2828
            "/ with local CVS - simply check if that directory exists
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2829
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2830
            ^ (cvsRoot , '/' , fullName) asFilename isDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2831
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2832
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2833
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2834
    tempDir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2835
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2836
    "With remote CVS, do a no-op rtag command, which doesn't
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2837
     need a working directory, but reports missing files"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2838
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2839
    cmd := '-n rtag -l -F dummy '.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2840
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2841
        ret := self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2842
                    executeCVSCommand:cmd, fullName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2843
                    module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2844
                    "/ cg; cannot do it in current dir, in case it contains a CVS subDirectory,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2845
                    "/ with a different CVSRoot in its CVS/Root file ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2846
                    "/ cvs would complain then.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2847
                    inDirectory:(tempDir pathName) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2848
                    log:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2849
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2850
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2851
        tempDir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2852
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2853
    ^ ret
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2854
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2855
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2856
     CVSSourceCodeManager checkForExistingModule:'stx' package:'libbasic' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2857
     CVSSourceCodeManager checkForExistingModule:'aeg' package:'libProgram'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2858
     CVSSourceCodeManager checkForExistingModule:'foo' package:'libbasic' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2859
     CVSSourceCodeManager checkForExistingModule:'foo' package:'bar'   
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2860
     CVSSourceCodeManager checkForExistingModule:'cg' package:'private'   
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2861
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2862
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2863
    "Modified: / 23-07-1999 / 17:39:21 / stefan"
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  2864
    "Created: / 23-08-2006 / 14:03:03 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2865
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2866
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2867
createContainerFor:aClass inModule:moduleDir package:packageDir container:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2868
    "create a container - this does an initial checkin
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2869
     (i.e. cvs add & cvs commit)"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2870
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2871
    |fullName tempdir checkoutName cmdOut cmd tempFile idx aStream whatHappened l newRevision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2872
     changeLog entry newString startIdx endIdx checkInDir logTmp s|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2873
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2874
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2875
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2876
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2877
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2878
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2879
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2880
    fullName := moduleDir , '/' , packageDir , '/' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2881
    checkoutName :=  moduleDir , '/' , packageDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2882
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2883
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2884
    "/ first, check out everything there - this creates the CVS helpfiles
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2885
    "/ required later.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2886
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2887
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2888
    self activityNotification:'checking for directory ' , checkoutName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2889
    tempdir := self createLocalDirectory:packageDir inModule:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2890
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2891
        ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2892
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2893
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2894
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2895
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2896
    "/ create the source there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2897
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2898
    tempFile := (tempdir construct:checkoutName) construct:fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2899
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2900
        aStream := tempFile writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2901
    ] on:FileStream openErrorSignal do:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2902
        ('CVSSourceCodeManager [error]: temporary fileout failed -> ', tempFile name) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2903
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2904
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2905
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2906
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2907
    Class fileOutErrorSignal handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2908
        'CVSSourceCodeManager [error]: fileout failed' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2909
        aStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2910
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2911
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2912
    ] do:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2913
        aClass fileOutOn:aStream withTimeStamp:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2914
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2915
    aStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2916
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2917
    tempFile exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2918
        'CVSSourceCodeManager [error]: temporary fileout failed' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2919
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2920
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2921
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2922
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2923
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2924
    "/ and add it to the repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2925
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2926
    self activityNotification:'adding ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2927
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2928
    OperatingSystem isUNIXlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2929
        checkInDir := tempdir constructString:checkoutName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2930
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2931
        OperatingSystem isMSDOSlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2932
            checkInDir := tempdir constructString:(checkoutName copyReplaceAll:$/ with:$\).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2933
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2934
            self error:'VMS case not yet implemented'. "/ add code for VMS ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2935
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2936
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2937
    cmd := 'add ' , fileName , ' > ', '"' , cmdOut name, '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2938
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2939
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2940
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2941
        inDirectory:checkInDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2942
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2943
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2944
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2945
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2946
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2947
        ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2948
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2949
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2950
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2951
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2952
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2953
    "/ commit
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2954
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2955
    self activityNotification:'committing ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2956
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2957
    OperatingSystem isUNIXlike ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2958
        "/ save the log message into another tempFile ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2959
        logTmp := Filename newTemporaryIn:checkInDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2960
        s := logTmp writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2961
        s nextPutAll:'initial checkin'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2962
        s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2963
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2964
        cmd := 'commit -F "', logTmp baseName, '" ', fileName, ' > ', '"', cmdOut name, '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2965
    ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2966
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2967
        "/ CVS up to V1.9.14 prints the 'new revision' to stderr,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2968
        "/ CVS V1.9.16 to stdout.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2969
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2970
        cmd := 'commit -m "initial checkin" ' , fileName , ' > ', '"' , cmdOut name, '"', ' 2>&1'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2971
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2972
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2973
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2974
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2975
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2976
        inDirectory:checkInDir "tempdir name"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2977
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2978
        Verbose == true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2979
            'CVSMGR: failed to execute: ' infoPrint. cmd infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2980
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2981
        cmdOut fileSize > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2982
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2983
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2984
            whatHappened := '<< no message >>'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2985
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2986
        self warn:'The following problem was reported by cvs:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2987
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2988
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2989
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2990
The class has NOT been checked into the repository.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2991
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2992
       'CVSSourceCodeManager [error]: cannot checkin modified class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2993
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2994
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2995
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2996
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2997
    whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2998
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  2999
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3000
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3001
    "/ release it towards cvs
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3002
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3003
    self releaseAndRemove:tempdir module:moduleDir outputTo:nil. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3004
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3005
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3006
    "/ good - its in the CVS repository; now, we need the updated RCS header
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3007
    "/
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  3008
    (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3009
        'CVSSourceCodeManager [warning]: unexpected empty commit command output' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3010
        "/ TODO: scan the file for $Header ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3011
        "/ and extract the revision manually
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3012
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3013
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3014
        whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3015
        idx := whatHappened indexOfLineStartingWith:'initial revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3016
        idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3017
            startIdx := 18
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3018
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3019
            idx := whatHappened indexOfLineStartingWith:'new revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3020
            idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3021
                'CVSSourceCodeManager [warning]: container existed before' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3022
                startIdx := 14.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3023
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3024
                'CVSSourceCodeManager [warning]: unexpected commit command output (no new-revision info)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3025
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3026
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3027
        idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3028
            l := whatHappened at:idx.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3029
            endIdx := (l indexOf:$; startingAt:startIdx) - 1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3030
            endIdx < 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3031
                endIdx := l size
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3032
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3033
            newRevision := (l copyFrom:startIdx to:endIdx) withoutSpaces.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3034
            (Number fromString:newRevision onError:nil) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3035
                newRevision := '1.1'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3036
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3037
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3038
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3039
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3040
    Transcript showCR:'created new sourceContainer for ' , aClass name , '.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3041
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3042
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3043
    "/ patch the classes revisionInfo (but keep binaryRevision unchanged)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3044
    "/ this makes everyone here believe, that the incore version of the class is based upon
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3045
    "/ the newly checked in version.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3046
    "/ (however, the binaryRevision must remain as it is - we will need it to fetch the sourceCode
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3047
    "/  correctly for all unchanged methodss)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3048
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3049
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3050
    newRevision notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3051
        changeLog := self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3052
                        revisionLogOf:aClass 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3053
                        fromRevision:newRevision 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3054
                        toRevision:newRevision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3055
                        fileName:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3056
                        directory:packageDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3057
                        module:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3058
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3059
        (changeLog isNil or:[(changeLog at:#revisions) size ~~ 1]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3060
            'CVSSourceCodeManager [error]: failed to update revisionString (no log)' errorPrintCR
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3061
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3062
            entry := (changeLog at:#revisions) first.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3063
            newString := self revisionStringFromLog:changeLog entry:entry forClass:aClass.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3064
            aClass updateVersionMethodFor:newString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3065
            ('CVSSourceCodeManager [info]: updated revisionString to:',newString) infoPrintCR
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3066
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3067
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3068
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3069
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3070
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3071
    Class addChangeRecordForClassCheckIn:aClass.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3072
    self postCheckInClass:aClass.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3073
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3074
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3075
    "Created: / 9.12.1995 / 19:13:37 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3076
    "Modified: / 23.7.1999 / 19:47:59 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3077
    "Modified: / 5.11.2001 / 14:22:56 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3078
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3079
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3080
createContainerForText:someText inModule:moduleDir package:packageDir container:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3081
    "create a container - this does an initial checkin
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3082
     (i.e. cvs add & cvs commit)"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3083
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3084
    |fullName tempdir checkoutName cmdOut cmd tempFile idx aStream whatHappened l newRevision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3085
     startIdx endIdx checkInDir logTmp s|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3086
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3087
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3088
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3089
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3090
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3091
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3092
    fullName := moduleDir , '/' , packageDir , '/' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3093
    checkoutName :=  moduleDir , '/' , packageDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3094
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3095
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3096
    "/ first, check out everything there - this creates the CVS helpfiles
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3097
    "/ required later.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3098
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3099
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3100
    self activityNotification:'checking for directory ' , checkoutName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3101
    tempdir := self createLocalDirectory:packageDir inModule:moduleDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3102
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3103
        ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3104
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3105
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3106
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3107
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3108
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3109
        "/ create the source there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3110
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3111
        tempFile := (tempdir construct:checkoutName) construct:fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3112
        [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3113
            aStream := tempFile writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3114
        ] on:FileStream openErrorSignal do:[:ex|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3115
            ('CVSSourceCodeManager [error]: temporary fileout failed -> ', tempFile name) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3116
            ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3117
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3118
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3119
        aStream nextPutAll:someText.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3120
        aStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3121
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3122
        tempFile exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3123
            'CVSSourceCodeManager [error]: temporary fileout failed' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3124
            ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3125
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3126
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3127
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3128
        "/ and add it to the repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3129
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3130
        self activityNotification:'adding ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3131
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3132
        OperatingSystem isUNIXlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3133
            checkInDir := tempdir constructString:checkoutName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3134
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3135
            OperatingSystem isMSDOSlike ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3136
                checkInDir := tempdir constructString:(checkoutName copyReplaceAll:$/ with:$\).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3137
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3138
                self error:'VMS case not yet implemented'. "/ add code for VMS ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3139
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3140
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3141
        cmd := 'add ' , fileName , ' > ', '"' , cmdOut name, '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3142
        (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3143
            executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3144
            module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3145
            inDirectory:checkInDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3146
        ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3147
            'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3148
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3149
            cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3150
            ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3151
            ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3152
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3153
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3154
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3155
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3156
        "/ commit
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3157
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3158
        self activityNotification:'committing ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3159
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3160
        OperatingSystem isUNIXlike ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3161
            "/ save the log message into another tempFile ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3162
            logTmp := Filename newTemporaryIn:checkInDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3163
            s := logTmp writeStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3164
            s nextPutAll:'initial checkin'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3165
            s close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3166
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3167
            cmd := 'commit -F "', logTmp baseName, '" ', fileName, ' >', '"', cmdOut name, '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3168
        ] ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3169
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3170
            "/ CVS up to V1.9.14 prints the 'new revision' to stderr,
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3171
            "/ CVS V1.9.16 to stdout.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3172
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3173
            cmd := 'commit -m "initial checkin" ' , fileName , ' > ', '"' , cmdOut name, '"', ' 2>&1'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3174
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3175
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3176
        (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3177
            executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3178
            module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3179
            inDirectory:checkInDir "tempdir name"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3180
        ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3181
            Verbose == true ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3182
                'CVSMGR: failed to execute: ' infoPrint. cmd infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3183
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3184
            cmdOut fileSize > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3185
                whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3186
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3187
                whatHappened := '<< no message >>'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3188
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3189
            self warn:'The following problem was reported by cvs:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3190
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3191
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3192
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3193
The class has NOT been checked into the repository.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3194
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3195
           'CVSSourceCodeManager [error]: cannot checkin modified class source' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3196
            cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3197
            ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3198
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3199
        whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3200
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3201
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3202
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3203
        "/ release it towards cvs
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3204
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3205
        self releaseAndRemove:tempdir module:moduleDir outputTo:nil. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3206
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3207
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3208
        "/ good - its in the CVS repository; now, we need the updated RCS header
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3209
        "/
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  3210
        (whatHappened isEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3211
            'CVSSourceCodeManager [warning]: unexpected empty commit command output' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3212
            "/ TODO: scan the file for $Header ...
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3213
            "/ and extract the revision manually
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3214
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3215
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3216
            whatHappened := whatHappened asCollectionOfLines asStringCollection.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3217
            idx := whatHappened indexOfLineStartingWith:'initial revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3218
            idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3219
                startIdx := 18
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3220
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3221
                idx := whatHappened indexOfLineStartingWith:'new revision:'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3222
                idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3223
                    'CVSSourceCodeManager [warning]: container existed before' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3224
                    startIdx := 14.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3225
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3226
                    'CVSSourceCodeManager [warning]: unexpected commit command output (no new-revision info)' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3227
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3228
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3229
            idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3230
                l := whatHappened at:idx.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3231
                endIdx := (l indexOf:$; startingAt:startIdx) - 1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3232
                endIdx < 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3233
                    endIdx := l size
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3234
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3235
                newRevision := (l copyFrom:startIdx to:endIdx) withoutSpaces.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3236
                (Number fromString:newRevision onError:nil) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3237
                    newRevision := '1.1'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3238
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3239
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3240
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3241
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3242
        Transcript showCR:'created new sourceContainer for ' , fileName , '.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3243
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3244
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3245
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3246
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3247
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3248
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3249
createModule:moduleName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3250
    "create a module directory"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3251
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3252
    |tempdir moduleDir cmdOut cmd|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3253
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3254
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3255
    "/ first, create a temporary work tree
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3256
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3257
    tempdir := self createTempDirectory:nil forModule:moduleName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3258
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3259
        ('CVSSourceCodeManager [error]: no tempDir - cannot create moduleDirectory') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3260
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3261
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3262
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3263
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3264
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3265
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3266
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3267
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3268
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3269
    "/ create the module directory 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3270
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3271
    moduleDir := tempdir construct:moduleName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3272
    moduleDir exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3273
        'CVSSourceCodeManager [error]: failed to create: ' errorPrint.  moduleDir name errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3274
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3275
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3276
    ].     
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3277
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3278
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3279
    "/ then import it into CVS
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3280
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3281
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3282
    cmd := 'import -m "created from browser" ' , moduleName , ' initialV initialR > ' , cmdOut name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3283
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3284
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3285
        module:moduleName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3286
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3287
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3288
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3289
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3290
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3291
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3292
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3293
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3294
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3295
    'CVSSourceCodeManager [info]: created new module: ' infoPrint. moduleName infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3296
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3297
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3298
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3299
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3300
    "Created: / 9.12.1995 / 19:53:51 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3301
    "Modified: / 7.1.1998 / 14:18:57 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3302
    "Modified: / 6.6.1998 / 16:15:34 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3303
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3304
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3305
createModule:moduleDirName directory:packageDirName
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3306
    "create a package directory"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3307
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3308
    |tempdir cmdOut cmd packageDir moduleDir relativePath idx parentPackage|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3309
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3310
    "/ any parent package required ?
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3311
    idx := packageDirName lastIndexOf:$/.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3312
    idx ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3313
        parentPackage := packageDirName copyTo:idx-1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3314
        (self checkForExistingModule:moduleDirName package:parentPackage) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3315
            (self createModule:moduleDirName package:parentPackage) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3316
                ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3317
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3318
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3319
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3320
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3321
    (moduleDirName asFilename components includes:'core') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3322
        ('CVSSourceCodeManager [error]: cvs does not allow for a module to be named ''core'' - cannot create moduleDirectory') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3323
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3324
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3325
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3326
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3327
    "/ first, create a temporary work tree
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3328
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3329
    tempdir := self createTempDirectory:packageDirName forModule:moduleDirName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3330
    tempdir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3331
        ('CVSSourceCodeManager [error]: no tempDir - cannot create moduleDirectory') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3332
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3333
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3334
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3335
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3336
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3337
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3338
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3339
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3340
    moduleDir := tempdir construct:moduleDirName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3341
    moduleDir isDirectory ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3342
        'CVSSourceCodeManager [error]: command failed: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3343
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3344
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3345
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3346
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3347
        
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3348
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3349
    "/ create the package directory there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3350
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3351
    packageDir := moduleDir construct:packageDirName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3352
    OperatingSystem errorSignal catch:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3353
        packageDir recursiveMakeDirectory.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3354
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3355
    packageDir isDirectory ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3356
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3357
        ('CVSSourceCodeManager [error]: cannot create new directory: ' , packageDir pathName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3358
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3359
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3360
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3361
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3362
    "/ then import it into CVS
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3363
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3364
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3365
    relativePath := moduleDirName asFilename constructString:packageDirName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3366
    cmd := 'import -m "created from browser" . initialV initialR > ' , cmdOut name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3367
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3368
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3369
        module:moduleDirName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3370
        inDirectory:tempdir name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3371
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3372
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3373
        'CVSSourceCodeManager [error]: output from cvs:' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3374
        (cmdOut contentsOfEntireFile) errorPrint.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3375
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3376
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3377
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3378
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3379
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3380
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3381
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3382
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3383
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3384
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3385
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3386
      self createModule:'stefan' package:'dummy1'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3387
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3388
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3389
    "Modified: / 23-07-1999 / 18:40:49 / stefan"
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3390
    "Created: / 23-08-2006 / 14:04:39 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3391
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3392
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  3393
deleteSymbolicName:symbolicName path:pathInRepository
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3394
    "remove symbolicName from classFileName"
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3395
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  3396
    self setSymbolicName:symbolicName revision:0 overWrite:false path:pathInRepository
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3397
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3398
    "
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  3399
        self deleteSymbolicName:'stable' path:'stx/libbasic/Array.st'
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  3400
        self deleteSymbolicName:'testBLAbla' path:'stx/libbasic/Array.st'
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3401
    "
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3402
!
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3403
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3404
getExistingContainersInModule:aModule directory:aPackage
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3405
    "return a list of existing containers."
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3406
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3407
    ^ self listDirectories:aModule, '/', aPackage
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3408
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3409
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3410
     CVSSourceCodeManager getExistingContainersInModule:'stx' package:'libhtml'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3411
     CVSSourceCodeManager getExistingContainersInModule:'cg'  package:'java'
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3412
     CVSSourceCodeManager getExistingContainersInModule:'exept' package:'osi'
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3413
    "
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3414
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3415
    "Created: / 23-08-2006 / 14:12:04 / cg"
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3416
!
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3417
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3418
getExistingDirectoriesInModule:aModule
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3419
    "return a list of existing directories."
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3420
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3421
    ^ self listDirectories:aModule.
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3422
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3423
    "
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3424
     CVSSourceCodeManager getExistingDirectoriesInModule:'stx'
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3425
     CVSSourceCodeManager getExistingDirectoriesInModule:'cg'
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3426
     CVSSourceCodeManager getExistingDirectoriesInModule:'exept'
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3427
    "
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3428
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3429
    "Created: / 23-08-2006 / 14:13:41 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3430
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3431
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3432
getExistingModules
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3433
    "return a list of existing modules"
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3434
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3435
    ^ self listDirectories:nil.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3436
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3437
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3438
     CVSSourceCodeManager getExistingModules
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3439
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3440
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3441
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3442
initialRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3443
    "return a string usable as initial revision string"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3444
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3445
    |cvsRoot|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3446
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3447
    cvsRoot := self getCVSROOTForModule:moduleDir.
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  3448
    cvsRoot := self repositoryTopDirectoryFromCVSRoot:cvsRoot.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3449
    ^ self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3450
        initialRCSRevisionStringFor:aClass 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3451
        in:(cvsRoot , '/' , moduleDir , '/' , packageDir)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3452
        container:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3453
1496
fc03f35508aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
  3454
    "Modified: / 16-01-1998 / 17:34:13 / stefan"
1664
5fa005755e5f renamed *package* to *directory* to avoid confusion.
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
  3455
    "Created: / 23-08-2006 / 14:05:46 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3456
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3457
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3458
listDirectories:cvsPath
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3459
    "return a list of all directories in cvsPath.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3460
     cvsPath is the path relative to the cvs root"
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3461
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3462
    |cvsRoot directories inStream line|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3463
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3464
    cvsRoot := self getCVSROOTForModule:nil.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3465
    cvsRoot isNil ifTrue:[^ #()].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3466
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3467
    self activityNotification:'getting list of directories...'.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3468
    directories := Set new.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3469
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3470
    [
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3471
        inStream := self 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3472
                        executeCVSCommand:('rls -l ' , (cvsPath ? '')) 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3473
                        module:nil 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3474
                        inDirectory:nil 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3475
                        log:false 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3476
                        pipe:true.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3477
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3478
        inStream isNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3479
            self warn:'This operation is not possible with this remoteCVS server'.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3480
            ^ #().
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3481
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3482
1730
0dc7ef515414 support multiple managers
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  3483
        [line := inStream atEnd ifTrue:nil ifFalse:[ inStream nextLine ]. line notNil] whileTrue:[
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3484
            |idx|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3485
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3486
            "/ 'd--- 2005-06-02 17:21:20 +0200 Eigene Dateien'
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3487
        
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3488
            (line startsWith:$d) ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3489
                idx := 0.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3490
                4 timesRepeat:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3491
                    idx := line indexOf:Character space startingAt:idx+1.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3492
                ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3493
                directories add:(line copyFrom:idx+1) withoutSeparators
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3494
            ]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3495
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3496
    ] ensure:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3497
        inStream notNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3498
            inStream close.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3499
        ]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3500
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3501
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3502
    ^ directories asArray sort
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3503
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3504
    "
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3505
     CVSSourceCodeManager listDirectories:nil
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3506
     CVSSourceCodeManager listDirectories:'stx'
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3507
     CVSSourceCodeManager listDirectories:'stx/libbasic'
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3508
    "
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3509
!
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3510
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3511
newestRevisionInFile:classFileName directory:packageDir module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3512
    "return the newest revision found in a container.
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3513
     Return nil on failure."
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3514
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3515
    |tempDir fullName modulePath inStream line s|
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3516
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3517
    self use_rlog ifFalse:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3518
         "/ Uses 'cvs status' - rlog seems not to work
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3519
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3520
        |info|
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3521
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3522
        info := self
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3523
                statusOf:nil 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3524
                fileName:classFileName 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3525
                directory:packageDir 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3526
                module:moduleDir.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3527
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3528
        info isNil ifTrue:[^ nil].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3529
        ^ info at:#newestRevision ifAbsent:nil
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3530
    ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3531
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3532
    modulePath :=  moduleDir , '/' , packageDir. 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3533
    fullName :=  modulePath , '/' , classFileName.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3534
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3535
    [
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3536
        self activityNotification:'Fetching revision info for ', fullName.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3537
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3538
        inStream := self 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3539
                        executeCVSCommand:('rlog -h -N ' , fullName) 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3540
                        module:moduleDir 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3541
                        inDirectory:tempDir 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3542
                        log:true 
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3543
                        pipe:true.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3544
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3545
        inStream isNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3546
            ('CVSSourceCodeManager [error]: cannot open pipe to cvs log ', fullName) errorPrintCR.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3547
            ^ nil
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3548
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3549
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3550
        "/
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3551
        "/ read the commands pipe output and extract the container info
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3552
        "/
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3553
        [inStream atEnd] whileFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3554
            line:= inStream nextLine.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3555
            line notNil ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3556
                line := line withoutSeparators.
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3557
                line notEmpty ifTrue:[
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3558
                    s := line restAfter:'RCS file:' withoutSeparators:true. 
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3559
                    s notNil ifTrue:[ 
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3560
                        (UnixFilename named:s) directory baseName = 'Attic' ifTrue:[
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3561
                            "/ file has been removed in the repository
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3562
                            ^ #deleted
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3563
                        ].
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3564
                    ].
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3565
                    s := line restAfter:'head:' withoutSeparators:true.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3566
                    s notNil ifTrue:[ |i|
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3567
                        i := s indexOfSeparator.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3568
                        i ~~ 0 ifTrue:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3569
                            s := s copyTo:i-1
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3570
                        ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3571
                        ^ s
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3572
                    ].                        
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3573
                ].                        
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3574
            ]
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3575
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3576
        ('CVSSourceCodeManager [warning]: no revision for ', fullName) errorPrintCR.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3577
    ] ensure:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3578
        inStream notNil ifTrue:[inStream close].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3579
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  3580
    ^ nil
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3581
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3582
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3583
     SourceCodeManager newestRevisionInFile:'Array.st' directory:'libbasic' module:'stx'       
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3584
    "
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3585
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  3586
    "Modified: / 04-07-2006 / 18:19:41 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3587
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3588
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3589
removeContainerFor:aClass inModule:moduleDir package:packageDir container:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3590
    "remove a container"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3591
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3592
    (self removeContainerInModule:moduleDir package:packageDir container:fileName) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3593
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3594
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3595
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3596
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3597
    "/ patch the classes revisionInfo (but keep binaryRevision unchanged)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3598
    "/ this makes everyone here believe, that the incore version of the class is based upon
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3599
    "/ some container-less class.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3600
    "/ (however, the binaryRevision must remain as it is - we will need it to fetch the sourceCode
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3601
    "/  correctly for all unchanged methodss)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3602
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3603
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3604
    aClass updateVersionMethodFor:'no longer in repository'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3605
    Class addChangeRecordForClassContainerRemove:aClass.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3606
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3607
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3608
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3609
removeContainerInModule:moduleDir package:packageDir container:fileName
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3610
    "remove a container"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3611
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3612
    |fullName tempdir checkoutName cmdOut cmd tempFile whatHappened|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3613
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3614
    fullName := moduleDir , '/' , packageDir , '/' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3615
    checkoutName :=  moduleDir , '/' , packageDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3616
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3617
    (tempdir := self createLocalDirectory:packageDir inModule:moduleDir with:fileName) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3618
        'CVSSourceCodeManager [error]: failed to checkout: ' errorPrint. checkoutName errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3619
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3620
        ('CVSSourceCodeManager [error]: cannot checkout ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3621
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3622
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3623
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3624
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3625
    "/ and remove it to the repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3626
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3627
    self activityNotification:'removing ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3628
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3629
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3630
    "/ check presence of source there
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3631
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3632
    tempFile := (tempdir construct:checkoutName) construct:fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3633
    tempFile exists ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3634
        'CVSSourceCodeManager [error]: temporary fileout failed' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3635
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3636
        ^ false
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3637
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3638
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3639
    tempFile exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3640
        tempFile remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3641
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3642
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3643
    cmdOut := Filename newTemporary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3644
    cmdOut exists ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3645
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3646
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3647
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3648
    cmd := 'remove ' , fileName , ' > ' , cmdOut name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3649
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3650
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3651
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3652
        inDirectory:(tempdir constructString:checkoutName)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3653
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3654
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3655
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3656
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3657
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3658
        ('CVSSourceCodeManager [error]: cannot remove ' , checkoutName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3659
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3660
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3661
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3662
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3663
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3664
    "/ commit
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3665
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3666
    self activityNotification:'committing removal of ' , fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3667
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3668
    cmd := 'commit -m "removed container" -l ' , fileName , ' 2> ' , cmdOut name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3669
    (self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3670
        executeCVSCommand:cmd 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3671
        module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3672
        inDirectory:(tempdir constructString:checkoutName)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3673
    ) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3674
        'CVSSourceCodeManager [error]: failed to execute: ' errorPrint. cmd errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3675
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3676
        cmdOut fileSize > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3677
            whatHappened := cmdOut contentsOfEntireFile asString.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3678
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3679
            whatHappened := '<< no message >>'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3680
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3681
        self warn:'The following problem was reported by cvs:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3682
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3683
' , whatHappened , '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3684
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3685
The container has NOT been removed into the repository.'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3686
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3687
       'CVSSourceCodeManager [error]: cannot remove container' errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3688
        cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3689
        tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3690
        ^ false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3691
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3692
    cmdOut remove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3693
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3694
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3695
    "/ release the temporary tree towards cvs
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3696
    "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3697
    self releaseAndRemove:tempdir module:moduleDir outputTo:nil. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3698
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3699
    tempdir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3700
    ^ true
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3701
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3702
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3703
     CVSSourceCodeManager removeContainerInModule:'stx' package:'private' container:'WorldPO.st'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3704
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3705
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3706
    "Modified: / 26.2.1998 / 17:33:57 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3707
    "Modified: / 18.1.2000 / 21:02:30 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3708
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3709
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3710
reportHistoryLogSince:timeGoal filterSTSources:filter filterUser:userFilter filterRepository:filterRep filterModules:filterModules inTo:aBlock
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3711
    "process a full historyLog, evaluate aBlock for each entry, passing 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3712
     the logs info in a dictionary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3713
     This walks over all possible repositories.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3714
     filterRep may be a collection of repository names 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3715
     (i.e. 'stc', 'exept', 'phx' etc.) to only report changes made to one
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3716
     of those repositories.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3717
     filterUser, if non-nil, will filter only changes made by that user."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3718
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3719
    |inStream line words recordType fileName user date time rev pkgDir module idx
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3720
     clsName cls clsRev roots info tempDir endReached|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3721
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3722
    CVSRoot isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3723
        'CVSSourceCodeManager [info]: CVSROOT not set' infoPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3724
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3725
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3726
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3727
    filterRep notEmptyOrNil ifTrue:[
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3728
        roots := filterRep.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3729
    ] ifFalse:[
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3730
        roots := Set withAll:(CVSModuleRoots values).
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3731
        roots add:CVSRoot.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3732
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3733
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3734
    "/ must do it in a tempDir, to avoid cvs validating the -D arg
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3735
    "/ against any info found in CVS/Root
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3736
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3737
    tempDir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3738
    tempDir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3739
        ('CVSSourceCodeManager [error]: no tempDir - cannot extract log') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3740
        ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3741
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3742
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3743
    roots do:[:eachCvsRoot |
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3744
        |root host cmd|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3745
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3746
        cmd := 'cvs -d ' , eachCvsRoot.
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3747
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3748
        cmd := cmd , ' history -x ARM -a'.
1447
2ac1cf09722b isEmptyOrNil / notEmptyOrNil refactoring
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
  3749
        (timeGoal notEmptyOrNil) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3750
            cmd := cmd , ' -D "' , timeGoal , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3751
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3752
        userFilter notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3753
            userFilter isString ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3754
                cmd := cmd , ' -u "' , userFilter , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3755
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3756
                userFilter do:[:user |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3757
                    cmd := cmd , ' -u "' , user , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3758
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3759
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3760
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3761
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3762
"/ The -m and -x options do not work together in cvs history
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3763
"/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3764
"/        filterModules notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3765
"/            filterModules do:[:aModule |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3766
"/                cmd := cmd , ' -m "' , aModule , '"'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3767
"/            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3768
"/        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3769
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3770
        Transcript showCR:cmd.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3771
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3772
        inStream := PipeStream readingFrom:cmd inDirectory:tempDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3773
        inStream isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3774
            ('CVSSourceCodeManager [error]: cannot open pipe to ''cvs history''') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3775
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3776
            inStream class streamErrorSignal handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3777
                ('CVSSourceCodeManager [error]: pipe read error (''cvs history'')') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3778
                ex return.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3779
            ] do:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3780
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3781
                "/ read the commands pipe output and reformat the lines
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3782
                "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3783
                endReached := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3784
                [endReached] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3785
                    inStream readWait.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3786
                    line := inStream nextLine.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3787
                    (endReached := line isNil) ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3788
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3789
                        "/ cvs history line is of the following format:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3790
                        "/ [Ma] date time +xxx user rev name module/package ....
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3791
                        words := line asCollectionOfWords.
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3792
                        words size < 8 ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3793
                            "/ something like 'No records selected' ...
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3794
                        ] ifFalse:[
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3795
                            "a valid history line"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3796
                            recordType := words at:1.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3797
                            fileName := words at:7.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3798
                            user := words at:5.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3799
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3800
                            (filter not 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3801
                            or:[fileName endsWith:'.st']) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3802
                                (userFilter isNil
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3803
                                or:[userFilter includes:user]) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3804
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3805
                                    date := words at:2.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3806
                                    time := words at:3.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3807
                                    rev := words at:6.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3808
                                    pkgDir := words at:8.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3809
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3810
                                    module := pkgDir.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3811
                                    (module startsWith:'./') ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3812
                                        module := module copyFrom:3.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3813
                                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3814
                                    idx := module indexOf:$/.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3815
                                    idx ~~ 0 ifTrue:[    
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3816
                                        module := module copyTo:idx-1.
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3817
                                    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3818
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3819
                                    (filterModules isNil 
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3820
                                     or:[filterModules includes:module]) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3821
                                        recordType = 'M' ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3822
                                            recordType := ' '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3823
                                        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3824
                                            recordType = 'A' ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3825
                                                recordType := '+'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3826
                                            ] ifFalse:[
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3827
                                                recordType = 'R' ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3828
                                                    recordType := '-'
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3829
                                                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3830
                                            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3831
                                        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3832
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3833
                                        info := Dictionary new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3834
                                        info at:#cvsRecordType       put:recordType.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3835
                                        info at:#date                put:date.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3836
                                        info at:#time                put:time.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3837
                                        info at:#user                put:user.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3838
                                        info at:#fileName            put:fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3839
                                        info at:#revision            put:rev.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3840
                                        info at:#directory           put:pkgDir.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3841
                                        info at:#className           put:(Smalltalk classNameForFile:fileName).
1481
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3842
                                        info at:#cvsRoot             put:eachCvsRoot.
893aa9458a8f Fix "cvs history"
Stefan Vogel <sv@exept.de>
parents: 1477
diff changeset
  3843
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3844
                                        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3845
                                        "/ for your convenience:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3846
                                        "/  check what the actual version is in the image
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3847
                                        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3848
                                        clsName := Smalltalk classNameForFile:fileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3849
                                        clsName notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3850
                                            cls := Smalltalk classNamed:clsName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3851
                                            (cls notNil and:[(clsRev := cls revision) notNil]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3852
                                                info at:#classesRevision     put:clsRev.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3853
                                            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3854
                                        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3855
                                        aBlock value:info
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3856
                                    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3857
                                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3858
                            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3859
                        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3860
                    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3861
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3862
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3863
            inStream close.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3864
        ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3865
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3866
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3867
    tempDir recursiveRemove.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3868
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3869
    "Created: / 17.1.2001 / 13:11:20 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3870
    "Modified: / 17.1.2001 / 13:41:22 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3871
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3872
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3873
reportHistoryLogSince:timeGoal filterSTSources:filter filterUser:userFilter filterRepository:filterRep inTo:aBlock
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3874
    "process a full historyLog, evaluate aBlock for each entry, passing 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3875
     the logs info in a dictionary.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3876
     This walks over all possible repositories.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3877
     filterRep may be a collection of repository names 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3878
     (i.e. 'stc', 'exept', 'phx' etc.) to only report changes made to one
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3879
     of those repositories.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3880
     filterUser, if non-nil, will filter only changes made by that user."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3881
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3882
    ^self
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3883
        reportHistoryLogSince:timeGoal 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3884
        filterSTSources:filter 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3885
        filterUser:userFilter 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3886
        filterRepository:filterRep 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3887
        filterModules:nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3888
        inTo:aBlock
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3889
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3890
    "Modified: / 17.1.2001 / 13:12:15 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3891
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3892
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3893
revisionInfoFromString:aString
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3894
    "{ Pragma: +optSpace }"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3895
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3896
    "return a dictionary filled with revision info.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3897
     This extracts the relevant info from aString."
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3898
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3899
    ^ self revisionInfoFromRCSString:aString
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3900
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3901
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3902
     self revisionInfoFromString:(Array version)   
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3903
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3904
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3905
    "Modified: 29.1.1997 / 19:00:35 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3906
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3907
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3908
revisionLogOf:clsOrNil fromRevision:firstRev toRevision:lastRef fileName:classFileName directory:packageDir module:moduleDir 
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3909
    ^ self 
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3910
        revisionLogOf:clsOrNil
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3911
        fromRevision:firstRev
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3912
        toRevision:lastRef
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3913
        numberOfRevisions:nil
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3914
        fileName:classFileName
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3915
        directory:packageDir
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3916
        module:moduleDir
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3917
!
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3918
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3919
revisionLogOf:clsOrNil fromRevision:firstRev toRevision:lastRef numberOfRevisions:numRevisions fileName:classFileName directory:packageDir module:moduleDir
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3920
    "return info about the repository container and
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3921
     (part of) the revisionlog as a collection of revision entries.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3922
     Return nil on failure.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3923
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3924
     If numRevisions is notNil, it limits the number of revision records returned -
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3925
     only numRevions of the newest revision infos will be collected.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3926
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3927
     The returned information is a structure (IdentityDictionary)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3928
     filled with:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3929
            #container          -> the RCS/CVS container file name 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3930
            #cvsRoot            -> the CVS root (repository) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3931
            #filename           -> the actual source file name
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3932
            #newestRevision     -> the revisionString of the newest revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3933
            #numberOfRevisions  -> the number of revisions in the container (nil for all)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3934
            #revisions          -> collection of per-revision info (see below)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3935
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3936
            firstRev / lastRef specify from which revisions a logEntry is wanted:
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3937
             -If firstRev is nil, the first revision is the initial revision
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3938
              otherwise, the log starts with that revision.
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3939
             -If lastRef is nil, the last revision is the newest revision
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3940
              otherwise, the log ends with that revision.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3941
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3942
             -If both are nil, all logEntries are extracted.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3943
             -If both are 0 (not nil), no logEntries are extracted (i.e. only the header).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3944
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3945
            per revision info consists of one record per revision:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3946
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3947
              #revision              -> the revision string
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3948
              #author                -> who checked that revision into the repository
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3949
              #date                  -> when was it checked in
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3950
              #state                 -> the RCS state
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3951
              #numberOfChangedLines  -> the number of changed line w.r.t the previous
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3952
              #logMessage            -> the checkIn log message
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3953
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3954
            revisions are ordered newest first 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3955
            (i.e. the last entry is for the initial revision; the first for the most recent one)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3956
        "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3957
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3958
    |tempDir fullName modulePath inStream inHeaderInfo atEnd line idx
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3959
     info record revisionRecords s headerOnly msg|
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3960
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3961
    self use_rlog ifFalse:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3962
        tempDir := self createTempDirectory:nil forModule:nil.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3963
        tempDir isNil ifTrue:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3964
            ('CVSSourceCodeManager [error]: no tempDir - cannot extract log') errorPrintCR.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3965
            ^ nil.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3966
        ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3967
    ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3968
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3969
    [
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3970
        |cmd revArg|
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3971
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3972
        modulePath :=  moduleDir , '/' , packageDir. 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3973
        fullName :=  modulePath , '/' , classFileName.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3974
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3975
        self use_rlog ifFalse:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3976
            self createEntryFor:fullName 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3977
                 module:moduleDir
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3978
                 in:(tempDir construct:modulePath) 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3979
                 revision:'1.1' 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3980
                 date:'dummy' 
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3981
                 special:''
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3982
                 overwrite:false.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3983
        ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  3984
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3985
        revArg := ''.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3986
        headerOnly := false.
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3987
        (firstRev notNil or:[lastRef notNil]) ifTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3988
            (firstRev == 0 and:[lastRef == 0]) ifTrue:[
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3989
                revArg := '-h'.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3990
                headerOnly := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3991
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3992
                revArg := '-r'.
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3993
                firstRev notNil ifTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3994
                    revArg := revArg , firstRev
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3995
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3996
                revArg := revArg , ':'.
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3997
                lastRef notNil ifTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  3998
                    revArg := revArg , lastRef
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  3999
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4000
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4001
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4002
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4003
        headerOnly ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4004
            msg := 'fetching revision info '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4005
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4006
            msg := 'reading revision log '
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4007
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4008
        clsOrNil isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4009
            msg := msg , 'in ' , fullName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4010
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4011
            msg := msg , 'of ', clsOrNil name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4012
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4013
        self activityNotification:msg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4014
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4015
        self use_rlog ifTrue:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4016
            cmd := ('rlog ' , revArg , ' ' , fullName).
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4017
        ] ifFalse:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4018
            cmd := ('log ' , revArg , ' ' , fullName).
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4019
        ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4020
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4021
        inStream := self 
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4022
                        executeCVSCommand:('rlog ' , revArg , ' ' , fullName) 
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4023
                        module:moduleDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4024
                        inDirectory:tempDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4025
                        log:true 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4026
                        pipe:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4027
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4028
        inStream isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4029
            ('CVSSourceCodeManager [error]: cannot open pipe to cvs log ', fullName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4030
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4031
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4032
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4033
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4034
        "/ read the commands pipe output and extract the container info
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4035
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4036
        info := IdentityDictionary new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4037
        inHeaderInfo := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4038
        [inHeaderInfo and:[inStream atEnd not]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4039
            line:= inStream nextLine.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4040
            line notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4041
                |gotIt|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4042
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4043
                gotIt := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4044
                #('RCS file:'        #container
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4045
                  'Working file:'    #filename
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4046
                  'head:'            #newestRevision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4047
                  'total revisions:' #numberOfRevisions
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4048
                 ) pairWiseDo:[:word :key |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4049
                    gotIt ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4050
                        s := line restAfter:word withoutSeparators:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4051
                        s notNil ifTrue:[info at:key put:s. gotIt := true].                        
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4052
                    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4053
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4054
                gotIt ifFalse:[
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4055
                    (line startsWith:'symbolic names:') ifTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4056
                        |tags tokens|
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4057
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4058
                        tags := Dictionary new.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4059
                        line:= inStream nextLine.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4060
                        [line notNil 
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4061
                         and:[(line startsWith:Character space) or:[line startsWith:Character tab]]] whileTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4062
                            tokens := line asCollectionOfSubstringsSeparatedBy:$:.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4063
                            tags at:(tokens first withoutSeparators) put:(tokens second withoutSeparators).
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4064
                            line:= inStream nextLine.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4065
                        ].
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4066
                        info at:#symbolicNames put:tags.
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4067
                    ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4068
                    (line startsWith:'description:') ifTrue:[inHeaderInfo := false].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4069
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4070
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4071
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4072
        inStream nextLine. "/ skip separating line after description.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4073
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4074
        info isEmpty ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4075
            ('CVSSourceCodeManager [warning]: no log for ', fullName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4076
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4077
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4078
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4079
        "/ strip selected revisions from the total-revisions entry
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4080
        s := info at:#numberOfRevisions.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4081
        (idx := s indexOf:$;) ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4082
            info at:#numberOfRevisions put:(Integer readFrom:(s copyTo:idx - 1))
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4083
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4084
            info at:#numberOfRevisions put:(Integer readFrom:s onError:[1])
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4085
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4086
        headerOnly ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4087
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4088
            "/ continue to read the commands pipe output 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4089
            "/ and extract revision info records
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4090
            "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4091
            revisionRecords := OrderedCollection new:(info at:#numberOfRevisions).
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4092
            info at:#revisions put:revisionRecords.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4093
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4094
            atEnd := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4095
            [atEnd or:[inStream atEnd]] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4096
                record := self readRevisionLogEntryFromStream:inStream.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4097
                record isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4098
                    atEnd := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4099
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4100
                    revisionRecords add:record.
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4101
                ].
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4102
                (numRevisions notNil and:[revisionRecords size >= numRevisions]) ifTrue:[
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4103
                    atEnd := true
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4104
                ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4105
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4106
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4107
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4108
        inStream notNil ifTrue:[inStream close].
1464
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4109
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4110
        tempDir notNil ifTrue:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4111
            OperatingSystem accessDeniedErrorSignal handle:[:ex |
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4112
                ('CVSSourceCodeManager [warning]: could not remove tempDir ', tempDir pathName) infoPrintCR.
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4113
            ] do:[
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4114
                tempDir recursiveRemove
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4115
            ].
edce7759095b STEFAN: rlog does not work under WINDOWS !!!
Claus Gittinger <cg@exept.de>
parents: 1459
diff changeset
  4116
        ].
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4117
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4118
    ^ info
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4119
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4120
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4121
     SourceCodeManager revisionLogOf:Array 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4122
     SourceCodeManager revisionLogOf:Array fromRevision:'1.40' toRevision:'1.43' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4123
     SourceCodeManager revisionLogOf:Array fromRevision:'1.40' toRevision:nil  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4124
     SourceCodeManager revisionLogOf:Array fromRevision:nil toRevision:'1.3'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4125
     SourceCodeManager revisionLogOf:Array fromRevision:nil toRevision:nil  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4126
     SourceCodeManager revisionLogOf:Array fromRevision:0 toRevision:0  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4127
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4128
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4129
    "Created: / 16.11.1995 / 13:25:30 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4130
    "Modified: / 29.1.1997 / 16:51:30 / stefan"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4131
    "Modified: / 27.8.1998 / 12:40:59 / cg"
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4132
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4133
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4134
revisionLogOf:clsOrNil numberOfRevisions:numRevisions fileName:classFileName directory:packageDir module:moduleDir
1451
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4135
    ^ self 
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4136
        revisionLogOf:clsOrNil
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4137
        fromRevision:nil
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4138
        toRevision:nil
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4139
        numberOfRevisions:numRevisions
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4140
        fileName:classFileName
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4141
        directory:packageDir
561003a458bb Show tags in revisionLog
Stefan Vogel <sv@exept.de>
parents: 1448
diff changeset
  4142
        module:moduleDir
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4143
!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4144
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4145
setSymbolicName:symbolicName revision:rev overWrite:overWriteBool path:pathInRepository
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4146
    "set a symbolicName for revision rev.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4147
     If rev is nil, set it for the head (most recent) revision.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4148
     If rev is 0, delete the symbolic name.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4149
     If overWriteBool is true, the symbolicName will be changed, even if it has already been set.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4150
     If overWriteBool is false, an error will be raised if symbolicName has already been set.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4151
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4152
     If filename is nil, the symbolicName for a whole package is set"
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4153
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4154
    |inStream argumentString result errorStream outStream moduleDir|
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4155
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4156
    moduleDir := (pathInRepository asCollectionOfSubstringsSeparatedByAny:'/\') first.
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4157
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4158
    rev = 0 ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4159
        argumentString := ' -d '.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4160
    ] ifFalse:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4161
        argumentString := ' -r ', (rev ? 'HEAD').
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4162
        overWriteBool ifTrue:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4163
            argumentString := argumentString, ' -F'
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4164
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4165
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4166
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4167
    [
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4168
        self activityNotification:'setting symbolic name ', pathInRepository.
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4169
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4170
        errorStream := '' writeStream.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4171
        outStream := '' writeStream.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4172
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4173
        result := self  executeCVSCommand:('rtag ' , argumentString, ' ', symbolicName, ' ', pathInRepository) 
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4174
                        module:moduleDir 
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4175
                        inDirectory:nil 
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4176
                        log:true
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4177
                        outputTo:outStream
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4178
                        errorTo:errorStream.
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4179
        (result not or:[errorStream size ~~ 0]) ifTrue:[
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4180
            SourceCodeManagerError raiseWith:errorStream contents errorString:' cvs tag failed: ', pathInRepository.
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4181
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4182
        (outStream contents asStringCollection contains:[:eachLine| eachLine startsWithAnyOf:'WE']) ifTrue:[
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4183
            SourceCodeManagerError raiseWith:outStream contents errorString:' cvs tag could not be set: ', pathInRepository.
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4184
        ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4185
    ] ensure:[
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4186
        inStream notNil ifTrue:[inStream close].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4187
    ].
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4188
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4189
    "
1459
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4190
        self setSymbolicName:'stable' revision:nil overWrite:false path:'stx/libbasic/Array.st'
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4191
        self setSymbolicName:'stable' revision:nil overWrite:true path:'stx/libbasic/Array.st'
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4192
        self setSymbolicName:'stable' revision:nil overWrite:true path:'stx/libbasic/Array.st'
83c50df5be7f Setting/deleting symbolic names
Stefan Vogel <sv@exept.de>
parents: 1457
diff changeset
  4193
        self setSymbolicName:'stable' revision:'1.1' overWrite:true path:'stx/libbasic/Array.st'
1457
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4194
    "
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4195
!
8383e94050aa Use cvs rlog and cvs rls to avoid temp directory creation
Stefan Vogel <sv@exept.de>
parents: 1451
diff changeset
  4196
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4197
statusOf:clsOrNil fileName:classFileName directory:packageDir module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4198
    "return info about the status repository container.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4199
     Return nil on failure.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4200
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4201
     The returned information is a structure (IdentityDictionary)
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4202
     filled with:
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4203
            #newestRevision     -> the revisionString of the newest revision
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4204
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4205
     This is much faster than revisionLog info (especially, if there are many revisions),
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4206
     and all we need is a classes newest version number.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4207
        "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4208
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4209
    |tempDir fullName modulePath inStream line   
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4210
     info s msg|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4211
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4212
    modulePath :=  moduleDir , '/' , packageDir. 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4213
    fullName :=  modulePath , '/' , classFileName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4214
    tempDir := self createTempDirectory:nil forModule:nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4215
    tempDir isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4216
        ('CVSSourceCodeManager [error]: no tempDir - cannot extract log') errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4217
        ^ nil.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4218
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4219
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4220
    [
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4221
        self createEntryFor:fullName 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4222
             module:moduleDir
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4223
             in:(tempDir construct:modulePath) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4224
             revision:'1.1' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4225
             date:'dummy' 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4226
             special:''
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4227
             overwrite:false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4228
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4229
        msg := 'fetching status info of '.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4230
        clsOrNil isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4231
            msg := msg , fullName.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4232
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4233
            msg := msg , clsOrNil name.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4234
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4235
        self activityNotification:msg.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4236
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4237
        inStream := self 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4238
                        executeCVSCommand:('status ' , fullName) 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4239
                        module:moduleDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4240
                        inDirectory:tempDir 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4241
                        log:true 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4242
                        pipe:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4243
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4244
        inStream isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4245
            ('CVSSourceCodeManager [error]: cannot open pipe to cvs log ', fullName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4246
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4247
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4248
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4249
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4250
        "/ read the commands pipe output and extract the container info
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4251
        "/
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4252
        info := IdentityDictionary new.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4253
        [inStream atEnd] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4254
            line:= inStream nextLine.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4255
            line notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4256
                line := line withoutSeparators.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4257
            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4258
            line size > 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4259
                |gotIt i|
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4260
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4261
                gotIt := false.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4262
                #(
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4263
                  'Repository revision:'  #newestRevision
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  4264
                  'File:'  #fileStatus
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4265
                 ) pairWiseDo:[:word :key |
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4266
                    gotIt ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4267
                        s := line restAfter:word withoutSeparators:true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4268
                        s notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4269
                            i := s indexOfSeparator.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4270
                            i ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4271
                                s := s copyTo:i-1
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4272
                            ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4273
                            info at:key put:s.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4274
                            gotIt := true.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4275
                        ].                        
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4276
                    ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4277
                ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4278
            ]
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4279
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4280
        info isEmpty ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4281
            ('CVSSourceCodeManager [warning]: no status for ', fullName) errorPrintCR.
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4282
            ^ nil
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4283
        ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4284
    ] ensure:[
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4285
        inStream notNil ifTrue:[inStream close].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4286
        tempDir recursiveRemove
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4287
    ].
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4288
    ^ info
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4289
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4290
    "
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4291
     SourceCodeManager statusOf:Array 
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4292
     SourceCodeManager statusOf:Array fileName:'Array.st' directory:'libbasic' module:'stx'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4293
     SourceCodeManager statusOf:Filename fileName:'Filename.st' directory:'libbasic' module:'stx'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4294
     SourceCodeManager statusOf:NewSystemBrowser fileName:'NewSystemBrowser.st' directory:'libtool' module:'stx'  
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4295
    "
1502
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  4296
705913d4cae0 care for files in the Attic
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
  4297
    "Modified: / 04-07-2006 / 17:46:22 / cg"
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4298
! !
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4299
1526
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4300
!CVSSourceCodeManager class methodsFor:'testing'!
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4301
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4302
isCVS
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4303
    ^ true
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4304
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4305
    "Created: / 16-08-2006 / 10:58:19 / cg"
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4306
! !
7fd70c49ed6d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
  4307
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4308
!CVSSourceCodeManager class methodsFor:'documentation'!
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4309
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4310
version
1736
2c44d15f1a0f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  4311
    ^ '$Header: /cvs/stx/stx/libbasic3/CVSSourceCodeManager.st,v 1.318 2006-08-25 17:42:16 cg Exp $'
1362
Claus Gittinger <cg@exept.de>
parents: 1361
diff changeset
  4312
! !
1170
Claus Gittinger <cg@exept.de>
parents: 1159
diff changeset
  4313
130
4abc831b165f oops - invalid ccheckin
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
  4314
CVSSourceCodeManager initialize!