CI to automate build of cargo lockfiles on different Alpine releases for git-annex aports https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/community/git-annex
Find a file
Joey Hess 4224fae71f
optimise read and write for Keys database (untested)
Writes are optimised by queueing up multiple writes when possible.
The queue is flushed after the Annex monad action finishes. That makes it
happen on program termination, and also whenever a nested Annex monad action
finishes.

Reads are optimised by checking once (per AnnexState) if the database
exists. If the database doesn't exist yet, all reads return mempty.

Reads also cause queued writes to be flushed, so reads will always be
consistent with writes (as long as they're made inside the same Annex monad).
A future optimisation path would be to determine when that's not necessary,
which is probably most of the time, and avoid flushing unncessarily.

Design notes for this commit:

- separate reads from writes
- reuse a handle which is left open until program
  exit or until the MVar goes out of scope (and autoclosed then)
- writes are queued
  - queue is flushed periodically
  - immediate queue flush before any read
  - auto-flush queue when database handle is garbage collected
  - flush queue on exit from Annex monad
    (Note that this may happen repeatedly for a single database connection;
    or a connection may be reused for multiple Annex monad actions,
    possibly even concurrent ones.)
- if database does not exist (or is empty) the handle
  is not opened by reads; reads instead return empty results
- writes open the handle if it was not open previously
2015-12-23 19:18:52 -04:00
Annex clean up cruft in assistant fast rename code path 2015-12-22 18:03:47 -04:00
Assistant combine PendingAddChanges for the same file into one 2015-12-22 17:52:39 -04:00
Backend generalize catchHardwareFault to catchIOErrorType 2015-12-06 16:26:38 -04:00
Build got logic backwards.. 2015-11-03 10:51:21 -04:00
CmdLine Merge branch 'master' into smudge 2015-12-22 18:10:40 -04:00
Command Merge branch 'master' into smudge 2015-12-22 18:10:40 -04:00
Common Use lower case hash directories for storing files on crippled filesystems, same as is already done for bare repositories. 2013-04-04 15:46:33 -04:00
Config webapp: Fix bugs that could result in a relative path such as "." being written to ~/.config/git-annex/autostart 2015-12-02 15:57:30 -04:00
Database optimise read and write for Keys database (untested) 2015-12-23 19:18:52 -04:00
debian Merge branch 'master' into smudge 2015-12-22 18:10:40 -04:00
doc optimise read and write for Keys database (untested) 2015-12-23 19:18:52 -04:00
Git fix use of hifalutin terminology 2015-11-16 14:37:31 -04:00
Limit update my email address and homepage url 2015-01-21 12:50:09 -04:00
Logs avoid unnecessary reading of git-annex branch data when matching on annex.largefiles 2015-12-04 15:06:41 -04:00
Messages avoid spawning file size polling thread when not in -J mode 2015-11-16 21:21:58 -04:00
Remote Merge branch 'master' into smudge 2015-12-11 13:50:31 -04:00
RemoteDaemon rename bothHandles -> ioHandles 2015-04-03 15:35:18 -04:00
standalone Make the git-annex-standalone.deb prevent runshell from installing wrappers into $HOME/.ssh 2015-11-10 12:53:46 -04:00
static Revert "remove newlines from static js and css" 2014-06-13 02:20:39 -04:00
templates webapp: Remove the "disable remote" feature from the UI. 2015-09-21 13:05:44 -04:00
Types refactoring 2015-12-22 13:42:58 -04:00
Upgrade make linkAnnex detect when the file changes as it's being copied/linked in 2015-12-22 15:20:03 -04:00
Utility optimise read and write for Keys database (untested) 2015-12-23 19:18:52 -04:00
.ghci workaround for ghci fragility in reusing objects compiled with ghc 2012-10-20 16:20:42 -04:00
.gitattributes decruft 2011-06-22 18:56:08 -04:00
.gitignore cleanup makefile 2015-07-23 12:51:27 -04:00
.mailmap alias for Yaroslav @ yahoo to mailmap 2015-09-09 12:38:59 -04:00
Annex.hs optimise read and write for Keys database (untested) 2015-12-23 19:18:52 -04:00
Assistant.hs unused import on windows 2015-04-20 11:27:47 -04:00
Backend.hs reorg 2015-12-15 15:34:28 -04:00
bash-completion.bash fix bash completion of filenames containing spaces 2015-07-20 11:17:35 -04:00
build.bat let build.bat also be run from cygwin terminal 2015-04-21 14:12:14 -04:00
BuildFlags.hs Add S3 features to git-annex version output. 2015-12-10 11:42:49 -04:00
CHANGELOG symlinks 2010-10-27 15:14:59 -04:00
Checks.hs update my email address and homepage url 2015-01-21 12:50:09 -04:00
CmdLine.hs arrange for regional output manager to run when -J is enabled 2015-11-04 16:22:43 -04:00
Command.hs reorg 2015-12-15 15:34:28 -04:00
Common.hs import Data.Default in Common 2015-01-28 16:11:28 -04:00
Config.hs init: Configure .git/info/attributes to use git-annex as a smudge filter. 2015-12-04 17:57:15 -04:00
configure.hs Rewrote free disk space checking code 2012-03-22 17:32:47 -04:00
COPYRIGHT Add link COPYRIGHT -> debian/copyright; add COPYRIGHT to sdist. 2012-06-11 23:27:00 -07:00
Creds.hs support gpg.program 2015-09-09 18:06:49 -04:00
Crypto.hs support gpg.program 2015-09-09 18:06:49 -04:00
ghci brought back fast ghci 2013-02-27 21:38:01 -04:00
git-annex.cabal prep release 2015-12-18 12:09:55 -04:00
git-annex.hs wire tasty's option parser into the main program option parser 2015-07-13 13:20:10 -04:00
git-union-merge.hs update my email address and homepage url 2015-01-21 12:50:09 -04:00
Git.hs init: Configure .git/info/attributes to use git-annex as a smudge filter. 2015-12-04 17:57:15 -04:00
INSTALL symlinks 2010-10-27 15:14:59 -04:00
Limit.hs reorg 2015-12-15 15:34:28 -04:00
Locations.hs add inode cache to the db 2015-12-09 17:00:37 -04:00
Logs.hs rethought distributed fsck; instead add activity.log and expire command 2015-04-05 12:50:02 -04:00
Makefile Build with -j1 again to get reproducible build. 2015-11-16 16:51:24 -04:00
Messages.hs optimise read and write for Keys database (untested) 2015-12-23 19:18:52 -04:00
NEWS update NEWS 2012-01-19 15:27:39 -04:00
README use https 2014-11-06 14:20:10 -04:00
Remote.hs enableremote: List uuids and descriptions of remotes that can be enabled, and accept either the uuid or the description in leu if the name. 2015-10-26 14:55:40 -04:00
Setup.hs improve warning 2015-11-03 11:06:33 -04:00
stack.yaml enable ConcurrentOutput flag for stack 2015-11-06 15:26:12 -04:00
Test.hs test suite down to only 4 fails with v6 2015-12-16 16:56:27 -04:00
Types.hs update my email address and homepage url 2015-01-21 12:50:09 -04:00
Upgrade.hs Use git-annex init --version=6 to get v6 for now 2015-12-15 17:17:13 -04:00

git-annex allows managing files with git, without checking the file
contents into git. While that may seem paradoxical, it is useful when
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, checksumming time, or disk space.

For documentation, see doc/ or <https://git-annex.branchable.com/>