2011-06-30 18:55:03 +00:00
|
|
|
Name: git-annex
|
2024-08-08 19:27:04 +00:00
|
|
|
Version: 10.20240808
|
2022-07-16 18:57:29 +00:00
|
|
|
Cabal-Version: 1.12
|
2019-02-08 19:19:11 +00:00
|
|
|
License: AGPL-3
|
2015-01-21 16:50:09 +00:00
|
|
|
Maintainer: Joey Hess <id@joeyh.name>
|
2011-06-30 18:55:03 +00:00
|
|
|
Author: Joey Hess
|
|
|
|
Stability: Stable
|
2024-01-29 18:12:12 +00:00
|
|
|
Copyright: 2010-2024 Joey Hess
|
2012-09-24 19:20:28 +00:00
|
|
|
License-File: COPYRIGHT
|
2011-06-30 18:55:03 +00:00
|
|
|
Homepage: http://git-annex.branchable.com/
|
2013-02-28 23:18:56 +00:00
|
|
|
Build-type: Custom
|
2011-06-30 18:55:03 +00:00
|
|
|
Category: Utility
|
|
|
|
Synopsis: manage files with git, without checking their contents into git
|
|
|
|
Description:
|
|
|
|
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
|
2012-02-15 23:43:15 +00:00
|
|
|
to limitations in memory, time, or disk space.
|
2011-06-30 18:55:03 +00:00
|
|
|
.
|
2014-10-03 18:12:01 +00:00
|
|
|
It can store large files in many places, from local hard drives, to a
|
|
|
|
large number of cloud storage services, including S3, WebDAV,
|
2023-08-28 16:57:33 +00:00
|
|
|
and rsync, and many other usable via plugins.
|
2014-10-03 18:12:01 +00:00
|
|
|
Files can be stored encrypted with gpg, so that the cloud storage
|
|
|
|
provider cannot see your data. git-annex keeps track of where each file
|
|
|
|
is stored, so it knows how many copies are available, and has many
|
|
|
|
facilities to ensure your data is preserved.
|
|
|
|
.
|
|
|
|
git-annex can also be used to keep a folder in sync between computers,
|
|
|
|
noticing when files are changed, and automatically committing them
|
|
|
|
to git and transferring them to other computers. The git-annex webapp
|
|
|
|
makes it easy to set up and use git-annex this way.
|
2016-05-24 05:00:06 +00:00
|
|
|
-- The tarball uploaded to hackage does not include every non-haskell
|
2023-08-28 16:57:33 +00:00
|
|
|
-- file in the git repo. The website is left out, as are man pages,
|
|
|
|
-- so is build machinery for standalone apps, and packages.
|
|
|
|
-- Include only files that are needed make cabal install git-annex work.
|
2016-05-24 05:00:06 +00:00
|
|
|
Extra-Source-Files:
|
|
|
|
stack.yaml
|
|
|
|
README
|
|
|
|
CHANGELOG
|
|
|
|
NEWS
|
|
|
|
doc/license/GPL
|
|
|
|
doc/license/AGPL
|
|
|
|
doc/logo.svg
|
|
|
|
doc/logo_16x16.png
|
|
|
|
Assistant/WebApp/routes
|
|
|
|
static/activityicon.gif
|
|
|
|
static/css/bootstrap.css
|
|
|
|
static/css/bootstrap-theme.css
|
|
|
|
static/js/jquery.ui.core.js
|
|
|
|
static/js/longpolling.js
|
|
|
|
static/js/jquery.full.js
|
|
|
|
static/js/jquery.ui.sortable.js
|
|
|
|
static/js/jquery.ui.mouse.js
|
|
|
|
static/js/jquery.ui.widget.js
|
|
|
|
static/js/bootstrap.js
|
|
|
|
static/syncicon.gif
|
|
|
|
static/favicon.ico
|
|
|
|
static/fonts/glyphicons-halflings-regular.woff
|
|
|
|
static/fonts/glyphicons-halflings-regular.eot
|
|
|
|
static/fonts/glyphicons-halflings-regular.svg
|
|
|
|
static/fonts/glyphicons-halflings-regular.ttf
|
|
|
|
templates/sidebar/main.hamlet
|
|
|
|
templates/sidebar/alert.hamlet
|
|
|
|
templates/bootstrap.hamlet
|
|
|
|
templates/error.cassius
|
|
|
|
templates/README
|
|
|
|
templates/error.hamlet
|
|
|
|
templates/documentation/license.hamlet
|
|
|
|
templates/documentation/repogroup.hamlet
|
|
|
|
templates/documentation/about.hamlet
|
|
|
|
templates/dashboard/main.hamlet
|
|
|
|
templates/dashboard/transfers.cassius
|
|
|
|
templates/dashboard/transfers.hamlet
|
|
|
|
templates/dashboard/metarefresh.hamlet
|
|
|
|
templates/page.cassius
|
|
|
|
templates/page.hamlet
|
|
|
|
templates/control/repairrepository.hamlet
|
|
|
|
templates/control/repairrepository/done.hamlet
|
|
|
|
templates/control/notrunning.julius
|
|
|
|
templates/control/notrunning.hamlet
|
|
|
|
templates/control/repositoryswitcher.hamlet
|
|
|
|
templates/control/shutdown.hamlet
|
|
|
|
templates/control/log.hamlet
|
|
|
|
templates/page.julius
|
|
|
|
templates/repolist.julius
|
|
|
|
templates/configurators/adddrive/combine.hamlet
|
|
|
|
templates/configurators/adddrive/setupmodal.hamlet
|
|
|
|
templates/configurators/adddrive/encrypt.hamlet
|
|
|
|
templates/configurators/newrepository.hamlet
|
|
|
|
templates/configurators/needglaciercli.hamlet
|
|
|
|
templates/configurators/adds3.hamlet
|
|
|
|
templates/configurators/genkeymodal.hamlet
|
|
|
|
templates/configurators/main.hamlet
|
|
|
|
templates/configurators/needconnection.hamlet
|
|
|
|
templates/configurators/newrepository/form.hamlet
|
|
|
|
templates/configurators/newrepository/first.hamlet
|
|
|
|
templates/configurators/newrepository/combine.hamlet
|
|
|
|
templates/configurators/enablewebdav.hamlet
|
|
|
|
templates/configurators/pairing/local/inprogress.hamlet
|
|
|
|
templates/configurators/pairing/local/prompt.hamlet
|
2016-12-27 20:36:05 +00:00
|
|
|
templates/configurators/pairing/wormhole/prompt.hamlet
|
|
|
|
templates/configurators/pairing/wormhole/start.hamlet
|
2016-05-24 05:00:06 +00:00
|
|
|
templates/configurators/pairing/disabled.hamlet
|
|
|
|
templates/configurators/addglacier.hamlet
|
|
|
|
templates/configurators/fsck.cassius
|
|
|
|
templates/configurators/edit/nonannexremote.hamlet
|
|
|
|
templates/configurators/edit/webrepository.hamlet
|
|
|
|
templates/configurators/edit/repository.hamlet
|
|
|
|
templates/configurators/unused.hamlet
|
|
|
|
templates/configurators/ssh/testmodal.hamlet
|
|
|
|
templates/configurators/ssh/expiredpassword.hamlet
|
|
|
|
templates/configurators/ssh/error.hamlet
|
|
|
|
templates/configurators/ssh/combine.hamlet
|
|
|
|
templates/configurators/ssh/enable.hamlet
|
|
|
|
templates/configurators/ssh/add.hamlet
|
|
|
|
templates/configurators/ssh/setupmodal.hamlet
|
|
|
|
templates/configurators/ssh/confirm.hamlet
|
|
|
|
templates/configurators/enableia.hamlet
|
|
|
|
templates/configurators/fsck.hamlet
|
|
|
|
templates/configurators/addrepository/archive.hamlet
|
|
|
|
templates/configurators/addrepository/cloud.hamlet
|
|
|
|
templates/configurators/addrepository/connection.hamlet
|
|
|
|
templates/configurators/addrepository/ssh.hamlet
|
|
|
|
templates/configurators/addrepository/misc.hamlet
|
2016-12-27 20:36:05 +00:00
|
|
|
templates/configurators/addrepository/wormholepairing.hamlet
|
2016-05-24 05:00:06 +00:00
|
|
|
templates/configurators/rsync.net/add.hamlet
|
|
|
|
templates/configurators/rsync.net/encrypt.hamlet
|
|
|
|
templates/configurators/needgcrypt.hamlet
|
2016-12-24 21:08:03 +00:00
|
|
|
templates/configurators/needtor.hamlet
|
|
|
|
templates/configurators/needmagicwormhole.hamlet
|
2016-05-24 05:00:06 +00:00
|
|
|
templates/configurators/enabledirectory.hamlet
|
|
|
|
templates/configurators/fsck/status.hamlet
|
|
|
|
templates/configurators/fsck/form.hamlet
|
|
|
|
templates/configurators/fsck/preferencesform.hamlet
|
|
|
|
templates/configurators/fsck/formcontent.hamlet
|
|
|
|
templates/configurators/delete/finished.hamlet
|
|
|
|
templates/configurators/delete/start.hamlet
|
|
|
|
templates/configurators/delete/currentrepository.hamlet
|
|
|
|
templates/configurators/unused/form.hamlet
|
|
|
|
templates/configurators/adddrive.hamlet
|
|
|
|
templates/configurators/preferences.hamlet
|
|
|
|
templates/configurators/addia.hamlet
|
|
|
|
templates/configurators/enableaws.hamlet
|
|
|
|
templates/configurators/addrepository.hamlet
|
|
|
|
templates/actionbutton.hamlet
|
|
|
|
templates/repolist.hamlet
|
|
|
|
templates/controlmenu.hamlet
|
|
|
|
templates/notifications/longpolling.julius
|
2021-02-01 16:00:56 +00:00
|
|
|
Utility/libkqueue.h
|
2011-06-30 18:55:03 +00:00
|
|
|
|
2012-06-26 13:15:47 +00:00
|
|
|
Flag Assistant
|
2022-08-29 19:21:00 +00:00
|
|
|
Description: Enable git-annex assistant, webapp, and watch command
|
|
|
|
Default: True
|
2012-07-26 01:26:13 +00:00
|
|
|
|
2012-09-07 23:44:20 +00:00
|
|
|
Flag Pairing
|
|
|
|
Description: Enable pairing
|
2012-09-07 18:54:00 +00:00
|
|
|
|
2013-02-27 05:41:01 +00:00
|
|
|
Flag Production
|
2013-02-27 06:30:26 +00:00
|
|
|
Description: Enable production build (slower build; faster binary)
|
|
|
|
|
2023-09-26 17:46:44 +00:00
|
|
|
Flag ParallelBuild
|
|
|
|
Description: Enable production build (slower build; faster binary)
|
|
|
|
Default: False
|
2023-11-29 20:05:03 +00:00
|
|
|
Manual: True
|
2023-09-26 17:46:44 +00:00
|
|
|
|
2014-12-18 18:22:43 +00:00
|
|
|
Flag TorrentParser
|
|
|
|
Description: Use haskell torrent library to parse torrent files
|
|
|
|
|
2016-02-03 20:29:34 +00:00
|
|
|
Flag MagicMime
|
|
|
|
Description: Use libmagic to determine file MIME types
|
|
|
|
|
2023-09-21 16:43:42 +00:00
|
|
|
Flag Crypton
|
|
|
|
Description: Use the crypton library rather than the no longer maintained cryptonite
|
|
|
|
|
2024-07-07 16:08:10 +00:00
|
|
|
Flag Servant
|
2024-07-23 12:53:56 +00:00
|
|
|
Description: Use the servant library, enabling using annex+http urls and git-annex p2phttp
|
2024-07-07 16:08:10 +00:00
|
|
|
|
2016-01-12 17:01:44 +00:00
|
|
|
Flag Benchmark
|
|
|
|
Description: Enable benchmarking
|
2020-10-02 17:57:10 +00:00
|
|
|
Default: True
|
2016-01-12 17:01:44 +00:00
|
|
|
|
2018-11-19 19:00:24 +00:00
|
|
|
Flag DebugLocks
|
|
|
|
Description: Debug location of MVar/STM deadlocks
|
|
|
|
Default: False
|
|
|
|
|
2016-02-05 22:00:20 +00:00
|
|
|
Flag Dbus
|
|
|
|
Description: Enable dbus support
|
|
|
|
|
2016-05-24 05:00:06 +00:00
|
|
|
source-repository head
|
|
|
|
type: git
|
|
|
|
location: git://git-annex.branchable.com/
|
|
|
|
|
2017-12-31 20:08:31 +00:00
|
|
|
custom-setup
|
2023-08-01 19:47:05 +00:00
|
|
|
Setup-Depends:
|
|
|
|
base (>= 4.11.1.0 && < 5.0),
|
|
|
|
split,
|
|
|
|
filepath,
|
|
|
|
exceptions,
|
|
|
|
bytestring,
|
2020-11-10 15:15:14 +00:00
|
|
|
filepath-bytestring (>= 1.4.2.1.4),
|
2020-06-03 20:03:08 +00:00
|
|
|
process (>= 1.6.3),
|
2021-04-05 17:40:31 +00:00
|
|
|
time (>= 1.5.0),
|
2022-07-12 18:53:32 +00:00
|
|
|
directory (>= 1.2.7.0),
|
2023-08-01 19:47:05 +00:00
|
|
|
async,
|
2023-08-02 13:29:23 +00:00
|
|
|
utf8-string,
|
2023-08-01 19:47:05 +00:00
|
|
|
Cabal (< 4.0)
|
2017-12-31 20:08:31 +00:00
|
|
|
|
2011-06-30 18:55:03 +00:00
|
|
|
Executable git-annex
|
|
|
|
Main-Is: git-annex.hs
|
2015-05-10 21:03:20 +00:00
|
|
|
Build-Depends:
|
2019-07-05 19:09:37 +00:00
|
|
|
base (>= 4.11.1.0 && < 5.0),
|
2018-07-01 17:07:24 +00:00
|
|
|
network-uri (>= 2.6),
|
2023-06-21 16:51:45 +00:00
|
|
|
optparse-applicative (>= 0.14.2),
|
2019-10-10 19:46:12 +00:00
|
|
|
containers (>= 0.5.8),
|
2015-05-10 21:03:20 +00:00
|
|
|
exceptions (>= 0.6),
|
|
|
|
stm (>= 2.3),
|
|
|
|
mtl (>= 2),
|
2016-07-27 11:38:11 +00:00
|
|
|
uuid (>= 1.2.6),
|
2020-06-03 20:03:08 +00:00
|
|
|
process (>= 1.6.3),
|
2016-09-05 23:42:41 +00:00
|
|
|
data-default,
|
|
|
|
case-insensitive,
|
|
|
|
random,
|
|
|
|
dlist,
|
2023-08-01 19:17:43 +00:00
|
|
|
unix-compat (>= 0.5 && < 0.8),
|
2016-09-05 23:42:41 +00:00
|
|
|
SafeSemaphore,
|
|
|
|
async,
|
2022-07-12 18:53:32 +00:00
|
|
|
directory (>= 1.2.7.0),
|
2018-10-13 05:36:06 +00:00
|
|
|
disk-free-space,
|
2016-09-05 23:42:41 +00:00
|
|
|
filepath,
|
2020-01-05 00:18:40 +00:00
|
|
|
filepath-bytestring (>= 1.4.2.1.1),
|
2016-09-05 23:42:41 +00:00
|
|
|
IfElse,
|
2021-04-01 16:19:47 +00:00
|
|
|
monad-logger (>= 0.3.10),
|
2016-11-17 21:19:04 +00:00
|
|
|
free,
|
2016-09-05 23:42:41 +00:00
|
|
|
utf8-string,
|
|
|
|
bytestring,
|
|
|
|
text,
|
|
|
|
sandi,
|
|
|
|
monad-control,
|
|
|
|
transformers,
|
2019-07-05 19:09:37 +00:00
|
|
|
bloomfilter (>= 2.0.0),
|
2016-09-05 23:42:41 +00:00
|
|
|
edit-distance,
|
|
|
|
resourcet,
|
2020-06-22 14:55:37 +00:00
|
|
|
http-client (>= 0.5.3),
|
2018-06-16 18:18:29 +00:00
|
|
|
http-client-tls,
|
2017-03-10 19:57:41 +00:00
|
|
|
http-types (>= 0.7),
|
2019-07-05 19:09:37 +00:00
|
|
|
http-conduit (>= 2.3.0),
|
2022-03-22 15:50:06 +00:00
|
|
|
http-client-restricted (>= 0.0.2),
|
2018-04-06 19:58:16 +00:00
|
|
|
conduit,
|
2019-07-05 19:09:37 +00:00
|
|
|
time (>= 1.5.0),
|
2016-09-05 23:42:41 +00:00
|
|
|
old-locale,
|
2019-07-05 19:09:37 +00:00
|
|
|
persistent-sqlite (>= 2.8.1),
|
|
|
|
persistent (>= 2.8.1),
|
2016-09-05 23:42:41 +00:00
|
|
|
persistent-template,
|
2019-09-26 16:24:03 +00:00
|
|
|
unliftio-core,
|
2018-10-30 17:47:38 +00:00
|
|
|
microlens,
|
2016-01-26 12:14:57 +00:00
|
|
|
aeson,
|
2018-02-19 19:28:38 +00:00
|
|
|
vector,
|
2017-11-28 16:50:30 +00:00
|
|
|
tagsoup,
|
2016-07-26 18:53:00 +00:00
|
|
|
unordered-containers,
|
2019-07-05 19:09:37 +00:00
|
|
|
feed (>= 1.0.0),
|
2016-11-21 21:27:38 +00:00
|
|
|
regex-tdfa,
|
2016-11-22 18:18:34 +00:00
|
|
|
socks,
|
2016-12-08 20:31:08 +00:00
|
|
|
byteable,
|
2016-12-09 18:52:38 +00:00
|
|
|
stm-chans,
|
2017-02-20 16:21:35 +00:00
|
|
|
securemem,
|
2017-02-25 00:56:26 +00:00
|
|
|
crypto-api,
|
2017-05-16 03:32:17 +00:00
|
|
|
memory,
|
2019-06-25 17:10:06 +00:00
|
|
|
deepseq,
|
2017-12-20 16:25:03 +00:00
|
|
|
split,
|
2021-03-24 15:54:16 +00:00
|
|
|
attoparsec (>= 0.13.2.2),
|
2019-07-05 19:09:37 +00:00
|
|
|
concurrent-output (>= 1.10),
|
2024-02-27 17:11:59 +00:00
|
|
|
unbounded-delays,
|
2019-07-05 19:09:37 +00:00
|
|
|
QuickCheck (>= 2.10.0),
|
2022-03-22 14:59:22 +00:00
|
|
|
tasty (>= 1.2),
|
2017-12-20 16:25:03 +00:00
|
|
|
tasty-hunit,
|
|
|
|
tasty-quickcheck,
|
2020-09-08 16:42:59 +00:00
|
|
|
tasty-rerun,
|
2022-03-16 16:37:09 +00:00
|
|
|
ansi-terminal >= 0.9,
|
2020-09-08 16:42:59 +00:00
|
|
|
aws (>= 0.20),
|
2022-03-22 15:52:24 +00:00
|
|
|
DAV (>= 1.0),
|
|
|
|
network (>= 3.0.0.0),
|
2022-12-26 16:42:45 +00:00
|
|
|
network-bsd,
|
2024-07-03 20:59:22 +00:00
|
|
|
git-lfs (>= 1.2.0),
|
|
|
|
clock (>= 0.2.0.0)
|
2015-06-06 16:09:45 +00:00
|
|
|
CC-Options: -Wall
|
2023-09-26 17:34:28 +00:00
|
|
|
GHC-Options: -Wall -fno-warn-tabs -Wincomplete-uni-patterns
|
2020-10-19 15:14:01 +00:00
|
|
|
Default-Language: Haskell2010
|
2022-02-25 17:16:36 +00:00
|
|
|
Default-Extensions: LambdaCase
|
2020-05-04 19:49:14 +00:00
|
|
|
Other-Extensions: TemplateHaskell
|
2013-07-25 17:57:53 +00:00
|
|
|
-- Some things don't work with the non-threaded RTS.
|
|
|
|
GHC-Options: -threaded
|
2013-02-27 05:41:01 +00:00
|
|
|
|
2016-01-26 12:14:57 +00:00
|
|
|
-- Fully optimize for production.
|
|
|
|
if flag(Production)
|
2018-03-04 23:48:07 +00:00
|
|
|
-- Lower memory systems can run out of memory with -O2, so
|
|
|
|
-- optimise slightly less.
|
|
|
|
if arch(arm)
|
2018-10-30 04:49:59 +00:00
|
|
|
GHC-Options: -O2 -optlo-O2
|
2018-03-04 23:48:07 +00:00
|
|
|
else
|
|
|
|
GHC-Options: -O2
|
2021-05-05 05:30:30 +00:00
|
|
|
else
|
|
|
|
GHC-Options: -O0
|
2016-01-26 12:14:57 +00:00
|
|
|
|
2023-09-26 17:46:44 +00:00
|
|
|
if flag(ParallelBuild)
|
|
|
|
GHC-Options: -j
|
|
|
|
|
2023-03-14 02:39:16 +00:00
|
|
|
-- Avoid linking with unused dynamic libraries.
|
2022-05-31 17:03:39 +00:00
|
|
|
if os(linux) || os(freebsd)
|
2015-07-07 17:19:13 +00:00
|
|
|
GHC-Options: -optl-Wl,--as-needed
|
|
|
|
|
2023-09-21 16:43:42 +00:00
|
|
|
if flag(Crypton)
|
|
|
|
Build-Depends: crypton
|
|
|
|
CPP-Options: -DWITH_CRYPTON
|
|
|
|
else
|
|
|
|
Build-Depends: cryptonite (>= 0.23)
|
|
|
|
|
2024-07-07 16:08:10 +00:00
|
|
|
if flag(Servant)
|
|
|
|
Build-Depends:
|
2024-07-07 18:48:20 +00:00
|
|
|
servant,
|
2024-07-07 16:08:10 +00:00
|
|
|
servant-server,
|
2024-07-23 12:53:56 +00:00
|
|
|
servant-client,
|
2024-07-23 18:58:49 +00:00
|
|
|
servant-client-core,
|
2024-07-23 12:53:56 +00:00
|
|
|
warp (>= 3.2.8),
|
2024-07-29 23:10:00 +00:00
|
|
|
warp-tls (>= 3.2.2),
|
2024-07-29 23:13:31 +00:00
|
|
|
stm (>= 2.5.1)
|
2024-07-07 16:08:10 +00:00
|
|
|
CPP-Options: -DWITH_SERVANT
|
|
|
|
Other-Modules:
|
|
|
|
Command.P2PHttp
|
2024-07-07 16:59:12 +00:00
|
|
|
P2P.Http
|
2024-07-23 18:12:03 +00:00
|
|
|
P2P.Http.Server
|
2024-07-09 01:11:01 +00:00
|
|
|
P2P.Http.State
|
2024-07-07 16:08:10 +00:00
|
|
|
|
2013-12-10 05:18:04 +00:00
|
|
|
if (os(windows))
|
2017-11-13 16:36:07 +00:00
|
|
|
Build-Depends:
|
2023-08-02 16:48:12 +00:00
|
|
|
Win32 ((>= 2.6.1.0 && < 2.12.0.0) || >= 2.13.4.0),
|
2017-11-13 16:36:07 +00:00
|
|
|
setenv,
|
2019-08-07 21:42:16 +00:00
|
|
|
process (>= 1.6.2.0),
|
2019-08-08 15:58:38 +00:00
|
|
|
silently (>= 1.2.5.1)
|
2013-12-10 05:18:04 +00:00
|
|
|
else
|
2018-10-30 02:22:36 +00:00
|
|
|
Build-Depends: unix (>= 2.7.2)
|
2013-05-10 20:08:53 +00:00
|
|
|
|
2018-09-05 15:47:00 +00:00
|
|
|
if flag(Assistant) && ! os(solaris) && ! os(gnu)
|
2022-08-29 19:21:00 +00:00
|
|
|
CPP-Options: -DWITH_ASSISTANT -DWITH_WEBAPP
|
2023-02-23 14:35:19 +00:00
|
|
|
Build-Depends:
|
|
|
|
mountpoints,
|
|
|
|
yesod (>= 1.4.3),
|
|
|
|
yesod-static (>= 1.5.1),
|
|
|
|
yesod-form (>= 1.4.8),
|
|
|
|
yesod-core (>= 1.6.0),
|
|
|
|
path-pieces (>= 0.2.1),
|
|
|
|
warp (>= 3.2.8),
|
|
|
|
warp-tls (>= 3.2.2),
|
|
|
|
wai,
|
|
|
|
wai-extra,
|
|
|
|
blaze-builder,
|
|
|
|
clientsession,
|
|
|
|
template-haskell,
|
|
|
|
shakespeare (>= 2.0.11)
|
2018-09-04 14:41:45 +00:00
|
|
|
Other-Modules:
|
|
|
|
Assistant
|
|
|
|
Assistant.Alert
|
|
|
|
Assistant.Alert.Utility
|
|
|
|
Assistant.BranchChange
|
|
|
|
Assistant.Changes
|
|
|
|
Assistant.Commits
|
|
|
|
Assistant.Common
|
|
|
|
Assistant.CredPairCache
|
|
|
|
Assistant.DaemonStatus
|
|
|
|
Assistant.DeleteRemote
|
|
|
|
Assistant.Drop
|
|
|
|
Assistant.Fsck
|
|
|
|
Assistant.Gpg
|
|
|
|
Assistant.Install
|
|
|
|
Assistant.MakeRemote
|
2022-08-29 19:21:00 +00:00
|
|
|
Assistant.MakeRepo
|
2018-09-04 14:41:45 +00:00
|
|
|
Assistant.Monad
|
|
|
|
Assistant.NamedThread
|
|
|
|
Assistant.Pairing
|
|
|
|
Assistant.Pairing.MakeRemote
|
|
|
|
Assistant.Pairing.Network
|
|
|
|
Assistant.Pushes
|
|
|
|
Assistant.RemoteControl
|
|
|
|
Assistant.Repair
|
|
|
|
Assistant.RepoProblem
|
|
|
|
Assistant.Restart
|
|
|
|
Assistant.ScanRemotes
|
|
|
|
Assistant.Ssh
|
|
|
|
Assistant.Sync
|
|
|
|
Assistant.Threads.Committer
|
|
|
|
Assistant.Threads.ConfigMonitor
|
|
|
|
Assistant.Threads.Cronner
|
|
|
|
Assistant.Threads.DaemonStatus
|
|
|
|
Assistant.Threads.Exporter
|
|
|
|
Assistant.Threads.Glacier
|
|
|
|
Assistant.Threads.Merger
|
|
|
|
Assistant.Threads.MountWatcher
|
|
|
|
Assistant.Threads.NetWatcher
|
2022-08-29 19:21:00 +00:00
|
|
|
Assistant.Threads.PairListener
|
2018-09-04 14:41:45 +00:00
|
|
|
Assistant.Threads.ProblemFixer
|
|
|
|
Assistant.Threads.Pusher
|
|
|
|
Assistant.Threads.RemoteControl
|
|
|
|
Assistant.Threads.SanityChecker
|
|
|
|
Assistant.Threads.TransferPoller
|
|
|
|
Assistant.Threads.TransferScanner
|
|
|
|
Assistant.Threads.TransferWatcher
|
|
|
|
Assistant.Threads.Transferrer
|
|
|
|
Assistant.Threads.UpgradeWatcher
|
|
|
|
Assistant.Threads.Upgrader
|
|
|
|
Assistant.Threads.Watcher
|
2022-08-29 19:21:00 +00:00
|
|
|
Assistant.Threads.WebApp
|
2018-09-04 14:41:45 +00:00
|
|
|
Assistant.TransferQueue
|
|
|
|
Assistant.TransferSlots
|
|
|
|
Assistant.Types.Alert
|
|
|
|
Assistant.Types.BranchChange
|
|
|
|
Assistant.Types.Changes
|
|
|
|
Assistant.Types.Commits
|
|
|
|
Assistant.Types.CredPairCache
|
|
|
|
Assistant.Types.DaemonStatus
|
|
|
|
Assistant.Types.NamedThread
|
|
|
|
Assistant.Types.Pushes
|
|
|
|
Assistant.Types.RemoteControl
|
|
|
|
Assistant.Types.RepoProblem
|
|
|
|
Assistant.Types.ScanRemotes
|
|
|
|
Assistant.Types.ThreadName
|
|
|
|
Assistant.Types.ThreadedMonad
|
|
|
|
Assistant.Types.TransferQueue
|
|
|
|
Assistant.Types.TransferSlots
|
|
|
|
Assistant.Types.UrlRenderer
|
|
|
|
Assistant.Unused
|
|
|
|
Assistant.Upgrade
|
2022-08-29 19:21:00 +00:00
|
|
|
Assistant.WebApp
|
|
|
|
Assistant.WebApp.Common
|
|
|
|
Assistant.WebApp.Configurators
|
|
|
|
Assistant.WebApp.Configurators.AWS
|
|
|
|
Assistant.WebApp.Configurators.Delete
|
|
|
|
Assistant.WebApp.Configurators.Edit
|
|
|
|
Assistant.WebApp.Configurators.Fsck
|
|
|
|
Assistant.WebApp.Configurators.IA
|
|
|
|
Assistant.WebApp.Configurators.Local
|
|
|
|
Assistant.WebApp.Configurators.Pairing
|
|
|
|
Assistant.WebApp.Configurators.Preferences
|
|
|
|
Assistant.WebApp.Configurators.Ssh
|
|
|
|
Assistant.WebApp.Configurators.Unused
|
|
|
|
Assistant.WebApp.Configurators.Upgrade
|
|
|
|
Assistant.WebApp.Configurators.WebDAV
|
|
|
|
Assistant.WebApp.Control
|
|
|
|
Assistant.WebApp.DashBoard
|
|
|
|
Assistant.WebApp.Documentation
|
|
|
|
Assistant.WebApp.Form
|
|
|
|
Assistant.WebApp.Gpg
|
|
|
|
Assistant.WebApp.MakeRemote
|
|
|
|
Assistant.WebApp.Notifications
|
|
|
|
Assistant.WebApp.OtherRepos
|
|
|
|
Assistant.WebApp.Page
|
|
|
|
Assistant.WebApp.Pairing
|
|
|
|
Assistant.WebApp.Repair
|
|
|
|
Assistant.WebApp.RepoId
|
|
|
|
Assistant.WebApp.RepoList
|
|
|
|
Assistant.WebApp.SideBar
|
|
|
|
Assistant.WebApp.Types
|
2018-09-04 14:41:45 +00:00
|
|
|
Command.Assistant
|
|
|
|
Command.Watch
|
2022-08-29 19:21:00 +00:00
|
|
|
Command.WebApp
|
2018-09-04 14:41:45 +00:00
|
|
|
Utility.Mounts
|
2022-08-29 19:21:00 +00:00
|
|
|
Utility.Yesod
|
|
|
|
Utility.WebApp
|
|
|
|
|
2018-10-13 05:36:06 +00:00
|
|
|
if os(linux)
|
2019-07-05 19:09:37 +00:00
|
|
|
Build-Depends: hinotify (>= 0.3.10)
|
2013-07-16 15:29:43 +00:00
|
|
|
CPP-Options: -DWITH_INOTIFY
|
2017-08-18 14:53:31 +00:00
|
|
|
Other-Modules: Utility.DirWatcher.INotify
|
2012-12-27 19:19:12 +00:00
|
|
|
else
|
2013-07-12 19:36:59 +00:00
|
|
|
if os(darwin)
|
|
|
|
Build-Depends: hfsevents
|
|
|
|
CPP-Options: -DWITH_FSEVENTS
|
2018-09-04 14:41:45 +00:00
|
|
|
Other-Modules:
|
|
|
|
Utility.DirWatcher.FSEvents
|
2013-07-12 19:36:59 +00:00
|
|
|
else
|
2013-11-12 18:54:02 +00:00
|
|
|
if os(windows)
|
|
|
|
Build-Depends: Win32-notify
|
|
|
|
CPP-Options: -DWITH_WIN32NOTIFY
|
2017-08-18 14:53:31 +00:00
|
|
|
Other-Modules: Utility.DirWatcher.Win32Notify
|
2013-11-12 18:54:02 +00:00
|
|
|
else
|
2018-02-18 15:09:16 +00:00
|
|
|
if (! os(solaris) && ! os(gnu) && ! os(linux))
|
2017-08-18 14:53:31 +00:00
|
|
|
CPP-Options: -DWITH_KQUEUE
|
|
|
|
C-Sources: Utility/libkqueue.c
|
2017-10-24 16:54:33 +00:00
|
|
|
Includes: Utility/libkqueue.h
|
2017-08-18 14:53:31 +00:00
|
|
|
Other-Modules: Utility.DirWatcher.Kqueue
|
2022-06-29 18:11:20 +00:00
|
|
|
|
2016-02-05 22:00:20 +00:00
|
|
|
if flag(Dbus)
|
|
|
|
if (os(linux))
|
|
|
|
Build-Depends: dbus (>= 0.10.7), fdo-notify (>= 0.3)
|
|
|
|
CPP-Options: -DWITH_DBUS -DWITH_DESKTOP_NOTIFY -DWITH_DBUS_NOTIFICATIONS
|
2017-08-18 14:53:31 +00:00
|
|
|
Other-Modules: Utility.DBus
|
2014-03-22 14:42:38 +00:00
|
|
|
|
2013-07-16 15:29:43 +00:00
|
|
|
if flag(Pairing)
|
2012-09-07 23:44:20 +00:00
|
|
|
Build-Depends: network-multicast, network-info
|
|
|
|
CPP-Options: -DWITH_PAIRING
|
2012-09-07 18:54:00 +00:00
|
|
|
|
2014-12-18 18:22:43 +00:00
|
|
|
if flag(TorrentParser)
|
|
|
|
Build-Depends: torrent (>= 10000.0.0)
|
|
|
|
CPP-Options: -DWITH_TORRENTPARSER
|
|
|
|
|
2016-02-03 20:29:34 +00:00
|
|
|
if flag(MagicMime)
|
2020-10-26 17:34:27 +00:00
|
|
|
Build-Depends: magic
|
|
|
|
CPP-Options: -DWITH_MAGICMIME
|
2016-02-03 20:29:34 +00:00
|
|
|
|
2016-01-12 17:01:44 +00:00
|
|
|
if flag(Benchmark)
|
2019-06-25 17:10:06 +00:00
|
|
|
Build-Depends: criterion
|
2016-01-12 17:01:44 +00:00
|
|
|
CPP-Options: -DWITH_BENCHMARK
|
2018-11-19 19:00:24 +00:00
|
|
|
|
|
|
|
if flag(DebugLocks)
|
|
|
|
CPP-Options: -DDEBUGLOCKS
|
2013-07-28 19:27:36 +00:00
|
|
|
|
2016-05-24 05:00:06 +00:00
|
|
|
Other-Modules:
|
|
|
|
Annex
|
|
|
|
Annex.Action
|
|
|
|
Annex.AdjustedBranch
|
2020-11-16 18:09:55 +00:00
|
|
|
Annex.AdjustedBranch.Merge
|
2018-10-19 19:17:48 +00:00
|
|
|
Annex.AdjustedBranch.Name
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.AutoMerge
|
2024-08-10 20:32:54 +00:00
|
|
|
Annex.Balanced
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.BloomFilter
|
|
|
|
Annex.Branch
|
|
|
|
Annex.Branch.Transitions
|
|
|
|
Annex.BranchState
|
|
|
|
Annex.CatFile
|
2016-12-09 18:52:38 +00:00
|
|
|
Annex.ChangedRefs
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.CheckAttr
|
|
|
|
Annex.CheckIgnore
|
2024-06-18 14:36:04 +00:00
|
|
|
Annex.Cluster
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Common
|
|
|
|
Annex.Concurrent
|
2020-04-21 15:20:10 +00:00
|
|
|
Annex.Concurrent.Utility
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Content
|
2020-11-16 15:21:33 +00:00
|
|
|
Annex.Content.Presence
|
2021-07-27 18:21:09 +00:00
|
|
|
Annex.Content.Presence.LowLevel
|
2018-08-22 18:41:09 +00:00
|
|
|
Annex.Content.LowLevel
|
|
|
|
Annex.Content.PointerFile
|
2021-04-14 18:06:43 +00:00
|
|
|
Annex.CopyFile
|
2018-10-19 19:17:48 +00:00
|
|
|
Annex.CurrentBranch
|
2021-04-06 19:14:00 +00:00
|
|
|
Annex.Debug
|
|
|
|
Annex.Debug.Utility
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Difference
|
|
|
|
Annex.DirHashes
|
|
|
|
Annex.Drop
|
|
|
|
Annex.Environment
|
2017-09-18 17:57:25 +00:00
|
|
|
Annex.Export
|
2020-07-29 16:00:27 +00:00
|
|
|
Annex.ExternalAddonProcess
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.FileMatcher
|
|
|
|
Annex.Fixup
|
|
|
|
Annex.GitOverlay
|
|
|
|
Annex.HashObject
|
|
|
|
Annex.Hook
|
2019-02-21 21:32:59 +00:00
|
|
|
Annex.Import
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Ingest
|
|
|
|
Annex.Init
|
|
|
|
Annex.InodeSentinal
|
|
|
|
Annex.Journal
|
|
|
|
Annex.Link
|
|
|
|
Annex.Locations
|
|
|
|
Annex.LockFile
|
|
|
|
Annex.LockPool
|
2019-01-23 16:39:02 +00:00
|
|
|
Annex.Magic
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.MetaData
|
|
|
|
Annex.MetaData.StandardFields
|
2017-03-30 23:32:58 +00:00
|
|
|
Annex.Multicast
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Notification
|
|
|
|
Annex.NumCopies
|
|
|
|
Annex.Path
|
|
|
|
Annex.Perms
|
2020-08-26 16:20:56 +00:00
|
|
|
Annex.PidLock
|
2024-06-18 14:51:37 +00:00
|
|
|
Annex.Proxy
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Queue
|
|
|
|
Annex.ReplaceFile
|
2019-03-01 18:44:22 +00:00
|
|
|
Annex.RemoteTrackingBranch
|
toward SafeDropProof expiry checking
Added Maybe POSIXTime to SafeDropProof, which gets set when the proof is
based on a LockedCopy. If there are several LockedCopies, it uses the
closest expiry time. That is not optimal, it may be that the proof
expires based on one LockedCopy but another one has not expired. But
that seems unlikely to really happen, and anyway the user can just
re-run a drop if it fails due to expiry.
Pass the SafeDropProof to removeKey, which is responsible for checking
it for expiry in situations where that could be a problem. Which really
only means in Remote.Git.
Made Remote.Git check expiry when dropping from a local remote.
Checking expiry when dropping from a P2P remote is not yet implemented.
P2P.Protocol.remove has SafeDropProof plumbed through to it for that
purpose.
Fixing the remaining 2 build warnings should complete this work.
Note that the use of a POSIXTime here means that if the clock gets set
forward while git-annex is in the middle of a drop, it may say that
dropping took too long. That seems ok. Less ok is that if the clock gets
turned back a sufficient amount (eg 5 minutes), proof expiry won't be
noticed. It might be better to use the Monotonic clock, but that doesn't
advance when a laptop is suspended, and while there is the linux
Boottime clock, that is not available on other systems. Perhaps a
combination of POSIXTime and the Monotonic clock could detect laptop
suspension and also detect clock being turned back?
There is a potential future flag day where
p2pDefaultLockContentRetentionDuration is not assumed, but is probed
using the P2P protocol, and peers that don't support it can no longer
produce a LockedCopy. Until that happens, when git-annex is
communicating with older peers there is a risk of data loss when
a ssh connection closes during LOCKCONTENT.
2024-07-04 16:23:46 +00:00
|
|
|
Annex.SafeDropProof
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.SpecialRemote
|
2019-10-10 16:48:26 +00:00
|
|
|
Annex.SpecialRemote.Config
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Ssh
|
2021-02-03 17:19:47 +00:00
|
|
|
Annex.StallDetection
|
remove dead nodes when loading the cluster log
This is to avoid inserting a cluster uuid into the location log when
only dead nodes in the cluster contain the content of a key.
One reason why this is necessary is Remote.keyLocations, which excludes
dead repositories from the list. But there are probably many more.
Implementing this was challenging, because Logs.Location importing
Logs.Cluster which imports Logs.Trust which imports Remote.List resulted
in an import cycle through several other modules.
Resorted to making Logs.Location not import Logs.Cluster, and instead
it assumes that Annex.clusters gets populated when necessary before it's
called.
That's done in Annex.Startup, which is run by the git-annex command
(but not other commands) at early startup in initialized repos. Or,
is run after initialization.
Note that is Remote.Git, it is unable to import Annex.Startup, because
Remote.Git importing Logs.Cluster leads the the same import cycle.
So ensureInitialized is not passed annexStartup in there.
Other commands, like git-annex-shell currently don't run annexStartup
either.
So there are cases where Logs.Location will not see clusters. So it won't add
any cluster UUIDs when loading the log. That's ok, the only reason to do
that is to make display of where objects are located include clusters,
and to make commands like git-annex get --from treat keys as being located
in a cluster. git-annex-shell certainly does not do anything like that,
and I'm pretty sure Remote.Git (and callers to Remote.Git.onLocalRepo)
don't either.
2024-06-16 18:35:07 +00:00
|
|
|
Annex.Startup
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.TaggedPush
|
2019-01-17 19:40:44 +00:00
|
|
|
Annex.Tmp
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Transfer
|
2020-12-07 16:50:48 +00:00
|
|
|
Annex.TransferrerPool
|
addurl --preserve-filename and a few related changes
* addurl --preserve-filename: New option, uses server-provided filename
without any sanitization, but with some security checking.
Not yet implemented for remotes other than the web.
* addurl, importfeed: Avoid adding filenames with leading '.', instead
it will be replaced with '_'.
This might be considered a security fix, but a CVE seems unwattanted.
It was possible for addurl to create a dotfile, which could change
behavior of some program. It was also possible for a web server to say
the file name was ".git" or "foo/.git". That would not overrwrite the
.git directory, but would cause addurl to fail; of course git won't
add "foo/.git".
sanitizeFilePath is too opinionated to remain in Utility, so moved it.
The changes to mkSafeFilePath are because it used sanitizeFilePath.
In particular:
isDrive will never succeed, because "c:" gets munged to "c_"
".." gets sanitized now
".git" gets sanitized now
It will never be null, because sanitizeFilePath keeps the length
the same, and splitDirectories never returns a null path.
Also, on the off chance a web server suggests a filename of "",
ignore that, rather than trying to save to such a filename, which would
fail in some way.
2020-05-08 20:09:29 +00:00
|
|
|
Annex.UntrustedFilePath
|
2017-02-17 19:21:39 +00:00
|
|
|
Annex.UpdateInstead
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.UUID
|
|
|
|
Annex.Url
|
2021-02-09 21:03:27 +00:00
|
|
|
Annex.VariantFile
|
2017-08-14 17:55:38 +00:00
|
|
|
Annex.VectorClock
|
2020-12-23 19:21:33 +00:00
|
|
|
Annex.VectorClock.Utility
|
2021-02-09 21:03:27 +00:00
|
|
|
Annex.Verify
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.Version
|
|
|
|
Annex.View
|
|
|
|
Annex.View.ViewedFile
|
|
|
|
Annex.Wanted
|
2020-04-17 18:36:45 +00:00
|
|
|
Annex.WorkerPool
|
2016-05-24 05:00:06 +00:00
|
|
|
Annex.WorkTree
|
2017-11-29 19:49:05 +00:00
|
|
|
Annex.YoutubeDl
|
2023-02-23 14:35:19 +00:00
|
|
|
Assistant.Install.AutoStart
|
|
|
|
Assistant.Install.Menu
|
make my authorship explicit in the code
This is intended to guard against LLM code theft, which is the current
bubble technology de jour.
Note that authorJoeyHess' with a year older than the year I began
developing git-annex will behave badly, by intention. Eg, it will spin
and eventually crash.
This is not the first anti-LLM protection in git-annex. For example see
9562da790fece82d6dfa756b571c67d0fdf57468. That method, while much harder
for an adversary to detect and remove, also complicates code somewhat
significantly, and needs extensions to be enabled. There are also
probably significantly fewer ways to implement that method in Haskell.
This new approach, by contrast, will be easy to add throughout the code
base, with very little effort, and without complicating reading or
maintaining it any more than noticing that yes, I am the author of this
code.
An adversary could of course remove all calls to these functions
before feeding code into their LLM-based laundry facility. I think this
would need to be done manually, or with the help of some fairly advanced
Haskell parsing though. In some cases, authorJoeyHess needs to be
removed, while in other places it needs to be replaced with a value.
Also a monadic use of authorJoeyHess' may involve other added monadic
machinery which would need to be eliminated to keep the code compiling.
Alternatively, an adversary could replace my name with something
innocuous. This would be clear intent to remove author attribution
from my code, even more than running it through an LLM laundry is.
If you work for a large company that is laundering my code through an
LLM, please do us a favor and use your immense privilege to quit and go
do something socially beneficial. I will not explain further
developments of this code in such detail, and you have better things to
do than playing cat and mouse with me as I explore directions such as
extending this approach to the type level.
Sponsored-by: k0ld on Patreon
2023-11-20 16:07:07 +00:00
|
|
|
Author
|
2016-05-24 05:00:06 +00:00
|
|
|
Backend
|
2020-07-29 19:23:18 +00:00
|
|
|
Backend.External
|
2024-05-07 17:42:12 +00:00
|
|
|
Backend.GitRemoteAnnex
|
2016-05-24 05:00:06 +00:00
|
|
|
Backend.Hash
|
|
|
|
Backend.URL
|
|
|
|
Backend.Utilities
|
2024-02-29 21:21:29 +00:00
|
|
|
Backend.Variety
|
|
|
|
Backend.VURL
|
2024-03-01 20:42:02 +00:00
|
|
|
Backend.VURL.Utilities
|
2016-05-24 05:00:06 +00:00
|
|
|
Backend.WORM
|
2019-01-04 17:43:53 +00:00
|
|
|
Benchmark
|
2016-05-24 05:00:06 +00:00
|
|
|
Build.BundledPrograms
|
|
|
|
Build.Configure
|
2018-09-05 15:47:00 +00:00
|
|
|
Build.DesktopFile
|
2016-05-31 17:58:13 +00:00
|
|
|
Build.Mans
|
2016-05-24 05:00:06 +00:00
|
|
|
Build.TestConfig
|
|
|
|
Build.Version
|
2017-04-07 22:03:09 +00:00
|
|
|
BuildInfo
|
2018-01-02 17:47:51 +00:00
|
|
|
BuildFlags
|
2016-05-24 05:00:06 +00:00
|
|
|
CmdLine
|
|
|
|
CmdLine.Action
|
|
|
|
CmdLine.Batch
|
|
|
|
CmdLine.GitAnnex
|
|
|
|
CmdLine.GitAnnex.Options
|
|
|
|
CmdLine.GitAnnexShell
|
|
|
|
CmdLine.GitAnnexShell.Checks
|
|
|
|
CmdLine.GitAnnexShell.Fields
|
2022-06-29 17:28:08 +00:00
|
|
|
CmdLine.AnnexSetter
|
2016-05-24 05:00:06 +00:00
|
|
|
CmdLine.Option
|
2024-05-06 16:58:38 +00:00
|
|
|
CmdLine.GitRemoteAnnex
|
2016-11-21 21:27:38 +00:00
|
|
|
CmdLine.GitRemoteTorAnnex
|
2016-05-24 05:00:06 +00:00
|
|
|
CmdLine.Seek
|
|
|
|
CmdLine.Usage
|
|
|
|
Command
|
|
|
|
Command.Add
|
|
|
|
Command.AddUnused
|
|
|
|
Command.AddUrl
|
|
|
|
Command.Adjust
|
git-annex assist
assist: New command, which is the same as git-annex sync but with
new files added and content transferred by default.
(Also this fixes another reversion in git-annex sync,
--commit --no-commit, and --message were not enabled, oops.)
See added comment for why git-annex assist does commit staged
changes elsewhere in the work tree, but only adds files under
the cwd.
Note that it does not support --no-commit, --no-push, --no-pull
like sync does. My thinking is, why should it? If you want that
level of control, use git commit, git annex push, git annex pull.
Sync only got those options because pull and push were not split
out.
Sponsored-by: k0ld on Patreon
2023-05-18 18:37:29 +00:00
|
|
|
Command.Assist
|
2019-01-05 12:09:28 +00:00
|
|
|
Command.Benchmark
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.CalcKey
|
|
|
|
Command.CheckPresentKey
|
2017-01-31 21:27:44 +00:00
|
|
|
Command.Config
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.ConfigList
|
2023-04-18 19:30:49 +00:00
|
|
|
Command.ConfigRemote
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.ContentLocation
|
|
|
|
Command.Copy
|
|
|
|
Command.Dead
|
|
|
|
Command.Describe
|
|
|
|
Command.DiffDriver
|
|
|
|
Command.Direct
|
|
|
|
Command.Drop
|
|
|
|
Command.DropKey
|
|
|
|
Command.DropUnused
|
|
|
|
Command.EnableRemote
|
2016-11-30 18:35:24 +00:00
|
|
|
Command.EnableTor
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.ExamineKey
|
2024-06-26 14:26:54 +00:00
|
|
|
Command.ExtendCluster
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Expire
|
2017-09-13 18:21:08 +00:00
|
|
|
Command.Export
|
2021-05-14 14:59:48 +00:00
|
|
|
Command.FilterBranch
|
2021-11-04 19:02:36 +00:00
|
|
|
Command.FilterProcess
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Find
|
2023-01-17 18:42:29 +00:00
|
|
|
Command.FindKeys
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.FindRef
|
|
|
|
Command.Fix
|
|
|
|
Command.Forget
|
|
|
|
Command.FromKey
|
|
|
|
Command.Fsck
|
|
|
|
Command.FuzzTest
|
|
|
|
Command.GCryptSetup
|
|
|
|
Command.Get
|
|
|
|
Command.Group
|
|
|
|
Command.GroupWanted
|
|
|
|
Command.Help
|
|
|
|
Command.Import
|
|
|
|
Command.ImportFeed
|
|
|
|
Command.InAnnex
|
|
|
|
Command.Indirect
|
|
|
|
Command.Info
|
|
|
|
Command.Init
|
2024-06-14 21:13:23 +00:00
|
|
|
Command.InitCluster
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.InitRemote
|
2017-12-28 15:46:39 +00:00
|
|
|
Command.Inprogress
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.List
|
|
|
|
Command.Lock
|
|
|
|
Command.Log
|
|
|
|
Command.LookupKey
|
|
|
|
Command.Map
|
|
|
|
Command.MatchExpression
|
|
|
|
Command.Merge
|
|
|
|
Command.MetaData
|
|
|
|
Command.Migrate
|
|
|
|
Command.Mirror
|
|
|
|
Command.Move
|
2017-03-30 23:32:58 +00:00
|
|
|
Command.Multicast
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.NotifyChanges
|
|
|
|
Command.NumCopies
|
2021-01-06 18:11:08 +00:00
|
|
|
Command.MinCopies
|
2023-08-22 18:51:06 +00:00
|
|
|
Command.OldKeys
|
2016-11-30 18:35:24 +00:00
|
|
|
Command.P2P
|
2018-03-07 19:15:23 +00:00
|
|
|
Command.P2PStdIO
|
2017-02-17 18:04:43 +00:00
|
|
|
Command.PostReceive
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.PreCommit
|
|
|
|
Command.Proxy
|
git-annex pull and push
Split out two new commands, git-annex pull and git-annex push. Those plus a
git commit are equivilant to git-annex sync.
In a sense, git-annex sync conflates 3 things, and it would have been
better to have push and pull from the beginning and not sync. Although
note that git-annex sync --content is faster than a pull followed by a
push, because it only has to walk the tree once, look at preferred
content once, etc. So there is some value in git-annex sync in speed, as
well as user convenience.
And it would be hard to split out pull and push from sync, as far as the
implementaton goes. The implementation inside sync was easy, just adjust
SyncOptions so it does the right thing.
Note that the new commands default to syncing content, unless
annex.synccontent is explicitly set to false. I'd like sync to also do
that, but that's a hard transition to make. As a start to that
transition, I added a note to git-annex-sync.mdwn that it may start to
do so in a future version of git-annex. But a real transition would
necessarily involve displaying warnings when sync is used without
--content, and time.
Sponsored-by: Kevin Mueller on Patreon
2023-05-16 20:37:30 +00:00
|
|
|
Command.Pull
|
|
|
|
Command.Push
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.ReKey
|
|
|
|
Command.ReadPresentKey
|
|
|
|
Command.RecvKey
|
|
|
|
Command.RegisterUrl
|
2024-03-05 19:04:35 +00:00
|
|
|
Command.ReregisterUrl
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Reinit
|
|
|
|
Command.Reinject
|
|
|
|
Command.RemoteDaemon
|
2019-04-15 17:05:44 +00:00
|
|
|
Command.RenameRemote
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Repair
|
|
|
|
Command.Required
|
|
|
|
Command.ResolveMerge
|
2022-09-23 20:29:28 +00:00
|
|
|
Command.Restage
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.RmUrl
|
added git-annex satisfy
This ended up having an interface like sync, rather than like get/copy/drop.
That let it be implemented in terms of sync, which took a lot less code.
Also, it lets it handle many of the edge cases that sync does, such as
getting files that are not visible in a --hide-missing branch, and sending
files to exporttree remotes.
As well as being easier to implement, `git-annex satisfy myremote` makes
sense as it satisfies the preferred content settings of the remote.
`git-annex satisfy somefile` does not form a sentence that makes sense. So
while -C can be a little bit annoying, it still makes sense to have this
syntax.
Note that, while I initially thought this would also satisfy numcopies, it
does not. Arguably it ought to. But, sync does not send files in order to
satisfy numcopies, it only sends files to satisfy preferred content. And
it's important that this transfer the same files as sync does, because
it will probably be used in a workflow where the user sometimes syncs and
sometimes satisfies, and does not expect satisfy to do things that sync
would not do.
(Also opened a new bug that also affects sync et all, not only this command.)
Sponsored-by: Nicholas Golder-Manning on Patreon
2023-06-29 19:34:53 +00:00
|
|
|
Command.Satisfy
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Schedule
|
|
|
|
Command.Semitrust
|
|
|
|
Command.SendKey
|
|
|
|
Command.SetKey
|
|
|
|
Command.SetPresentKey
|
|
|
|
Command.Smudge
|
|
|
|
Command.Status
|
|
|
|
Command.Sync
|
|
|
|
Command.Test
|
|
|
|
Command.TestRemote
|
2020-12-09 17:21:20 +00:00
|
|
|
Command.Transferrer
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.TransferKey
|
|
|
|
Command.TransferKeys
|
|
|
|
Command.Trust
|
|
|
|
Command.Unannex
|
|
|
|
Command.Undo
|
|
|
|
Command.Ungroup
|
|
|
|
Command.Uninit
|
|
|
|
Command.Unlock
|
2021-03-01 18:28:24 +00:00
|
|
|
Command.UnregisterUrl
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Untrust
|
|
|
|
Command.Unused
|
2024-06-14 18:21:50 +00:00
|
|
|
Command.UpdateCluster
|
2024-06-04 18:50:38 +00:00
|
|
|
Command.UpdateProxy
|
2016-05-24 05:00:06 +00:00
|
|
|
Command.Upgrade
|
|
|
|
Command.VAdd
|
|
|
|
Command.VCycle
|
|
|
|
Command.VFilter
|
|
|
|
Command.VPop
|
|
|
|
Command.Version
|
|
|
|
Command.Vicfg
|
|
|
|
Command.View
|
|
|
|
Command.Wanted
|
|
|
|
Command.Whereis
|
2021-07-14 18:25:52 +00:00
|
|
|
Command.WhereUsed
|
2016-05-24 05:00:06 +00:00
|
|
|
Common
|
|
|
|
Config
|
|
|
|
Config.Cost
|
|
|
|
Config.Files
|
2020-10-28 18:53:25 +00:00
|
|
|
Config.Files.AutoStart
|
2017-08-17 16:26:14 +00:00
|
|
|
Config.DynamicConfig
|
2017-02-03 17:40:14 +00:00
|
|
|
Config.GitConfig
|
2018-08-28 14:26:51 +00:00
|
|
|
Config.Smudge
|
2016-05-24 05:00:06 +00:00
|
|
|
Creds
|
|
|
|
Crypto
|
2019-10-29 19:16:15 +00:00
|
|
|
Database.Benchmark
|
2019-02-20 20:59:10 +00:00
|
|
|
Database.ContentIdentifier
|
2017-09-04 17:52:22 +00:00
|
|
|
Database.Export
|
2016-05-24 05:00:06 +00:00
|
|
|
Database.Fsck
|
|
|
|
Database.Handle
|
sqlite datbase for importfeed
importfeed: Use caching database to avoid needing to list urls on every
run, and avoid using too much memory.
Benchmarking in my podcasts repo, importfeed got 1.42 seconds faster,
and memory use dropped from 203000k to 59408k.
Database.ImportFeed is Database.ContentIdentifier with the serial number
filed off. There is a bit of code duplication I would like to avoid,
particularly recordAnnexBranchTree, and getAnnexBranchTree. But these use
the persistent sqlite tables, so despite the code being the same, they
cannot be factored out.
Since this database includes the contentidentifier metadata, it will be
slightly redundant if a sqlite database is ever added for metadata. I
did consider making such a generic database and using it for this. But,
that would then need importfeed to update both the url database and the
metadata database, which is twice as much work diffing the git-annex
branch trees. Or would entagle updating two databases in a complex way.
So instead it seems better to optimise the database that
importfeed needs, and if the metadata database is used by another command,
use a little more disk space and do a little bit of redundant work to
update it.
Sponsored-by: unqueued on Patreon
2023-10-23 20:12:26 +00:00
|
|
|
Database.ImportFeed
|
2017-02-13 21:30:28 +00:00
|
|
|
Database.Init
|
2016-05-24 05:00:06 +00:00
|
|
|
Database.Keys
|
|
|
|
Database.Keys.Handle
|
2022-10-12 19:21:19 +00:00
|
|
|
Database.Keys.Tables
|
2016-05-24 05:00:06 +00:00
|
|
|
Database.Keys.SQL
|
|
|
|
Database.Queue
|
2023-12-26 22:31:52 +00:00
|
|
|
Database.RawFilePath
|
2016-05-24 05:00:06 +00:00
|
|
|
Database.Types
|
2023-03-31 18:34:18 +00:00
|
|
|
Database.Utility
|
2016-05-24 05:00:06 +00:00
|
|
|
Git
|
|
|
|
Git.AutoCorrect
|
|
|
|
Git.Branch
|
|
|
|
Git.BuildVersion
|
2024-05-07 18:22:41 +00:00
|
|
|
Git.Bundle
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.CatFile
|
|
|
|
Git.CheckAttr
|
|
|
|
Git.CheckIgnore
|
|
|
|
Git.Command
|
|
|
|
Git.Command.Batch
|
|
|
|
Git.Config
|
2017-02-17 18:04:43 +00:00
|
|
|
Git.ConfigTypes
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Construct
|
2019-09-24 16:32:54 +00:00
|
|
|
Git.Credential
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.CurrentRepo
|
|
|
|
Git.DiffTree
|
|
|
|
Git.DiffTreeItem
|
|
|
|
Git.Env
|
|
|
|
Git.FileMode
|
|
|
|
Git.FilePath
|
2021-11-04 19:02:36 +00:00
|
|
|
Git.FilterProcess
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Fsck
|
|
|
|
Git.GCrypt
|
|
|
|
Git.HashObject
|
2019-04-24 18:55:49 +00:00
|
|
|
Git.History
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Hook
|
|
|
|
Git.Index
|
|
|
|
Git.LockFile
|
2023-11-10 16:37:01 +00:00
|
|
|
Git.Log
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.LsFiles
|
|
|
|
Git.LsTree
|
|
|
|
Git.Merge
|
|
|
|
Git.Objects
|
2021-11-04 19:02:36 +00:00
|
|
|
Git.PktLine
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Queue
|
2023-04-12 21:18:29 +00:00
|
|
|
Git.Quote
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Ref
|
|
|
|
Git.RefLog
|
|
|
|
Git.Remote
|
|
|
|
Git.Remote.Remove
|
|
|
|
Git.Repair
|
|
|
|
Git.Sha
|
2017-03-17 20:02:47 +00:00
|
|
|
Git.Ssh
|
2016-05-24 05:00:06 +00:00
|
|
|
Git.Status
|
|
|
|
Git.Tree
|
|
|
|
Git.Types
|
|
|
|
Git.UnionMerge
|
|
|
|
Git.UpdateIndex
|
|
|
|
Git.Url
|
|
|
|
Git.Version
|
2017-02-24 17:42:30 +00:00
|
|
|
Key
|
2016-05-24 05:00:06 +00:00
|
|
|
Limit
|
|
|
|
Limit.Wanted
|
|
|
|
Logs
|
|
|
|
Logs.Activity
|
sync: use log to track adjusted branch needs updating
Speeds up sync in an adjusted branch by avoiding re-adjusting the branch
unncessarily, particularly when it is adjusted with --hide-missing or
--unlock-present.
When there are a lot of files, that was the majority of the time of a
--no-content sync.
Uses a log file, which is updated when content presence changes. This
adds a little bit of overhead to every file get/drop when on such an
adjusted branch. The overhead is minimal for get of any size of file,
but might be noticable for drop in some cases. It seems like a reasonable
trade-off. It would be possible to update the log file only at the end, but
then it would not happen if the command is interrupted.
When not in an adjusted branch, there should be no additional overhead.
(getCurrentBranch is an MVar read, and it avoids the MVar read of
getGitConfig.)
Note that this does not deal with situations such as:
git checkout master, git-annex get, git checkout adjusted branch,
git-annex sync. The sync won't know that the adjusted branch needs to be
updated. Dealing with that would add overhead to operation in non-adjusted
branches, which I don't like. Also, there are other situations like having
two adjusted branches that both need to be updated like this, and switching
between them and sync not updating.
This does mean a behavior change to sync, since it did previously deal
with those situations. But, the documentation did not say that it did.
The man pages only talk about sync updating the adjusted branch after
it transfers content.
I did consider making sync keep track of content it transferred (and
dropped) and only update the adjusted branch then, not to catch up to other
changes made previously. That would perform better. But it seemed rather
hard to implement, and also it would have problems with races with a
concurrent get/drop, which this implementation avoids.
And it seemed pretty likely someone had gotten used to get/drop followed by
sync updating the branch. It seems much less likely someone is switching
branches, doing get/drop, and then switching back and expecting sync to update
the branch.
Re-running git-annex adjust still does a full re-adjusting of the branch,
for anyone who needs that.
Sponsored-by: Leon Schuermann on Patreon
2023-06-08 18:35:26 +00:00
|
|
|
Logs.AdjustedBranchUpdate
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Chunk
|
|
|
|
Logs.Chunk.Pure
|
2024-06-13 20:00:58 +00:00
|
|
|
Logs.Cluster
|
2024-06-25 14:06:28 +00:00
|
|
|
Logs.Cluster.Basic
|
2017-01-31 21:27:44 +00:00
|
|
|
Logs.Config
|
2019-02-20 21:22:56 +00:00
|
|
|
Logs.ContentIdentifier
|
2019-02-20 19:36:09 +00:00
|
|
|
Logs.ContentIdentifier.Pure
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Difference
|
|
|
|
Logs.Difference.Pure
|
add equivilant key log for VURL keys
When downloading a VURL from the web, make sure that the equivilant key
log is populated.
Unfortunately, this does not hash the content while it's being
downloaded from the web. There is not an interface in Backend currently
for incrementally hash generation, only for incremental verification of an
existing hash. So this might add a noticiable delay, and it has to show
a "(checksum...") message. This could stand to be improved.
But, that separate hashing step only has to happen on the first download
of new content from the web. Once the hash is known, the VURL key can have
its hash verified incrementally while downloading except when the
content in the web has changed. (Doesn't happen yet because
verifyKeyContentIncrementally is not implemented yet for VURL keys.)
Note that the equivilant key log file is formatted as a presence log.
This adds a tiny bit of overhead (eg "1 ") per line over just listing the
urls. The reason I chose to use that format is it seems possible that
there will need to be a way to remove an equivilant key at some point in
the future. I don't know why that would be necessary, but it seemed wise
to allow for the possibility.
Downloads of VURL keys from other special remotes that claim urls,
like bittorrent for example, does not popilate the equivilant key log.
So for now, no checksum verification will be done for those.
Sponsored-by: Nicholas Golder-Manning on Patreon
2024-02-29 19:41:57 +00:00
|
|
|
Logs.EquivilantKeys
|
2017-08-31 19:41:48 +00:00
|
|
|
Logs.Export
|
2021-04-13 18:06:40 +00:00
|
|
|
Logs.Export.Pure
|
2018-01-02 21:17:10 +00:00
|
|
|
Logs.File
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.FsckResults
|
|
|
|
Logs.Group
|
2023-05-31 19:45:23 +00:00
|
|
|
Logs.Import
|
2016-05-27 16:15:01 +00:00
|
|
|
Logs.Line
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Location
|
|
|
|
Logs.MapLog
|
|
|
|
Logs.MetaData
|
2018-09-05 17:20:10 +00:00
|
|
|
Logs.MetaData.Pure
|
2023-12-06 19:38:01 +00:00
|
|
|
Logs.Migrate
|
2017-03-30 23:32:58 +00:00
|
|
|
Logs.Multicast
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.NumCopies
|
|
|
|
Logs.PreferredContent
|
|
|
|
Logs.PreferredContent.Raw
|
|
|
|
Logs.Presence
|
|
|
|
Logs.Presence.Pure
|
2024-06-04 18:50:38 +00:00
|
|
|
Logs.Proxy
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Remote
|
2019-10-14 19:38:07 +00:00
|
|
|
Logs.Remote.Pure
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.RemoteState
|
add restage log
When pointer files need to be restaged, they're first written to the
log, and then when the restage operation runs, it reads the log. This
way, if the git-annex process is interrupted before it can do the
restaging, a later git-annex process can do it.
Currently, this lets a git-annex get/drop command be interrupted and
then re-ran, and as long as it gets/drops additional files, it will
clean up after the interrupted command. But more changes are
needed to make it easier to restage after an interrupted process.
Kept using the git queue to run the restage action, even though the
list of files that it builds up for that action is not actually used by
the action. This could perhaps be simplified to make restaging a cleanup
action that gets registered, rather than using the git queue for it. But
I wasn't sure if that would cause visible behavior changes, when eg
dropping a large number of files, currently the git queue flushes
periodically, and so it restages incrementally, rather than all at the
end.
In restagePointerFiles, it reads the restage log twice, once to get
the number of files and size, and a second time to process it.
This seemed better than reading the whole file into memory, since
potentially a huge number of files could be in there. Probably the OS
will cache the file in memory and there will not be much performance
impact. It might be better to keep running tallies in another file
though. But updating that atomically with the log seems hard.
Also note that it's possible for calcRestageLog to see a different file
than streamRestageLog does. More files may be added to the log in
between. That is ok, it will only cause the filterprocessfaster heuristic to
operate with slightly out of date information, so it may make the wrong
choice for the files that got added and be a little slower than ideal.
Sponsored-by: Dartmouth College's DANDI project
2022-09-23 18:38:59 +00:00
|
|
|
Logs.Restage
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Schedule
|
|
|
|
Logs.SingleValue
|
2018-09-05 17:20:10 +00:00
|
|
|
Logs.SingleValue.Pure
|
2018-10-25 18:43:13 +00:00
|
|
|
Logs.Smudge
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.Transfer
|
|
|
|
Logs.Transitions
|
|
|
|
Logs.Trust
|
|
|
|
Logs.Trust.Basic
|
|
|
|
Logs.Trust.Pure
|
|
|
|
Logs.UUID
|
|
|
|
Logs.UUIDBased
|
|
|
|
Logs.Unused
|
2022-01-19 19:51:04 +00:00
|
|
|
Logs.Upgrade
|
2016-05-24 05:00:06 +00:00
|
|
|
Logs.View
|
|
|
|
Logs.Web
|
|
|
|
Messages
|
|
|
|
Messages.Concurrent
|
|
|
|
Messages.Internal
|
|
|
|
Messages.JSON
|
|
|
|
Messages.Progress
|
2020-12-04 17:50:03 +00:00
|
|
|
Messages.Serialized
|
2016-11-29 21:30:27 +00:00
|
|
|
P2P.Address
|
2016-12-02 17:50:56 +00:00
|
|
|
P2P.Annex
|
2016-11-22 18:37:19 +00:00
|
|
|
P2P.Auth
|
2024-07-24 19:12:16 +00:00
|
|
|
P2P.Http.Types
|
2024-07-23 17:53:10 +00:00
|
|
|
P2P.Http.Client
|
2024-07-23 13:12:21 +00:00
|
|
|
P2P.Http.Url
|
2016-11-22 18:34:49 +00:00
|
|
|
P2P.IO
|
|
|
|
P2P.Protocol
|
2024-06-10 22:01:36 +00:00
|
|
|
P2P.Proxy
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote
|
2018-03-27 16:41:57 +00:00
|
|
|
Remote.Adb
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.BitTorrent
|
2020-12-18 20:03:51 +00:00
|
|
|
Remote.Borg
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Bup
|
|
|
|
Remote.Ddar
|
|
|
|
Remote.Directory
|
|
|
|
Remote.Directory.LegacyChunked
|
|
|
|
Remote.External
|
2020-08-12 19:17:53 +00:00
|
|
|
Remote.External.AsyncExtension
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.External.Types
|
|
|
|
Remote.GCrypt
|
|
|
|
Remote.Git
|
2019-08-01 19:11:45 +00:00
|
|
|
Remote.GitLFS
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Glacier
|
|
|
|
Remote.Helper.AWS
|
|
|
|
Remote.Helper.Chunked
|
|
|
|
Remote.Helper.Chunked.Legacy
|
|
|
|
Remote.Helper.Encryptable
|
2019-02-20 19:55:01 +00:00
|
|
|
Remote.Helper.ExportImport
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Helper.Git
|
|
|
|
Remote.Helper.Hooks
|
2020-09-08 16:42:59 +00:00
|
|
|
Remote.Helper.Http
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Helper.Messages
|
2018-03-08 20:11:00 +00:00
|
|
|
Remote.Helper.P2P
|
2023-08-16 19:48:09 +00:00
|
|
|
Remote.Helper.Path
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Helper.ReadOnly
|
2020-12-21 20:20:58 +00:00
|
|
|
Remote.Helper.ThirdPartyPopulated
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Helper.Special
|
|
|
|
Remote.Helper.Ssh
|
2020-09-02 14:41:27 +00:00
|
|
|
Remote.HttpAlso
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Hook
|
|
|
|
Remote.List
|
2020-05-27 15:54:39 +00:00
|
|
|
Remote.List.Util
|
2016-12-06 16:19:47 +00:00
|
|
|
Remote.P2P
|
2024-04-17 19:19:42 +00:00
|
|
|
Remote.Rclone
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Rsync
|
|
|
|
Remote.Rsync.RsyncUrl
|
2020-09-08 16:42:59 +00:00
|
|
|
Remote.S3
|
2016-05-24 05:00:06 +00:00
|
|
|
Remote.Tahoe
|
|
|
|
Remote.Web
|
2020-09-08 16:42:59 +00:00
|
|
|
Remote.WebDAV
|
|
|
|
Remote.WebDAV.DavLocation
|
2016-05-24 05:00:06 +00:00
|
|
|
RemoteDaemon.Common
|
|
|
|
RemoteDaemon.Core
|
|
|
|
RemoteDaemon.Transport
|
|
|
|
RemoteDaemon.Transport.GCrypt
|
2016-11-20 19:45:01 +00:00
|
|
|
RemoteDaemon.Transport.Tor
|
2016-05-24 05:00:06 +00:00
|
|
|
RemoteDaemon.Transport.Ssh
|
|
|
|
RemoteDaemon.Transport.Ssh.Types
|
|
|
|
RemoteDaemon.Types
|
|
|
|
Test
|
2018-02-18 15:48:48 +00:00
|
|
|
Test.Framework
|
2016-05-24 05:00:06 +00:00
|
|
|
Types
|
2016-08-08 14:41:54 +00:00
|
|
|
Types.ActionItem
|
2018-10-19 19:17:48 +00:00
|
|
|
Types.AdjustedBranch
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Availability
|
|
|
|
Types.Backend
|
2019-01-04 17:43:53 +00:00
|
|
|
Types.Benchmark
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.BranchState
|
2020-04-20 17:53:27 +00:00
|
|
|
Types.CatFileHandles
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.CleanupActions
|
2024-06-13 20:00:58 +00:00
|
|
|
Types.Cluster
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Command
|
2016-09-09 16:57:42 +00:00
|
|
|
Types.Concurrency
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Creds
|
|
|
|
Types.Crypto
|
|
|
|
Types.DeferredParse
|
|
|
|
Types.DesktopNotify
|
|
|
|
Types.Difference
|
2023-01-24 17:45:01 +00:00
|
|
|
Types.Direction
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Distribution
|
2017-09-15 20:34:45 +00:00
|
|
|
Types.Export
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.FileMatcher
|
|
|
|
Types.GitConfig
|
2024-05-13 13:33:15 +00:00
|
|
|
Types.GitRemoteAnnex
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Group
|
2019-02-21 17:38:27 +00:00
|
|
|
Types.Import
|
2020-04-10 17:37:04 +00:00
|
|
|
Types.IndexFiles
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.Key
|
|
|
|
Types.KeySource
|
2021-03-02 16:47:23 +00:00
|
|
|
Types.Link
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.LockCache
|
|
|
|
Types.Messages
|
|
|
|
Types.MetaData
|
2019-04-30 15:58:06 +00:00
|
|
|
Types.Mime
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.NumCopies
|
2020-01-10 18:10:20 +00:00
|
|
|
Types.ProposedAccepted
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.RefSpec
|
|
|
|
Types.Remote
|
2020-01-13 16:35:39 +00:00
|
|
|
Types.RemoteConfig
|
add RemoteStateHandle
This solves the problem of sameas remotes trampling over per-remote
state. Used for:
* per-remote state, of course
* per-remote metadata, also of course
* per-remote content identifiers, because two remote implementations
could in theory generate the same content identifier for two different
peices of content
While chunk logs are per-remote data, they don't use this, because the
number and size of chunks stored is a common property across sameas
remotes.
External special remote had a complication, where it was theoretically
possible for a remote to send SETSTATE or GETSTATE during INITREMOTE or
EXPORTSUPPORTED. Since the uuid of the remote is typically generate in
Remote.setup, it would only be possible to pass a Maybe
RemoteStateHandle into it, and it would otherwise have to construct its
own. Rather than go that route, I decided to send an ERROR in this case.
It seems unlikely that any existing external special remote will be
affected. They would have to make up a git-annex key, and set state for
some reason during INITREMOTE. I can imagine such a hack, but it doesn't
seem worth complicating the code in such an ugly way to support it.
Unfortunately, both TestRemote and Annex.Import needed the Remote
to have a new field added that holds its RemoteStateHandle.
2019-10-14 16:33:27 +00:00
|
|
|
Types.RemoteState
|
2018-10-25 21:23:53 +00:00
|
|
|
Types.RepoVersion
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.ScheduledActivity
|
|
|
|
Types.StandardGroups
|
2020-12-08 19:22:18 +00:00
|
|
|
Types.StallDetection
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.StoreRetrieve
|
|
|
|
Types.Test
|
2016-08-08 14:41:54 +00:00
|
|
|
Types.Transfer
|
2020-12-09 17:28:16 +00:00
|
|
|
Types.Transferrer
|
2020-12-07 16:50:48 +00:00
|
|
|
Types.TransferrerPool
|
2021-12-28 17:23:32 +00:00
|
|
|
Types.Transitions
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.TrustLevel
|
|
|
|
Types.UUID
|
2022-01-19 17:06:31 +00:00
|
|
|
Types.Upgrade
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.UrlContents
|
2020-12-23 19:21:33 +00:00
|
|
|
Types.VectorClock
|
2016-05-24 05:00:06 +00:00
|
|
|
Types.View
|
2019-06-05 17:03:05 +00:00
|
|
|
Types.WorkerPool
|
2016-05-24 05:00:06 +00:00
|
|
|
Upgrade
|
|
|
|
Upgrade.V0
|
|
|
|
Upgrade.V1
|
|
|
|
Upgrade.V2
|
|
|
|
Upgrade.V3
|
|
|
|
Upgrade.V4
|
|
|
|
Upgrade.V5
|
2019-08-27 18:01:28 +00:00
|
|
|
Upgrade.V5.Direct
|
2018-10-25 21:23:53 +00:00
|
|
|
Upgrade.V6
|
2019-11-06 19:37:18 +00:00
|
|
|
Upgrade.V7
|
2022-01-11 18:52:50 +00:00
|
|
|
Upgrade.V8
|
2022-01-19 17:06:31 +00:00
|
|
|
Upgrade.V9
|
Fix mangling of --json output of utf-8 characters when not running in a utf-8 locale
As long as all code imports Utility.Aeson rather than Data.Aeson,
and no Strings that may contain utf-8 characters are used for eg, object
keys via T.pack, this is guaranteed to fix the problem everywhere that
git-annex generates json.
It's kind of annoying to need to wrap ToJSON with a ToJSON', especially
since every data type that has a ToJSON instance has to be ported over.
However, that only took 50 lines of code, which is worth it to ensure full
coverage. I initially tried an alternative approach of a newtype FileEncoded,
which had to be used everywhere a String was fed into aeson, and chasing
down all the sites would have been far too hard. Did consider creating an
intentionally overlapping instance ToJSON String, and letting ghc fail
to build anything that passed in a String, but am not sure that wouldn't
pollute some library that git-annex depends on that happens to use ToJSON
String internally.
This commit was supported by the NSF-funded DataLad project.
2018-04-16 19:42:45 +00:00
|
|
|
Utility.Aeson
|
2018-09-05 15:47:00 +00:00
|
|
|
Utility.Android
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Applicative
|
2019-12-06 17:58:28 +00:00
|
|
|
Utility.Attoparsec
|
2016-11-22 18:18:34 +00:00
|
|
|
Utility.AuthToken
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Base64
|
|
|
|
Utility.Batch
|
|
|
|
Utility.Bloom
|
2024-07-03 21:54:01 +00:00
|
|
|
Utility.MonotonicClock
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.CoProcess
|
|
|
|
Utility.CopyFile
|
|
|
|
Utility.Daemon
|
|
|
|
Utility.Data
|
|
|
|
Utility.DataUnits
|
2021-04-05 17:40:31 +00:00
|
|
|
Utility.Debug
|
2018-11-19 19:00:24 +00:00
|
|
|
Utility.DebugLocks
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.DirWatcher
|
|
|
|
Utility.DirWatcher.Types
|
|
|
|
Utility.Directory
|
2020-10-28 18:53:25 +00:00
|
|
|
Utility.Directory.Create
|
2017-12-31 20:08:31 +00:00
|
|
|
Utility.Directory.Stream
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.DiskFree
|
|
|
|
Utility.Dot
|
|
|
|
Utility.DottedVersion
|
|
|
|
Utility.Env
|
2017-12-31 20:08:31 +00:00
|
|
|
Utility.Env.Basic
|
|
|
|
Utility.Env.Set
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Exception
|
|
|
|
Utility.FileMode
|
|
|
|
Utility.FileSize
|
|
|
|
Utility.FileSystemEncoding
|
|
|
|
Utility.Format
|
|
|
|
Utility.FreeDesktop
|
|
|
|
Utility.Glob
|
|
|
|
Utility.Gpg
|
|
|
|
Utility.Hash
|
2017-11-28 16:50:30 +00:00
|
|
|
Utility.HtmlDetect
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.HumanNumber
|
|
|
|
Utility.HumanTime
|
|
|
|
Utility.InodeCache
|
2018-06-16 22:44:27 +00:00
|
|
|
Utility.IPAddress
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.LockFile
|
|
|
|
Utility.LockPool
|
|
|
|
Utility.LockPool.LockHandle
|
2019-07-22 13:25:08 +00:00
|
|
|
Utility.LockPool.STM
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.LogFile
|
|
|
|
Utility.Lsof
|
2016-12-18 20:50:58 +00:00
|
|
|
Utility.MagicWormhole
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Matcher
|
2019-07-28 18:27:33 +00:00
|
|
|
Utility.MD5
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Metered
|
|
|
|
Utility.Misc
|
|
|
|
Utility.Monad
|
2020-11-05 22:45:37 +00:00
|
|
|
Utility.MoveFile
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Network
|
|
|
|
Utility.NotificationBroadcaster
|
2023-08-01 22:41:27 +00:00
|
|
|
Utility.OpenFd
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.OptParse
|
2023-02-23 14:35:19 +00:00
|
|
|
Utility.OSX
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.PID
|
|
|
|
Utility.PartialPrelude
|
|
|
|
Utility.Path
|
2020-10-28 18:53:25 +00:00
|
|
|
Utility.Path.AbsRel
|
2017-12-31 20:08:31 +00:00
|
|
|
Utility.Path.Max
|
2020-11-10 00:07:31 +00:00
|
|
|
Utility.Path.Tests
|
2023-03-01 17:14:55 +00:00
|
|
|
Utility.Path.Windows
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Percentage
|
|
|
|
Utility.Process
|
|
|
|
Utility.Process.Shim
|
2017-12-31 20:08:31 +00:00
|
|
|
Utility.Process.Transcript
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.QuickCheck
|
2019-01-14 19:19:20 +00:00
|
|
|
Utility.RawFilePath
|
2020-04-20 17:53:27 +00:00
|
|
|
Utility.ResourcePool
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Rsync
|
|
|
|
Utility.SafeCommand
|
2023-04-10 17:38:14 +00:00
|
|
|
Utility.SafeOutput
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Scheduled
|
|
|
|
Utility.Scheduled.QuickCheck
|
|
|
|
Utility.Shell
|
2020-11-10 00:07:31 +00:00
|
|
|
Utility.ShellEscape
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.SimpleProtocol
|
2017-05-16 03:32:17 +00:00
|
|
|
Utility.Split
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.SshConfig
|
2017-08-18 02:11:31 +00:00
|
|
|
Utility.SshHost
|
2024-01-10 19:59:35 +00:00
|
|
|
Utility.StatelessOpenPGP
|
2016-12-20 21:40:36 +00:00
|
|
|
Utility.Su
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.SystemDirectory
|
2023-04-12 17:48:21 +00:00
|
|
|
Utility.Terminal
|
2018-10-30 03:13:36 +00:00
|
|
|
Utility.TimeStamp
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.TList
|
|
|
|
Utility.Tense
|
|
|
|
Utility.ThreadLock
|
|
|
|
Utility.ThreadScheduler
|
|
|
|
Utility.Tmp
|
2017-12-31 20:08:31 +00:00
|
|
|
Utility.Tmp.Dir
|
2016-11-14 17:26:34 +00:00
|
|
|
Utility.Tor
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Touch
|
2017-05-16 03:32:17 +00:00
|
|
|
Utility.Tuple
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.Url
|
2023-08-14 16:28:10 +00:00
|
|
|
Utility.Url.Parse
|
2016-05-24 05:00:06 +00:00
|
|
|
Utility.UserInfo
|
|
|
|
Utility.Verifiable
|
2017-08-18 14:53:31 +00:00
|
|
|
|
|
|
|
if (os(windows))
|
|
|
|
Other-Modules:
|
|
|
|
Utility.LockFile.Windows
|
|
|
|
Utility.LockPool.Windows
|
|
|
|
else
|
|
|
|
Other-Modules:
|
|
|
|
Utility.LockFile.Posix
|
|
|
|
Utility.LockPool.Posix
|
2019-07-22 13:08:05 +00:00
|
|
|
Annex.LockPool.PosixOrPid
|
2019-07-22 13:21:41 +00:00
|
|
|
Utility.LockFile.LockStatus
|
|
|
|
Utility.LockFile.PidLock
|
|
|
|
Utility.LockPool.PidLock
|
|
|
|
Utility.LinuxMkLibs
|