ocaml-git

Pure OCaml Git format and protocol

ISC License

Stars
362
Committers
36

Bot releases are hidden (Show)

ocaml-git - Do not use mmap

Published by samoht over 8 years ago

  • Do not mmap files, as there is no way to easily control the unmap of bigarrays. This remove EMFILE errors under load (#133, @talex5)
  • Fix comparison of entries in the index file. This fix a random issue which might happen when entries in a pack file are checkout and updated (@samoht)
ocaml-git - Support latest cohttp and revert API break.

Published by samoht over 8 years ago

  • Support cohtpp 0.19.1. (#119, @rgrinberg)
  • Revert API break for the Sync functor. Now still takes only a Store.S
    as parameter. (#120)
ocaml-git - SHA and Inflate abstractions

Published by samoht about 9 years ago

  • Changes to the Search API:
    • Remove find_exn
    • the type t has a new case Tree_root to represent tree roots
    • the type path is now structured (not a list of strings anymore).
      this removes the confusing semantics of empty strings in paths.
  • Changes to the Global_graph API:
    • closure takes an optional full argument to work over
      commit objects only
    • All the arguments of pack are labelled and its result type
      has changed.
    • Add keys to return the topological sort of keys in the graph.
  • Improve the size of pack files received when fetching (#115)
    • advertise the fact that ocaml-git clients support ofs-delta
      and thin-pack
    • Compute a minimal set of haves to send to the server after
      the discovery phase, where we already know all the server
      references (#114)
  • Unpack shallow pack files after a fetch
  • Full support for shallow packs (#81)
  • During fetch, we now respect the "allow-reachable-sha1-in-want"
    server (non-)capability. A proper error is reported to the client
    if that's not the case.
  • Parametrize the codebase over the Inflate implementation. Useful
    to change the inflate algorithm (or to not use any at all, which
    would be what we want for big files and/or for efficient writes)
    and to simplify the port to other backends. Store.S implementations
    now expose their Inflate implementation.
  • Parametrize the codebase over the SHA implementation. Useful to change
    the SHA algorihm (the unix backend provides SHA256) or simplify the
    port to other backends (the mirage backend uses a pure OCaml implementation
    extracted from uuidm). Store.S implementations now expose their Digest
    implementation (#68)
  • Better sync API (#113)
    • Change the arguments of Sync.fetch
    • Remove Sync.clone
    • Add Sync.populate to be called after a fetch to properly populate
      the local Git repository (similar to what git clone does).
    • Add ogit clone --no-checkout and make ogit clone --bare more similar
      to the same git command.
  • Support Github http(s) URLs without .git (#111)
  • Add a dot_git optional parameter to Store.create to specify where
    the Git metadata should be stored (default is still <root>/.git). This
    is useful to properly support bare repositories (#110)
  • Full support for 32 bit platform (ie. continue the patch started in 1.6.2).
  • Rework the Git.Pack and Git.Pack_index API to speed-up random access.
  • Add a Git.SHA.Array module to work with contiguous arrays of SHA1.
  • Rename Git.SHA.lenght to Git.SHA.hex_length to avoid confusion.
  • Expose Git.SHA.of_short_hex to create short hashes. Git.SHA.of_hex now
    only accept 40 characters hexa-decimal strings.
  • Improve the output of ogit clone by showing progress when the pack file
    is downloaded and when the delta are resolved.
ocaml-git - Support 32bit architectures

Published by samoht over 9 years ago

  • Support 32 bit platform by avoiding creating large strings. This also improve
    the performance of reading and synchronizin large pack files
    (#103, @gregtatcam)
ocaml-git - Bug fixes in the smart HTTP protocol

Published by samoht over 9 years ago

  • Fix a bug in ogit pull using the smart HTTP protocol when the HTTP temporary
    buffer could sometimes be overfill.
  • Avoid closing twice the same fd in the smart HTTP protocol.
  • Avoid the GC to close a fd while we are still using a channel built on top of
    it -- this affects the smart HTTP protocol only.
  • Add an opam file for the mirage-git package.
  • Allow some references to contain pointer to other references (#96)
  • Improve the support for 32bit architectures (#97)
  • Add Reference.pp_head_contents and Reference.equal_head_contents.
  • Remove Store.clear and replace it by Memory.clear, Memory.clear_all
    and FS.remove. This let users have a finer control over the memory
    consumption of the program over time (related to #90)
  • Rename all pp_hum functions into pp.
  • Fix regression in Sync.fetch and add unit-tests (running only in slow mode).
  • Fix reading of .git/HEAD when the contents is a commit hash.
  • Depends on Stringext for all the extra string function needed.
ocaml-git - Fix listing of packed references

Published by samoht over 9 years ago

  • Fix listing of packed references (#98)
ocaml-git - Fix serialization of dates, support shallow packs, fix (?) memory leak, etc

Published by samoht over 9 years ago

  • Fix handling of empty paths (#89)
  • Fix the serialization of dates in commit objects
  • Expose Git.Packed_value.PIC.pretty
  • Improve the efficiency of Git_unix.FS.remove
  • Support shallow packs (#81)
  • Fix an mmap leak introduced in 1.5.* (#90)
  • Remove the dependency to OUnit for the tests
  • Improve the pretty printers and the output of ogit
ocaml-git - filesystem expansion and remote refs fixes

Published by samoht over 9 years ago

  • Fix filesystem expansion when a filen ame becomes a directory name or when
    a directory name becomes a file name (#87)
  • Fix the order of entries in the tree objects (#86)
  • Fix the compilation of tests (#85)
  • Fetch all remote refs on synchronize (#83, by @AltGr)
  • Compatibility with cohttp.0.18. (#80 by @rgrinberg)
  • Simplify the mirage sync API to use conduit 0.8.4 (breaking API changes)
  • Change ogit cat-file to behave exactly as git cat-file
    The previous command is renamed to ogit cat (#75 by @codinuum)
  • ogit now supports short hashes instead of full SHA1 (#75 by @codinuum)
  • Add Git.Pack.Raw.read to read raw pack files (#75 by @codinuum)
  • Git.Pack_index.t now uses a cache of entries. This is more efficient
    than the previous representation (#75 by @codinuum)
  • Add Git.Pack_index.mem to find an entry in the pack index cache
    (#75 by @codinuum)
  • Add Git.Pack_index.find_offset to find an offset in the pack index
    cache (#75 by @codinuum)
  • Add Git.Packed_value.to_value to unpack a value stored in a pack file
    (#75 by @codinuum)
  • Support synchronisation for MirageOS unikernels (#70)
ocaml-git - Fix the smart HTTP protocol

Published by samoht over 9 years ago

  • Fix multi round-trips in the smart HTTP protocol. This fixes
    depth-limited clones (#71) and fetches.
  • Create the git.http library for abstracting away bits of the
    smart HTTP protocol.
  • Add User-Agent in the headers of the smart HTTP protocol. This
    makes bitbucket.org happy. (#66, patch from @vklquevs)
ocaml-git - Fix the smart HTTP protocol

Published by samoht over 9 years ago

  • Fix support for the smart HTTP protocol (report by @talex5, mirage/irmin#138)
ocaml-git - Remove `OGITTMPDIR`

Published by samoht over 9 years ago

  • Remove the OGITTMPDIR and alway store temp files under git/tmp (mirage/irmin#132)
ocaml-git - Fix bug in LRU cache, flush the `cat-file` commands

Published by samoht over 9 years ago

  • Fix LRU cache: SHA1 should be unique in the cache (regression
    introduced in 1.4.3). This was causing confusing read results
    under load.
  • Reading objects now updates the LRU cache
  • Fix a regression in ogit cat-file which were displaying nothing
    for small objects.
ocaml-git - Fix for non-bare repositories, remove stdout/stderr messages

Published by samoht over 9 years ago

  • Fix the filesystem updates for non-bare repositories (reported by @avsm)
  • Git.write_index now takes an optional index argument
  • Index entries should be fixed alphabetically
  • Remove raw printf (#60)
  • More flexibility on where to write temp files. The directory name can be
    configured by write calls, and the default is OGITTMPDIR if set,
    then Filename.get_temp_dir_name -- as it was in 1.4.5, see #51
ocaml-git - Improve LRU settings and add the `git.top` package

Published by samoht over 9 years ago

  • Expose Git.Value.Cache.set_size to change the LRU cache size
  • Reduce the default LRU cache size (in 1.4.4 it was set to 64k, now it's 512)
  • More precise type for commit dates
  • Add git.top to load toplevel printers for Git values
ocaml-git - Support packed references

Published by samoht almost 10 years ago

  • Support packed-refs files, to read references packed by git gc (reported
    by Gregory Tsipenyuk)
  • Fix the filesystem backend when TMPDIR is not on the same partition as the
    Git repository (#51, patch from @vklquevs)
ocaml-git - More protocol support, more stability

Published by samoht almost 10 years ago

  • Support the smart HTTP Git protocol (#26)
  • Best-effort creation of files when expanding the index into the filesystem:
    Skip the invalid filenames and continue. Users are expected to sanitize
    their filenames if they want to use a non-bare repository (#11)
  • Overwrite changed file when expanding the index into the filesystem (#4)
  • Do not recompute the hash of blob files when expanding the index into the
    filesystem. This help fixing a speed issue with non-bare repo with lots of
    file.
  • Rename {write,read}_cache to {write,read}_index
  • Rename Cache to Index
  • Expose the protocol capabilities to the client
  • Support side-band-64k protocol capability (#44)
  • Fix support for git+ssh (#39)
  • Expose zlib compression level (#41)
  • Maintain a cache of opened files (#29, Pierre Chambart)
ocaml-git - Fix caching and concurrent operations

Published by samoht almost 10 years ago

  • Fix regression introduced in 1.4.3 appearing when
    synchronising big repositories (#38)
  • Fix concurrent read/write by using an atomic rename (#35)
  • Tree objects can also point to commits (@codinuum)
  • Reduce allocation (@codinuum)
  • Use LRU cache instead of an unbounde Hashtl
    (code imported for Simon Cruanes's CCache implementation)
  • Remove the crazy unbounded caching in Git.FS. Use the LRU
    everywhere (#22)
  • Fix fd leaking (#29)
  • Update to dolog.1.0
  • Remove dependency to camlp4
  • Remove lots of warnings
  • Move Git_unix and Git_mirage in their own subdirs as it
    was causing issues to oasis (#5, Simon Cruanes)
  • Use Bytes instead of String (#5, Simon Cruanes)
ocaml-git - Fix writing of empty files

Published by samoht almost 10 years ago

  • Fix Git_unix.IO.write_file to work on empty files