- GitPrimitives
authorvranyj1@bd9d3459-6c23-4dd9-91de-98eeebb81177
Sun, 30 Sep 2012 22:13:12 +0000
changeset 23 5cbdd3cb7ce4
parent 22 f45584f197d3
child 24 bce2a03d1070
- GitPrimitives changed: #prim_git_remote_list:repo: #prim_git_strarray_copy:src: #prim_git_strarray_free: - GitLibraryObject added: #documentation comment/format in: #getHandleClass #setHandleFromRef: - GitCommand added:42 methods category of: - GitRepository class definition added:6 methods category of: - stx_libscm_git changed: #classNamesAndAttributes #extensionMethodNames #preRequisites - GitStringArray class definition added:7 methods changed: #count #strings category of: #count #count: #strings #strings: - GitWorkingCopy class definition added: #repository changed: #setRepository: - GitObject class definition - GitRemote added:7 methods - GitRepositoryObject added:6 methods - GitTests added: #test_02a - GitStructure added: #new - GitWorkingCopyEntry added: #isChanged - extensions ...
git/GitCommand.st
git/GitLibraryObject.st
git/GitObject.st
git/GitPrimitives.st
git/GitRemote.st
git/GitRepository.st
git/GitRepositoryObject.st
git/GitStrarrayStructure.st
git/GitStringArray.st
git/GitStructure.st
git/GitTests.st
git/GitWorkingCopy.st
git/GitWorkingCopyEntry.st
git/Make.proto
git/Make.spec
git/abbrev.stc
git/bc.mak
git/git.rc
git/libInit.cc
git/stx_libscm_git.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/git/GitCommand.st	Sun Sep 30 22:13:12 2012 +0000
@@ -0,0 +1,309 @@
+"{ Package: 'stx:libscm/git' }"
+
+Object subclass:#GitCommand
+	instanceVariableNames:''
+	classVariableNames:'GitExecutable'
+	poolDictionaries:''
+	category:'SCM-Git-Internal'
+!
+
+GitCommand subclass:#clone
+	instanceVariableNames:'url path'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:GitCommand
+!
+
+GitCommand subclass:#push
+	instanceVariableNames:'remote refspec'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:GitCommand
+!
+
+!GitCommand class methodsFor:'documentation'!
+
+documentation
+"
+    A simple wrapper for git command line tool. git command is called
+    in cases there is no native nor libgit2 implementation for given
+    operation (yet).
+
+    Individual commands are wrapped in my private classes.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!GitCommand class methodsFor:'instance creation'!
+
+clone
+    ^clone new
+
+    "Created: / 01-10-2012 / 00:09:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+new
+    ^ self basicNew initialize.
+
+    "Created: / 16-03-2008 / 07:45:22 / janfrog"
+!
+
+push
+    ^push new
+
+    "Created: / 30-09-2012 / 23:46:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitCommand class methodsFor:'accessing'!
+
+verbose
+
+    ^ UserPreferences current svnVerbose
+
+    "Created: / 19-03-2008 / 12:29:47 / janfrog"
+    "Modified: / 19-03-2009 / 14:00:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 16:00:06 / dundee"
+!
+
+verbose:aBoolean
+
+    UserPreferences current svnVerbose:aBoolean
+
+    "Created: / 19-03-2008 / 12:29:59 / janfrog"
+    "Modified: / 19-03-2009 / 14:00:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 16:00:13 / dundee"
+! !
+
+!GitCommand class methodsFor:'commands'!
+
+clone: url to: stringOfFilename
+    self clone
+        url: url;
+        path: stringOfFilename asFilename asAbsoluteFilename pathName;
+        execute
+
+    "Created: / 01-10-2012 / 00:06:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitCommand methodsFor:'executing'!
+
+execute
+    |pipe output pid environment|
+
+    pipe := NonPositionableExternalStream makePipe.
+    output := pipe first.
+    environment := OperatingSystem getEnvironment copy.
+
+    environment at:'LANG' put:'C'.
+    pid := OperatingSystem exec:(self executable) withArguments:(self arguments)
+        environment:environment
+        fileDescriptors:{0 . pipe second fileDescriptor . pipe second fileDescriptor}
+        fork:true 
+        newPgrp:false 
+        inDirectory:self workingDirectory.
+    pipe second close.
+    pid isNil ifTrue:[
+        self error:'Cannot execute git command'.
+        output close.
+        ^ self.
+    ].
+    ^ self parse: output.
+
+    "
+        SVNv2::Command info: 'https://swing.fit.cvut.cz/svn/stx/libsvn'
+    "
+
+    "Created: / 11-05-2011 / 07:45:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-12-2011 / 19:22:00 / dundee"
+    "Modified (format): / 27-12-2011 / 15:53:54 / dundee"
+    "Modified: / 30-09-2012 / 23:48:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitCommand methodsFor:'private'!
+
+arguments
+
+    ^ OrderedCollection streamContents:[:s |
+        s nextPut:self executable.
+        self argumentsGlobalOn:s.
+        s nextPut:self command.
+        self argumentsCommandOn:s.
+    ].
+
+    "Created: / 11-05-2011 / 07:58:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 15:47:23 / dundee"
+!
+
+argumentsCommandOn:stream
+    "Called to get command specific options"
+
+    self shouldImplement
+
+    "Created: / 11-05-2011 / 07:58:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 15:46:59 / dundee"
+!
+
+argumentsGlobalOn:arg
+    "Called to get global options"
+
+    "Created: / 11-05-2011 / 07:58:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 15:47:10 / dundee"
+    "Modified: / 30-09-2012 / 23:43:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+command
+    "Returns the git 'command' option, i.e. commit,
+     push, pull, ..."
+
+    ^self class nameWithoutPrefix
+
+    "
+        GitCommand::push basicNew command
+    "
+
+    "Created: / 11-05-2011 / 07:58:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 15:47:17 / dundee"
+    "Modified: / 30-09-2012 / 23:37:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+executable
+    | h |
+
+    GitExecutable notNil ifTrue:[^ GitExecutable].
+
+    OperatingSystem isMSWINDOWSlike ifTrue:[
+"/        h := Win32OperatingSystem registryEntry 
+"/                key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\svn.exe'.
+"/        h notNil ifTrue:[GitExecutable := h valueNamed:''].
+"/        GitExecutable notEmptyOrNil ifTrue:[^ GitExecutable]
+        GitExecutable := OperatingSystem pathOfCommand:'git'.
+        ^GitExecutable
+    ].
+
+    OperatingSystem isUNIXlike ifTrue:[
+        GitExecutable := OperatingSystem pathOfCommand:'git'.    
+        ^GitExecutable
+    ].
+
+    self error:'Git executable not found!!'.
+
+
+    "
+     GitExecutable := nil.
+     self basicNew executable
+    "
+
+    "Created: / 11-05-2011 / 07:59:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-12-2011 / 22:48:33 / dundee"
+    "Modified (format): / 27-12-2011 / 15:51:06 / dundee"
+    "Modified: / 01-10-2012 / 00:10:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parse: stream
+
+    "Parses output of svn 'command' option, i.e. commit,
+     log, update, checkout, etc."
+
+    ^ self subclassResponsibility
+
+    "Created: / 11-05-2011 / 07:58:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 17-12-2011 / 17:02:41 / dundee"
+!
+
+workingDirectory
+
+    ^ Filename currentDirectory pathName
+
+    "Created: / 11-05-2011 / 08:26:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 27-12-2011 / 15:54:08 / dundee"
+! !
+
+!GitCommand::clone methodsFor:'accessing'!
+
+path
+    ^ path
+!
+
+path:something
+    path := something.
+!
+
+url
+    ^ url
+!
+
+url:something
+    url := something.
+! !
+
+!GitCommand::clone methodsFor:'private'!
+
+argumentsCommandOn:stream
+    "Called to get command specific options"
+
+    stream nextPut: url; nextPut: path
+
+    "Created: / 01-10-2012 / 00:04:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parse:stream
+    "superclass GitCommand says that I am responsible to implement this method"
+
+    ^ ''
+
+    "Modified: / 01-10-2012 / 00:11:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitCommand::push methodsFor:'accessing'!
+
+refspec
+    ^ refspec
+!
+
+refspec:something
+    refspec := something.
+!
+
+remote
+    ^ remote
+!
+
+remote:something
+    remote := something.
+! !
+
+!GitCommand::push methodsFor:'private'!
+
+argumentsCommandOn:stream
+    "Called to get command specific options"
+
+    stream nextPutAll: remote.
+    refspec notNil ifTrue:[
+        stream nextPutAll: refspec.
+    ]
+
+    "Created: / 30-09-2012 / 23:44:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parse:stream
+    "superclass GitCommand says that I am responsible to implement this method"
+
+    ^ ''
+
+    "Modified: / 01-10-2012 / 00:11:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitCommand class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id::                                                                                                                        $'
+! !
--- a/git/GitLibraryObject.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitLibraryObject.st	Sun Sep 30 22:13:12 2012 +0000
@@ -7,6 +7,25 @@
 	category:'SCM-Git-Model'
 !
 
+!GitLibraryObject class methodsFor:'documentation'!
+
+documentation
+"
+    An abstract superclass for all libgit2 objects.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+        handle          <GitHandle>     a pointer to underlayng
+                                        C object (structure)
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
 
 !GitLibraryObject methodsFor:'finalization'!
 
@@ -42,6 +61,8 @@
 !
 
 getHandleClass
+    "Returns a class of my handle."
+
     ^self subclassResponsibility
 
     "Created: / 17-09-2012 / 21:19:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -74,6 +95,10 @@
 !
 
 setHandleFromRef: aByteArray
+    "Initalized a handle from a reference. The passed bytearray
+     is supposed to contain a C pointer data to the underlaing
+     C object"
+
     self assert: aByteArray isByteArray.
     self assert: aByteArray size == ExternalAddress pointerSize.
     self setHandle: (self getHandleClass newAddress: (aByteArray longAt: 1))
--- a/git/GitObject.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitObject.st	Sun Sep 30 22:13:12 2012 +0000
@@ -1,7 +1,7 @@
 "{ Package: 'stx:libscm/git' }"
 
-GitLibraryObject subclass:#GitObject
-	instanceVariableNames:'oid repository'
+GitRepositoryObject subclass:#GitObject
+	instanceVariableNames:'oid'
 	classVariableNames:''
 	poolDictionaries:'GitObjectType'
 	category:'SCM-Git-Model'
@@ -49,10 +49,6 @@
     ^ oid
 
     "Modified: / 30-09-2012 / 10:39:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-repository
-    ^ repository
 ! !
 
 !GitObject methodsFor:'initialization'!
@@ -61,12 +57,6 @@
     oid := aGitOid
 
     "Created: / 10-09-2012 / 18:54:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-setRepository: aGitRepository
-    repository := aGitRepository
-
-    "Created: / 10-09-2012 / 18:50:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GitObject methodsFor:'initialization & release'!
--- a/git/GitPrimitives.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitPrimitives.st	Sun Sep 30 22:13:12 2012 +0000
@@ -1491,8 +1491,10 @@
 
 prim_git_remote_list: remotes_list repo: repo 
 
-    <cdecl: int32 "git_remote_list" ( GitStrarrayStructure GitRepositoryHandle ) >
+    <cdecl: int32 "git_remote_list" ( GitStringArray GitRepositoryHandle ) >
     self primitiveFailed
+
+    "Modified: / 30-09-2012 / 20:19:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 prim_git_remote_load: out repo: repo name: name 
@@ -1899,14 +1901,18 @@
 
 prim_git_strarray_copy: tgt src: src 
 
-    <cdecl: int32 "git_strarray_copy" ( GitStrarrayStructure GitStrarrayStructure ) >
+    <cdecl: int32 "git_strarray_copy" ( GitStringArray GitStrarrayStructure ) >
     self primitiveFailed
+
+    "Modified: / 30-09-2012 / 20:20:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 prim_git_strarray_free: array 
 
-    <cdecl: void "git_strarray_free" ( GitStrarrayStructure ) >
+    <cdecl: void "git_strarray_free" ( GitStringArray ) >
     self primitiveFailed
+
+    "Modified: / 30-09-2012 / 20:20:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 prim_git_submodule_add_finalize: submodule 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/git/GitRemote.st	Sun Sep 30 22:13:12 2012 +0000
@@ -0,0 +1,80 @@
+"{ Package: 'stx:libscm/git' }"
+
+GitRepositoryObject subclass:#GitRemote
+	instanceVariableNames:'name'
+	classVariableNames:''
+	poolDictionaries:'GitObjectType'
+	category:'SCM-Git-Model'
+!
+
+!GitRemote class methodsFor:'documentation'!
+
+documentation
+"
+    A GitRemote represents a remote repository.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!GitRemote methodsFor:'accessing'!
+
+name
+    ^ name
+! !
+
+!GitRemote methodsFor:'initialization'!
+
+setName: aString
+    name := aString
+
+    "Created: / 30-09-2012 / 20:37:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitRemote methodsFor:'initialization & release'!
+
+free
+    handle notNil ifTrue:[
+        GitPrimitives prim_git_remote_free: handle. 
+        handle := nil.
+    ].
+
+    "Created: / 30-09-2012 / 23:29:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitRemote methodsFor:'printing & storing'!
+
+printOn:aStream
+    "append a printed representation if the receiver to the argument, aStream"
+
+    super printOn:aStream.
+    aStream nextPut:$(.
+    name printOn:aStream.
+    aStream nextPut:$).
+
+    "Modified: / 30-09-2012 / 20:38:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitRemote methodsFor:'private-accessing'!
+
+getHandleClass
+    "Returns a class of my handle."
+
+    ^GitRemoteHandle
+
+    "Created: / 30-09-2012 / 20:33:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitRemote class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id::                                                                                                                        $'
+! !
--- a/git/GitRepository.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitRepository.st	Sun Sep 30 22:13:12 2012 +0000
@@ -1,7 +1,7 @@
 "{ Package: 'stx:libscm/git' }"
 
 GitLibraryObject subclass:#GitRepository
-	instanceVariableNames:'path workdir index'
+	instanceVariableNames:'path workdir index remotes'
 	classVariableNames:''
 	poolDictionaries:'GitObjectType GitStatusCodes'
 	category:'SCM-Git-Model'
@@ -13,6 +13,13 @@
 clone: url to: stringOrDirectory
     | dir ref fetchStats checkoutStats options |
 
+    (url asString startsWith: 'file://') ifTrue:[
+        "Arghhh...local transport not yet supported by libgit2, use command line..."
+        GitCommand clone: url to: stringOrDirectory pathName.
+        ^self open: stringOrDirectory pathName
+    ].
+
+
     dir := stringOrDirectory asFilename.
     dir exists ifTrue:[
         GitError raiseErrorString:'Destination directory already exists'.
@@ -35,7 +42,7 @@
         setPath: dir pathName;
         yourself
 
-    "Created: / 19-09-2012 / 15:27:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 01-10-2012 / 00:09:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 open: aString
@@ -78,6 +85,23 @@
     ^ path
 !
 
+remotes
+
+    remotes isNil ifTrue:[
+        | list  |
+
+        list := GitStringArray new.
+        GitError raiseIfError:(GitPrimitives prim_git_remote_list: list repo: handle).
+        remotes := Dictionary new.
+        list do:[:name|
+            remotes at: name put: (self remoteNamed: name)
+        ].
+    ].
+    ^remotes.
+
+    "Created: / 30-09-2012 / 20:15:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 workingCopy
     self isBare ifTrue:[
         GitError raiseErrorString: 'Repository is bare'.
@@ -144,10 +168,35 @@
     ^self lookup: oid type: OBJ_COMMIT.
 
     "Created: / 25-09-2012 / 14:51:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+push: aGitRemote
+    "pushes all changes to given remote repository"
+
+    GitCommand push
+        remote: aGitRemote name;
+        execute
+
+    "Created: / 30-09-2012 / 23:46:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GitRepository methodsFor:'copying'!
 
+cloneTo: aStringOrFilename"^<GitRepository>"
+
+    "Clones the receiver to given directory. And equivalent to
+
+        git clone <path> <clonePath>
+
+    "
+
+    ^GitRepository 
+        clone: ('file://', self path ) 
+           to: (aStringOrFilename)
+
+    "Created: / 30-09-2012 / 19:07:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 shallowCopy
 
     ^self class open: path
@@ -172,14 +221,6 @@
     ].
 
     "Created: / 17-09-2012 / 21:16:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-setHandleFromRef: aByteArray
-    self assert: aByteArray isByteArray.
-    self assert: aByteArray size == ExternalAddress pointerSize.
-    self setHandle: (self getHandleClass newAddress: (aByteArray longAt: 1))
-
-    "Created: / 25-09-2012 / 20:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GitRepository methodsFor:'lookup'!
@@ -246,6 +287,20 @@
     "Created: / 17-09-2012 / 21:20:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+remoteNamed: name
+    | ref err |
+
+    ref := ByteArray new: ExternalBytes sizeofPointer.
+    err := GitPrimitives prim_git_remote_load: ref repo: handle  name: name.
+    GitError raiseIfError: err.
+    ^GitRemote new
+        setHandleFromRef: ref;
+        setRepository: self;
+        setName: name
+
+    "Created: / 30-09-2012 / 20:16:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 statusOf: aFilename
     | ref err |
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/git/GitRepositoryObject.st	Sun Sep 30 22:13:12 2012 +0000
@@ -0,0 +1,49 @@
+"{ Package: 'stx:libscm/git' }"
+
+GitLibraryObject subclass:#GitRepositoryObject
+	instanceVariableNames:'repository'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SCM-Git-Model'
+!
+
+!GitRepositoryObject class methodsFor:'documentation'!
+
+documentation
+"
+    An abstract superclass for all objects that know the
+    repository they belong to
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+        repository      <GitRepository> a repository which the object
+                                        belong to.
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!GitRepositoryObject methodsFor:'accessing'!
+
+repository
+    ^ repository
+! !
+
+!GitRepositoryObject methodsFor:'initialization'!
+
+setRepository: aGitRepository
+    repository := aGitRepository
+
+    "Created: / 10-09-2012 / 18:50:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitRepositoryObject class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id::                                                                                                                        $'
+! !
--- a/git/GitStrarrayStructure.st	Sun Sep 30 14:31:09 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-"{ Package: 'stx:libscm/git' }"
-
-GitStructure subclass:#GitStrarrayStructure
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'SCM-Git-Internal-Structures'
-!
-
-
-!GitStrarrayStructure class methodsFor:'accessing'!
-
-libraryName
-
-    OperatingSystem isUNIXlike ifTrue:[^'libgit2.so'].
-
-    OperatingSystem isMSWINDOWSlike ifTrue:[^'git2.dll'].
-
-    self error:'Library name for host OS is not known'
-!
-
-structSize
-    "Returns size of undelaying structure in bytes"
-
-    ^8
-! !
-
-!GitStrarrayStructure methodsFor:'accessing'!
-
-count
-    "Returns a Cface::CLongNode"
-
-    ^self longLongAt:1 + 4
-!
-
-count: value
-
-    self longLongAt:1 + 4 put:value
-!
-
-strings
-    "Returns (pointer-to (pointer-to char))"
-
-    ^self pointerAt:1 + 0
-!
-
-strings: value
-
-    self pointerAt:1 + 0 put:value
-! !
-
-!GitStrarrayStructure class methodsFor:'documentation'!
-
-version_SVN
-    ^ '$Id::                                                                                                                        $'
-! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/git/GitStringArray.st	Sun Sep 30 22:13:12 2012 +0000
@@ -0,0 +1,130 @@
+"{ Package: 'stx:libscm/git' }"
+
+GitStructure subclass:#GitStringArray
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SCM-Git-Internal-Structures'
+!
+
+!GitStringArray class methodsFor:'documentation'!
+
+documentation
+"
+    A git_strarray wrapper. GitStringArray is for internal usage only.
+    Do not use it your code
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!GitStringArray class methodsFor:'accessing'!
+
+libraryName
+
+    OperatingSystem isUNIXlike ifTrue:[^'libgit2.so'].
+
+    OperatingSystem isMSWINDOWSlike ifTrue:[^'git2.dll'].
+
+    self error:'Library name for host OS is not known'
+!
+
+structSize
+    "Returns size of undelaying structure in bytes"
+
+    ^8
+! !
+
+!GitStringArray methodsFor:'accessing'!
+
+collect: aBlock    
+    | strings newCollection |
+
+    "Reimplemented for speed"
+
+    strings := self strings.
+    newCollection := Array new: self count.
+    1 to: self count do:[:index|
+        | val |
+
+        val := aBlock value: (strings pointerAt: ((index - 1) * ExternalBytes sizeofPointer) + 1) copyCStringFromHeap.
+        newCollection at: index put: val.
+    ].
+    ^newCollection
+
+    "Created: / 30-09-2012 / 20:32:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+do: aBlock    
+    | strings |
+
+    "Reimplemented for speed"
+
+    strings := self strings.
+    1 to: self count do:[:index|
+        aBlock value: (strings pointerAt: ((index - 1) * ExternalBytes sizeofPointer) + 1) copyCStringFromHeap
+    ]
+
+    "Created: / 30-09-2012 / 20:13:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitStringArray methodsFor:'accessing-private'!
+
+count
+    "Returns a Cface::CLongNode"
+
+    ^self longAt:1 + 4
+
+    "Modified: / 30-09-2012 / 20:23:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+count: value
+
+    self longLongAt:1 + 4 put:value
+!
+
+strings
+    "Returns (pointer-to (pointer-to char))"
+
+    ^ExternalBytes 
+        address:(self longAt:1 + 0) 
+        size:(self count * ExternalBytes sizeofPointer)
+
+    "Modified: / 30-09-2012 / 20:32:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+strings: value
+
+    self pointerAt:1 + 0 put:value
+! !
+
+!GitStringArray methodsFor:'adding'!
+
+addAll:aCollection
+    self shouldNotImplement. "/ Cannot grow!!
+
+    "Created: / 30-09-2012 / 19:56:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitStringArray methodsFor:'finalization'!
+
+finalize
+    GitPrimitives prim_git_strarray_free: self.
+    self setAddress:0 size:0
+
+    "Created: / 30-09-2012 / 19:58:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GitStringArray class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id::                                                                                                                        $'
+! !
--- a/git/GitStructure.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitStructure.st	Sun Sep 30 22:13:12 2012 +0000
@@ -16,6 +16,12 @@
     "Created: / 19-09-2012 / 14:04:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+new
+    ^self new: self structSize
+
+    "Created: / 30-09-2012 / 20:21:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 newAddress: address
     ^self address: address size: self structSize.
 
--- a/git/GitTests.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitTests.st	Sun Sep 30 22:13:12 2012 +0000
@@ -95,6 +95,45 @@
     self assert: wc commit parents anElement oid = (GitOid fromString:'541c09aa382a56ec87b813b3fb6ea84e17909889').
 
     "Created: / 19-09-2012 / 23:06:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_02a
+
+    "Test scenario
+        - clone an existing repo
+        - modify some files
+        - commit changes
+        - push to origin
+        
+    "
+
+    | repoOrig repoClone wc file1_txt commit_oid commit |
+
+    repoOrig := self repositoryNamed: 'test_repo_01'.
+    "
+    UserPreferences fileBrowserClass openOn: repoOrig path    
+    "
+    repoClone := repoOrig cloneTo: (repositories add: Filename newTemporary).
+    "
+    UserPreferences fileBrowserClass openOn: repoClone path
+    "
+    wc := repoClone workingCopy.
+    "Modify some file"
+    file1_txt := wc / 'file1.txt'.
+    self assert: file1_txt isModified not.
+
+    (file1_txt) writingFileDo:[:s|
+        s nextPutAll: 'modified from test_02a'.
+    ].
+    wc stage.
+    commit_oid := (wc commit: 'test_02a commit 1') oid.
+
+    wc repository push: (wc repository remotes at:#origin).
+
+    commit := repoOrig lookup: commit_oid.
+    self assert: commit message = 'test_02a commit 1'
+
+    "Created: / 30-09-2012 / 19:01:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GitTests class methodsFor:'documentation'!
--- a/git/GitWorkingCopy.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitWorkingCopy.st	Sun Sep 30 22:13:12 2012 +0000
@@ -1,7 +1,7 @@
 "{ Package: 'stx:libscm/git' }"
 
-GitLibraryObject subclass:#GitWorkingCopy
-	instanceVariableNames:'repository reference commit index root detached'
+GitRepositoryObject subclass:#GitWorkingCopy
+	instanceVariableNames:'reference commit index root detached'
 	classVariableNames:''
 	poolDictionaries:'GitStatusCodes'
 	category:'SCM-Git-Model'
@@ -149,8 +149,8 @@
 !GitWorkingCopy methodsFor:'initialization'!
 
 setRepository: aGitRepository
+    super setRepository: aGitRepository.
     handle := aGitRepository getHandle.
-    repository := aGitRepository.
     root := GitWorkingCopyEntry wc: self path: repository workdir.
 
     "Created: / 19-09-2012 / 09:43:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
--- a/git/GitWorkingCopyEntry.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/GitWorkingCopyEntry.st	Sun Sep 30 22:13:12 2012 +0000
@@ -92,6 +92,18 @@
 
 !GitWorkingCopyEntry methodsFor:'testing'!
 
+isChanged
+    | status |
+
+    status := self status.
+    ^status ~~ GIT_STATUS_CURRENT 
+        and:[ status ~~ GIT_STATUS_IGNORED
+            and: [ (status bitAnd: GIT_STATUS_WT_NEW | GIT_STATUS_WT_MODIFIED | GIT_STATUS_WT_DELETED) ~~ 0
+                and: [(status bitAnd: GIT_STATUS_INDEX_NEW | GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_INDEX_DELETED) ~~ 0]]].
+
+    "Created: / 30-09-2012 / 18:54:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 isDeleted
     ^(self status bitAnd:(GIT_STATUS_INDEX_DELETED | GIT_STATUS_WT_DELETED)) ~~ 0
 
--- a/git/Make.proto	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/Make.proto	Sun Sep 30 22:13:12 2012 +0000
@@ -130,6 +130,7 @@
 $(OUTDIR)GitBlobHandle.$(O) GitBlobHandle.$(H): GitBlobHandle.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitBranchType.$(O) GitBranchType.$(H): GitBranchType.st $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitCheckoutStrategy.$(O) GitCheckoutStrategy.$(H): GitCheckoutStrategy.st $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitCommand.$(O) GitCommand.$(H): GitCommand.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitCommitHandle.$(O) GitCommitHandle.$(H): GitCommitHandle.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitConfigHandle.$(O) GitConfigHandle.$(H): GitConfigHandle.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitCvarType.$(O) GitCvarType.$(H): GitCvarType.st $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -190,7 +191,6 @@
 $(OUTDIR)GitIndexTimeStructure.$(O) GitIndexTimeStructure.$(H): GitIndexTimeStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitIndexerStatsStructure.$(O) GitIndexerStatsStructure.$(H): GitIndexerStatsStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitNoteDataStructure.$(O) GitNoteDataStructure.$(H): GitNoteDataStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitObject.$(O) GitObject.$(H): GitObject.st $(INCLUDE_TOP)/stx/libscm/git/GitObjectType.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitOdbBackendStructure.$(O) GitOdbBackendStructure.$(H): GitOdbBackendStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitOdbStreamStructure.$(O) GitOdbStreamStructure.$(H): GitOdbStreamStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitReference.$(O) GitReference.$(H): GitReference.st $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -198,16 +198,19 @@
 $(OUTDIR)GitRemoteHeadStructure.$(O) GitRemoteHeadStructure.$(H): GitRemoteHeadStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitRepository.$(O) GitRepository.$(H): GitRepository.st $(INCLUDE_TOP)/stx/libscm/git/GitObjectType.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitStatusCodes.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitRepositoryInitOptionsStructure.$(O) GitRepositoryInitOptionsStructure.$(H): GitRepositoryInitOptionsStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitRepositoryObject.$(O) GitRepositoryObject.$(H): GitRepositoryObject.st $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitSignature.$(O) GitSignature.$(H): GitSignature.st $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitSignatureStructure.$(O) GitSignatureStructure.$(H): GitSignatureStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitStatusOptionsStructure.$(O) GitStatusOptionsStructure.$(H): GitStatusOptionsStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitStrarrayStructure.$(O) GitStrarrayStructure.$(H): GitStrarrayStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitStringArray.$(O) GitStringArray.$(H): GitStringArray.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitTimeStructure.$(O) GitTimeStructure.$(H): GitTimeStructure.st $(INCLUDE_TOP)/stx/libscm/git/GitStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitWorkingCopy.$(O) GitWorkingCopy.$(H): GitWorkingCopy.st $(INCLUDE_TOP)/stx/libscm/git/GitStatusCodes.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GitWorkingCopyEntry.$(O) GitWorkingCopyEntry.$(H): GitWorkingCopyEntry.st $(INCLUDE_TOP)/stx/libscm/git/GitStatusCodes.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitCommit.$(O) GitCommit.$(H): GitCommit.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitTag.$(O) GitTag.$(H): GitTag.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GitTree.$(O) GitTree.$(H): GitTree.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitObject.$(O) GitObject.$(H): GitObject.st $(INCLUDE_TOP)/stx/libscm/git/GitObjectType.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitRemote.$(O) GitRemote.$(H): GitRemote.st $(INCLUDE_TOP)/stx/libscm/git/GitObjectType.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitWorkingCopy.$(O) GitWorkingCopy.$(H): GitWorkingCopy.st $(INCLUDE_TOP)/stx/libscm/git/GitStatusCodes.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitCommit.$(O) GitCommit.$(H): GitCommit.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitTag.$(O) GitTag.$(H): GitTag.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GitTree.$(O) GitTree.$(H): GitTree.st $(INCLUDE_TOP)/stx/libscm/git/GitObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitRepositoryObject.$(H) $(INCLUDE_TOP)/stx/libscm/git/GitLibraryObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/git/Make.spec	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/Make.spec	Sun Sep 30 22:13:12 2012 +0000
@@ -51,6 +51,7 @@
 
 COMMON_CLASSES= \
 	GitLibraryObject \
+	GitRepositoryObject \
 	GitStatusCodes \
 	GitErrorKlass \
 	GitStructure \
@@ -109,7 +110,6 @@
 	GitSignatureStructure \
 	GitStatusOptionsStructure \
 	GitStatusShowType \
-	GitStrarrayStructure \
 	GitSubmoduleHandle \
 	GitSubmoduleIgnoreType \
 	GitSubmoduleStatusType \
@@ -132,12 +132,16 @@
 	GitAuthorQuery \
 	GitCommitterQuery \
 	GitReference \
+	GitCommand \
+	GitStringArray \
+	GitRemote \
 
 
 
 
 COMMON_OBJS= \
     $(OUTDIR)GitLibraryObject.$(O) \
+    $(OUTDIR)GitRepositoryObject.$(O) \
     $(OUTDIR)GitStatusCodes.$(O) \
     $(OUTDIR)GitErrorKlass.$(O) \
     $(OUTDIR)GitStructure.$(O) \
@@ -196,7 +200,6 @@
     $(OUTDIR)GitSignatureStructure.$(O) \
     $(OUTDIR)GitStatusOptionsStructure.$(O) \
     $(OUTDIR)GitStatusShowType.$(O) \
-    $(OUTDIR)GitStrarrayStructure.$(O) \
     $(OUTDIR)GitSubmoduleHandle.$(O) \
     $(OUTDIR)GitSubmoduleIgnoreType.$(O) \
     $(OUTDIR)GitSubmoduleStatusType.$(O) \
@@ -219,6 +222,9 @@
     $(OUTDIR)GitAuthorQuery.$(O) \
     $(OUTDIR)GitCommitterQuery.$(O) \
     $(OUTDIR)GitReference.$(O) \
+    $(OUTDIR)GitCommand.$(O) \
+    $(OUTDIR)GitStringArray.$(O) \
+    $(OUTDIR)GitRemote.$(O) \
     $(OUTDIR)extensions.$(O) \
 
 
--- a/git/abbrev.stc	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/abbrev.stc	Sun Sep 30 22:13:12 2012 +0000
@@ -2,6 +2,7 @@
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
 GitLibraryObject GitLibraryObject stx:libscm/git 'SCM-Git-Model' 0
+GitRepositoryObject GitRepositoryObject stx:libscm/git 'SCM-Git-Model' 0
 GitStatusCodes GitStatusCodes stx:libscm/git 'SCM-Git-Internal-Constants' 0
 GitErrorKlass GitErrorKlass stx:libscm/git 'Git-Internal-Constants' 0
 GitStructure GitStructure stx:libscm/git 'SCM-Git-Internal-Structures' 1
@@ -60,7 +61,6 @@
 GitSignatureStructure GitSignatureStructure stx:libscm/git 'SCM-Git-Internal-Structures' 1
 GitStatusOptionsStructure GitStatusOptionsStructure stx:libscm/git 'SCM-Git-Internal-Structures' 1
 GitStatusShowType GitStatusShowType stx:libscm/git 'Git-Internal-Constants' 0
-GitStrarrayStructure GitStrarrayStructure stx:libscm/git 'SCM-Git-Internal-Structures' 1
 GitSubmoduleHandle GitSubmoduleHandle stx:libscm/git 'Git-Internal-Handles' 0
 GitSubmoduleIgnoreType GitSubmoduleIgnoreType stx:libscm/git 'Git-Internal-Constants' 0
 GitSubmoduleStatusType GitSubmoduleStatusType stx:libscm/git 'Git-Internal-Constants' 0
@@ -85,3 +85,6 @@
 GitAuthorQuery GitAuthorQuery stx:libscm/git 'SCM-Git-Exceptions' 1
 GitCommitterQuery GitCommitterQuery stx:libscm/git 'SCM-Git-Exceptions' 1
 GitReference GitReference stx:libscm/git 'SCM-Git-Model' 0
+GitCommand GitCommand stx:libscm/git 'SCM-Git-Internal' 0
+GitStringArray GitStringArray stx:libscm/git 'SCM-Git-Internal-Structures' 1
+GitRemote GitRemote stx:libscm/git 'SCM-Git-Model' 0
--- a/git/bc.mak	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/bc.mak	Sun Sep 30 22:13:12 2012 +0000
@@ -66,6 +66,7 @@
 $(OUTDIR)GitBlobHandle.$(O) GitBlobHandle.$(H): GitBlobHandle.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitBranchType.$(O) GitBranchType.$(H): GitBranchType.st $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitCheckoutStrategy.$(O) GitCheckoutStrategy.$(H): GitCheckoutStrategy.st $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitCommand.$(O) GitCommand.$(H): GitCommand.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitCommitHandle.$(O) GitCommitHandle.$(H): GitCommitHandle.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitConfigHandle.$(O) GitConfigHandle.$(H): GitConfigHandle.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitCvarType.$(O) GitCvarType.$(H): GitCvarType.st $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -126,7 +127,6 @@
 $(OUTDIR)GitIndexTimeStructure.$(O) GitIndexTimeStructure.$(H): GitIndexTimeStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitIndexerStatsStructure.$(O) GitIndexerStatsStructure.$(H): GitIndexerStatsStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitNoteDataStructure.$(O) GitNoteDataStructure.$(H): GitNoteDataStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitObject.$(O) GitObject.$(H): GitObject.st $(INCLUDE_TOP)\stx\libscm\git\GitObjectType.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitOdbBackendStructure.$(O) GitOdbBackendStructure.$(H): GitOdbBackendStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitOdbStreamStructure.$(O) GitOdbStreamStructure.$(H): GitOdbStreamStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitReference.$(O) GitReference.$(H): GitReference.st $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -134,16 +134,19 @@
 $(OUTDIR)GitRemoteHeadStructure.$(O) GitRemoteHeadStructure.$(H): GitRemoteHeadStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitRepository.$(O) GitRepository.$(H): GitRepository.st $(INCLUDE_TOP)\stx\libscm\git\GitObjectType.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitStatusCodes.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitRepositoryInitOptionsStructure.$(O) GitRepositoryInitOptionsStructure.$(H): GitRepositoryInitOptionsStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitRepositoryObject.$(O) GitRepositoryObject.$(H): GitRepositoryObject.st $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitSignature.$(O) GitSignature.$(H): GitSignature.st $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitSignatureStructure.$(O) GitSignatureStructure.$(H): GitSignatureStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitStatusOptionsStructure.$(O) GitStatusOptionsStructure.$(H): GitStatusOptionsStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitStrarrayStructure.$(O) GitStrarrayStructure.$(H): GitStrarrayStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitStringArray.$(O) GitStringArray.$(H): GitStringArray.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitTimeStructure.$(O) GitTimeStructure.$(H): GitTimeStructure.st $(INCLUDE_TOP)\stx\libscm\git\GitStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitWorkingCopy.$(O) GitWorkingCopy.$(H): GitWorkingCopy.st $(INCLUDE_TOP)\stx\libscm\git\GitStatusCodes.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GitWorkingCopyEntry.$(O) GitWorkingCopyEntry.$(H): GitWorkingCopyEntry.st $(INCLUDE_TOP)\stx\libscm\git\GitStatusCodes.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitCommit.$(O) GitCommit.$(H): GitCommit.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitTag.$(O) GitTag.$(H): GitTag.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GitTree.$(O) GitTree.$(H): GitTree.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitObject.$(O) GitObject.$(H): GitObject.st $(INCLUDE_TOP)\stx\libscm\git\GitObjectType.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitRemote.$(O) GitRemote.$(H): GitRemote.st $(INCLUDE_TOP)\stx\libscm\git\GitObjectType.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitWorkingCopy.$(O) GitWorkingCopy.$(H): GitWorkingCopy.st $(INCLUDE_TOP)\stx\libscm\git\GitStatusCodes.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitCommit.$(O) GitCommit.$(H): GitCommit.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitTag.$(O) GitTag.$(H): GitTag.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GitTree.$(O) GitTree.$(H): GitTree.st $(INCLUDE_TOP)\stx\libscm\git\GitObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitRepositoryObject.$(H) $(INCLUDE_TOP)\stx\libscm\git\GitLibraryObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/git/git.rc	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/git.rc	Sun Sep 30 22:13:12 2012 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.3.1\0"
-      VALUE "ProductDate", "Sun, 30 Sep 2012 12:27:48 GMT\0"
+      VALUE "ProductDate", "Sun, 30 Sep 2012 22:14:17 GMT\0"
     END
 
   END
--- a/git/libInit.cc	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/libInit.cc	Sun Sep 30 22:13:12 2012 +0000
@@ -31,6 +31,7 @@
 _GitBlobHandle_Init(pass,__pRT__,snd);
 _GitBranchType_Init(pass,__pRT__,snd);
 _GitCheckoutStrategy_Init(pass,__pRT__,snd);
+_GitCommand_Init(pass,__pRT__,snd);
 _GitCommitHandle_Init(pass,__pRT__,snd);
 _GitConfigHandle_Init(pass,__pRT__,snd);
 _GitCvarType_Init(pass,__pRT__,snd);
@@ -91,7 +92,6 @@
 _GitIndexTimeStructure_Init(pass,__pRT__,snd);
 _GitIndexerStatsStructure_Init(pass,__pRT__,snd);
 _GitNoteDataStructure_Init(pass,__pRT__,snd);
-_GitObject_Init(pass,__pRT__,snd);
 _GitOdbBackendStructure_Init(pass,__pRT__,snd);
 _GitOdbStreamStructure_Init(pass,__pRT__,snd);
 _GitReference_Init(pass,__pRT__,snd);
@@ -99,13 +99,16 @@
 _GitRemoteHeadStructure_Init(pass,__pRT__,snd);
 _GitRepository_Init(pass,__pRT__,snd);
 _GitRepositoryInitOptionsStructure_Init(pass,__pRT__,snd);
+_GitRepositoryObject_Init(pass,__pRT__,snd);
 _GitSignature_Init(pass,__pRT__,snd);
 _GitSignatureStructure_Init(pass,__pRT__,snd);
 _GitStatusOptionsStructure_Init(pass,__pRT__,snd);
-_GitStrarrayStructure_Init(pass,__pRT__,snd);
+_GitStringArray_Init(pass,__pRT__,snd);
 _GitTimeStructure_Init(pass,__pRT__,snd);
+_GitWorkingCopyEntry_Init(pass,__pRT__,snd);
+_GitObject_Init(pass,__pRT__,snd);
+_GitRemote_Init(pass,__pRT__,snd);
 _GitWorkingCopy_Init(pass,__pRT__,snd);
-_GitWorkingCopyEntry_Init(pass,__pRT__,snd);
 _GitCommit_Init(pass,__pRT__,snd);
 _GitTag_Init(pass,__pRT__,snd);
 _GitTree_Init(pass,__pRT__,snd);
--- a/git/stx_libscm_git.st	Sun Sep 30 14:31:09 2012 +0000
+++ b/git/stx_libscm_git.st	Sun Sep 30 22:13:12 2012 +0000
@@ -27,8 +27,8 @@
      exclude individual packages in the #excludedFromPrerequisites method."
 
     ^ #(
-        #'stx:goodies/sunit'    "TestCase - superclass of GitTests "
-        #'stx:libbasic'    "ExternalBytes - superclass of GitStrarrayStructure "
+        #'stx:goodies/sunit'    "TestAsserter - superclass of GitTests "
+        #'stx:libbasic'    "Error - superclass of GitError "
     )
 ! !
 
@@ -43,6 +43,7 @@
     ^ #(
         "<className> or (<className> attributes...) in load order"
         GitLibraryObject
+        GitRepositoryObject
         GitStatusCodes
         GitErrorKlass
         GitStructure
@@ -101,7 +102,6 @@
         GitSignatureStructure
         GitStatusOptionsStructure
         GitStatusShowType
-        GitStrarrayStructure
         GitSubmoduleHandle
         GitSubmoduleIgnoreType
         GitSubmoduleStatusType
@@ -126,6 +126,9 @@
         GitAuthorQuery
         GitCommitterQuery
         GitReference
+        GitCommand
+        GitStringArray
+        GitRemote
     )
 !