GithubHelp home page GithubHelp logo

libgit2 / git2go Goto Github PK

View Code? Open in Web Editor NEW
1.9K 47.0 315.0 1.48 MB

Git to Go; bindings for libgit2. Like McDonald's but tastier.

License: MIT License

Makefile 0.36% Go 95.72% C 3.36% Shell 0.56%
libgit2 git2go

git2go's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

git2go's Issues

create releases

Hi,

I have noticed that the API has changed and I needed to update the code. I would be grateful if you create a "release" or folder every time you change the API.
Thanks

git2go on Windows

I'm trying to use git2go on Windows 7 x64. I was able to build libgit2 (through mingw) and install git2go package to usual pkg location (pkg\windows_amd64\github.com\libgit2\git2go.a). But when I try to import github.com/libgit2/git2go package and build an app I get the following errors:

github.com/libgit2/git2go(.text): git_blame_file: not defined
github.com/libgit2/git2go(.text): git_blame_free: not defined
github.com/libgit2/git2go(.text): git_blame_get_hunk_byindex: not defined
github.com/libgit2/git2go(.text): git_blame_get_hunk_byline: not defined
github.com/libgit2/git2go(.text): git_blame_get_hunk_count: not defined
github.com/libgit2/git2go(.text): git_blame_init_options: not defined
github.com/libgit2/git2go(.text): git_blob_create_frombuffer: not defined
github.com/libgit2/git2go(.text): git_blob_rawcontent: not defined
github.com/libgit2/git2go(.text): git_blob_rawsize: not defined
github.com/libgit2/git2go(.text): git_branch_create: not defined
github.com/libgit2/git2go(.text): git_branch_delete: not defined
github.com/libgit2/git2go(.text): git_branch_is_head: not defined
github.com/libgit2/git2go(.text): git_branch_iterator_free: not defined
github.com/libgit2/git2go(.text): git_branch_iterator_new: not defined
github.com/libgit2/git2go(.text): git_branch_lookup: not defined
github.com/libgit2/git2go(.text): git_branch_move: not defined
github.com/libgit2/git2go(.text): git_branch_name: not defined
github.com/libgit2/git2go(.text): git_branch_next: not defined
github.com/libgit2/git2go(.text): git_branch_remote_name: not defined
github.com/libgit2/git2go(.text): git_branch_set_upstream: not defined
github.com/libgit2/git2go(.text): git_branch_upstream: not defined

Any ideas on how to make it work on Windows?

37: error: 'git_branch_iterator' undeclared (first use in this function)

I'am using : bussiere@kusanagi:~/git2go$ go version
go version go1.2.1 linux/amd64

bussiere@kusanagi:/git2go$ ls
blob.go git_test.go patch.go settings.go
branch.go index.go patch_test.go settings_test.go
branch_test.go index_test.go push.go submodule.go
checkout.go LICENSE push_test.go tag.go
clone.go Makefile README.md tag_test.go
clone_test.go merge.go refdb.go tree.go
commit.go merge_test.go reference.go vendor
config.go object.go reference_test.go walk.go
credentials.go object_test.go remote.go wrapper.c
diff.go odb.go remote_test.go
diff_test.go odb_test.go repository.go
git.go packbuilder.go script
bussiere@kusanagi:
/git2go$ go build

_/home/bussiere/git2go

37: error: 'git_branch_iterator' undeclared (first use in this function)
37: error: 'git_branch_next' undeclared (first use in this function)
38: error: 'git_buf_free' undeclared (first use in this function)
38: error: 'git_buf' undeclared (first use in this function)
38: error: 'git_branch_iterator_free' undeclared (first use in this function)
38: error: 'git_branch_iterator_new' undeclared (first use in this function)

missing support for tag objects

Hi,

it seems that support for annotated tag objects is missing in git2go. Is this intentional? Shall I try to add it myself?

Regards,
Frank.

Build fails

ian@debian: go get github.com/libgit2/git2go
# github.com/libgit2/git2go
git.go:14: imported and not used: "fmt"
packbuilder.go:126: no new variables on left side of :=
packbuilder.go:127: no new variables on left side of :=
packbuilder.go:127: cannot use stop (type chan<- bool) as type <-chan bool in field value
packbuilder.go:128: cannot use &data (type *<-chan []byte) as type *packbuilderCbData in function argument
reference.go:154: cannot use &ptr (type **_Ctype_char) as type **[0]byte in function argument

I've fixed the first three of the errors, but I'm not well versed enough in Go to tackle the last few.

how to checkout a local branck

Hi,

I am intrested in writting a code that creates a local branch and applies a set of changes in that branch. Hence, I need to apply checkout once I have created a branch. I am pretty lost with this API and I haven't found examples in the test files to do that. I will appreciate any help :-)

This is my code and the call LookupTree crashes with the error message "The requested type does not match the type in ODB".


branch, _ := repo.CreateBranch("mybranch", currentTip, true, sig, message)

checkOutOpts := &git.CheckoutOpts{
        Strategy: git.CheckoutForce,
        FileOpenFlags : os.O_WRONLY,
    }
tree, _ := repo.LookupTree(branch.Target())
if err != nil {
    fmt.Print(err)
}
repo.CheckoutTree(tree, checkOutOpts)

Filemode mismatched type

While trying to use @carlosmn's go.gitfs I ran into the following error:

.../github.com/carlosmn/go.gitfs# go build
# github.com/carlosmn/go.gitfs
./gitfs.go:94: invalid case git.FilemodeBlob in switch on v.entry.Filemode (mismatched types git.Filemode and int)
./gitfs.go:96: invalid case git.FilemodeTree in switch on v.entry.Filemode (mismatched types git.Filemode and int)
./gitfs.go:174: cannot use git.FilemodeTree (type git.Filemode) as type int in field value

It seems this problem was introduced in change 9bec36a

The following patch fixes it, but I'm not sure if this is how you want to do it: https://gist.github.com/ry/21587c5d66e20ab0d123

Order of build matters with respect to git2go and Go cross compiler building

Thank you for git2go. Very handy.

While building a Docker container image suitable for building Go apps that could leverage git2go, I ran across something interesting.

The container Dockerfile also happens to include building the Go cross compilers for darwin and windows. If I build the container with this ordering of statements with respect to the cross compilers and git2go

 # Environment
 ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/go/bin
 ENV GOPATH /go

 # Cross compilers 
 RUN cd /usr/local/go/src && GOOS=darwin GOARCH=amd64 ./make.bash --no-clean
 RUN cd /usr/local/go/src && GOOS=windows GOARCH=amd64 ./make.bash --no-clean

 # libgit2/git2go C binding
 RUN go get -d -u -v github.com/libgit2/git2go && cd /go/src/github.com/libgit2/git2go && git submodule   update --init && make test install

the resulting Go environment can successfully build a sample Go app that uses the git2go library.

However, if I reverse the order of building the cross compilers with the building of git2go, I cannot build the sample app. The sample app build in this case fails with

 root@e98ffd5673af:/go/src/t# go build
 # github.com/libgit2/git2go
 ../github.com/libgit2/git2go/blame.go:4:18: fatal error: git2.h: No such file or directory
  #include <git2.h>
              ^
 compilation terminated.

I don't know the reason for this, but wanted to make the observation here.

Unable to install under Mac OS X Lion

I followed the Readme and this is the error I got after running make install.

Undefined symbols for architecture x86_64:
  "_deflateEnd", referenced from:
      _git_filebuf_cleanup in libgit2.a(filebuf.c.o)
      _git_zstream_free in libgit2.a(zstream.c.o)
      _git_zstream_deflatebuf in libgit2.a(zstream.c.o)
  "_deflate", referenced from:
      _write_deflate in libgit2.a(filebuf.c.o)
      _git_zstream_get_output in libgit2.a(zstream.c.o)
     (maybe you meant: _git_zstream_deflatebuf)
  "_deflateInit_", referenced from:
      _git_filebuf_open in libgit2.a(filebuf.c.o)
      _git_zstream_init in libgit2.a(zstream.c.o)
      _git_zstream_deflatebuf in libgit2.a(zstream.c.o)
  "_SSL_load_error_strings", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_library_init", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSLv23_method", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_CTX_new", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_CTX_ctrl", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_CTX_set_verify", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_CTX_set_default_verify_paths", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_SSL_CTX_free", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_CRYPTO_num_locks", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_CRYPTO_set_locking_callback", referenced from:
      _init_once in libgit2.a(global.c.o)
  "_crc32", referenced from:
      _crc_object in libgit2.a(indexer.c.o)
      _git_indexer_commit in libgit2.a(indexer.c.o)
  "_SSL_get_error", referenced from:
      _ssl_set_error in libgit2.a(netops.c.o)
      _gitno__recv_ssl in libgit2.a(netops.c.o)
  "_ERR_get_error", referenced from:
      _ssl_set_error in libgit2.a(netops.c.o)
  "_ERR_error_string", referenced from:
      _ssl_set_error in libgit2.a(netops.c.o)
  "_SSL_shutdown", referenced from:
      _gitno_close in libgit2.a(netops.c.o)
  "_SSL_free", referenced from:
      _gitno_close in libgit2.a(netops.c.o)
  "_SSL_write", referenced from:
      _gitno_send in libgit2.a(netops.c.o)
  "_SSL_read", referenced from:
      _gitno__recv_ssl in libgit2.a(netops.c.o)
  "_SSL_new", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_SSL_set_fd", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_SSL_connect", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_SSL_get_verify_result", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_SSL_get_peer_certificate", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_X509_get_ext_d2i", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_GENERAL_NAMES_free", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_sk_num", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_sk_value", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_ASN1_STRING_data", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_ASN1_STRING_length", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_X509_get_subject_name", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_X509_NAME_get_index_by_NID", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_X509_NAME_get_entry", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_X509_NAME_ENTRY_get_data", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_ASN1_STRING_type", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_CRYPTO_malloc", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_ASN1_STRING_to_UTF8", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_CRYPTO_free", referenced from:
      _gitno_connect in libgit2.a(netops.c.o)
  "_SHA1_Update", referenced from:
      _git_odb_stream_write in libgit2.a(odb.c.o)
      _git_odb_open_wstream in libgit2.a(odb.c.o)
      _git_odb__hashfd in libgit2.a(odb.c.o)
      _write_one in libgit2.a(pack-objects.c.o)
      _write_pack in libgit2.a(pack-objects.c.o)
      _write_normal in libgit2.a(filebuf.c.o)
      _write_deflate in libgit2.a(filebuf.c.o)
      ...
  "_SHA1_Final", referenced from:
      _git_odb_stream_finalize_write in libgit2.a(odb.c.o)
      _git_odb__hashfd in libgit2.a(odb.c.o)
      _write_pack in libgit2.a(pack-objects.c.o)
      _git_filebuf_hash in libgit2.a(filebuf.c.o)
      _git_hash_buf in libgit2.a(hash.c.o)
      _git_hash_vec in libgit2.a(hash.c.o)
      _git_indexer_commit in libgit2.a(indexer.c.o)
      ...
  "_SHA1_Init", referenced from:
      _git_odb_open_wstream in libgit2.a(odb.c.o)
      _git_odb__hashfd in libgit2.a(odb.c.o)
      _git_packbuilder_new in libgit2.a(pack-objects.c.o)
      _git_filebuf_open in libgit2.a(filebuf.c.o)
      _git_hash_buf in libgit2.a(hash.c.o)
      _git_hash_vec in libgit2.a(hash.c.o)
      _git_indexer_commit in libgit2.a(indexer.c.o)
      ...
  "_inflateInit_", referenced from:
      _loose_backend__read_header in libgit2.a(odb_loose.c.o)
      _read_loose in libgit2.a(odb_loose.c.o)
      _packfile_unpack_compressed in libgit2.a(pack.c.o)
      _git_packfile_stream_open in libgit2.a(pack.c.o)
  "_inflate", referenced from:
      _loose_backend__read_header in libgit2.a(odb_loose.c.o)
      _read_loose in libgit2.a(odb_loose.c.o)
      _git_packfile_stream_read in libgit2.a(pack.c.o)
      _packfile_unpack_compressed in libgit2.a(pack.c.o)
  "_inflateEnd", referenced from:
      _loose_backend__read_header in libgit2.a(odb_loose.c.o)
      _read_loose in libgit2.a(odb_loose.c.o)
      _packfile_unpack_compressed in libgit2.a(pack.c.o)
      _git_packfile_stream_free in libgit2.a(pack.c.o)
  "_iconv", referenced from:
      _git_path_iconv in libgit2.a(path.c.o)
     (maybe you meant: _git_path_iconv_init_precompose, _git_path_iconv_clear , _git_path_iconv )
  "_iconv_close", referenced from:
      _git_path_iconv_clear in libgit2.a(path.c.o)
      _git_path_dirload in libgit2.a(path.c.o)
      _git_path_direach in libgit2.a(path.c.o)
  "_iconv_open", referenced from:
      _git_path_iconv_init_precompose in libgit2.a(path.c.o)
      _git_path_dirload in libgit2.a(path.c.o)
      _git_path_direach in libgit2.a(path.c.o)
  "_deflateReset", referenced from:
      _git_zstream_reset in libgit2.a(zstream.c.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [install] Error 2

Git2go fails to build when running make test.

I am following the readme and everything worked fine till make install. However, when running make test I run into the following errors :

# testmain
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): adddynsym: missed symbol git_buf__oom (git_buf__oom)
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
github.com/libgit2/git2go(__TEXT/__text): unexpected GOT reloc for non-dynamic symbol git_buf__oom
too many errors
FAIL    github.com/libgit2/git2go [build failed]

Some of the logs from running make build and make test

-- The C compiler identification is GNU 4.9.1
-- Checking whether C compiler has -isysroot
-- Checking whether C compiler has -isysroot - yes
-- Checking whether C compiler supports OSX deployment target flag
-- Checking whether C compiler supports OSX deployment target flag - yes
-- Check for working C compiler: /usr/local/bin/cc
-- Check for working C compiler: /usr/local/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Found OpenSSL: /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib (found version "0.9.8y")
-- Could NOT find HTTP_Parser (missing:  HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
-- http-parser was not found or is too old; using bundled 3rd-party sources.
-- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.5")
-- Found Iconv: -L/usr/lib -liconv
-- Performing Test IS_WNO-MISSING-FIELD-INITIALIZERS_SUPPORTED
-- Performing Test IS_WNO-MISSING-FIELD-INITIALIZERS_SUPPORTED - Success
.... 
.... 
-- Performing Test IS_WNO-UNUSED-CONST-VARIABLE_SUPPORTED - Failed
...
...
- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - not found
-- Configuring done

... 
... 
... 

/usr/bin/ranlib: file: libgit2.a(winhttp.c.o) has no symbols
/usr/bin/ranlib: file: libgit2.a(realpath.c.o) has no symbols
/usr/bin/ranlib: file: libgit2.a(winhttp.c.o) has no symbols
/usr/bin/ranlib: file: libgit2.a(realpath.c.o) has no symbols

... 
... 

Releases

Forgive me if this has already been addressed, but I don't quite understand how to use this binding in a serious project. Without tagged releases, I can't figure out how to use it against a stable version of libgit2. Is it not considered production-ready? Am I missing something?

Issue with homebrew installed libgit2

When I install libgit2 using homebrew and then try to go build git2go I get the following error:

# github.com/libgit2/git2go
37: error: use of undeclared identifier 'git_remote_create_cb'; did you mean 'git_remote_create'?

Push support

I see there is a branch with Remote support. It would be nice to be able to push to them as well.

Add (*Submodule).Free method

The docs for git_submodule_* funcs say "You must call git_submodule_free when done with the submodule.โ€ However, git2goโ€™s Submodule type doesnโ€™t have a method to free itself. There should be one. I can submit a PR for this soon.

Adding a config file with [include] returns error

When I attempt to add a global config file using conf.AddFile(path, git.ConfigLevelGlobal, false) and that file has an [include] section with a file pointing to ~/.gitconfig.local, I receive the following error: The global file '/.gitconfig.local' doesn't exist: No such file or directory. It seems that maybe it is looking for it in root instead of expanding ~ as $HOME?

Is this a user error, git2go or libgit2?

What version of libgit2?

I pulled down libgit2/libgit2. The development branch is on 12f831fa1500bdcd1b9a2ef20c4897904983af8e currently. When I try to run this:

# github.com/libgit2/git2go
blob.go:3:18: error: git2.h: No such file or directory
blob.go:4:25: error: git2/errors.h: No such file or directory

All I'm doing is importing the library:

package main

import (
  _ "github.com/libgit2/git2go"
  "fmt"
)

func Main() {
  fmt.Println("HI")
}

EDIT: I'm running go like so:

$ PKG_CONFIG_PATH=/Users/rick/p/libgit2/build go run main.go

compilation errors on archlinux

Tried to go get latest git2go on my archlinux

-> % go get github.com/libgit2/git2go

github.com/libgit2/git2go

1: error: 'git_packbuilder_insert_commit' undeclared (first use in this function)
1: note: each undeclared identifier is reported only once for each function it appears in

But got the errors above. I got libgit2 0.18.0-1, go 1.1.1

Greets.

Functions that call MakeGitError without locking the OS thread

The following functions (and possibly more) do not perform thread locking despite calling MakeGitError:

  • DefaultDiffOptions
  • DiffTreeToTree
  • DiffTreeToWorkDir
  • Diff.Patch

Thanks to @carlosmn for the pointer at #136 (comment).

For context, it's necessary to lock the OS thread because giterr_last returns the last error object generated for the current thread.

If it'd be helpful, I could throw together a quick lint script using go/ast to add to Travis CI that would warn about funcs that call MakeGitError that don't contain:

runtime.LockOSThread()
defer runtime.UnlockOSThread()

Unable to install under Mac OSX

$ go get github.com/libgit2/git2go
# github.com/libgit2/git2go
Undefined symbols for architecture x86_64:
  "_git_blob_create_frombuffer", referenced from:
      __cgo_bc0973baa668_Cfunc_git_blob_create_frombuffer in blob.cgo2.o
     (maybe you meant: __cgo_bc0973baa668_Cfunc_git_blob_create_frombuffer)
  "_git_blob_create_fromchunks", referenced from:
      __go_git_blob_create_fromchunks in wrapper.o
     (maybe you meant: __cgo_bc0973baa668_Cfunc__go_git_blob_create_fromchunks, __go_git_blob_create_fromchunks )
  "_git_blob_rawcontent", referenced from:
      __cgo_bc0973baa668_Cfunc_git_blob_rawcontent in blob.cgo2.o
     (maybe you meant: __cgo_bc0973baa668_Cfunc_git_blob_rawcontent)
  "_git_blob_rawsize", referenced from:
      __cgo_bc0973baa668_Cfunc_git_blob_rawsize in blob.cgo2.o
     (maybe you meant: __cgo_bc0973baa668_Cfunc_git_blob_rawsize)


.... full output here: https://gist.github.com/mattes/2511e7f3210bc2ec3300 ....


ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ go version
go version go1.3 darwin/amd64

$ cmake --version
cmake version 3.0.0

$ pkg-config --version
0.28

Mac osx v. 10.9.4

Issue when trying to install

When trying to compile git2go I get the following error:

cannot load DWARF output from $WORK/github.com/libgit2/git2go/_obj//_cgo_.o: decoding dwarf section info at offset 0x0: too short

This can be replicated by building my repo (which uses libgit2) on a mac from homebrew using:

$ brew install jwaldrip/utils/git-get -v --HEAD

The formula can be viewed at:
https://github.com/jwaldrip/homebrew-utils/blob/master/git-get.rb

The Makefile the formula uses at:
https://github.com/jwaldrip/git-get/blob/master/Makefile

Implement the missing HEAD functions

Hi,

would be cool to implement

git_repository_set_head
git_repository_set_head_detached

since I haven't really found any other sane way how to perform a checkout or a merge without these. Both Repository.CheckoutHead and Repository.Merge depend on HEAD.

Hope that I am not saying complete bullshit, it's 3am and I am brain-dead.

Regards,
Ondrej Kupka

symbol lookup error: git2go_play: undefined symbol: git_reference_is_tag

fedora: 20
go:1.1
libgit2: f28e4c97b38c1ec60dc6ce6e5306067ad24aeb8e (Tue Apr 1 2014)
git2go: 9cd1d12

I have a issue with the Reference.IsTag() method which appears to be unimplemented but Reference.IsBranch() works. I have checked the code base in both libgit2 and git2go and they bothe appear to be implemented the same.

git2go_play --repo ~/git/testrepo/
&{0x8ec2d0}
git2go_play: symbol lookup error: git2go_play: undefined symbol: git_reference_is_tag

Sample code

package main

import (
    "github.com/libgit2/git2go"
    "fmt"
    "log"
    "flag"
)

func main(){
    repoPath := flag.String("repo", "~/git/testrepo", "path to the git repository")
    flag.Parse()

    repo, err := git.OpenRepository(*repoPath)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(repo)
    refs, err := repo.NewReferenceIterator()
    if err != nil {
        log.Fatal(err)
    }
    for ref := range refs.Iter() {
        msg := ""
        if ref.IsBranch() {
            msg += "IsBranch"
        }
        if ref.IsTag() {
            msg += "IsTag"
        }
        if ref.IsRemote(){
            msg += "IsRemote"
        }

        fmt.Printf("%s: %s\n", msg, ref.Name())

    }
}

git-upload-pack ?

Hi all,

Just this question, in the Go binding, is there a way to implement the git-upload-pack ?

Thank you

Install error with latest libgit2 on Mac OSX and Ubuntu on Travis CI

On Mac OSX, I run the following:

> brew install libgit2 --HEAD
# ... installs successfully from branch development
> go get github.com/libgit2/git2go
# # github.com/libgit2/git2go
# Godeps/_workspace/src/github.com/libgit2/git2go/wrapper.c:34:13: error: no member named 'progress' in 'struct git_remote_callbacks'

Also seems to be affecting my Travis CI builds: example

git clone specific tag

When I try to clone a specific tag, I run something like this:

git clone --branch v1.0.0 https://github.com/ministryofjustice/supervisor-formula.git vendor/supervisor

The above command succeeds without any hiccups.
I figured I could write a go func like below.

func CloneRepo(url string, tag string, path string) error {
    opts := git.CloneOptions{
        CheckoutBranch: tag,
    }

    repo, err := git.Clone(url, path, &opts)
    if err != nil {
        return err
    }

    fmt.Println(repo)
    return nil
}

However, I'm getting the following error:

Failed to clone https://github.com/ministryofjustice/supervisor-formula.git Reference 'refs/remotes/origin/v1.0.0' not found

I'm guessing this is a lack of knowledge on my side, but I'm wondering whether I can accomplish something like this using the git package ?

Consider making this package go gettable?

Right now, this package requires custom manual steps for its installation:

Run go get -d github.com/libgit2/git2go to download the code and go to your $GOPATH/src/github.com/libgit2/git2go dir. From there, we need to build the C code and put it into the resulting go binary.

git submodule update --init # get libgit2
make install

will compile libgit2 and run go install such that it's statically linked to the git2go package.

This is inconvenient, it makes it harder to get than other Go packages (which are just go get). Worst of all, this means that any other Go package that imports this one, even if the upstream package is completely go gettable, will no longer be 1 command to install.

I think it may be possible for you to change that, and thus improve the experience of anyone using this packages, and make it easy for others to import it and no incur the cost of manual dependency installation steps.

The way you can do that would be similar to how we did it with glfw3 package (currently on a branch, to be merged into master once GLFW 3.1 is released), which is a Go binding for a C library. It was discovered by @slimsag and you can see the discussion in the following issue and PR:

go-gl/glfw#82
go-gl/glfw#83

The general idea is that you vendor the C library source in a subfolder (potentially as a git submodule) and use cgo directives to link to it. Basically, everything you're doing now, except without needing the Makefile and scripts.

The main consideration is that you will need to replace the function of CMake with multiple .go files with build tags (which may require some work and maintenance), which is what we've done in glfw3:

Less configurable? Unable to modify CMAKE parameters?

Actually -- We can make build tags for any CMAKE configurable feature that we want (e.g. tell people to compile their application with go install -tags "wayland" my/pkg and a wayland client will be built instead of an X11 one, you can see how I did this here: https://github.com/go-gl/glfw3/blob/devel_glfw3.1/build.go)

But the end result is a go gettable package that is much easier for users. Just imagine:

To install git2go, run go get -u github.com/libgit2/git2go. Done.

What do you think? If this is something you're amendable to, I can assist with questions/answers about the approach and potentially try to make a PR.

garbage collector found invalid heap pointer: Go 1.4

After upgrading from go1.3 to go1.4, I'd get a runtime crash most of the time. It crashes for various reasons (nil tree walker callback, invalid heap pointer...). Here is a scaled down version of the code that demonstrates the problem (runtime crashes most of the time). Run this code with an argument pointing at a git repository like git2go.

package main

import (
    "fmt"
    "github.com/libgit2/git2go"
    "os"
    "strings"
)

type MyRepo struct {
    *git.Repository
}

func (repository *MyRepo) foo(path string, treeEntry *git.TreeEntry) int {
    if git.ObjectBlob != treeEntry.Type {
        return 0 // continue
    }

    if !strings.HasSuffix(treeEntry.Name, ".go") {
        return 0 // continue
    }

    blob, err := repository.Repository.LookupBlob(treeEntry.Id)
    defer blob.Free()
    if err != nil {
        panic(err)
    }

    if blob.Size() > 10000 {
        return 0 // continue
    }

    contents := blob.Contents()
    if contents == nil {
        panic("nil contents")
    }
    fmt.Printf("%q", path, treeEntry.Name, string(contents))
    fmt.Println()

    return 0 // continue
}

func main() {
    filename := os.Args[1]

    repository, err := git.OpenRepository(filename)
    if err != nil {
        panic(err)
    }
    defer repository.Free()

    myRepo := MyRepo{repository}

    revWalk, err := repository.Walk()
    if err != nil {
        panic(err)
    }
    defer revWalk.Free()

    // Start out at the head
    err = revWalk.PushHead()
    if err != nil {
        panic(err)
    }

    err = revWalk.Iterate(func(commit *git.Commit) bool {
        defer commit.Free()

        tree, err := commit.Tree()
        if err != nil {
            panic(err)
        }
        defer tree.Free()

        err = tree.Walk(myRepo.foo)
        if err != nil {
            panic(err)
        }

        return true
    })

    if err != nil {
        panic(err)
    }
}

Some errors that come from the above code:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x40f4299]

goroutine 1 [running]:
github.com/libgit2/git2go.CallbackGitTreeWalk(0x438a520, 0x51008e0, 0xc208071e40, 0x0)
    /Users/maleticm/.gvm/pkgsets/go1.4/jack/src/github.com/libgit2/git2go/tree.go:99 +0x79
github.com/libgit2/git2go._Cfunc__go_git_treewalk(0x5100850, 0x0, 0xc208069e40, 0x0)
    /Users/maleticm/.gvm/pkgsets/go1.4/jack/src/github.com/libgit2/git2go/:402 +0x43
github.com/libgit2/git2go.Tree.Walk(0x5100850, 0xc20802c018, 0x5100850, 0xc208069e80, 0x0, 0x0)
runtime: garbage collector found invalid heap pointer *(0xc208069cd0+0x10)=0xc208083e40 span=0xc20807e000-0xc208083800-0xc208084000 state=0
fatal error: invalid heap pointer

runtime stack:
runtime.throw(0x437df83)
    /Users/maleticm/.gvm/gos/go1.4/src/runtime/panic.go:491 +0xad fp=0x7fff5fbfea18 sp=0x7fff5fbfe9e8
scanblock(0xc208069cd0, 0x20, 0x42c12e4)
    /Users/maleticm/.gvm/gos/go1.4/src/runtime/mgc0.c:378 +0x551 fp=0x7fff5fbfeb58 sp=0x7fff5fbfea18
scanframe(0x7fff5fbfec60, 0x0, 0x1)
    /Users/maleticm/.gvm/gos/go1.4/src/runtime/mgc0.c:740 +0x1c2 fp=0x7fff5fbfebc8 sp=0x7fff5fbfeb58
unexpected fault address 0xb01dfacedebac1e
fatal error: fault
[signal 0xb code=0x1 addr=0xb01dfacedebac1e pc=0x40f4299]

goroutine 1 [running, locked to thread]:
runtime.gothrow(0x426ec90, 0x5)
    /Users/maleticm/.gvm/gos/go1.4/src/runtime/panic.go:503 +0x8e fp=0xc208069c40 sp=0xc208069c28
runtime.sigpanic()
    /Users/maleticm/.gvm/gos/go1.4/src/runtime/sigpanic_unix.go:29 +0x261 fp=0xc208069c90 sp=0xc208069c40
github.com/libgit2/git2go.CallbackGitTreeWalk(0x438a520, 0x5009680, 0xc208073e40, 0x0)

Repository.CreateBlobFromBuffer panics on empty buffer

Hi, when I call Repository.CreateBlobFromBuffer with an empty buffer as argument, I get the following trace:

panic: runtime error: index out of range [recovered]
    panic: runtime error: index out of range

goroutine 6 [running]:
runtime.panic(0x5e8620, 0x9bc217)
    /usr/local/go/src/pkg/runtime/panic.c:266 +0xb6
testing.funcยท005()
    /usr/local/go/src/pkg/testing/testing.go:385 +0xe8
runtime.panic(0x5e8620, 0x9bc217)
    /usr/local/go/src/pkg/runtime/panic.c:248 +0x106
github.com/libgit2/git2go.(*Repository).CreateBlobFromBuffer(0xc2100002b0, 0x0, 0x0, 0x0, 0x0, ...)
    /home/dev/go/src/github.com/libgit2/git2go/blob.go:40 +0x132
[...]

I'm building from ce7a12d

checkout by rev hash

I edit checkout.go and add CheckoutTree method blow, but I don't know why the repo didn't changed after successful execute it.

func (v *Repository) CheckoutTree(treeish string, opts *CheckoutOpts) error {
    var copts C.git_checkout_options
    ptr := populateCheckoutOpts(&copts, opts)

    obj, err := v.RevparseSingle(treeish)
    if err != nil {
        return err
    }
    defer obj.Free()

    commit, err := v.LookupCommit(obj.Id())
    if err != nil {
        return err
    }

    tree, err := commit.Tree()
    if err != nil {
        return err
    }

    runtime.LockOSThread()
    defer runtime.UnlockOSThread()

    ret := C.git_checkout_tree(v.ptr, tree.ptr, ptr)
    if ret < 0 {
        return MakeGitError(ret)
    }

    return nil
}

Can't compile

Hi, I am using arch linux and I am trying to go get git2go and I am having the next errors:

โžœ  build git:(development) go get github.com/libgit2/git2go
# github.com/libgit2/git2go
1: error: 'GIT_CHECKOUT_NONE' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_SAFE_CREATE' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_DONT_UPDATE_INDEX' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED' undeclared (first use in this function)
1: error: 'git_checkout_opts' undeclared (first use in this function)
1: error: 'git_checkout_head' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_FORCE' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_NO_REFRESH' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_SKIP_UNMERGED' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_USE_OURS' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_REMOVE_UNTRACKED' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_UPDATE_ONLY' undeclared (first use in this function)
1: error: 'git_checkout_index' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_SAFE' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_ALLOW_CONFLICTS' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_REMOVE_IGNORED' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_USE_THEIRS' undeclared (first use in this function)
1: error: 'GIT_CHECKOUT_UPDATE_SUBMODULES' undeclared (first use in this function)

I am using the latest libgit2 development branch (according to the day of posting this issue). What should I do?

problems building

I read in another issue that libgit2 via homebrew won't help, but if I don't have it installed with homebrew, then this: go get github.com/libgit2/git2go produces:

# github.com/libgit2/git2go
./blob.go:4:10: fatal error: 'git2.h' file not found
#include <git2.h>
         ^
1 error generated.

but if I install libgit2 with homebrew then this step works but at make step I get make: *** [install] Error 2 but no errors are reported above this line... confusing :( Any tips?

Pushing to Remote Repo

I've been trying (unsuccessfully so far) to use git2go to push changes from my local repo to a github repo.

Here is the gist containing the code I am using for now.

So while HTTPS works for cloning the remote repo I can't get it working for pushing. None of the error checks report anything but still the push does not go through

I've looked at the documentation of both git2go and libgit2, tests in the git2go repo and related questions on stack overflow and seem to be on the prescribed track but can't figure out exactly what's wrong with my implementation.

As this is the first location to learn about git2go , I'm posting it here as well in case it will help others.

Thanks !

Why do you apply changes from the development branch of libgit2 ?

For instance this commit, which is a breaking change :

libgit2/libgit2@6affd71

It has been applied in git2go here (9c72700) and here (42fce02).

But on my machine I installed the standard version of libgit2 where the breaking change is not shipped, so I can't use git2go... Or I have to download the libgit2 sources and build them.

In case you missed it, I found this Linus comment about this libgit2 change in the subsurface mailing list :)

Issue when trying to build on OSX

When building on Mac OSX I get the following error:

I am using the built in make install command which uses: script/build-libgit2-static.sh

$ make install
./script/build-libgit2-static.sh
+ VENDORED_PATH=vendor/libgit2
+ cd vendor/libgit2
+ mkdir -p install/lib
+ mkdir -p build
+ cd build
+ cmake -DTHREADSAFE=ON -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=../install ..
-- Could NOT find HTTP_Parser (missing:  HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
-- http-parser was not found or is too old; using bundled 3rd-party sources.
-- Found Iconv: -L/usr/lib -liconv
CMake Error at /usr/local/Cellar/cmake/3.0.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
  Could NOT find Threads (missing: Threads_FOUND)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.0.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.0.2/share/cmake/Modules/FindThreads.cmake:178 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:372 (FIND_PACKAGE)


-- Configuring incomplete, errors occurred!
See also "/Users/jwaldrip/dev/src/github.com/libgit2/git2go/vendor/libgit2/build/CMakeFiles/CMakeOutput.log".
See also "/Users/jwaldrip/dev/src/github.com/libgit2/git2go/vendor/libgit2/build/CMakeFiles/CMakeError.log".
make: *** [build-libgit2] Error 1

Calling Free() 2x will cause SEGV

Maybe should check set ptr = nil after git free and guard Free logic with ptr != nil to make sure it doesn't try to free invalid pointers?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.