diff --git a/LibGit-Core.package/LGitRemote.class/instance/defaultBranchName.st b/LibGit-Core.package/LGitRemote.class/instance/defaultBranchName.st new file mode 100644 index 00000000..523afe53 --- /dev/null +++ b/LibGit-Core.package/LGitRemote.class/instance/defaultBranchName.st @@ -0,0 +1,14 @@ +accessing +defaultBranchName + "Answer the name of the remote's default branch. + + Must only be called after connecting. + " + + | buf defaultBranchName | + buf := LGitBuf new. + [ self withReturnHandlerDo: [ + self remote_default_branch: buf ]. + defaultBranchName := buf prim_ptr utf8StringFromCString ] ensure: [ buf free ]. + + ^ defaultBranchName \ No newline at end of file diff --git a/LibGit-Core.package/LGitRemote.class/instance/remote_connect.direction.callbacks..st b/LibGit-Core.package/LGitRemote.class/instance/remote_connect.direction.callbacks..st index 97c73653..d6d8fea3 100644 --- a/LibGit-Core.package/LGitRemote.class/instance/remote_connect.direction.callbacks..st +++ b/LibGit-Core.package/LGitRemote.class/instance/remote_connect.direction.callbacks..st @@ -1,7 +1,10 @@ libgit - calls remote_connect: remote direction: direction callbacks: remoteCallbacks - - ^ self - ffiCallSafely: - #(LGitReturnCodeEnum git_remote_connect #(self , LGitDirectionEnum direction , LGitRemoteCallbacks * remoteCallbacks)) - options: #() \ No newline at end of file + + ^ (self ffiLibrary uniqueInstance isVersionLessThan: #(1 2)) + ifTrue: [ self shouldBeImplemented ] + ifFalse: [ + self + remote_connect_v120: remote + direction: direction + callbacks: remoteCallbacks ] diff --git a/LibGit-Core.package/LGitRemote.class/instance/remote_connect_v120.direction.callbacks..st b/LibGit-Core.package/LGitRemote.class/instance/remote_connect_v120.direction.callbacks..st new file mode 100644 index 00000000..aef3c7a5 --- /dev/null +++ b/LibGit-Core.package/LGitRemote.class/instance/remote_connect_v120.direction.callbacks..st @@ -0,0 +1,12 @@ +libgit - calls +remote_connect_v120: aLGitRemote direction: aLGitDirectionEnum callbacks: aLGitRemoteCallbacksV120 + + ^ self ffiCallSafely: #( + LGitReturnCodeEnum + git_remote_connect #( + self, + LGitDirectionEnum aLGitDirectionEnum, + LGitRemoteCallbacksV120 * aLGitRemoteCallbacksV120, + nil, + nil )) + options: #() \ No newline at end of file diff --git a/LibGit-Core.package/LGitRemote.class/instance/remote_default_branch..st b/LibGit-Core.package/LGitRemote.class/instance/remote_default_branch..st new file mode 100644 index 00000000..40942e97 --- /dev/null +++ b/LibGit-Core.package/LGitRemote.class/instance/remote_default_branch..st @@ -0,0 +1,13 @@ +libgit - calls +remote_default_branch: out + "Retrieve the name of the remote's default branch. + + The default branch of a repository is the branch which HEAD points to. If the remote does not support reporting this information directly, it performs the guess as git does; that is, if there are multiple branches which point to the same commit, the first one is chosen. If the master branch is a candidate, it wins. + + This function must only be called after connecting. + + See: https://libgit2.org/libgit2/#v1.0.0/group/remote/git_remote_default_branch" + + ^ self + ffiCallSafely: #(LGitReturnCodeEnum git_remote_default_branch(LGitBuf *out, self)) + options: #(). \ No newline at end of file diff --git a/LibGit-Tests.package/LGitManualFetchTest.class/instance/testDefaultBranchName.st b/LibGit-Tests.package/LGitManualFetchTest.class/instance/testDefaultBranchName.st new file mode 100644 index 00000000..24308a82 --- /dev/null +++ b/LibGit-Tests.package/LGitManualFetchTest.class/instance/testDefaultBranchName.st @@ -0,0 +1,14 @@ +tests +testDefaultBranchName + + | repo remote | + repo := self newRepo state3Opened. + remote := LGitRemote of: repo named: 'origin' url: self newRepo repositoryUrlHttps. + remote + create; + lookup; + connectFetch. + + self + assert: remote defaultBranchName + equals: 'refs/heads/master' \ No newline at end of file diff --git a/LibGit-Tests.package/LGitManualPullTest.class/instance/testPullHTTPS.st b/LibGit-Tests.package/LGitManualPullTest.class/instance/testPullHTTPS.st index a4fc692b..ab9649a3 100644 --- a/LibGit-Tests.package/LGitManualPullTest.class/instance/testPullHTTPS.st +++ b/LibGit-Tests.package/LGitManualPullTest.class/instance/testPullHTTPS.st @@ -12,7 +12,7 @@ testPullHTTPS credentials createWith: cred. 0 ]. options := (repo ffiLibrary uniqueInstance fetchOptionsStructureClass defaults - callbacks: (self ffiLibrary uniqueInstance remoteCallbacksStructureClass defaults + callbacks: (repo ffiLibrary uniqueInstance remoteCallbacksStructureClass defaults credentials: credentialsCallback; yourself); yourself). diff --git a/LibGit-Tests.package/LGitTestRepository.class/class/loadTestData.st b/LibGit-Tests.package/LGitTestRepository.class/class/loadTestData.st index 5f82eaa2..466c5a0e 100644 --- a/LibGit-Tests.package/LGitTestRepository.class/class/loadTestData.st +++ b/LibGit-Tests.package/LGitTestRepository.class/class/loadTestData.st @@ -1,13 +1,16 @@ private loadTestData + " + self loadTestData + " | dictionary | - (testDataLoaded notNil and: [ testDataLoaded ]) ifTrue: [ ^ self ]. +" (testDataLoaded notNil and: [ testDataLoaded ]) ifTrue: [ ^ self ]. Reload everytime" testDataLoaded := true. (FileSystem workingDirectory / 'test_data.json') exists ifFalse: [ ^ self ]. (FileSystem workingDirectory / 'test_data.json') readStreamDo: [ :stream | - dictionary := MCFileTreeJsonParser parseStream: stream ]. - + dictionary := STONJSON fromStream: stream ]. + (dictionary at: 'urls') keysAndValuesDo: [ :selector :url | self perform: selector asSymbol asMutator