git/GitIndex.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Jul 2018 09:41:20 +0200
branchcvs_MAIN
changeset 847 f0220e0cb843
parent 481 0cfef855baa2
permissions -rw-r--r--
initial checkin

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

GitLibraryObject subclass:#GitIndex
	instanceVariableNames:'repository'
	classVariableNames:''
	poolDictionaries:'GitObjectType'
	category:'SCM-Git-Core'
!


!GitIndex class methodsFor:'instance creation'!

on: path
    "Creates new index on given file. If the file does not exist,
     the index is only in-memory. To write it to disk, use #write"

    | err ref |

    ref := ByteArray new: ExternalBytes sizeofPointer.
    err := GitPrimitives prim_git_index_open: ref index_path: path asString.
            GitError raiseIfError: err.
    ^GitIndex new
        setHandleFromRef: ref;
        yourself

    "Created: / 02-10-2012 / 15:39:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitIndex methodsFor:'accessing'!

tree
    | oid err |

    oid := GitOid new.
    err := GitPrimitives prim_git_tree_create_fromindex: oid index: handle.
    GitError raiseIfError: err.
    ^repository lookup: oid type: OBJ_TREE

    "Created: / 25-09-2012 / 10:22:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitIndex methodsFor:'adding & removing'!

add: entry
    ^self add: entry stage: 0

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

add: entry stage: stage
    | path err |

    path := entry pathNameRelative.
    err := GitPrimitives prim_git_index_add: handle path: path stage: stage.
    GitError raiseIfError: err.

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

!GitIndex methodsFor:'initialization & release'!

free
    handle notNil ifTrue:[
        GitPrimitives prim_git_index_free: handle. 
        handle := nil.
    ].

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

!GitIndex methodsFor:'operations'!

read
    "Add or update an index entry from a file in disk"

    | err |     
    err := GitPrimitives prim_git_index_read: handle.
    GitError raiseIfError: err.

    "Created: / 24-09-2012 / 22:02:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

unique
    "Add or update an index entry from a file in disk"

    | err |     
    err := GitPrimitives prim_git_index_uniq: handle.
    GitError raiseIfError: err.

    "Created: / 25-09-2012 / 00:17:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

write
    | err |     

"/    err := GitPrimitives prim_git_index_uniq: handle.
"/    GitError raiseIfError: err.
    err := GitPrimitives prim_git_index_write: handle.
    GitError raiseIfError: err.

    "Created: / 25-09-2012 / 00:17:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitIndex methodsFor:'private-accessing'!

getHandleClass
    ^GitIndexHandle

    "Created: / 25-09-2012 / 00:34:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setRepository: aGitRepository
    repository := aGitRepository

    "Created: / 24-09-2012 / 21:47:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!GitIndex class methodsFor:'documentation'!

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

version_SVN
    ^ '$Id$'
! !