265 ! ! |
265 ! ! |
266 |
266 |
267 !AbstractFileBrowser methodsFor:'menu-dynamic-hg'! |
267 !AbstractFileBrowser methodsFor:'menu-dynamic-hg'! |
268 |
268 |
269 hgMenuMerge |
269 hgMenuMerge |
270 | menu repo wc cs | |
270 | menu repo wc heads | |
271 |
271 |
272 menu := Menu new. |
272 menu := Menu new. |
273 repo := self currentHgRepository. |
273 repo := self currentHgRepository. |
274 wc := repo workingCopy. |
274 wc := repo workingCopy. |
275 cs := wc changeset. |
275 heads := repo log: 'head() and !! closed() and !! p1() and !! ancestor(p1())' limit: nil. |
276 repo branches do:[:branch| |
276 heads do:[:head| |
277 branch heads do:[:head| |
277 | item label | |
278 head ~~ cs ifTrue:[ |
278 |
279 | item | |
279 "/ label := head branch name , ' - ' , head id printString. |
280 |
280 label := HGChangesetPresenter new changeset: head. |
281 item := MenuItem |
281 item := MenuItem |
282 label: (head branch name , ' - ' , head id printString) |
282 label: label |
283 itemValue: [self hgMenuMerge: head ]. |
283 itemValue: [self hgMerge:head ]. |
284 menu addItem: item. |
284 menu addItem: item. |
285 ]. |
285 ]. |
286 ] |
286 menu addItem: |
287 ]. |
287 (MenuItem |
|
288 label:'Revision...' |
|
289 itemValue: [ self hgMergeWithRevision ]). |
|
290 |
288 |
291 |
289 ^menu. |
292 ^menu. |
290 |
293 |
291 "Created: / 14-12-2012 / 19:14:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
294 "Created: / 14-12-2012 / 19:14:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
292 ! ! |
295 "Modified: / 28-03-2014 / 00:34:32 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
293 |
|
294 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
|
295 |
|
296 hgMenuMerge:anHGChangeset |
|
297 | repo wc appl stream| |
|
298 |
|
299 appl := self openCommandResultApplication. |
|
300 stream := appl resultStream. |
|
301 appl changeTabTo:((resources string: 'Merging with %1') bindWith: anHGChangeset id printString). |
|
302 |
|
303 [ |
|
304 repo := self currentHgRepository. |
|
305 wc := repo workingCopy. |
|
306 stream nextPutAll:(resources string: 'Mercurial > hg merge'); space; nextPutLine: anHGChangeset id printString. |
|
307 wc merge: anHGChangeset. |
|
308 stream nextPutAll:(resources string: 'done'); cr. |
|
309 (wc conflicts asSortedCollection:[:a :b|a pathName < b pathName]) do:[:each| |
|
310 each isUnresolved ifTrue:[ |
|
311 | merger | |
|
312 |
|
313 stream nextPutAll: ((resources string: 'Resolving conflicts %1...') bindWith: each pathNameRelative). |
|
314 merger := HGMergeTool for: each. |
|
315 merger premerge ifTrue:[ |
|
316 stream nextPutLine:(resources string: 'resolved'). |
|
317 each markResolved. |
|
318 ] ifFalse:[ |
|
319 stream nextPutLine:(resources string: 'UNRESOLVED') |
|
320 ] |
|
321 ] |
|
322 ]. |
|
323 stream nextPutAll:(resources string: 'Merge finisged.') |
|
324 ] forkAt: Processor userBackgroundPriority |
|
325 |
|
326 "Created: / 14-01-2013 / 21:59:58 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
327 "Modified: / 04-04-2013 / 19:22:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
328 ! ! |
296 ! ! |
329 |
297 |
330 !AbstractFileBrowser methodsFor:'menu-dynamic-hg'! |
298 !AbstractFileBrowser methodsFor:'menu-dynamic-hg'! |
331 |
299 |
332 hgMenuPull |
300 hgMenuPull |
379 yourself). |
347 yourself). |
380 |
348 |
381 ^menu. |
349 ^menu. |
382 |
350 |
383 "Created: / 04-04-2013 / 19:15:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
351 "Created: / 04-04-2013 / 19:15:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
352 ! ! |
|
353 |
|
354 !AbstractFileBrowser methodsFor:'menu-dynamic-hg'! |
|
355 |
|
356 hgMenuUpdate |
|
357 | menu repo wc heads | |
|
358 |
|
359 menu := Menu new. |
|
360 repo := self currentHgRepository. |
|
361 wc := repo workingCopy. |
|
362 heads := repo log: 'head() and !! closed() and !! p1()' limit: nil. |
|
363 heads do:[:head| |
|
364 | item label | |
|
365 |
|
366 "/ label := head branch name , ' - ' , head id printString. |
|
367 label := HGChangesetPresenter new changeset: head. |
|
368 item := MenuItem |
|
369 label: label |
|
370 itemValue: [self hgUpdate: head ]. |
|
371 menu addItem: item. |
|
372 ]. |
|
373 menu addItem: |
|
374 (MenuItem |
|
375 label:'Revision...' |
|
376 itemValue: [ self hgUpdateToRevision ]). |
|
377 |
|
378 |
|
379 ^menu. |
|
380 |
|
381 "Created: / 28-03-2014 / 00:00:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
382 ! ! |
|
383 |
|
384 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
|
385 |
|
386 hgMerge:anHGChangeset |
|
387 | repo wc appl stream | |
|
388 |
|
389 appl := self openCommandResultApplication. |
|
390 stream := appl resultStream. |
|
391 appl changeTabTo:((resources string:'Merging with %1') |
|
392 bindWith:anHGChangeset id printString). |
|
393 [ |
|
394 repo := self currentHgRepository. |
|
395 wc := repo workingCopy. |
|
396 stream |
|
397 nextPutAll:(resources string:'Mercurial > hg merge'); |
|
398 space; |
|
399 nextPutLine:anHGChangeset id printString. |
|
400 wc merge:anHGChangeset. |
|
401 stream |
|
402 nextPutAll:(resources string:'done'); |
|
403 cr. |
|
404 (wc conflicts asSortedCollection:[:a :b | a pathName < b pathName ]) do:[:each | |
|
405 each isUnresolved ifTrue:[ |
|
406 | merger | |
|
407 |
|
408 stream nextPutAll:((resources string:'Resolving conflicts %1...') |
|
409 bindWith:each pathNameRelative). |
|
410 merger := HGMergeTool for:each. |
|
411 merger premerge ifTrue:[ |
|
412 stream nextPutLine:(resources string:'resolved'). |
|
413 each markResolved. |
|
414 ] ifFalse:[ |
|
415 stream nextPutLine:(resources string:'UNRESOLVED') |
|
416 ] |
|
417 ] |
|
418 ]. |
|
419 stream nextPutAll:(resources string:'Merge finisged.') |
|
420 ] forkAt:Processor userBackgroundPriority |
|
421 |
|
422 "Created: / 14-01-2013 / 21:59:58 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
423 "Modified: / 04-04-2013 / 19:22:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
424 ! ! |
|
425 |
|
426 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
|
427 |
|
428 hgMergeWithRevision |
|
429 | repo cs revset dialog | |
|
430 |
|
431 repo := self currentHgRepository. |
|
432 revset := '!! ancestor(p1())' asHGRevset. |
|
433 dialog := HGChangesetDialog new. |
|
434 dialog repository: repo. |
|
435 dialog revset: revset. |
|
436 dialog open ifFalse:[ ^ self ]. |
|
437 cs := dialog changeset. |
|
438 self hgMerge: cs. |
|
439 |
|
440 "Created: / 28-03-2014 / 00:34:32 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
384 ! ! |
441 ! ! |
385 |
442 |
386 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
443 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
387 |
444 |
388 hgPullFrom: remote repository:repo |
445 hgPullFrom: remote repository:repo |
557 ! ! |
614 ! ! |
558 |
615 |
559 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
616 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
560 |
617 |
561 hgUpdate |
618 hgUpdate |
|
619 ^ self hgUpdate: nil. |
|
620 |
|
621 "Created: / 15-01-2013 / 09:23:03 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
622 "Modified: / 28-03-2014 / 00:20:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
623 ! ! |
|
624 |
|
625 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
|
626 |
|
627 hgUpdate: changesetOrNil |
562 | executionBlock workdir | |
628 | executionBlock workdir | |
563 |
629 |
564 (self isKindOf: FileBrowserV2) ifTrue:[ |
630 (self isKindOf: FileBrowserV2) ifTrue:[ |
565 workdir := self currentDirectoryDisplayed. |
631 workdir := self currentDirectoryDisplayed. |
566 workdir isDirectory ifFalse:[ |
632 workdir isDirectory ifFalse:[ |
578 | cmd | |
644 | cmd | |
579 |
645 |
580 cmd := '%1 --noninteractive %2 %3' |
646 cmd := '%1 --noninteractive %2 %3' |
581 bindWith: HGCommand hgCommand |
647 bindWith: HGCommand hgCommand |
582 with: 'update' |
648 with: 'update' |
583 with: ''. |
649 with: (changesetOrNil isNil ifTrue:[''] ifFalse:['-r ' , changesetOrNil id printString]). |
584 stream nextPutAll: cmd; cr; cr. |
650 stream nextPutAll: cmd; cr; cr. |
585 (self getExecutionBlockForCommand:cmd inDirectory: workdir) value:stream. |
651 (self getExecutionBlockForCommand:cmd inDirectory: workdir) value:stream. |
586 ]. |
652 ]. |
587 self makeExecutionResultProcessFor:executionBlock withName:'Mercurial> hg update' |
653 self makeExecutionResultProcessFor:executionBlock withName:'Mercurial> hg update' |
588 |
654 |
589 "Created: / 15-01-2013 / 09:23:03 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
655 "Created: / 28-03-2014 / 00:19:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
590 "Modified: / 13-03-2013 / 00:22:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
591 ! ! |
656 ! ! |
592 |
657 |
593 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
658 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
594 |
659 |
595 hgUpdateClean |
660 hgUpdateClean |
596 self hgExecuteCommand: 'update -C' objects: #() |
661 self hgExecuteCommand: 'update -C' objects: #() |
597 |
662 |
598 "Created: / 15-01-2013 / 09:23:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
663 "Created: / 15-01-2013 / 09:23:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
664 ! ! |
|
665 |
|
666 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'! |
|
667 |
|
668 hgUpdateToRevision |
|
669 | repo cs revset dialog | |
|
670 |
|
671 repo := self currentHgRepository. |
|
672 revset := '!! p1()' asHGRevset. |
|
673 dialog := HGChangesetDialog new. |
|
674 dialog repository: repo. |
|
675 dialog revset: revset. |
|
676 dialog open ifFalse:[ ^ self ]. |
|
677 cs := dialog changeset. |
|
678 self hgUpdate: cs. |
|
679 |
|
680 "Created: / 28-03-2014 / 00:33:56 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
599 ! ! |
681 ! ! |
600 |
682 |
601 !AbstractFileBrowser class methodsFor:'menu specs-scm'! |
683 !AbstractFileBrowser class methodsFor:'menu specs-scm'! |
602 |
684 |
603 hgMenu |
685 hgMenu |