This change makes the DiffNotifyCallback always use an "unowned"
*git.Diff that does _not_ run the finalizer. Since the underlying
git_diff object is still owned by libgit2, we shouldn't be calling
Diff.Free() on it, even by accident, since that would cause a whole lot
of undefined behavior.
Now instead of storing a reference to a *git.Diff in the intermediate
state while the diff operation is being done, create a brand new
*git.Diff for every callback invocation, and only create a fully-owned
*git.Diff when the diff operation is done and the ownership is
transfered to Go.
(cherry picked from commit c78ae57de6)
This change adds the Shutdown() method, so that the library can be
cleanly shut down. This helps significanly reduce the amount of noise in
the leak detector.
(cherry picked from commit 619a9c236b)
This change makes the underlying type of DiffFlag be uint32 instead of
int. That makes it possible to build on 32-bit systems.
Fixes: #487
(cherry picked from commit 93c4c5b30a)
This change adds support for odb.NewOdbBackendLoose(). This, together
with the git.Packbuilder, can do what Mempack does with a lot less
memory.
(cherry picked from commit 91946a5705)
`repository.LookupXxx()` allocate new go `Object`s that have a reference
to a `C.git_object`. Those are then duplicated with `git_object_dup()`,
so the original `Object`s linger unnecessarily until the Go GC kicks in.
This change explicitly calls `Free()` on the originals to avoid
unnecessary accumulation of garbage.
(cherry picked from commit 2bb5930733)
This change:
* Updates the GitHub actions so that they run different commands for the
dynamic and static flavors of libgit2.
* Updates the .travis.yml file so that it does roughly the same as the
GitHub actions.
* Adds the release-* branches to the CI configurations.
(cherry picked from commit 26edffd5f5)
This is compliant with
https://github.com/golang/go/wiki/Modules#releasing-modules-v2-or-higher,
which says
```
Major branch: Update the go.mod file to include a /v3 at the end of the
module path in the module directive (e.g., module
github.com/my/module/v3). Update import statements within the module to
also use /v3 (e.g., import "github.com/my/module/v3/mypkg"). Tag the
release with v3.0.0.
```
This also means that unfortunately we cannot keep using libgit2's exact
version number (plus a build number for git2go purposes, since go only
recognizes vMAJOR.MINOR.PATCH format).
(Tentatively) fixes: #536
This change adds a `go.mod` file. An empty file is sufficient since this
project has no external dependencies. For people that want to use the static
version of libgit2, this module can be vendored and the following can be added
to their `go.mod` file:
replace github.com/libgit2/git2go => ./vendor/github.com/libgit2/git2go