summaryrefslogtreecommitdiff
path: root/Types/FileMatcher.hs
Commit message (Collapse)AuthorAge
* --explain for preferred/required content matchingJoey Hess2023-07-26
| | | | | | | | | | | | | | And annex.largefiles and annex.addunlocked. Also git-annex matchexpression --explain explains why its input expression matches or fails to match. When there is no limit, avoid explaining why the lack of limit matches. This is also done when no preferred content expression is set, although in a few cases it defaults to a non-empty matcher, which will be explained. Sponsored-by: Dartmouth College's DANDI project
* initial implementation of --explainJoey Hess2023-07-25
| | | | | | | | | | | | | | | | | | Currently it only displays explanations of options like --in and --copies. In the future, it should explain preferred content expression evaluation and other decisions. The explanations of a few things could be better. In particular, "standard" will just appear as-is (or as "!standard" if it doesn't match), rather than explaining why the standard preferred content expression for the group matches or not. Currently as implemented, it goes to stdout, and so commands like git-annex find that have custom output will not display --explain information. Perhaps that should change, dunno. Sponsored-by: Dartmouth College's DANDI project
* Apply codespell -w throughoutYaroslav Halchenko2023-03-17
|
* fromkey unlocked files supportJoey Hess2021-05-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fromkey: Create an unlocked file when used in an adjusted branch where the file should be unlocked, or when configured by annex.addunlocked. There is some overlap with code in Annex.Ingest, however it's not quite the same because ingesting has a temp file with the content, where here the content, if any, is in the annex object file. So it eg, makes sense for Annex.Ingest to copy the execute mode of the content file, but it does not make sense for fromkey to do that. Also changed in passing to stage the file in git directly, rather than using git add. One consequence of that is that if the file is gitignored, it will still get added, rather than the old behavior: The following paths are ignored by one of your .gitignore files: ignored hint: Use -f if you really want to add them. hint: Turn this message off by running hint: "git config advice.addIgnoredFile false" git-annex: user error (xargs ["-0","git","--git-dir=.git","--work-tree=.","--literal-pathspecs","add","--"] exited 123) That old behavior was a surprise to me, and so I consider it a bug, and doubt anyone would have relied on it. Note that, when on an --hide-missing branch, it is possible to fromkey a key that is not present (needs --force). The annex link or pointer file still gets written in this case. It doesn't seem to make any sense not to write it, because then fromkey would not do anything useful in this case, and this way the file can be committed and synced to master, and the branch re-adjusted to hide the new missing file. This commit was sponsored by Noam Kremen on Patreon.
* prep for fixing find --branch --unlockedJoey Hess2021-03-02
| | | | | | | | | | | | Added LinkType to ProvidedInfo, and unified MatchingKey with ProvidedInfo. They're both used in the same way, so there was no real reason to keep separate. Note that addLocked and addUnlocked still set matchNeedsFileName, because to handle MatchingFile, they do need it. However, they don't use it when MatchingInfo is provided. This should be ok, the --branch case will be able skip checking matchNeedsFileName, since it will provide a filename in any case.
* remove unused contentFile = NothingJoey Hess2021-03-01
|
* avoid using MatchingKey where MatchingFile can be used nowJoey Hess2020-12-14
| | | | | | This is actually matching worktree files, and now that a Key can be provided along with the file when doing that, using MatchingFile reflects that.
* add key to FileInfoJoey Hess2020-12-14
| | | | | | | | | MatchingKey is not the thing to use when matching on actual worktreee files. Fix reversion in 8.20201116 that made include= and exclude= in preferred/required content expressions match a path relative to the current directory, rather than the path from the top of the repository.
* clarify commentJoey Hess2020-12-14
|
* split ProvidedInfo and UserProvidedInfoJoey Hess2020-09-28
| | | | | | | | | | | | The latter is for git-annex matchexpression and matching against it can throw an exception. Splitting out the former reduces the potential for mistakes and avoids needing to worry about matching against that throwing an exception. This is more groundwork for matching largefiles while importing, without downloading content. This commit was sponsored by Graham Spencer on Patreon.
* allow matching on files whose content is not presentJoey Hess2020-09-28
| | | | | | | | | | | | | Anything that needs to examine the file content will fail to match, or fall back to other available information. But the intent is that the matcher be checked for matchNeedsFileContent and only be used if it does not, so the exact behavior doesn't much matter as it should never happen. The real point of this is to not need to provide a dummy content file when matching. This commit was sponsored by Martin D on Patreon.
* seek: defer matcher check until more info is knownJoey Hess2020-09-24
| | | | | | | | | | | | | | Sped up seeking for files to operate on, when using options like --copies or --in, by around 20%. Benchmark showed an increase for --copies from 155 seconds to 121 seconds, and --in remote will be similar to that. For --in here, the speedup was less, 5-10% or so. (both warm cache) This commit was sponsored by Jack Hill on Patreon.
* sync --all avoid unncessary first passJoey Hess2020-09-24
| | | | | | | | | | Sped up seeking to around twice as fast, by avoiding a pass over the worktree files when preferred content expressions of the local repo and remotes don't use include=/exclude=. Thanks to Lukey for identifying the optimisation. This commit was sponsored by Brock Spratlen on Patreon.
* make MatchFiles introspectableJoey Hess2020-09-24
| | | | | | | | | | | matchNeedsFileContent is not used yet, but shows how to add information about terminals. That one would be needed for https://git-annex.branchable.com/todo/sync_fast_import/ Note the tricky bit in Annex.FileMatcher.call where it folds over the included matcher to propagate the information. This commit was sponsored by Svenne Krap on Patreon.
* convert TopFilePath to use RawFilePathJoey Hess2019-12-09
| | | | | | | | | | | | | Adds a dependency on filepath-bytestring, an as yet unreleased fork of filepath that operates on RawFilePath. Git.Repo also changed to use RawFilePath for the path to the repo. This does eliminate some RawFilePath -> FilePath -> RawFilePath conversions. And filepath-bytestring's </> is probably faster. But I don't expect a major performance improvement from this. This is mostly groundwork for making Annex.Location use RawFilePath, which will allow for a conversion-free pipleline.
* honor preferred content when importingJoey Hess2019-05-21
| | | | | | | | | | | | | Importing from a special remote honors its preferred content too; unwanted files are not imported. But, some preferred content expressions can't be checked before files are imported, and trying to import with such an expression will fail. Tested this with scenarios including changing the preferred content expression and making sure merging the import didn't delete files that were no longer wanted. There was one minor inefficiency mentioned in the todo that I punted on.
* Added mimeencoding= term to annex.largefiles expressions.Joey Hess2019-04-30
| | | | | | | * Added mimeencoding= term to annex.largefiles expressions. This is probably mostly useful to match non-text files with eg "mimeencoding=binary" * git-annex matchexpression: Added --mimeencoding option.
* update licenses from GPL to AGPLJoey Hess2019-03-13
| | | | | | | | | | | | | | | | | | This does not change the overall license of the git-annex program, which was already AGPL due to a number of sources files being AGPL already. Legally speaking, I'm adding a new license under which these files are now available; I already released their current contents under the GPL license. Now they're dual licensed GPL and AGPL. However, I intend for all my future changes to these files to only be released under the AGPL license, and I won't be tracking the dual licensing status, so I'm simply changing the license statement to say it's AGPL. (In some cases, others wrote parts of the code of a file and released it under the GPL; but in all cases I have contributed a significant portion of the code in each file and it's that code that is getting the AGPL license; the GPL license of other contributors allows combining with AGPL code.)
* support findred and --branch with file matching optionsJoey Hess2018-12-09
| | | | | | | | | | | * findref: Support file matching options: --include, --exclude, --want-get, --want-drop, --largerthan, --smallerthan, --accessedwithin * Commands supporting --branch now apply file matching options --include, --exclude, --want-get, --want-drop to filenames from the branch. Previously, combining --branch with those would fail to match anything. * add, import, findref: Support --time-limit. This commit was sponsored by Jake Vosloo on Patreon.
* matchexpression: Added --largefiles option to parse an annex.largefiles ↵Joey Hess2016-02-03
| | | | expression.
* fix build on old ghcJoey Hess2016-01-26
|
* matchexpression: New plumbing command to check if a preferred content ↵Joey Hess2016-01-25
| | | | expression matches some data.
* relFile does not have to be relative; rename to currFileJoey Hess2015-02-06
|
* update my email address and homepage urlJoey Hess2015-01-21
|
* reorg matcher types; no non-type code changesJoey Hess2014-03-29
|
* improve matcher data type to allow matching Keys, instead of just files (no ↵Joey Hess2014-01-18
| | | | behavior changes)
* forgot to addJoey Hess2013-05-25