mercurial/HGWorkingCopy.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 21 Nov 2012 01:21:47 +0000
changeset 88 1ad71a063a20
parent 73 eb731ce2685e
child 103 04731ef44417
permissions -rw-r--r--
Bunch of fixes. HGPackageModel: fixed temporary working copy creation. Must update temporary working copy to a revision the package in image is based on. HGStatus & HGCommandParser: added new status (Copied), fixed command parser to correctly parse copied file status. Added HGRevisionInfo class as interface to AbstractSourceCodeManager. HGRepository & HGWorkingCopy: improved cloning and updating.

"{ Package: 'stx:libscm/mercurial' }"

HGRepositoryObject subclass:#HGWorkingCopy
	instanceVariableNames:'root'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Mercurial-Core'
!


!HGWorkingCopy methodsFor:'accessing'!

changeset
    "Return an HGChangeset representing the checked-out changeset
     (revision) of the receiver"

    | id |

    (root asFilename / '.hg' / 'dirstate') readingFileDo:[:s|
        s binary.
        id := HGNodeId fromBytes: (s next: 20).
    ].

    ^repository changesetWithId: id.

    "Created: / 13-11-2012 / 21:47:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

path
    "Return a path to the root directory of the receiver as *Filename*. 
     Use #root to get the root working copy file"

    ^repository path

    "Created: / 17-10-2012 / 13:53:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

repository
    ^repository

    "Created: / 15-11-2012 / 09:48:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

root
    ^ root
! !

!HGWorkingCopy methodsFor:'actions'!

commit: message
    "Commits all uncommited changes with given message"

    ^self commit: message files: nil

    "Created: / 12-11-2012 / 22:35:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

commit:message files:files 
    "Commit given files with given message. If files
     is nil, all tracked modified files are commited"
    
    ^ (HGCommand commit)
        workingDirectory:root pathName;
        message:message;
        files:files;
        execute

    "Created: / 12-11-2012 / 22:36:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (format): / 17-11-2012 / 01:01:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

update: revisionOrBranch

    ^HGCommand update
        workingDirectory: self path;
        revision: revisionOrBranch asString;
        execute

    "Created: / 21-11-2012 / 00:21:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!HGWorkingCopy methodsFor:'initialization'!

setRepository: aHGRepository
    super setRepository: aHGRepository.
    root :=HGWorkingCopyFile wc: self path: repository path.

    "Created: / 19-09-2012 / 09:43:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 19-10-2012 / 15:44:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!HGWorkingCopy methodsFor:'inspecting'!

browse
    "Opens a file browser on the working copy"

    root browse

    "Created: / 04-02-2012 / 17:14:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-11-2012 / 17:00:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!HGWorkingCopy methodsFor:'instance creation'!

/ aString
    ^root construct: aString

    "Created: / 24-09-2012 / 13:49:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

construct: aString

    ^root construct: aString

    "Created: / 24-09-2012 / 13:50:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!HGWorkingCopy class methodsFor:'documentation'!

version_HG
    "Never, ever change this method. Ask JV or CG why"
    ^thisContext method mclass theNonMetaclass instVarNamed: #revision
!

version_SVN
    ^ '§Id::                                                                                                                        §'
! !