mercurial/extensions.st
changeset 410 34ca0972c5ba
parent 409 20e6f5c4f3b2
child 413 5faa5c6eb538
equal deleted inserted replaced
409:20e6f5c4f3b2 410:34ca0972c5ba
   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
   663           )
   745           )
   664          (MenuItem
   746          (MenuItem
   665             enabled: hasHGWorkingCopySelected
   747             enabled: hasHGWorkingCopySelected
   666             label: 'Update'
   748             label: 'Update'
   667             itemValue: hgUpdate
   749             itemValue: hgUpdate
       
   750           )
       
   751          (MenuItem
       
   752             label: 'Update To Revision'
       
   753             submenuChannel: hgMenuUpdate
   668           )
   754           )
   669          (MenuItem
   755          (MenuItem
   670             enabled: hasHGWorkingCopySelected
   756             enabled: hasHGWorkingCopySelected
   671             label: 'Revert'
   757             label: 'Revert'
   672             itemValue: hgRevert
   758             itemValue: hgRevert