mercurial/extensions.st
changeset 180 7b70d26f28da
parent 178 1ed827252fee
child 181 a31ede5ff957
equal deleted inserted replaced
179:65f1d201ba72 180:7b70d26f28da
     5 currentHgRepository
     5 currentHgRepository
     6     | root |
     6     | root |
     7 
     7 
     8     root := HGRepository discover: self currentDirectoryDisplayed.
     8     root := HGRepository discover: self currentDirectoryDisplayed.
     9     root isNil ifTrue:[ ^ self ].
     9     root isNil ifTrue:[ ^ self ].
    10     ^HGRepository on: root.
    10     ^HGRepository on: root cached: true
    11 
    11 
    12     "Created: / 14-12-2012 / 19:22:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    12     "Created: / 14-12-2012 / 19:22:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    13     "Modified: / 15-01-2013 / 10:04:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    13 ! !
    14 ! !
    14 
    15 
    15 !AbstractFileBrowser methodsFor:'menu-queries-hg'!
    16 !AbstractFileBrowser methodsFor:'menu-queries-hg'!
    16 
    17 
    17 hasHGWorkingCopySelected
    18 hasHGWorkingCopySelected
   124     "Created: / 14-12-2012 / 19:14:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   125     "Created: / 14-12-2012 / 19:14:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   125 ! !
   126 ! !
   126 
   127 
   127 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
   128 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
   128 
   129 
       
   130 hgMenuMerge:anHGChangeset
       
   131     | repo wc appl stream|
       
   132 
       
   133     appl := self openCommandResultApplication.
       
   134     stream := appl resultStream.
       
   135     appl changeTabTo:((resources string: 'Merging with %1') bindWith: anHGChangeset id printString).
       
   136 
       
   137     [
       
   138         repo := self currentHgRepository.
       
   139         wc := repo workingCopy.
       
   140         stream nextPutAll:(resources string: 'Running ''hg merge''...').
       
   141         wc merge: anHGChangeset.
       
   142         stream nextPutAll:(resources string: 'done'); cr.
       
   143         (wc conflicts asSortedCollection:[:a :b|a pathName < b pathName]) do:[:each|
       
   144             each isUnresolved ifTrue:[
       
   145                 | merger |
       
   146 
       
   147                 stream nextPutAll: ((resources string: 'Resolving conflicts %1...') bindWith: each pathNameRelative).
       
   148                 merger := HGMergeTool for: each.
       
   149                 merger premerge ifTrue:[
       
   150                     stream nextPutLine:(resources string: 'resolved').
       
   151                     each markResolved.
       
   152                 ] ifFalse:[
       
   153                     stream nextPutLine:(resources string: 'UNRESOLVED')
       
   154                 ]
       
   155             ]
       
   156         ]
       
   157     ] forkAt: Processor userBackgroundPriority
       
   158 
       
   159     "Created: / 14-01-2013 / 21:59:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   160     "Modified: / 15-01-2013 / 10:48:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   161 ! !
       
   162 
       
   163 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   164 
       
   165 hgResolve
       
   166     | wc prefixsz files |
       
   167 
       
   168     wc := self currentHgRepository workingCopy.
       
   169     prefixsz := wc pathName size + 1.
       
   170     files := self currentSelectedObjects.
       
   171     (files size == 1 and:[files anElement = self currentDirectoryDisplayed]) ifTrue:[
       
   172         files := wc conflicts asSortedCollection:[:a :b|a pathName < b pathName].
       
   173         files := files select:[:e|e isUnresolved].
       
   174     ] ifFalse:[
       
   175         files := files collect:[:file|
       
   176             | path |
       
   177             path := file pathName.
       
   178             path := path copyFrom: prefixsz.
       
   179             wc / path.
       
   180         ].
       
   181     ].
       
   182     files do:[:entry|
       
   183         (HGMergeTool for: entry) merge ifTrue:[
       
   184             entry markResolved.
       
   185         ].
       
   186     ]
       
   187 
       
   188     "Modified: / 15-01-2013 / 11:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   189 ! !
       
   190 
       
   191 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   192 
       
   193 hgResolveList
       
   194     self hgExecuteCommand: 'resolve --list' objects: #()
       
   195 
       
   196     "Modified: / 14-01-2013 / 21:55:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   197 ! !
       
   198 
       
   199 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   200 
       
   201 hgResolveListUnresolved
       
   202     | repo wc appl stream|
       
   203 
       
   204     appl := self openCommandResultApplication.
       
   205     stream := appl resultStream.
       
   206     appl changeTabTo:(resources string: 'Unresolved conflicts').
       
   207     repo := self currentHgRepository.
       
   208     wc := repo workingCopy.
       
   209     (wc conflicts asSortedCollection:[:a :b|a pathName < b pathName]) do:[:each|
       
   210         each isUnresolved ifTrue:[
       
   211             stream nextPutLine: each pathNameRelative
       
   212         ].
       
   213     ].
       
   214 
       
   215     "Modified: / 15-01-2013 / 10:47:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   216 ! !
       
   217 
       
   218 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   219 
       
   220 hgResolveMark
       
   221     self hgExecuteCommand: 'resolve --mark' objects: self currentSelectedObjects.
       
   222 
       
   223     "Created: / 14-01-2013 / 21:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   224 ! !
       
   225 
       
   226 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   227 
       
   228 hgRevert
       
   229     self hgExecuteCommand: 'revert'
       
   230 
       
   231     "Created: / 15-01-2013 / 09:23:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   232 ! !
       
   233 
       
   234 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   235 
   129 hgStatus
   236 hgStatus
   130     self hgExecuteCommand: 'status'
   237     self hgExecuteCommand: 'status'
   131 
   238 
   132     "Modified: / 12-01-2013 / 12:09:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   239     "Modified: / 12-01-2013 / 12:09:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   240 ! !
       
   241 
       
   242 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   243 
       
   244 hgUpdate
       
   245     self hgExecuteCommand: 'update'
       
   246 
       
   247     "Created: / 15-01-2013 / 09:23:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   248 ! !
       
   249 
       
   250 !AbstractFileBrowser methodsFor:'menu actions-scm-hg'!
       
   251 
       
   252 hgUpdateClean
       
   253     self hgExecuteCommand: 'update -C' objects: #()
       
   254 
       
   255     "Created: / 15-01-2013 / 09:23:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   133 ! !
   256 ! !
   134 
   257 
   135 !AbstractFileBrowser class methodsFor:'menu specs-scm'!
   258 !AbstractFileBrowser class methodsFor:'menu specs-scm'!
   136 
   259 
   137 hgMenu
   260 hgMenu
   168           )
   291           )
   169          (MenuItem
   292          (MenuItem
   170             label: '-'
   293             label: '-'
   171           )
   294           )
   172          (MenuItem
   295          (MenuItem
       
   296             label: 'Update'
       
   297             itemValue: hgUpdate
       
   298           )
       
   299          (MenuItem
       
   300             label: 'Revert'
       
   301             itemValue: hgRevert
       
   302           )
       
   303          (MenuItem
       
   304             label: 'Revert all Changes'
       
   305             itemValue: hgUpdateClean
       
   306           )
       
   307          (MenuItem
       
   308             label: '-'
       
   309           )
       
   310          (MenuItem
   173             enabled: hasHGWorkingCopySelected
   311             enabled: hasHGWorkingCopySelected
   174             label: 'Merge...'
   312             label: 'Merge...'
   175             submenuChannel: hgMenuMerge
   313             submenuChannel: hgMenuMerge
   176             labelImage: (ResourceRetriever HGIconLibrary merge 'Merge...')
   314             labelImage: (ResourceRetriever HGIconLibrary merge 'Merge...')
   177           )
   315           )
   178          (MenuItem
   316          (MenuItem
       
   317             label: 'Resolve'
       
   318             itemValue: hgResolve
       
   319           )
       
   320          (MenuItem
   179             enabled: hasHGWorkingCopySelected
   321             enabled: hasHGWorkingCopySelected
   180             label: 'Show conflicts'
   322             label: 'Mark as Resolved'
       
   323             itemValue: hgResolveMark
       
   324           )
       
   325          (MenuItem
       
   326             enabled: hasHGWorkingCopySelected
       
   327             label: 'Mark as Unresolved'
       
   328             itemValue: hgResolveUnmark
       
   329           )
       
   330          (MenuItem
       
   331             label: '-'
       
   332           )
       
   333          (MenuItem
       
   334             enabled: hasHGWorkingCopySelected
       
   335             label: 'Show Conflicts'
   181             itemValue: hgResolveList
   336             itemValue: hgResolveList
   182           )
   337           )
   183          (MenuItem
   338          (MenuItem
   184             label: 'Resolve conflicts'
       
   185             itemValue: hgResolve
       
   186           )
       
   187          (MenuItem
       
   188             enabled: hasHGWorkingCopySelected
   339             enabled: hasHGWorkingCopySelected
   189             label: 'Mark as resolved'
   340             label: 'Show Unresolved'
   190             itemValue: hgResolveMark
   341             itemValue: hgResolveListUnresolved
   191           )
       
   192          (MenuItem
       
   193             enabled: hasHGWorkingCopySelected
       
   194             label: 'Mark as unresolved'
       
   195             itemValue: hgResolveUnmark
       
   196           )
   342           )
   197          )
   343          )
   198         nil
   344         nil
   199         nil
   345         nil
   200       )
   346       )