common/SCMAbstractCommitDialog.st
changeset 44 832a135ebe08
child 53 8043f7b6f41a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/SCMAbstractCommitDialog.st	Wed Nov 14 01:05:59 2012 +0000
@@ -0,0 +1,897 @@
+"{ Package: 'stx:libscm/common' }"
+
+SCMAbstractDialog subclass:#SCMAbstractCommitDialog
+	instanceVariableNames:'task messageView messageModifiedHolder fileSelectionHolder
+		fileListShowOnlyModifiedHolder fileListHolder enabledHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SCM-Common-StX-Interface'
+!
+
+Object subclass:#FileEntry
+	instanceVariableNames:'application entry include'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:SCMAbstractCommitDialog
+!
+
+
+!SCMAbstractCommitDialog class methodsFor:'interface specs'!
+
+contentSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SVN::CommitDialog2 andSelector:#contentSpec
+     SVN::CommitDialog2 new openInterface:#contentSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: contentSpec
+        window: 
+       (WindowSpec
+          label: 'Commit...'
+          name: 'Commit...'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 698 529)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (VariableVerticalPanelSpec
+              name: 'VariablePanel'
+              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+              component: 
+             (SpecCollection
+                collection: (
+                 (ViewSpec
+                    name: 'MessageAndInfoPane'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (SubCanvasSpec
+                          name: 'InfoPanel'
+                          layout: (LayoutFrame 0 0 0 0 0 1 40 0)
+                          level: 0
+                          initiallyInvisible: true
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          clientKey: infoPanel
+                          createNewBuilder: false
+                        )
+                       (ViewSpec
+                          name: 'MessagePane'
+                          layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+                          component: 
+                         (SpecCollection
+                            collection: (
+                             (LabelSpec
+                                label: 'Commit message:'
+                                name: 'MessageLabel'
+                                layout: (LayoutFrame 0 0 0 0 0 1 25 0)
+                                translateLabel: true
+                                adjust: left
+                              )
+                             (TextEditorSpec
+                                name: 'Message'
+                                layout: (LayoutFrame 0 0 30 0 0 1 0 1)
+                                enableChannel: enabledHolder
+                                hasHorizontalScrollBar: true
+                                hasVerticalScrollBar: true
+                                modifiedChannel: messageModifiedHolder
+                                hasKeyboardFocusInitially: false
+                                postBuildCallback: messageView:
+                              )
+                             )
+                           
+                          )
+                        )
+                       )
+                     
+                    )
+                  )
+                 (ViewSpec
+                    name: 'FilePane'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (UISubSpecification
+                          name: 'FilePaneSpec'
+                          layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+                          minorKey: filePaneSpec
+                        )
+                       )
+                     
+                    )
+                  )
+                 )
+               
+              )
+              handles: (Any 0.5 1.0)
+            )
+           )
+         
+        )
+      )
+!
+
+fileListColumnSpec
+    "This resource specification was automatically generated
+     by the DataSetBuilder of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the DataSetBuilder may not be able to read the specification."
+
+    "
+     DataSetBuilder new openOnClass:SVN::CommitDialog2 andSelector:#fileListColumnSpec
+    "
+
+    <resource: #tableColumns>
+
+    ^#(
+      (DataSetColumnSpec
+         label: ''
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: None
+         width: 22
+         minWidth: 22
+         editorType: CheckToggle
+         rendererType: CheckToggle
+         model: include
+         menuFromApplication: false
+         printSelector: include
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: ''
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: Button
+         width: 22
+         minWidth: 22
+         menuFromApplication: false
+         printSelector: statusIcon
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Container'
+         labelAlignment: left
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: Button
+         menuFromApplication: false
+         printSelector: pathText
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Rev'
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: Button
+         usePreferredWidth: true
+         menuFromApplication: false
+         printSelector: revision
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Author'
+         labelAlignment: left
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: Button
+         usePreferredWidth: true
+         menuFromApplication: false
+         printSelector: author
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Date'
+         activeHelpKey: ''
+         activeHelpKeyForLabel: ''
+         labelButtonType: Button
+         usePreferredWidth: true
+         menuFromApplication: false
+         printSelector: date
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      )
+    
+!
+
+filePaneSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:SVN::CommitDialog2 andSelector:#filePaneSpec
+     SVN::CommitDialog2 new openInterface:#filePaneSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: filePaneSpec
+        window: 
+       (WindowSpec
+          label: 'File List'
+          name: 'File List'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 586 403)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (LabelSpec
+              label: 'Checked files will be commited to repository.'
+              name: 'FileListLabel'
+              layout: (LayoutFrame 0 0 10 0 0 1 35 0)
+              translateLabel: true
+              adjust: left
+            )
+           (DataSetSpec
+              name: 'WCEntryTable'
+              layout: (LayoutFrame 0 0 35 0 0 1 -30 1)
+              enableChannel: enabledHolder
+              model: fileSelectionHolder
+              menu: fileListMenu
+              hasHorizontalScrollBar: true
+              hasVerticalScrollBar: true
+              dataList: fileListHolder
+              useIndex: false
+              columnHolder: fileListColumnSpec
+              showLabels: false
+              multipleSelectOk: true
+            )
+           (CheckBoxSpec
+              label: 'Show only modified entries'
+              name: 'ShowOnlyChanged'
+              layout: (LayoutFrame 0 0 -30 1 -170 1 0 1)
+              enableChannel: enabledHolder
+              model: fileListShowOnlyModifiedHolder
+              translateLabel: true
+            )
+           (LinkButtonSpec
+              label: 'Browse working copy'
+              name: 'BrowseWC'
+              layout: (LayoutFrame -170 1 -30 1 0 1 0 1)
+              translateLabel: true
+              labelChannel: browseWorkingCopyLabel
+              adjust: right
+              model: doBrowseWorkingCopy
+            )
+           )
+         
+        )
+      )
+!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:GitDialog andSelector:#windowSpec
+     GitDialog new openInterface:#windowSpec
+     GitDialog open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: windowSpec
+        window: 
+       (WindowSpec
+          label: 'SubVersion: Dialog '
+          name: 'SubVersion: Dialog '
+          labelChannel: titleHolder
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 648 451)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (ViewSpec
+              name: 'TitleBox'
+              layout: (LayoutFrame 0 0 0 0 0 1 66 0)
+              backgroundColor: (Color 100.0 100.0 100.0)
+              component: 
+             (SpecCollection
+                collection: (
+                 (LabelSpec
+                    label: 'DialogTitle'
+                    name: 'DialogTitle'
+                    layout: (LayoutFrame 10 0 0 0 -75 1 40 0)
+                    style: (FontDescription helvetica medium roman 18 #'iso10646-1')
+                    backgroundColor: (Color 100.0 100.0 100.0)
+                    translateLabel: true
+                    labelChannel: titleHolder
+                    adjust: left
+                  )
+                 (LabelSpec
+                    label: 'DialogSubtitle'
+                    name: 'DialogSubtitle'
+                    layout: (LayoutFrame 30 0 40 0 -75 1 66 0)
+                    backgroundColor: (Color 100.0 100.0 100.0)
+                    translateLabel: true
+                    labelChannel: subtitleHolder
+                    resizeForLabel: false
+                    adjust: left
+                  )
+                 (LabelSpec
+                    label: 'Icon'
+                    name: 'DialogIcon'
+                    layout: (LayoutFrame -157 1 0 0 0 1 66 0)
+                    hasCharacterOrientedLabel: false
+                    backgroundColor: (Color 100.0 100.0 100.0)
+                    translateLabel: true
+                    labelChannel: dialogIconAspect
+                  )
+                 )
+               
+              )
+            )
+           (ViewSpec
+              name: 'ContentBox'
+              layout: (LayoutFrame 5 0 70 0 -5 1 -50 1)
+              component: 
+             (SpecCollection
+                collection: (
+                 (SubCanvasSpec
+                    name: 'Content'
+                    layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+                    hasHorizontalScrollBar: false
+                    hasVerticalScrollBar: false
+                    specHolder: contentSpecHolder
+                    createNewBuilder: false
+                  )
+                 )
+               
+              )
+            )
+           (DividerSpec
+              name: 'Separator'
+              layout: (LayoutFrame 5 0 -50 1 -5 1 -30 1)
+            )
+           (UISubSpecification
+              name: 'Buttons'
+              layout: (LayoutFrame 130 0 -30 1 0 1 0 1)
+              minorKey: buttonsSpec
+            )
+           (LinkButtonSpec
+              label: 'Help'
+              name: 'Help'
+              layout: (LayoutFrame 30 0 -30 1 130 0 0 1)
+              style: (FontDescription helvetica medium roman 12 #'iso10646-1')
+              initiallyInvisible: true
+              foregroundColor: (Color 0.0 0.0 86.9993133440147)
+              translateLabel: true
+              model: doHelp
+            )
+           (MenuPanelSpec
+              name: 'More'
+              layout: (LayoutFrame 0 0 -30 1 30 0 -50 1)
+              level: 0
+              model: doInspect
+              menu: actionsMenu
+            )
+           )
+         
+        )
+      )
+
+    "Created: / 07-10-2012 / 09:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog class methodsFor:'menu specs'!
+
+fileListMenu
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+
+    "
+     MenuEditor new openOnClass:SVN::CommitDialog2 andSelector:#fileListMenu
+     (Menu new fromLiteralArrayEncoding:(SVN::CommitDialog2 fileListMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Show differences'
+            itemValue: doShowDiffsForEntry
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Show differences (against HEAD)'
+            itemValue: doShowDiffsForEntryAgainstHEAD
+            translateLabel: true
+          )
+         )
+        nil
+        nil
+      )
+! !
+
+!SCMAbstractCommitDialog methodsFor:'accessing'!
+
+defaultSubtitle
+    | t |
+
+    t := self task.
+    ^t package notNil ifTrue:[
+        'Package: ' , t package name asText allItalic
+    ] ifFalse:[
+        t workingCopy branch url asText allItalic
+    ]
+
+    "Created: / 28-10-2008 / 09:14:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 06-10-2012 / 23:07:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fileListToCommit
+    ^(self fileListHolder value ? #()) 
+        select:[:entry|entry include]
+        thenCollect:[:entry|entry path].
+
+    "Created: / 08-02-2012 / 18:16:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+message
+
+    ^messageView notNil 
+        ifTrue:[messageView contents]
+        ifFalse:[nil]
+
+    "Created: / 31-03-2008 / 21:06:28 / janfrog"
+    "Modified: / 09-04-2009 / 08:50:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 08-02-2012 / 18:07:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+message: aString
+
+    ^messageView contents: aString
+
+    "Created: / 08-04-2009 / 23:27:09 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 08-02-2012 / 18:08:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+task
+
+    ^self model
+
+    "Created: / 23-03-2009 / 11:49:15 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+task: aTask
+
+    ^self model: aTask
+
+    "Created: / 23-03-2009 / 11:49:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+workingCopy
+
+    ^self task workingCopy
+
+    "Created: / 08-02-2012 / 18:07:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'acessing-views'!
+
+messageView: aView
+
+    messageView := aView scrolledView.
+"/    messageView model:
+"/        (self class messages
+"/            at: self task package
+"/            ifAbsent:[self task message])
+
+    "Created: / 08-02-2012 / 17:58:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'actions'!
+
+doAccept
+
+    self showProgressWhile:[
+            self acceptEnabled:false.
+
+            (self task)
+                message:self message;
+                paths: self fileListToCommit;
+                doCommit.
+
+            self accept value:true
+    ]
+
+    "Created: / 01-04-2008 / 18:59:12 / janfrog"
+    "Modified: / 19-08-2009 / 14:26:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 08-02-2012 / 18:17:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doBrowseWorkingCopy
+    self workingCopy browse
+
+    "Modified: / 04-02-2012 / 17:15:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doShowDiffsForEntry
+
+    self fileSelectionHolder value do:[:each|
+        self doShowDiffsForEntry: each entry against: Revision base
+    ].
+
+    "Created: / 09-02-2012 / 14:51:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doShowDiffsForEntry: entry against: rev
+    |wc wcChangeSet repoChangeSet diffset lang |
+
+    wc := self task workingCopy.
+    lang := entry programmingLanguage.
+    (lang notNil and: [lang isSmalltalk]) ifTrue:[
+        wcChangeSet := wc changeSetForContainer:entry path.
+        wcChangeSet name: wcChangeSet name, (resources string: ' (working copy - to be commited)').
+        repoChangeSet := wc changeSetForContainer:entry path revision:rev.
+        diffset := ChangeSetDiff versionA:wcChangeSet versionB:repoChangeSet.
+        (Tools::ChangeSetDiffTool new)
+            beSingleColumn;
+            diffset:diffset;
+            title:('%1: Diffbetween working copy and rev. %2 ' bindWith: entry path with: rev printString);
+            showVersionMethodDiffs: false;
+            open
+    ] ifFalse:[
+        | text1 text2 |
+        text1 := (wc containerReadStreamFor: entry path) contents asString.
+        text2 := wc cat: entry path revision: rev.
+        "/Argh...backward compatibility..."
+        (Tools::TextDiff2Tool ? Tools::TextDiffTool) new
+            labelA: 'Working copy';
+            labelB: ('r %1' bindWith: rev printString);
+            textA: text1; textB: text2;
+            title:('%1: Diffbetween working copy and rev. %2 ' bindWith: entry path with: rev printString);
+            open
+    ]
+
+    "Created: / 09-02-2012 / 14:53:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doShowDiffsForEntryAgainstHEAD
+
+    self fileSelectionHolder value do:[:each|
+        self doShowDiffsForEntry: each entry against: Revision head
+    ].
+
+    "Created: / 10-02-2012 / 10:00:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'aspects'!
+
+acceptButtonTitleAspect
+
+    ^'Commit'
+
+    "Created: / 08-02-2012 / 17:46:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+browseWorkingCopyLabel
+
+    ^'Browse working copy...' asText
+        colorizeAllWith: Color blue;
+        actionForAll:[ self doBrowseWorkingCopy ];
+        yourself
+
+    "Created: / 05-02-2012 / 01:28:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+enabledHolder
+    <resource: #uiAspect>
+
+    enabledHolder isNil ifTrue:[
+        enabledHolder := true asValue.
+    ].
+    ^ enabledHolder.
+
+    "Modified (comment): / 11-02-2012 / 23:28:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fileListHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    fileListHolder isNil ifTrue:[
+        fileListHolder := ValueHolder new.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       fileListHolder addDependent:self.
+"/       fileListHolder onChangeSend:#fileListHolderChanged to:self.
+    ].
+    ^ fileListHolder.
+
+    "Modified: / 08-02-2012 / 18:27:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fileListShowOnlyModifiedHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    fileListShowOnlyModifiedHolder isNil ifTrue:[
+        fileListShowOnlyModifiedHolder := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       fileListShowOnlyModifiedHolder addDependent:self.
+       fileListShowOnlyModifiedHolder onChangeSend:#updateFileList to:self.
+    ].
+    ^ fileListShowOnlyModifiedHolder.
+
+    "Modified: / 08-02-2012 / 18:04:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fileSelectionHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    fileSelectionHolder isNil ifTrue:[
+        fileSelectionHolder := ValueHolder new.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       fileSelectionHolder addDependent:self.
+"/       fileSelectionHolder onChangeSend:#fileSelectionHolderChanged to:self.
+    ].
+    ^ fileSelectionHolder.
+!
+
+infoPanel
+    infoPanel isNil ifTrue:[
+        infoPanel := Tools::InlineMessageDialog new.
+        infoPanel panelHiddenHolder: self enabledHolder.
+    ].
+    ^ infoPanel
+
+    "Created: / 09-02-2012 / 19:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+messageModifiedHolder
+    "return/create the 'messageModifiedHolder' value holder (automatically generated)"
+
+    messageModifiedHolder isNil ifTrue:[
+        messageModifiedHolder := ValueHolder with: false.
+        messageModifiedHolder onChangeEvaluate:[
+            self acceptEnabled: (self message indexOfNonSeparator ~~ 0).
+            messageModifiedHolder setValue: false.
+        ]
+    ].
+    ^ messageModifiedHolder
+
+    "Modified: / 08-02-2012 / 18:46:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'change & update'!
+
+updateFileList
+    | entries showOnlyModified |
+
+    showOnlyModified := fileListShowOnlyModifiedHolder value.
+    entries := self workingCopy status.
+    entries := entries reject:
+        [:e|
+        e status isUnversionedOrIgnoredOrMissing or:
+            [
+                fileListShowOnlyModifiedHolder value and:[ e status isNormal ]
+            ]].
+    entries := entries collect:[:entry|FileEntry application: self entry: entry].
+    self fileListHolder value: entries
+
+    "Created: / 08-02-2012 / 18:05:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'hooks'!
+
+commonPostBuild
+
+    self window extent: 640@640
+
+    "Created: / 08-02-2012 / 18:30:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+postOpenWith: anUIBuilder
+
+    self showProgressWhile:[ 
+        self doUpdateCode.
+        self doRunSanityChecks
+    ].
+
+    "Created: / 09-02-2012 / 15:23:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog methodsFor:'private'!
+
+doRunSanityChecks
+
+    | checker problems anyError |
+
+    self task isPackageCommit ifFalse:[
+        self doUpdateWorkingCopy.
+        ^self.
+    ].
+
+    ActivityNotification notify: (self resources string:'Checking code...').
+    problems := (checker := self task doSanityChecks) problems.
+    problems isEmptyOrNil ifTrue:[ 
+        self doUpdateWorkingCopy.
+        ^self.
+    ].
+
+    anyError := problems anySatisfy:[:problem|problem severity == #error].
+    self infoPanel 
+        reset;
+        beWarning;
+        message: 
+            (problems size == 1 
+                ifTrue:[self resources string:'A problem has been found in the code']
+                ifFalse:[problems size printString , (self resources string:' problems has been found in the code')]);
+
+        addButtonWithLabel: (self resources string:'Show')
+                    action: [
+                        Tools::ProjectCheckerBrowser new projectChecker: checker; open. self doCancel 
+                    ];
+
+        addButton:((Button label: (self resources string:'OK') 
+                    action: [
+                        self infoPanel beProgress.
+                        self doUpdateWorkingCopy.
+                        self infoPanel hide
+                    ]) enabled: anyError not; yourself);
+
+        addButtonWithLabel: (self resources string:'Cancel') 
+                    action:[self doCancel];
+
+        show.
+    ^anyError not
+
+    "Created: / 10-05-2012 / 17:24:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doUpdateCode
+    self task doPrepareWorkingCopy1
+
+    "Created: / 10-05-2012 / 17:24:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doUpdateWorkingCopy
+
+    self task doPrepareWorkingCopy2.
+    self message: self task message.
+    self messageModifiedHolder changed:#value.
+    self updateFileList.
+
+    "Created: / 10-05-2012 / 17:25:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog::FileEntry class methodsFor:'instance creation'!
+
+application:applicationArg entry:entryArg 
+
+    ^self new application:applicationArg entry:entryArg
+
+    "Created: / 09-02-2012 / 14:34:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog::FileEntry methodsFor:'accessing'!
+
+author
+    ^entry author
+
+    "Created: / 09-02-2012 / 14:36:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+date
+    ^entry date
+
+    "Created: / 09-02-2012 / 14:36:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+entry
+    ^ entry
+!
+
+include
+    ^ include
+!
+
+include:aBoolean
+    include := aBoolean.
+!
+
+path
+    ^entry path
+
+    "Created: / 09-02-2012 / 14:39:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+pathText
+    ^entry pathText
+
+    "Created: / 09-02-2012 / 14:36:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+revision
+    ^entry revision
+
+    "Created: / 09-02-2012 / 14:36:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+statusIcon
+    ^entry statusIcon
+
+    "Created: / 09-02-2012 / 14:36:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog::FileEntry methodsFor:'initialization'!
+
+application:applicationArg entry:entryArg 
+    application := applicationArg.
+    entry := entryArg.
+    include := true
+
+    "Modified: / 09-02-2012 / 14:35:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SCMAbstractCommitDialog class methodsFor:'documentation'!
+
+version_GIT
+    "Never, ever change this method. Ask JV or CG why"
+    ^thisContext method mclass theNonMetaclass instVarNamed: #revision
+!
+
+version_SVN
+    ^ '$Id::                                                                                                                        $'
+! !