SVN__UpdateTask.st
author fm
Wed, 23 Sep 2009 18:50:18 +0200
changeset 77 b27f361cc834
child 207 1f90147b8b31
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77
b27f361cc834 initial checkin
fm
parents:
diff changeset
     1
"{ Package: 'cvut:stx/goodies/libsvn' }"
b27f361cc834 initial checkin
fm
parents:
diff changeset
     2
b27f361cc834 initial checkin
fm
parents:
diff changeset
     3
"{ NameSpace: SVN }"
b27f361cc834 initial checkin
fm
parents:
diff changeset
     4
b27f361cc834 initial checkin
fm
parents:
diff changeset
     5
FileoutLikeTask subclass:#UpdateTask
b27f361cc834 initial checkin
fm
parents:
diff changeset
     6
	instanceVariableNames:'revision notifications updates conflicts resolution'
b27f361cc834 initial checkin
fm
parents:
diff changeset
     7
	classVariableNames:''
b27f361cc834 initial checkin
fm
parents:
diff changeset
     8
	poolDictionaries:''
b27f361cc834 initial checkin
fm
parents:
diff changeset
     9
	category:'SVN-Tasks'
b27f361cc834 initial checkin
fm
parents:
diff changeset
    10
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    11
b27f361cc834 initial checkin
fm
parents:
diff changeset
    12
!UpdateTask class methodsFor:'documentation'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    13
b27f361cc834 initial checkin
fm
parents:
diff changeset
    14
version_SVN
b27f361cc834 initial checkin
fm
parents:
diff changeset
    15
    ^'$Id$'
b27f361cc834 initial checkin
fm
parents:
diff changeset
    16
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
    17
b27f361cc834 initial checkin
fm
parents:
diff changeset
    18
!UpdateTask methodsFor:'accessing'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    19
b27f361cc834 initial checkin
fm
parents:
diff changeset
    20
revision
b27f361cc834 initial checkin
fm
parents:
diff changeset
    21
    ^ revision
b27f361cc834 initial checkin
fm
parents:
diff changeset
    22
b27f361cc834 initial checkin
fm
parents:
diff changeset
    23
    "Modified: / 09-04-2009 / 09:39:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    24
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    25
b27f361cc834 initial checkin
fm
parents:
diff changeset
    26
revision:aRevision
b27f361cc834 initial checkin
fm
parents:
diff changeset
    27
    revision := aRevision.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    28
    loadChangeSet := mergeDiffSet := updateChangeSet := nil.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    29
b27f361cc834 initial checkin
fm
parents:
diff changeset
    30
    "Modified: / 23-03-2009 / 18:40:00 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    31
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
    32
b27f361cc834 initial checkin
fm
parents:
diff changeset
    33
!UpdateTask methodsFor:'executing'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    34
b27f361cc834 initial checkin
fm
parents:
diff changeset
    35
do
b27f361cc834 initial checkin
fm
parents:
diff changeset
    36
    "
b27f361cc834 initial checkin
fm
parents:
diff changeset
    37
     Perform whole task"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    38
    
b27f361cc834 initial checkin
fm
parents:
diff changeset
    39
    self assert: revision notNil message: 'No revision specified'.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    40
    self doUpdateWorkingCopy doApplyMergedChangeSet
b27f361cc834 initial checkin
fm
parents:
diff changeset
    41
b27f361cc834 initial checkin
fm
parents:
diff changeset
    42
    "Modified: / 09-04-2009 / 09:40:28 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    43
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    44
b27f361cc834 initial checkin
fm
parents:
diff changeset
    45
doApplyResolutions
b27f361cc834 initial checkin
fm
parents:
diff changeset
    46
    self do: 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    47
        [resolution isNilOrEmptyCollection ifFalse:
b27f361cc834 initial checkin
fm
parents:
diff changeset
    48
            [(Class updateChangeFileQuerySignal , Class updateChangeListQuerySignal)
b27f361cc834 initial checkin
fm
parents:
diff changeset
    49
                answer: false
b27f361cc834 initial checkin
fm
parents:
diff changeset
    50
                do: 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    51
                    [resolution withIndexDo: 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    52
                        [:change :index | 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    53
                        change apply.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    54
                        SVN::ProgressNotification 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    55
                            notify: 'Applying changes'
b27f361cc834 initial checkin
fm
parents:
diff changeset
    56
                            progress: (100 / resolution size) * index ] ] ].
b27f361cc834 initial checkin
fm
parents:
diff changeset
    57
        self doCompileSvnRevisionNrMethod: true]
b27f361cc834 initial checkin
fm
parents:
diff changeset
    58
b27f361cc834 initial checkin
fm
parents:
diff changeset
    59
    "Created: / 23-03-2009 / 18:36:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    60
    "Modified: / 17-08-2009 / 19:39:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    61
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    62
b27f361cc834 initial checkin
fm
parents:
diff changeset
    63
doUpdateWorkingCopy
b27f361cc834 initial checkin
fm
parents:
diff changeset
    64
    self do: 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    65
            [ self workingCopy ensureIsValid.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    66
            self
b27f361cc834 initial checkin
fm
parents:
diff changeset
    67
                doRevert;
b27f361cc834 initial checkin
fm
parents:
diff changeset
    68
                doFileOutAll;
b27f361cc834 initial checkin
fm
parents:
diff changeset
    69
                doUpdate;
b27f361cc834 initial checkin
fm
parents:
diff changeset
    70
                doLoadChanges ]
b27f361cc834 initial checkin
fm
parents:
diff changeset
    71
b27f361cc834 initial checkin
fm
parents:
diff changeset
    72
    "Created: / 23-03-2009 / 18:35:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    73
    "Modified: / 17-08-2009 / 19:01:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    74
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
    75
b27f361cc834 initial checkin
fm
parents:
diff changeset
    76
!UpdateTask methodsFor:'executing - private'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    77
b27f361cc834 initial checkin
fm
parents:
diff changeset
    78
doLoadChanges
b27f361cc834 initial checkin
fm
parents:
diff changeset
    79
    updates := ChangeSet new.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    80
    conflicts := ChangeSet::DiffSet new.
b27f361cc834 initial checkin
fm
parents:
diff changeset
    81
    notifications do: [:each | self doLoadChangesFor: each ].
b27f361cc834 initial checkin
fm
parents:
diff changeset
    82
b27f361cc834 initial checkin
fm
parents:
diff changeset
    83
    "Modified: / 18-08-2009 / 08:59:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    84
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    85
b27f361cc834 initial checkin
fm
parents:
diff changeset
    86
doLoadChangesFor: aWCActionNotify
b27f361cc834 initial checkin
fm
parents:
diff changeset
    87
b27f361cc834 initial checkin
fm
parents:
diff changeset
    88
    "We should process only notifications for source 
b27f361cc834 initial checkin
fm
parents:
diff changeset
    89
     and/or conflicted entries"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    90
b27f361cc834 initial checkin
fm
parents:
diff changeset
    91
    (aWCActionNotify action isConflict or:
b27f361cc834 initial checkin
fm
parents:
diff changeset
    92
        [aWCActionNotify entry isSourceFileEntry])
b27f361cc834 initial checkin
fm
parents:
diff changeset
    93
            ifTrue:[aWCActionNotify processUsing: self]
b27f361cc834 initial checkin
fm
parents:
diff changeset
    94
b27f361cc834 initial checkin
fm
parents:
diff changeset
    95
    "Created: / 18-08-2009 / 08:59:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    96
    "Modified: / 27-08-2009 / 08:57:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
    97
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
    98
b27f361cc834 initial checkin
fm
parents:
diff changeset
    99
doRevert
b27f361cc834 initial checkin
fm
parents:
diff changeset
   100
    SVN::ActivityNotification notify: 'Reverting local changes'.
b27f361cc834 initial checkin
fm
parents:
diff changeset
   101
    (RevertCommand new)
b27f361cc834 initial checkin
fm
parents:
diff changeset
   102
        workingCopy: self workingCopy path;
b27f361cc834 initial checkin
fm
parents:
diff changeset
   103
        paths: (ProgrammingLanguage 
b27f361cc834 initial checkin
fm
parents:
diff changeset
   104
                    allCollect: [:lang | '*.' , lang sourceFileSuffix ]);
b27f361cc834 initial checkin
fm
parents:
diff changeset
   105
        execute.
b27f361cc834 initial checkin
fm
parents:
diff changeset
   106
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
   107
b27f361cc834 initial checkin
fm
parents:
diff changeset
   108
doUpdate
b27f361cc834 initial checkin
fm
parents:
diff changeset
   109
    SVN::ActivityNotification 
b27f361cc834 initial checkin
fm
parents:
diff changeset
   110
        notify: 'Updating working copy to revision ' , self revision printString.
b27f361cc834 initial checkin
fm
parents:
diff changeset
   111
    notifications := (UpdateCommand new)
b27f361cc834 initial checkin
fm
parents:
diff changeset
   112
        workingCopy: self workingCopy;
b27f361cc834 initial checkin
fm
parents:
diff changeset
   113
        revision: self revision;
b27f361cc834 initial checkin
fm
parents:
diff changeset
   114
        execute
b27f361cc834 initial checkin
fm
parents:
diff changeset
   115
b27f361cc834 initial checkin
fm
parents:
diff changeset
   116
    "Modified: / 19-08-2009 / 12:22:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   117
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
   118
b27f361cc834 initial checkin
fm
parents:
diff changeset
   119
!UpdateTask methodsFor:'private'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
   120
b27f361cc834 initial checkin
fm
parents:
diff changeset
   121
filterChangeSet: aChangeSet 
b27f361cc834 initial checkin
fm
parents:
diff changeset
   122
    "
b27f361cc834 initial checkin
fm
parents:
diff changeset
   123
        Removes changes for methods that are not interesting
b27f361cc834 initial checkin
fm
parents:
diff changeset
   124
        (such as version methods & autogenerated package description
b27f361cc834 initial checkin
fm
parents:
diff changeset
   125
        methods)"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   126
    
b27f361cc834 initial checkin
fm
parents:
diff changeset
   127
    | changesToRemove |
b27f361cc834 initial checkin
fm
parents:
diff changeset
   128
b27f361cc834 initial checkin
fm
parents:
diff changeset
   129
    changesToRemove := aChangeSet 
b27f361cc834 initial checkin
fm
parents:
diff changeset
   130
                select: [:change | change isForGeneratedSubject ].
b27f361cc834 initial checkin
fm
parents:
diff changeset
   131
    aChangeSet removeAll: changesToRemove.
b27f361cc834 initial checkin
fm
parents:
diff changeset
   132
    ^ aChangeSet
b27f361cc834 initial checkin
fm
parents:
diff changeset
   133
b27f361cc834 initial checkin
fm
parents:
diff changeset
   134
    "Created: / 08-04-2009 / 09:53:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   135
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
   136
b27f361cc834 initial checkin
fm
parents:
diff changeset
   137
!UpdateTask methodsFor:'processing - private'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
   138
b27f361cc834 initial checkin
fm
parents:
diff changeset
   139
processAddedEntry: entry
b27f361cc834 initial checkin
fm
parents:
diff changeset
   140
b27f361cc834 initial checkin
fm
parents:
diff changeset
   141
    entry sourceLanguage isSmalltalk 
b27f361cc834 initial checkin
fm
parents:
diff changeset
   142
        ifTrue:
b27f361cc834 initial checkin
fm
parents:
diff changeset
   143
            [updates addAll:
b27f361cc834 initial checkin
fm
parents:
diff changeset
   144
                (ChangeSet fromStream: entry readStream) ]
b27f361cc834 initial checkin
fm
parents:
diff changeset
   145
        ifFalse:
b27f361cc834 initial checkin
fm
parents:
diff changeset
   146
            [self error:'Non smalltalk source not yet supported']
b27f361cc834 initial checkin
fm
parents:
diff changeset
   147
b27f361cc834 initial checkin
fm
parents:
diff changeset
   148
    "Created: / 27-08-2009 / 08:54:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   149
    "Modified: / 27-08-2009 / 10:37:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   150
!
b27f361cc834 initial checkin
fm
parents:
diff changeset
   151
b27f361cc834 initial checkin
fm
parents:
diff changeset
   152
processDeletedEntry: entry
b27f361cc834 initial checkin
fm
parents:
diff changeset
   153
b27f361cc834 initial checkin
fm
parents:
diff changeset
   154
    entry sourceLanguage isSmalltalk ifTrue:
b27f361cc834 initial checkin
fm
parents:
diff changeset
   155
        [entry path = 'extensions.st' ifTrue:[self halt"not yet finished"].
b27f361cc834 initial checkin
fm
parents:
diff changeset
   156
        self halt.]
b27f361cc834 initial checkin
fm
parents:
diff changeset
   157
b27f361cc834 initial checkin
fm
parents:
diff changeset
   158
    "Created: / 27-08-2009 / 09:56:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b27f361cc834 initial checkin
fm
parents:
diff changeset
   159
! !
b27f361cc834 initial checkin
fm
parents:
diff changeset
   160
b27f361cc834 initial checkin
fm
parents:
diff changeset
   161
!UpdateTask class methodsFor:'documentation'!
b27f361cc834 initial checkin
fm
parents:
diff changeset
   162
b27f361cc834 initial checkin
fm
parents:
diff changeset
   163
version
b27f361cc834 initial checkin
fm
parents:
diff changeset
   164
    ^ '$Header$'
b27f361cc834 initial checkin
fm
parents:
diff changeset
   165
! !