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 d7c93b8913 fully support core.symlinks=false in all relevant symlink handling code
Refactored annex link code into nice clean new library.

Audited and dealt with calls to createSymbolicLink.
Remaining calls are all safe, because:

Annex/Link.hs:  ( liftIO $ createSymbolicLink linktarget file
  only when core.symlinks=true
Assistant/WebApp/Configurators/Local.hs:                createSymbolicLink link link
  test if symlinks can be made
Command/Fix.hs: liftIO $ createSymbolicLink link file
  command only works in indirect mode
Command/FromKey.hs:     liftIO $ createSymbolicLink link file
  command only works in indirect mode
Command/Indirect.hs:                    liftIO $ createSymbolicLink l f
  refuses to run if core.symlinks=false
Init.hs:                createSymbolicLink f f2
  test if symlinks can be made
Remote/Directory.hs:    go [file] = catchBoolIO $ createSymbolicLink file f >> return True
  fast key linking; catches failure to make symlink and falls back to copy
Remote/Git.hs:          liftIO $ catchBoolIO $ createSymbolicLink loc file >> return True
  ditto
Upgrade/V1.hs:                          liftIO $ createSymbolicLink link f
  v1 repos could not be on a filesystem w/o symlinks

Audited and dealt with calls to readSymbolicLink.
Remaining calls are all safe, because:

Annex/Link.hs:		( liftIO $ catchMaybeIO $ readSymbolicLink file
  only when core.symlinks=true
Assistant/Threads/Watcher.hs:		ifM ((==) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file))
  code that fixes real symlinks when inotify sees them
  It's ok to not fix psdueo-symlinks.
Assistant/Threads/Watcher.hs:		mlink <- liftIO (catchMaybeIO $ readSymbolicLink file)
  ditto
Command/Fix.hs:	stopUnless ((/=) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file)) $ do
  command only works in indirect mode
Upgrade/V1.hs:	getsymlink = takeFileName <$> readSymbolicLink file
  v1 repos could not be on a filesystem w/o symlinks

Audited and dealt with calls to isSymbolicLink.
(Typically used with getSymbolicLinkStatus, but that is just used because
getFileStatus is not as robust; it also works on pseudolinks.)
Remaining calls are all safe, because:

Assistant/Threads/SanityChecker.hs:                             | isSymbolicLink s -> addsymlink file ms
  only handles staging of symlinks that were somehow not staged
  (might need to be updated to support pseudolinks, but this is
  only a belt-and-suspenders check anyway, and I've never seen the code run)
Command/Add.hs:         if isSymbolicLink s || not (isRegularFile s)
  avoids adding symlinks to the annex, so not relevant
Command/Indirect.hs:                            | isSymbolicLink s -> void $ flip whenAnnexed f $
  only allowed on systems that support symlinks
Command/Indirect.hs:            whenM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f) $ do
  ditto
Seek.hs:notSymlink f = liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f
  used to find unlocked files, only relevant in indirect mode
Utility/FSEvents.hs:                    | Files.isSymbolicLink s = runhook addSymlinkHook $ Just s
Utility/FSEvents.hs:                                            | Files.isSymbolicLink s ->
Utility/INotify.hs:                             | Files.isSymbolicLink s ->
Utility/INotify.hs:                     checkfiletype Files.isSymbolicLink addSymlinkHook f
Utility/Kqueue.hs:              | Files.isSymbolicLink s = callhook addSymlinkHook (Just s) change
  all above are lower-level, not relevant

Audited and dealt with calls to isSymLink.
Remaining calls are all safe, because:

Annex/Direct.hs:			| isSymLink (getmode item) =
  This is looking at git diff-tree objects, not files on disk
Command/Unused.hs:		| isSymLink (LsTree.mode l) = do
  This is looking at git ls-tree, not file on disk
Utility/FileMode.hs:isSymLink :: FileMode -> Bool
Utility/FileMode.hs:isSymLink = checkMode symbolicLinkMode
  low-level

Done!!
2013-02-17 16:43:14 -04:00
Annex fully support core.symlinks=false in all relevant symlink handling code 2013-02-17 16:43:14 -04:00
Assistant fully support core.symlinks=false in all relevant symlink handling code 2013-02-17 16:43:14 -04:00
Backend SHA*E backends: Exclude non-alphanumeric characters from extensions. 2012-12-20 17:16:55 -04:00
Build configure: hardcode some things that cannot be probed for when cross-compiling for Android 2013-02-11 16:56:30 -04:00
Command fully support core.symlinks=false in all relevant symlink handling code 2013-02-17 16:43:14 -04:00
Common lint 2011-11-11 01:52:58 -04:00
debian fully support core.symlinks=false in all relevant symlink handling code 2013-02-17 16:43:14 -04:00
doc add news item for git-annex 3.20130216 2013-02-16 11:37:37 -04:00
Git pre-commit: Update direct mode mappings. 2013-02-06 12:44:19 -04:00
Locations flip catchDefaultIO 2012-09-17 00:18:07 -04:00
Logs type based git config handling for remotes 2013-01-01 13:58:14 -04:00
Messages where indenting 2012-11-11 00:51:07 -04:00
Remote build fix 2013-02-15 13:48:25 -04:00
standalone build fixes 2013-02-16 13:10:47 -04:00
static webapp: Added help buttons and links next to fields that require explanations. 2012-12-02 22:33:30 -04:00
templates manual and source repository groups 2013-01-21 04:18:46 -04:00
Types start to support core.symlinks=false 2013-02-15 16:03:11 -04:00
Upgrade where indenting 2012-11-11 00:51:07 -04:00
Utility avoid warning 2013-02-15 13:05:39 -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 add ctags generation 2013-01-29 22:35:10 +11:00
Annex.hs remove unused item 2013-02-14 13:22:56 -04:00
Assistant.hs fix build with webapp disabled 2013-02-06 15:38:41 -04:00
Backend.hs fully support core.symlinks=false in all relevant symlink handling code 2013-02-17 16:43:14 -04:00
CHANGELOG symlinks 2010-10-27 15:14:59 -04:00
Checks.hs convert notBareRepo to a CommandCheck 2012-12-29 14:45:19 -04:00
CmdLine.hs where indenting 2012-11-11 00:51:07 -04:00
Command.hs convert notBareRepo to a CommandCheck 2012-12-29 14:45:19 -04:00
Common.hs deal with mtl/monads-tf conflict 2012-10-24 14:43:32 -04:00
Config.hs crippled filesystem support, probing and initial support 2013-02-14 14:15:26 -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 webapp: Defaults to sharing box.com account info with friends, allowing one-click enabling of the repository. 2012-11-28 13:31:49 -04:00
Crypto.hs whitespace fixes 2012-12-13 00:45:27 -04:00
Fields.hs safe recv-key in direct mode 2013-01-11 16:03:45 -04:00
ghci avoid -Wall, too noisy 2012-10-20 16:21:25 -04:00
git-annex.cabal prep release 2013-02-16 10:26:49 -04:00
git-annex.hs where indenting 2012-11-11 00:51:07 -04:00
git-union-merge.hs factor out nukeFile 2012-06-06 13:13:13 -04:00
Git.hs where indenting 2012-11-11 00:51:07 -04:00
GitAnnex.hs type based git config handling for remotes 2013-01-01 13:58:14 -04:00
GitAnnexShell.hs safe recv-key in direct mode 2013-01-11 16:03:45 -04:00
Init.hs switch to direct mode when auto-enabling 2013-02-15 18:16:50 -04:00
INSTALL symlinks 2010-10-27 15:14:59 -04:00
Limit.hs deal with Glob/filemanip conflict 2013-02-16 10:31:59 -04:00
Locations.hs split out Utility.InodeCache 2013-02-14 16:17:40 -04:00
Makefile prep release 2013-02-16 10:26:49 -04:00
Messages.hs log alerts in notice mode, which is enabled by default 2013-01-15 14:34:39 -04:00
Meters.hs S3: Added progress display for uploading and downloading. 2012-11-18 22:49:07 -04:00
NEWS update NEWS 2012-01-19 15:27:39 -04:00
Option.hs log alerts in notice mode, which is enabled by default 2013-01-15 14:34:39 -04:00
README add README 2011-05-13 19:20:54 -04:00
Remote.hs drop: Suggest using git annex move when numcopies prevents dropping a file. 2013-01-09 18:53:59 -04:00
Seek.hs pre-commit: Update direct mode mappings. 2013-02-06 12:44:19 -04:00
Setup.hs where indenting 2012-11-11 00:51:07 -04:00
test.hs fixed test suite build after recent changes broke it 2013-02-15 16:06:22 -04:00
Types.hs type based git config handling for remotes 2013-01-01 13:58:14 -04:00
Upgrade.hs where indenting 2012-11-11 00:51:07 -04:00
Usage.hs more indentation. must stop. 2012-10-28 22:09:09 -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 <http://git-annex.branchable.com/>