git/GitSignature.st
author vranyj1@bd9d3459-6c23-4dd9-91de-98eeebb81177
Sat, 06 Oct 2012 22:35:46 +0000
changeset 31 d96d7eff6efc
parent 28 f6f0a4bbaaee
child 481 0cfef855baa2
permissions -rw-r--r--
- GitDiffDeltaStructure added: #version #version_GIT - GitCheckoutStrategy added: #version #version_GIT - GitDiffOptionsStructure added: #version #version_GIT - GitTreewalkModeType added: #version #version_GIT - GitRemoteHandle added: #version #version_GIT - GitIndex added: #version #version_GIT - GitIndexEntryUnmergedStructure added: #version #version_GIT - GitWorkingCopyEntry added: #printOn: #version #version_GIT - GitIndexTimeStructure added: #version #version_GIT - GitIndexerHandle added: #version #version_GIT - GitSubmoduleHandle added: #version #version_GIT - GitSourceCodeManager2 added:9 methods changed: #isResponsibleForPackage: #managerTypeName #repositoryNameForPackage: #revisionInfoFromString: - GitAttrType added: #version #version_GIT - GitTask added: #version #version_GIT - GitTreeHandle added: #version #version_GIT - GitWorkingCopy added: #version #version_GIT - GitReflogHandle added: #version #version_GIT - GitFilemodeType added: #version #version_GIT - GitSignatureQuery added: #version #version_GIT - GitPackage added:27 methods changed: #commitTask #package category of: #commitTask - GitIndexerStreamHandle added: #version #version_GIT - GitOdbBackendStructure added: #version #version_GIT - GitLibraryObject added: #version #version_GIT - GitStatusShowType added: #version #version_GIT - GitObjectHandle added: #version #version_GIT - GitOdbHandle added: #version #version_GIT - GitSubmoduleStatusType added: #version #version_GIT - GitSignatureStructure added: #version #version_GIT - GitBlobHandle added: #version #version_GIT - GitConfigHandle added: #version #version_GIT - GitCvarType added: #version #version_GIT - GitStringArray added: #version #version_GIT - GitRepository added: #discover: #version #version_GIT #workingCopyForPackage: changed: #open: - GitConfigFileStructure added: #version #version_GIT - GitPrimitives added: #version #version_GIT - GitRefType added: #version #version_GIT - GitResetType added: #version #version_GIT - GitReference added: #version #version_GIT - GitIndexHandle added: #version #version_GIT - GitRemoteCallbacksStructure added: #version #version_GIT - GitObjectType added: #version #version_GIT - GitSubmoduleIgnoreType added: #version #version_GIT - GitSubmoduleUpdateType added: #version #version_GIT - GitTagHandle added: #version #version_GIT - GitReflogEntryHandle added: #version #version_GIT - GitRefspecHandle added: #version #version_GIT - GitTreebuilderHandle added: #version #version_GIT - GitDialog added: #version #version_GIT - GitErrorKlass added: #version #version_GIT - GitRepositoryObject added: #version #version_GIT - GitRemote added: #version #version_GIT - GitPackageManager added: #packageNamed: #version #version_GIT #version_SVN changed: #initialize - GitOdbObjectHandle added: #version #version_GIT - GitRepositoryInitOptionsStructure added: #version #version_GIT - stx_libscm_git added: #version #version_GIT changed: #classNamesAndAttributes - GitBranchType added: #version #version_GIT - GitTimeStructure added: #version #version_GIT - GitSignature added: #version #version_GIT - GitCommand added: #version #version_GIT - GitDiffRangeStructure added: #version #version_GIT - GitRemoteCompletionType added: #version #version_GIT - GitErrorStructure added: #version #version_GIT - GitRepositoryHandle added: #version #version_GIT - GitCheckoutOptions added: #version #version_GIT - GitAuthorQuery added: #version #version_GIT - GitSourceCodeManagementSettingsAppl2 added:11 methods changed: #windowSpec - GitOdbStreamStructure added: #version #version_GIT - GitStructure added: #version #version_GIT - GitCommit added: #version #version_GIT - GitRemoteHeadStructure added: #version #version_GIT - GitTree added: #version #version_GIT - GitOidShortenHandle added: #version #version_GIT - GitStatusOptionsStructure added: #version #version_GIT - GitCvarMapStructure added: #version #version_GIT - GitReferenceHandle added: #version #version_GIT - GitCommitHandle added: #version #version_GIT - GitError added: #version #version_GIT - GitDiffListHandle added: #version #version_GIT - GitCommitterQuery added: #version #version_GIT - GitIndexerStatsStructure added: #version #version_GIT - GitNoteDataStructure added: #version #version_GIT - GitFileoutLikeTask added: #version #version_GIT changed:6 methods - GitObject added: #version #version_GIT - GitOid added: #version #version_GIT - GitTreeEntryHandle added: #version #version_GIT - GitDiffFileStructure added: #version #version_GIT - GitTag added: #version #version_GIT - GitDeltaType added: #version #version_GIT - GitIndexEntryStructure added: #version #version_GIT - GitRevwalkHandle added: #version #version_GIT - GitCommitDialog added: #version #version_GIT comment/format in: #doRunSanityChecks changed: #defaultSubtitle - GitStatusCodes added: #version #version_GIT - GitIconLibrary added: #version #version_GIT - GitNoteHandle added: #version #version_GIT - GitCommitTask added: #version #version_GIT changed: #doCommit #doSanityChecks - extensions ...

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

GitLibraryObject subclass:#GitSignature
	instanceVariableNames:'name namePtr email emailPtr timestamp'
	classVariableNames:'Default'
	poolDictionaries:''
	category:'SCM-Git-Core'
!


!GitSignature class methodsFor:'instance creation'!

name: name email: email
    | ref |

    ref := ByteArray new: ExternalBytes sizeofPointer.
    GitError raiseIfError: (GitPrimitives prim_git_signature_new: ref name: name email: email time: 0 offset: 0 ).
    ^self basicNew 
        setHandleFromRef:ref;
        yourself

    "
        self new
    "

    "Created: / 30-09-2012 / 10:00:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

new
    <todo: 'Replace with values from git config'>
    ^self name: '**unitialized**' email: '**unitialized**'

    "Created: / 25-09-2012 / 12:32:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitSignature class methodsFor:'accessing-default'!

default
    Default isNil ifTrue:[ 
        Default := self new.
        Default name: OperatingSystem getFullUserName.
        Default email: (Dialog request:'Git - Enter your email')
    ].
    ^ Default.

    "
        GitSignature default
    "

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

!GitSignature methodsFor:'accessing'!

email

    (email isNil and:[handle notNil]) ifTrue:[
        email := (emailPtr := handle email) copyCStringFromHeap utf8Decoded
    ].
    ^email

    "Modified: / 25-09-2012 / 11:28:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

email:aString

    email := aString.
    emailPtr := ExternalBytes newNullTerminatedFromString:aString.
    handle email: emailPtr address

    "Modified: / 25-09-2012 / 14:26:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

name

    (name isNil and:[handle notNil]) ifTrue:[
        name := (namePtr := handle name) copyCStringFromHeap utf8Decoded
    ].
    ^name

    "Modified: / 25-09-2012 / 11:28:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

name:aString

    name := aString.
    namePtr := ExternalBytes newNullTerminatedFromString:aString.
    handle name: namePtr address

    "Modified: / 25-09-2012 / 14:26:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

timestamp

    (timestamp isNil and:[handle notNil]) ifTrue:[
        timestamp := Timestamp utcSecondsSince1970: handle time + handle offset
    ].
    ^timestamp

    "Modified: / 29-09-2012 / 23:05:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

timestamp: aTimestamp

    timestamp := aTimestamp. 
    handle notNil ifTrue:[
        handle time: timestamp utcSecondsSince1970.
        handle offset: 0
    ].
    ^timestamp

    "Created: / 25-09-2012 / 14:36:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitSignature methodsFor:'copying'!

copyNow
    ^self copy timestamp: Timestamp now; yourself

    "Created: / 25-09-2012 / 14:40:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

shallowCopy
    ^self class basicNew 
        setHandle:(GitPrimitives prim_git_signature_dup: handle);
        yourself

    "Created: / 25-09-2012 / 14:38:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitSignature methodsFor:'printing & storing'!

printOn:aStream
    "append a printed representation if the receiver to the argument, aStream"

    aStream 
        nextPutAll: self name;
        space;
        nextPut:$<;
        nextPutAll: self email;
        nextPut:$>;
        space.
    self timestamp printOn: aStream

    "Modified: / 25-09-2012 / 14:40:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitSignature methodsFor:'private-accessing'!

getHandleClass
    ^GitSignatureStructure

    "Created: / 19-09-2012 / 01:27:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setHandle: hndl
    self assert: (hndl isNil or:[hndl class == self getHandleClass]).
    handle := hndl.

    "Created: / 19-09-2012 / 01:28:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitSignature class methodsFor:'documentation'!

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

version_SVN
    ^ '$Id::                                                                                                                        $'
! !