hlibgit2 0.18.0.5 → 0.18.0.6
raw patch · 15 files changed
+34/−24 lines, 15 files
Files
- Bindings/Libgit2.hs +10/−4
- Bindings/Libgit2/Windows.hsc +0/−2
- hlibgit2.cabal +4/−1
- libgit2/include/git2/odb.h +5/−1
- libgit2/include/git2/odb_backend.h +2/−1
- libgit2/src/fetch.c +1/−1
- libgit2/src/odb.c +3/−3
- libgit2/src/odb_loose.c +1/−1
- libgit2/src/odb_pack.c +1/−1
- libgit2/src/push.c +1/−1
- libgit2/src/refs.c +1/−1
- libgit2/src/remote.c +1/−1
- libgit2/src/repository.c +1/−1
- libgit2/src/transports/local.c +2/−2
- test/Main.hs +1/−3
Bindings/Libgit2.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP #-}+ module Bindings.Libgit2 ( module Bindings.Libgit2.Attr , module Bindings.Libgit2.Blob@@ -45,8 +47,9 @@ , module Bindings.Libgit2.Transport , module Bindings.Libgit2.Tree , module Bindings.Libgit2.Types- , module Bindings.Libgit2.Version+#ifdef WINDOWS , module Bindings.Libgit2.Windows+#endif , withLibGitDo ) where import Bindings.Libgit2.Attr@@ -95,8 +98,9 @@ import Bindings.Libgit2.Transport import Bindings.Libgit2.Tree import Bindings.Libgit2.Types-import Bindings.Libgit2.Version+#ifdef WINDOWS import Bindings.Libgit2.Windows+#endif -- import Control.Monad.IO.Class (MonadIO, liftIO) -- import Control.Monad.Trans.Control (MonadBaseControl)@@ -113,5 +117,7 @@ -- thread libgit2 library is performed. withLibGitDo :: IO a -> IO a withLibGitDo f = do- c'git_threads_init- finally f (performGC >> c'git_threads_shutdown)+ r <- c'git_threads_init+ if r < 0+ then error "c'git_threads_init failed"+ else finally f (performGC >> c'git_threads_shutdown)
Bindings/Libgit2/Windows.hsc view
@@ -1,9 +1,7 @@ #include <bindings.dsl.h> #include <git2.h> module Bindings.Libgit2.Windows where-#strict_import -import Bindings.Libgit2.Common #ifdef GIT_WIN32 #ccall gitwin_set_codepage , CUInt -> IO () #ccall gitwin_get_codepage , IO (CUInt)
hlibgit2.cabal view
@@ -1,5 +1,5 @@ Name: hlibgit2-Version: 0.18.0.5+Version: 0.18.0.6 Synopsis: Low-level bindings to libgit2 Description: Bindings to libgit2 v0.18.0. License-file: LICENSE@@ -28,6 +28,7 @@ Test-suite smoke default-language: Haskell98 type: exitcode-stdio-1.0+ ghc-options: -Wall main-is: Main.hs hs-source-dirs: test build-depends:@@ -37,6 +38,7 @@ Library hs-source-dirs: .+ ghc-options: -Wall default-language: Haskell98 default-extensions: ForeignFunctionInterface@@ -208,6 +210,7 @@ cc-options: -g -DGIT_THREADS -D_FILE_OFFSET_BITS=64 -DGIT_SSL ld-options: -g if os(windows)+ cpp-options: -DWINDOWS cc-options: -DGIT_WIN32 -DWIN32 -DWIN32_SHA1 -D_DEBUG -D_WIN32_WINNT=0x0501 -DGIT_WINHTTP c-sources: libgit2/src/hash/hash_win32.c
libgit2/include/git2/odb.h view
@@ -185,11 +185,15 @@ * * @param db database to be searched for the given object. * @param id the object to search for.+ * @param confirm_not_exist true if this existence call is simply+ * verifying that the object does not already exist in the object+ * database (allowing for an optimization opportunity in custom+ * backends) * @return * - 1, if the object was found * - 0, otherwise */-GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id);+GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id, int confirm_not_exist); /** * Refresh the object database to load newly added files.
libgit2/include/git2/odb_backend.h view
@@ -87,7 +87,8 @@ int (* exists)( struct git_odb_backend *,- const git_oid *);+ const git_oid *,+ int); int (* refresh)(struct git_odb_backend *);
libgit2/src/fetch.c view
@@ -44,7 +44,7 @@ return 0; /* If we have the object, mark it so we don't ask for it */- if (git_odb_exists(p->odb, &head->oid))+ if (git_odb_exists(p->odb, &head->oid, 0)) head->local = 1; else p->remote->need_pack = 1;
libgit2/src/odb.c view
@@ -526,7 +526,7 @@ GIT_REFCOUNT_DEC(db, odb_free); } -int git_odb_exists(git_odb *db, const git_oid *id)+int git_odb_exists(git_odb *db, const git_oid *id, int confirm_not_exist) { git_odb_object *object; size_t i;@@ -546,7 +546,7 @@ git_odb_backend *b = internal->backend; if (b->exists != NULL)- found = b->exists(b, id);+ found = b->exists(b, id, confirm_not_exist); } if (!found && !refreshed) {@@ -752,7 +752,7 @@ assert(oid && db); git_odb_hash(oid, data, len, type);- if (git_odb_exists(db, oid))+ if (git_odb_exists(db, oid, 1)) return 0; for (i = 0; i < db->backends.length && error < 0; ++i) {
libgit2/src/odb_loose.c view
@@ -662,7 +662,7 @@ return error; } -static int loose_backend__exists(git_odb_backend *backend, const git_oid *oid)+static int loose_backend__exists(git_odb_backend *backend, const git_oid *oid, int confirm_not_exist) { git_buf object_path = GIT_BUF_INIT; int error;
libgit2/src/odb_pack.c view
@@ -418,7 +418,7 @@ return error; } -static int pack_backend__exists(git_odb_backend *backend, const git_oid *oid)+static int pack_backend__exists(git_odb_backend *backend, const git_oid *oid, int confirm_not_exist) { struct git_pack_entry e; return pack_entry_find(&e, (struct pack_backend *)backend, oid) == 0;
libgit2/src/push.c view
@@ -301,7 +301,7 @@ if (git_oid_iszero(&spec->roid)) continue; - if (!git_odb_exists(push->repo->_odb, &spec->roid)) {+ if (!git_odb_exists(push->repo->_odb, &spec->roid, 0)) { giterr_clear(); error = GIT_ENONFASTFORWARD; goto on_error;
libgit2/src/refs.c view
@@ -368,7 +368,7 @@ if ((error = git_repository_odb__weakptr(&odb, repo)) < 0) return error; - if (!git_odb_exists(odb, oid)) {+ if (!git_odb_exists(odb, oid, 0)) { giterr_set(GITERR_REFERENCE, "Target OID for the reference doesn't exist on the repository"); return -1;
libgit2/src/remote.c view
@@ -856,7 +856,7 @@ continue; } - if (autotag && !git_odb_exists(odb, &head->oid))+ if (autotag && !git_odb_exists(odb, &head->oid, 0)) continue; if (git_vector_insert(&update_heads, head) < 0)
libgit2/src/repository.c view
@@ -1337,7 +1337,7 @@ return 0; } - exists = git_odb_exists(odb, git_reference_target(ref));+ exists = git_odb_exists(odb, git_reference_target(ref), 0); git_reference_free(ref); return exists;
libgit2/src/transports/local.c view
@@ -265,7 +265,7 @@ git_oid remote_odb_obj_oid; /* Object already exists in the remote ODB; do nothing and return 0*/- if (git_odb_exists(remote_odb, &obj->id))+ if (git_odb_exists(remote_odb, &obj->id, 1)) return 0; if ((error = git_odb_read(&odb_obj, local_odb, &obj->id)) < 0)@@ -506,7 +506,7 @@ git_commit *commit; /* Skip commits we already have */- if (git_odb_exists(odb, &oid)) continue;+ if (git_odb_exists(odb, &oid, 0)) continue; if (!git_object_lookup((git_object**)&commit, t->repo, &oid, GIT_OBJ_COMMIT)) { const git_oid *tree_oid = git_commit_tree_id(commit);
test/Main.hs view
@@ -10,17 +10,15 @@ import System.Process (system) main :: IO ()-main = do+main = withLibGitDo $ do putStrLn "Creating Git repository..." _ <- system "git init smoke.git" putStrLn "Accessing directly..."- c'git_threads_init alloca $ \ptr -> do withCString "smoke.git/.git" $ \str -> do r <- c'git_repository_open ptr str when (r < 0) $ exitWith (ExitFailure 1) peek ptr >>= c'git_repository_free- c'git_threads_shutdown -- Main.hs ends here