summaryrefslogtreecommitdiff
path: root/Annex
Commit message (Collapse)AuthorAge
* Support --metadata field<number, --metadata field>number etc to match ranges ↵Gravatar Joey Hess2016-02-27
| | | | | | | of numeric values. Similarly (well, for free), support preferred content expressions like metadata=field<number and metadata=field>number
* Include magic database in the linux and OSX standalone builds.Gravatar Joey Hess2016-02-26
|
* add catCommitGravatar Joey Hess2016-02-25
|
* refactorGravatar Joey Hess2016-02-25
|
* Avoid crashing when built with MagicMime support, but when the magic ↵Gravatar Joey Hess2016-02-23
| | | | database cannot be loaded.
* Fix memory leak in last release, which affected commands like git-annex ↵Gravatar Joey Hess2016-02-19
| | | | | | | status when a large non-annexed file is present in the work tree. The whole file was strictly read, and so buffered in memory, and remained buffered for some time when running git-annex status.
* fix windows buildGravatar Joey Hess2016-02-16
|
* fix numerous problem with test suite on crippled filesystems etcGravatar Joey Hess2016-02-16
|
* annex.addunlockedGravatar Joey Hess2016-02-16
| | | | | | | * add, addurl, import, importfeed: When in a v6 repository on a crippled filesystem, add files unlocked. * annex.addunlocked: New configuration setting, makes files always be added unlocked. (v6 only)
* escape slashes in annex pointer filesGravatar Joey Hess2016-02-16
| | | | | | | | | | | The problem with having the slashes unescaped is, it broke parsing, since the parser takes the filename to get the part containing the key. That particularly affected URL keys. This makes the format be the same as symlinks point to, which keeps things simple. Existing pointer files will continue to work ok.
* force strict file readGravatar Joey Hess2016-02-15
| | | | | | Avoid possibly having the file open still when it gets deleted. Needed on Windows, particularly.
* allow \r in pointer filesGravatar Joey Hess2016-02-15
| | | | | git-annex doesn't write \r, but it can be present due to line ending conversions or perhaps user edits.
* Windows: Fix v6 unlocked files to actually work.Gravatar Joey Hess2016-02-15
| | | | | Pointer files were not being treated as annex content, so "git annex get" didn't replace them with the object.
* When initializing a v6 repo on a crippled filesystem, don't force it into ↵Gravatar Joey Hess2016-02-15
| | | | direct mode.
* more windows build fixGravatar Joey Hess2016-02-15
|
* fix windows buildGravatar Joey Hess2016-02-15
|
* create directory for transfer lock file, and catch perm errorGravatar Joey Hess2016-02-12
| | | | | | | | | | | | | | | | | Before, the call to mkProgressUpdater created the directory as a side-effect, but since that ignored failure to create it, this led to a "does not exist" exception when the transfer lock file was created, rather than a permissions error. So, make sure the directory exists before trying to lock the file in it. When a PermissionDenied exception is caught, skip making the transfer lock. This lets downloads from readonly remotes happen. If an upload is being tried, and the lock file can't be written due to permissions, then probably the actual transfer will fail for the same reason, so I think it's ok that it continues w/o taking the lock in that case.
* init: Fix bugs in submodule .git symlink fixup, that occurred when ↵Gravatar Joey Hess2016-02-08
| | | | initializing in a subdirectory of a submodule and a submodule of a submodule.
* matchexpression: Added --largefiles option to parse an annex.largefiles ↵Gravatar Joey Hess2016-02-03
| | | | expression.
* annex.largefiles: Add support for mimetype=text/* etc, when git-annex is ↵Gravatar Joey Hess2016-02-03
| | | | linked with libmagic.
* Limit annex.largefiles parsing to the subset of preferred content ↵Gravatar Joey Hess2016-02-03
| | | | | | expressions that make sense in its context. So, not "standard" or "lackingcopies", etc.
* simplifyGravatar Joey Hess2016-02-03
|
* refactorGravatar Joey Hess2016-02-03
|
* avoid unnecessary building of a one-off MapGravatar Joey Hess2016-02-03
| | | | A case lookup should be more efficient.
* annex.largefiles can be configured in .gitattributes tooGravatar Joey Hess2016-02-02
| | | | | This is particulary useful for v6 repositories, since the .gitattributes configuration will apply in all clones of the repository.
* add "nothing" to preferred content DSLGravatar Joey Hess2016-02-02
| | | | | Same as "not anything"; will be particularly useful in annex.largefiles gitattributes.
* Unneded constraintGravatar Gabor Greif2016-01-28
|
* Another redundant constraintGravatar Gabor Greif2016-01-28
|
* add the known associated file to the list of othersGravatar Joey Hess2016-01-26
|
* Fix nasty reversion in the last release that broke sync --content's handling ↵Gravatar Joey Hess2016-01-26
| | | | | | | | | | | | | | of many preferred content expressions. The type checker should have noticed this, but the changes to mapM that make it accept any Traversable hid the fact that it was not being passed a list at all. Thus, what should have returned an empty list most of the time instead returned [""] which was treated as the name of the associated file, with disasterout consequences. When I have time, I should add a test case checking what sync --content drops. I should also consider replacing mapM with one re-specialized to lists.
* optimise getUUIDGravatar Joey Hess2016-01-20
| | | | | This avoids a Map lookup each time it's called, instead the GitConfig field lazily looks it up once and then caches.
* remove 163 lines of code without changing anything except importsGravatar Joey Hess2016-01-20
|
* immediate queue flushing when annex.queuesize=1Gravatar Joey Hess2016-01-13
| | | | | | | | | Previously, it only flushed when the queue got larger than 1. Also, make the queue auto-flush when items are added, rather than needing to be flushed as a separate step. This simplifies the code and make it more efficient too, as it avoids needing to read the queue out of the state to check if it should be flushed.
* fix one more test failure with v6 unlocked file merge conflict resolutionGravatar Joey Hess2016-01-08
|
* better fix for slash in view metadataGravatar Joey Hess2016-01-08
| | | | | | | | | The homomorphs are back, just encoded such that it doesn't crash in LANG=C However, I noticed a bug in the old escaping; [pseudoSlash] was escaped the same as ['/','/']. Fixed by using '%' to escape pseudoSlash. Which requires doubling '%' to escape it, but that's already done in the escaping of worktree filenames in a view, so is probably ok.
* view: Avoid using cute unicode homomorphs for '/' and '\' and instead use ↵Gravatar Joey Hess2016-01-08
| | | | ugly escaping, as the unicode method doesn't work on non-unicode supporting systems.
* avoid confusing git with a modified ctime in clean filterGravatar Joey Hess2016-01-07
| | | | | | | Linking the file to the tmp dir was not necessary in the clean filter, and it caused the ctime to change, which caused git to think the file was changed. This caused git status to get slow as it kept re-cleaning unchanged files.
* migrate and rekey v6 unlocked file supportGravatar Joey Hess2016-01-07
|
* migrate: Copy over metadata to new key.Gravatar Joey Hess2016-01-07
|
* use TopFilePath for associated filesGravatar Joey Hess2016-01-05
| | | | | | | | | | | | | | | Fixes several bugs with updates of pointer files. When eg, running git annex drop --from localremote it was updating the pointer file in the local repository, not the remote. Also, fixes drop ../foo when run in a subdir, and probably lots of other problems. Test suite drops from ~30 to 11 failures now. TopFilePath is used to force thinking about what the filepath is relative to. The data stored in the sqlite db is still just a plain string, and TopFilePath is a newtype, so there's no overhead involved in using it in DataBase.Keys.
* scan for unlocked files on init/upgrade of v6 repoGravatar Joey Hess2016-01-01
|
* convert isPointerFile from Annex to IOGravatar Joey Hess2016-01-01
|
* fix failing git-annex unused test case in v6Gravatar Joey Hess2015-12-30
| | | | | | | | | | | | | WorkTree.lookupFile was finding a key for a file that's deleted from the work tree, which is different than the v5 behavior (though perhaps the same as the direct mode behavior). Fix by checking that the work tree file exists before catting its key. Hopefully this won't slow down much, probably the catKey is much more expensive. I can't see any way to optimise this, except perhaps to make Command.Unused check if work tree files exist before/after calling lookupFile. But, it seems better to make lookupFile really only find keys for worktree files; that's what it's intended to do.
* flush queue before cleaning cruftGravatar Joey Hess2015-12-29
| | | | | | | | | | | Else, queued file stages won't have reached the index, and it won't find everthing. This evidently fixes a reversion in my work today, although I don't see how I broke it. It didn't use to flush the queue first, before, and worked somehow. Test suite for v5 is back to 100% green now.
* test suite noticed a direct mode reversionGravatar Joey Hess2015-12-29
|
* renameGravatar Joey Hess2015-12-29
|
* don't disable smudge filter while mergingGravatar Joey Hess2015-12-29
| | | | | | | | | | | The smudge filter does need to be run, because if the key is in the local annex already (due to renaming, or a copy of a file added, or a new file added and its content has already arrived), git merge smudges the file and this should provide its content. This does probably mean that in merge conflict resolution, git smudges the existing file, re-copying all its content to it, and then the file is deleted. So, not efficient.
* avoid renaming file when auto-resolving conflict in annex pointerGravatar Joey Hess2015-12-29
| | | | | | | | | | This is a behavior change for merge conflicts between locked files that both pointed to the same key, in different ways. Before, the conflict was resolved, but the file was renamed to .variant. This was unnecessary, because there was only one variant. Of course, this also handles conflicts between unlocked and locked, or even two unlocked files with different pointer contents.
* fix inode cache consistency bug when a merge unlocks a present fileGravatar Joey Hess2015-12-29
| | | | | | | | Since the file was present and locked, its annex object was not in the inode cache. So, despite not needing to update the annex object when the clean filter is run on the content by git merge, it does need to record the inode cache of the annex object. Otherwise, the annex object will be assumed to be bad, since its inode is not cached.
* automatic conflict resolution for v6 unlocked filesGravatar Joey Hess2015-12-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several tricky parts: * When the conflict is just between the same key being locked and unlocked, the unlocked version wins, and the file is not renamed in this case. * Need to update associated file map when conflict resolution renames an unlocked file. * git merge runs the smudge filter on the conflicting file, and actually overwrites the file with the same content it had before, and so invalidates its inode cache. This makes it difficult to know when it's safe to remove such files as conflict cruft, without going so far as to compare their entire contents. Dealt with this by preventing the smudge filter from populating the file when a merge is run. However, that also prevents the smudge filter being run for non-conflicting files, so eg moving a file won't put its new content into place. * Ideally, if a merge or a merge conflict resolution renames an unlocked file, the file in the work tree can just be moved, rather than copying the content to a new worktree file. This is attempted to be done in merge conflict resolution, but due to git merge's behavior of running smudge filters, what actually seems to happen is the old worktree file with the content is deleted and rewritten as a pointer file, so doesn't get reused. So, this is probably not as efficient as it optimally could be. If that becomes a problem, could look into running the merge in a separate worktree and updating the real worktree more efficiently, similarly to the direct mode merge. However, the direct mode merge had a lot of bugs, and I'd rather not use that more error-prone method unless really needed.