author | fm |
Thu, 08 Oct 2009 14:00:26 +0200 | |
changeset 316 | 4f2b6467ccdf |
parent 137 | c262be330384 |
child 384 | 28457041100b |
permissions | -rw-r--r-- |
57 | 1 |
"{ Package: 'cvut:stx/goodies/libsvn' }" |
2 |
||
3 |
"{ NameSpace: SVN }" |
|
4 |
||
5 |
Object subclass:#WorkingCopy |
|
6 |
instanceVariableNames:'path repository branch packageClassesChanged |
|
7 |
packageExtensionsChanged' |
|
8 |
classVariableNames:'' |
|
9 |
poolDictionaries:'' |
|
10 |
category:'SVN-Core' |
|
11 |
! |
|
12 |
||
13 |
||
14 |
!WorkingCopy class methodsFor:'instance creation'! |
|
15 |
||
16 |
branch: aBranch path: aStringOrFilename |
|
17 |
||
18 |
^self new |
|
19 |
branch: aBranch; |
|
20 |
path: aStringOrFilename; |
|
21 |
yourself |
|
22 |
||
23 |
"Created: / 19-08-2009 / 11:25:06 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
24 |
! ! |
|
25 |
||
26 |
!WorkingCopy methodsFor:'accessing'! |
|
27 |
||
28 |
branch |
|
29 |
branch ifNil:[ |
|
30 |
branch := BranchQuery new |
|
31 |
repository: repository; |
|
32 |
raiseRequest. |
|
33 |
branch ifNil:[branch := self defaultBranch]]. |
|
34 |
^ branch |
|
35 |
||
36 |
"Created: / 31-03-2008 / 12:50:17 / janfrog" |
|
37 |
"Modified: / 14-04-2008 / 12:44:25 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
38 |
! |
|
39 |
||
40 |
branch: branchOrString |
|
41 |
||
42 |
branch := branchOrString isString |
|
43 |
ifFalse: |
|
44 |
[repository := branchOrString repository. |
|
45 |
branchOrString] |
|
46 |
ifTrue: |
|
47 |
[repository branches |
|
48 |
detect:[:branch|branch path = branchOrString] |
|
49 |
ifNone:[self error:'No such branch: ', branchOrString]]. |
|
50 |
||
51 |
"Created: / 31-03-2008 / 13:29:13 / janfrog" |
|
52 |
"Modified: / 19-08-2009 / 11:22:45 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
53 |
! |
|
54 |
||
55 |
commitMode |
|
56 |
||
57 |
"UI Helper" |
|
58 |
||
59 |
^self packageClassesChanged ifTrue:[#full] ifFalse:[#fast] |
|
60 |
||
61 |
"Created: / 13-08-2009 / 15:12:41 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
62 |
! |
|
63 |
||
64 |
commitMode: mode |
|
65 |
||
66 |
mode == #full ifTrue:[packageClassesChanged := true]. |
|
67 |
||
68 |
"Created: / 13-08-2009 / 15:13:08 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
69 |
! |
|
70 |
||
71 |
defaultBranch |
|
72 |
||
73 |
^repository branches |
|
74 |
detect:[:branch | branch isTrunk ] |
|
75 |
ifNone:[self error: 'No branch!!']. |
|
76 |
||
77 |
"Created: / 11-04-2008 / 13:15:34 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
78 |
"Modified: / 14-04-2008 / 11:53:04 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
79 |
! |
|
80 |
||
81 |
manager |
|
82 |
||
83 |
^repository manager |
|
84 |
||
85 |
"Created: / 11-06-2009 / 13:33:17 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
86 |
! |
|
87 |
||
88 |
package |
|
89 |
||
90 |
^repository package |
|
91 |
||
92 |
"Created: / 31-03-2008 / 13:04:52 / janfrog" |
|
93 |
! |
|
94 |
||
95 |
packageClasses |
|
96 |
||
97 |
^self packageClassesWithPrivate reject:[:cls|cls owningClass notNil] |
|
98 |
||
99 |
"Created: / 31-03-2008 / 13:06:13 / janfrog" |
|
100 |
"Modified: / 23-03-2009 / 12:16:51 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
101 |
! |
|
102 |
||
103 |
packageClassesChanged |
|
104 |
packageClassesChanged := |
|
105 |
packageClassesChanged |
|
106 |
or:[self computePackageClassesChanged]. |
|
107 |
||
108 |
^ packageClassesChanged |
|
109 |
||
110 |
"Modified: / 13-08-2009 / 10:21:19 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
111 |
! |
|
112 |
||
113 |
packageClassesFiltered: classFilter |
|
114 |
||
115 |
^self packageClasses select: [:class|classFilter value: class]. |
|
116 |
||
117 |
"Created: / 23-03-2009 / 12:04:18 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
118 |
! |
|
119 |
||
120 |
packageClassesWithPrivate |
|
121 |
||
122 |
^ProjectDefinition searchForClassesWithProject: self package |
|
123 |
||
124 |
"Created: / 23-03-2009 / 12:06:58 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
125 |
! |
|
126 |
||
127 |
packageClassesWithPrivateFiltered: classFilter |
|
128 |
||
129 |
^self packageClassesWithPrivate select: [:class|classFilter value: class]. |
|
130 |
||
131 |
"Created: / 23-03-2009 / 12:07:58 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
132 |
! |
|
133 |
||
134 |
packageDefinition |
|
135 |
^ Smalltalk |
|
136 |
at:(ProjectDefinition initialClassNameForDefinitionOf:self package) |
|
137 |
asSymbol. |
|
138 |
||
139 |
"Created: / 15-06-2009 / 12:41:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
140 |
! |
|
141 |
||
142 |
packageExtensions |
|
143 |
||
144 |
^ProjectDefinition searchForExtensionsWithProject: self package |
|
145 |
||
146 |
"Created: / 31-03-2008 / 13:06:13 / janfrog" |
|
147 |
"Modified: / 11-04-2008 / 08:25:00 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
148 |
! |
|
149 |
||
150 |
packageExtensionsChanged |
|
151 |
packageExtensionsChanged := |
|
152 |
packageExtensionsChanged |
|
153 |
or:[self computePackageExtensionsChanged]. |
|
154 |
||
155 |
^ packageExtensionsChanged |
|
156 |
||
157 |
"Modified: / 13-08-2009 / 10:22:23 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
158 |
! |
|
159 |
||
160 |
packageExtensionsFiltered:aBlock |
|
161 |
||
162 |
^self packageExtensions select:aBlock |
|
163 |
||
164 |
"Created: / 11-06-2009 / 13:37:27 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
165 |
! |
|
166 |
||
167 |
path |
|
168 |
||
169 |
^ path |
|
170 |
||
171 |
"Created: / 31-03-2008 / 12:42:42 / janfrog" |
|
172 |
"Modified: / 21-08-2009 / 17:47:30 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
173 |
! |
|
174 |
||
175 |
path:aStringOrFilename |
|
176 |
path := aStringOrFilename asFilename. |
|
177 |
||
178 |
"Created: / 31-03-2008 / 12:42:42 / janfrog" |
|
179 |
! |
|
180 |
||
181 |
pathBase |
|
182 |
||
183 |
^self manager workingCopyBase. |
|
184 |
||
185 |
"Created: / 11-06-2009 / 13:32:54 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
186 |
! |
|
187 |
||
188 |
repository |
|
189 |
^ repository |
|
190 |
||
191 |
"Created: / 31-03-2008 / 12:42:22 / janfrog" |
|
192 |
! |
|
193 |
||
194 |
repository:aRepository |
|
195 |
repository := aRepository. |
|
196 |
||
197 |
"Created: / 31-03-2008 / 12:42:22 / janfrog" |
|
198 |
! |
|
199 |
||
200 |
url |
|
201 |
||
202 |
^branch url |
|
203 |
||
204 |
"Created: / 31-03-2008 / 13:05:01 / janfrog" |
|
205 |
! ! |
|
206 |
||
207 |
!WorkingCopy methodsFor:'accessing - change sets'! |
|
208 |
||
209 |
changeSet |
|
210 |
||
211 |
^self changeSetIgnoreAutoloaded: false |
|
212 |
||
213 |
"Created: / 23-03-2009 / 18:57:16 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
214 |
"Modified: / 12-08-2009 / 14:26:55 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
215 |
! |
|
216 |
||
217 |
changeSetForContainer: containerName |
|
218 |
||
219 |
^ChangeSet fromStream: |
|
220 |
(self containerReadStreamFor: containerName) |
|
221 |
||
222 |
"Created: / 09-10-2008 / 20:21:56 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
223 |
! |
|
224 |
||
225 |
changeSetForUpdate |
|
226 |
|diffSet classesToRemove| |
|
227 |
||
228 |
diffSet := self diffSetBetweenImageAndWorkingCopy. |
|
229 |
classesToRemove := Set new. |
|
230 |
SVN::ActivityNotification notify:'Computing update change set'. |
|
231 |
"self = image, arg = revision" |
|
232 |
^(diffSet onlyInArg) , |
|
233 |
(diffSet changed collect:[:changePair | changePair second ]) |
|
234 |
, (diffSet onlyInReceiver |
|
235 |
select:[:change | change isClassDefinitionChange ] |
|
236 |
thenCollect: |
|
237 |
[:change | |
|
238 |
classesToRemove add:change className. |
|
239 |
ClassRemoveChange className:change className]) |
|
240 |
, (diffSet onlyInReceiver |
|
241 |
select: |
|
242 |
[:change | |
|
243 |
change isMethodDefinitionChange |
|
244 |
and:[ (classesToRemove includes:change className) not ]] |
|
245 |
thenCollect: |
|
246 |
[:change | |
|
247 |
MethodRemoveChange className:change className selector:change selector]) |
|
248 |
||
249 |
"Created: / 24-03-2009 / 08:17:19 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
250 |
! |
|
251 |
||
252 |
changeSetIgnoreAutoloaded: ignoreAutoloaded |
|
253 |
||
254 |
| containersToIgnore changeSet | |
|
255 |
||
256 |
containersToIgnore := |
|
257 |
(self packageClassesFiltered:[:cls|cls isLoaded not]) |
|
258 |
collect:[:cls|repository containerNameForClass: cls]. |
|
259 |
||
260 |
changeSet := ChangeSet new. |
|
261 |
self containers do: |
|
262 |
[:container | |
|
263 |
(containersToIgnore includes: container) |
|
264 |
ifFalse: |
|
265 |
[changeSet addAll: |
|
266 |
(self changeSetForContainer: container)]]. |
|
267 |
^changeSet |
|
268 |
||
269 |
"Created: / 12-08-2009 / 14:26:39 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
270 |
! ! |
|
271 |
||
272 |
!WorkingCopy methodsFor:'accessing - containers'! |
|
273 |
||
274 |
containerFilenameFor: containerName |
|
275 |
||
276 |
^self path construct: containerName |
|
277 |
||
278 |
"Created: / 09-10-2008 / 20:25:02 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
279 |
! |
|
280 |
||
281 |
containerReadStreamFor: containerName |
|
282 |
||
283 |
| containerFile containerStream | |
|
284 |
containerFile := self containerFilenameFor: containerName. |
|
285 |
OperatingSystem isMSWINDOWSlike |
|
286 |
ifTrue: |
|
287 |
[" |
|
288 |
Dirty hack for MS Windows: |
|
289 |
Windows do not allow me to open some files for the first |
|
290 |
time (OpenError is raised). Second try after some time is usually OK. |
|
291 |
I don't know why this happens. Claus, do you have any idea? |
|
292 |
" |
|
293 |
[ containerStream := containerFile readStream ] |
|
294 |
on: OpenError do: |
|
295 |
[Delay waitForMilliseconds: 100. "A magic constant here :-(" |
|
296 |
containerStream := containerFile readStream]] |
|
297 |
ifFalse: |
|
298 |
[" |
|
299 |
Unix behaves pretty fine :-) |
|
300 |
" |
|
301 |
containerStream := containerFile readStream]. |
|
302 |
||
303 |
^containerStream |
|
304 |
||
305 |
"Created: / 09-10-2008 / 20:26:03 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
306 |
! |
|
307 |
||
308 |
containerSuffixes |
|
309 |
||
310 |
^#( |
|
311 |
'st' "Smalltalk" |
|
312 |
"/'js' "JavaScript - not yet supported" |
|
313 |
"/'rb' "Ruby - not yet supported" |
|
314 |
"/'pas' "Pascal - not yet supported" |
|
315 |
) |
|
316 |
||
317 |
"Created: / 23-03-2009 / 18:53:56 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
318 |
! |
|
319 |
||
320 |
containerWriteStreamFor: containerName |
|
321 |
||
322 |
^(self containerFilenameFor: containerName) writeStream |
|
323 |
eolMode: #nl; |
|
324 |
yourself |
|
325 |
||
326 |
"Created: / 09-10-2008 / 20:24:44 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
327 |
! |
|
328 |
||
329 |
containerWriteStreamForExtensions |
|
330 |
||
331 |
^self containerWriteStreamFor: 'extensions.st' |
|
332 |
||
333 |
"Created: / 09-10-2008 / 20:23:47 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
334 |
! |
|
335 |
||
336 |
containers |
|
337 |
||
338 |
^(self path directoryContents |
|
339 |
select: |
|
340 |
[:container|self containerSuffixes anySatisfy: |
|
341 |
[:suffix|container endsWith:suffix]]) asSet |
|
342 |
||
343 |
"Created: / 23-03-2009 / 18:52:27 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
344 |
"Modified: / 12-06-2009 / 21:44:06 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
345 |
! |
|
346 |
||
347 |
containersToKeep |
|
348 |
||
349 |
| containers | |
|
350 |
||
351 |
containers := self packageClasses |
|
352 |
collect:[:cls|self repository containerNameForClass: cls]. |
|
353 |
self packageExtensions isEmpty ifFalse: |
|
354 |
[containers add: self repository containerNameForExtensions]. |
|
355 |
^containers asSet. |
|
356 |
||
357 |
"Created: / 12-06-2009 / 21:27:12 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
358 |
! |
|
359 |
||
360 |
containersWriteStreamForClass:cls |
|
361 |
||
362 |
^self containerWriteStreamFor: (repository containerNameForClass:cls) |
|
363 |
||
364 |
"Created: / 09-10-2008 / 20:23:59 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
365 |
! ! |
|
366 |
||
367 |
!WorkingCopy methodsFor:'accessing - diff sets'! |
|
368 |
||
369 |
diffSetBetweenImageAndWorkingCopy |
|
370 |
||
371 |
| imageChangeSet revisionChangeSet | |
|
372 |
imageChangeSet := ChangeSet forPackage: self package ignoreAutoloaded: true. |
|
373 |
revisionChangeSet := self changeSetIgnoreAutoloaded: true. |
|
374 |
^imageChangeSet diffSetsAgainst: revisionChangeSet |
|
375 |
||
376 |
"Created: / 24-03-2009 / 08:17:26 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
377 |
"Modified: / 12-08-2009 / 14:32:03 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
378 |
! ! |
|
379 |
||
380 |
!WorkingCopy methodsFor:'accessing - tasks'! |
|
381 |
||
382 |
commitTask |
|
383 |
||
384 |
^CommitTask new workingCopy: self |
|
385 |
||
386 |
"Created: / 23-03-2009 / 11:47:27 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
387 |
! |
|
388 |
||
389 |
updateTask |
|
390 |
||
391 |
^UpdateTask new workingCopy: self |
|
392 |
||
393 |
"Created: / 24-03-2009 / 15:13:20 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
394 |
! ! |
|
395 |
||
396 |
!WorkingCopy methodsFor:'commands'! |
|
397 |
||
398 |
cat: file |
|
399 |
||
400 |
^self cat: file revision: Revision head |
|
401 |
||
402 |
"Created: / 19-04-2008 / 10:52:22 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
403 |
"Modified: / 09-10-2008 / 20:16:53 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
404 |
! |
|
405 |
||
406 |
cat: file revision: revision |
|
407 |
||
408 |
^self branch cat: file revision: revision |
|
409 |
||
410 |
"Created: / 19-04-2008 / 10:52:34 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
411 |
! |
|
412 |
||
413 |
checkout |
|
414 |
|pkgDef| |
|
415 |
||
416 |
pkgDef := self packageDefinition. |
|
417 |
self |
|
418 |
checkout:(pkgDef ifNotNil:[ pkgDef svnRevision ] ifNil:[ Revision head ]) |
|
419 |
! |
|
420 |
||
421 |
checkout: revision |
|
422 |
||
423 |
| checkoutInfo | |
|
424 |
||
425 |
self synchronized: |
|
426 |
[self ensurePathExists. |
|
427 |
SVN::ActivityNotification notify:'Checking out ' , self package. |
|
428 |
checkoutInfo := CheckoutCommand new |
|
429 |
revision: revision; |
|
430 |
workingCopy: self; |
|
431 |
execute]. |
|
432 |
^checkoutInfo |
|
433 |
||
434 |
"Created: / 31-03-2008 / 12:57:58 / janfrog" |
|
435 |
"Modified: / 21-08-2009 / 17:45:43 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
436 |
! |
|
437 |
||
438 |
cleanup |
|
439 |
||
440 |
self ensurePathExists. |
|
441 |
self isValid ifFalse:[^self]. |
|
442 |
^CleanupCommand new |
|
443 |
workingCopy: self path; |
|
444 |
execute. |
|
445 |
||
446 |
"Created: / 08-11-2008 / 08:12:50 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
447 |
! |
|
448 |
||
449 |
commit:message |
|
450 |
||
451 |
^self commitTask |
|
452 |
message: message; |
|
453 |
do |
|
454 |
||
455 |
"Created: / 31-03-2008 / 13:11:15 / janfrog" |
|
456 |
"Modified: / 07-04-2008 / 08:52:13 / janfrog" |
|
457 |
"Modified: / 23-03-2009 / 11:48:06 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
458 |
! |
|
459 |
||
460 |
log |
|
461 |
||
462 |
^self branch log |
|
463 |
||
464 |
"Created: / 19-04-2008 / 10:52:53 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
465 |
! |
|
466 |
||
467 |
log: aString |
|
468 |
||
469 |
^self branch log: aString |
|
470 |
||
471 |
"Created: / 19-04-2008 / 10:53:06 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
472 |
! |
|
473 |
||
474 |
revert |
|
475 |
||
476 |
self ensurePathExists. |
|
477 |
self isValid ifFalse:[^self checkout]. |
|
478 |
^RevertCommand new |
|
479 |
workingCopy: self path; |
|
480 |
execute. |
|
481 |
||
482 |
"Created: / 22-10-2008 / 16:46:18 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
483 |
! |
|
484 |
||
485 |
revert: containers |
|
486 |
||
487 |
| revertInfo | |
|
488 |
||
489 |
self ensurePathExists. |
|
490 |
self isValid ifFalse:[^self checkout]. |
|
491 |
self synchronized: |
|
492 |
[revertInfo := RevertCommand new |
|
493 |
workingCopy: self path; |
|
494 |
paths: containers; |
|
495 |
execute]. |
|
496 |
^revertInfo |
|
497 |
||
498 |
"Created: / 03-11-2008 / 21:20:38 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
499 |
"Modified: / 07-11-2008 / 08:54:38 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
500 |
! |
|
501 |
||
502 |
status |
|
503 |
||
504 |
| status | |
|
505 |
self ensureIsValid. |
|
506 |
self synchronized: |
|
507 |
[status := StatusCommand new |
|
508 |
workingCopy: self; |
|
509 |
execute]. |
|
510 |
^status |
|
511 |
||
512 |
"Created: / 11-04-2008 / 09:22:13 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
513 |
"Modified: / 19-08-2009 / 14:35:49 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
514 |
! |
|
515 |
||
516 |
update |
|
517 |
||
518 |
| updateInfo | |
|
519 |
||
520 |
self ensurePathExists. |
|
521 |
self isValid ifFalse:[^self checkout]. |
|
522 |
self synchronized: |
|
523 |
[updateInfo := UpdateCommand new |
|
524 |
workingCopy: self path; |
|
525 |
execute]. |
|
526 |
^updateInfo |
|
527 |
||
528 |
"Created: / 21-05-2008 / 09:44:56 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
529 |
"Modified: / 19-08-2009 / 12:25:15 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
530 |
! ! |
|
531 |
||
532 |
!WorkingCopy methodsFor:'error reporting'! |
|
533 |
||
534 |
error |
|
535 |
||
536 |
self error:'Unknown error' |
|
537 |
||
538 |
"Created: / 31-03-2008 / 12:44:06 / janfrog" |
|
539 |
! |
|
540 |
||
541 |
error: aString |
|
542 |
||
543 |
WCError raiseWith:#error: errorString:aString |
|
544 |
||
545 |
"Created: / 31-03-2008 / 12:43:51 / janfrog" |
|
546 |
! ! |
|
547 |
||
548 |
!WorkingCopy methodsFor:'private'! |
|
549 |
||
550 |
commited |
|
551 |
||
552 |
packageExtensionsChanged := false. |
|
553 |
packageClassesChanged := false. |
|
554 |
||
555 |
"Created: / 13-08-2009 / 10:23:19 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
556 |
! |
|
557 |
||
558 |
computePackageClassesChanged |
|
559 |
" |
|
560 |
Answers true iff package classes differs from |
|
561 |
those listed in ProjectDefinition>>classNamesAndAttributes" |
|
562 |
||
563 |
|listedClasses realClasses| |
|
564 |
||
565 |
self packageDefinition ifNil:[^true]. |
|
566 |
||
567 |
listedClasses := self packageDefinition allClassNames. |
|
568 |
realClasses := self packageClasses collect:[:cls | cls fullName ]. |
|
569 |
listedClasses size ~= realClasses size |
|
570 |
ifTrue:[^ true]. |
|
571 |
(realClasses allSatisfy:[:realClass | listedClasses includes:realClass ]) |
|
572 |
ifFalse:[^true]. |
|
573 |
^false |
|
574 |
||
575 |
||
576 |
||
577 |
||
578 |
" |
|
579 |
(CommitTask new package: 'stx:goodies/libsvn') |
|
580 |
computePackageClassesChanged |
|
581 |
(CommitTask new package: 'cvut:fel/smallruby') |
|
582 |
computePackageClassesChanged |
|
583 |
||
584 |
" |
|
585 |
||
586 |
"Created: / 16-06-2009 / 10:08:28 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
587 |
"Modified: / 18-08-2009 / 10:47:10 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
588 |
! |
|
589 |
||
590 |
computePackageExtensionsChanged |
|
591 |
" |
|
592 |
Answers true iff package extension method differs from |
|
593 |
those listed in ProjectDefinition>>extensionMethodNames" |
|
594 |
||
595 |
|listedExtensions listedExtensionsDictionary realExtensions| |
|
596 |
||
597 |
realExtensions := self packageExtensions. |
|
598 |
listedExtensions := self packageDefinition |
|
599 |
extensionMethodNames. |
|
600 |
(listedExtensions size / 2) ~= realExtensions size ifTrue:[ |
|
601 |
^ true |
|
602 |
]. |
|
603 |
listedExtensionsDictionary := Dictionary new. |
|
604 |
listedExtensions |
|
605 |
pairWiseDo:[:className :selector | |
|
606 |
(listedExtensionsDictionary at:className |
|
607 |
ifAbsentPut:[ OrderedCollection new ]) add:selector |
|
608 |
]. |
|
609 |
^ (realExtensions |
|
610 |
allSatisfy:[:mth | |
|
611 |
(listedExtensionsDictionary includesKey:mth mclass name) |
|
612 |
and:[ (listedExtensionsDictionary at:mth mclass name) includes:mth selector ] |
|
613 |
]) |
|
614 |
not |
|
615 |
||
616 |
" |
|
617 |
(CommitTask new package: 'stx:goodies/libsvn') |
|
618 |
packageExtensionsHasChanged" |
|
619 |
||
620 |
"Created: / 16-06-2009 / 10:11:01 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
621 |
"Modified: / 13-08-2009 / 10:27:27 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
622 |
! |
|
623 |
||
624 |
ensureIsValid |
|
625 |
||
626 |
self isValid ifFalse: |
|
627 |
[self checkout]. |
|
628 |
self isValid ifFalse:[self error:'Cannot create working copy'] |
|
629 |
||
630 |
"Created: / 08-04-2008 / 14:19:28 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
631 |
! |
|
632 |
||
633 |
ensureMethodsHasAbsoluteSourceFiles |
|
634 |
||
635 |
Smalltalk allClassesDo: |
|
636 |
[:cls| | makeLocalSource | |
|
637 |
makeLocalSource := |
|
638 |
[:mth| |
|
639 |
mth package = self package ifTrue: |
|
640 |
[mth makeSourceFileAbsolute]]. |
|
641 |
cls methodsDo: makeLocalSource. |
|
642 |
cls class methodsDo: makeLocalSource]. |
|
643 |
||
644 |
"Created: / 21-08-2009 / 17:33:00 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
645 |
! |
|
646 |
||
647 |
ensurePathExists |
|
648 |
||
649 |
[path exists ifFalse: |
|
650 |
[self ensureMethodsHasAbsoluteSourceFiles |
|
651 |
path recursiveMakeDirectory |
|
652 |
]] |
|
653 |
on: Smalltalk::Error do:[:ex|self error:'Cannot create working copy']. |
|
654 |
||
655 |
"Created: / 08-04-2008 / 14:26:56 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
656 |
"Modified: / 21-08-2009 / 17:46:05 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
657 |
! ! |
|
658 |
||
659 |
!WorkingCopy methodsFor:'private - file out'! |
|
660 |
||
661 |
fileOutClass:cls on:clsStream |
|
662 |
||
663 |
cls |
|
664 |
fileOutOn:clsStream |
|
665 |
withTimeStamp:false |
|
666 |
withInitialize:true |
|
667 |
withDefinition:true |
|
668 |
methodFilter:[:mth | mth package = self package ] |
|
669 |
||
670 |
"Created: / 19-04-2008 / 09:58:11 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
671 |
"Modified: / 11-06-2009 / 16:18:19 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
672 |
! |
|
673 |
||
674 |
fileOutExtensionsOn:extensionsStream |
|
675 |
extensionsStream |
|
676 |
nextPutAll:'"$Id$"'; |
|
677 |
cr; |
|
678 |
nextPutAll:'"{ Package: ''' , self package , ''' }"'; |
|
679 |
cr; |
|
680 |
cr; |
|
681 |
nextPut:$!!; |
|
682 |
cr; |
|
683 |
cr. |
|
684 |
^ self packageExtensions do:[:mth | |
|
685 |
mth mclass fileOutMethod:mth on:extensionsStream |
|
686 |
] |
|
687 |
||
688 |
"Created: / 19-04-2008 / 10:17:10 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
689 |
"Modified: / 15-06-2009 / 11:55:26 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
690 |
! ! |
|
691 |
||
692 |
!WorkingCopy methodsFor:'testing'! |
|
693 |
||
694 |
isValid |
|
695 |
||
696 |
| svnMetadataDir | |
|
697 |
||
698 |
svnMetadataDir := self path construct: '.svn'. |
|
699 |
svnMetadataDir exists ifFalse:[^false]. |
|
700 |
(svnMetadataDir construct: 'entries') exists |
|
701 |
ifFalse:[^false]. |
|
702 |
(svnMetadataDir construct: 'text-base') exists |
|
703 |
ifFalse:[^false]. |
|
704 |
||
705 |
^true |
|
706 |
||
707 |
"Created: / 08-04-2008 / 14:17:03 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
708 |
"Modified: / 16-07-2009 / 13:57:03 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
709 |
! ! |
|
710 |
||
711 |
!WorkingCopy class methodsFor:'documentation'! |
|
712 |
||
713 |
version |
|
714 |
^ '$Header$' |
|
137 | 715 |
! |
716 |
||
717 |
version_CVS |
|
718 |
^ '$Header$' |
|
719 |
! |
|
720 |
||
721 |
version_SVN |
|
316
4f2b6467ccdf
update #version_SVN with § as keyword expansion character
fm
parents:
137
diff
changeset
|
722 |
^'§Id: SVN__WorkingCopy.st 112 2009-08-22 10:09:13Z vranyj1 §' |
57 | 723 |
! ! |