summaryrefslogtreecommitdiff
path: root/Annex
Commit message (Collapse)AuthorAge
* make clear when code is using deprecated direct mode filesGravatar Joey Hess2015-12-09
|
* reorderGravatar Joey Hess2015-12-09
|
* use InodeCache when dropping a key to see if a pointer file can be safely resetGravatar Joey Hess2015-12-09
| | | | | | | | | | | | | | | | The Keys database can hold multiple inode caches for a given key. One for the annex object, and one for each pointer file, which may not be hard linked to it. Inode caches for a key are recorded when its content is added to the annex, but only if it has known pointer files. This is to avoid the overhead of maintaining the database when not needed. When the smudge filter outputs a file's content, the inode cache is not updated, because git's smudge interface doesn't let us write the file. So, dropping will fall back to doing an expensive verification then. Ideally, git's interface would be improved, and then the inode cache could be updated then too.
* add inode cache to the dbGravatar Joey Hess2015-12-09
| | | | | | | | | Renamed the db to keys, since it is various info about a Keys. Dropping a key will update its pointer files, as long as their content can be verified to be unmodified. This falls back to checksum verification, but I want it to use an InodeCache of the key, for speed. But, I have not made anything populate that cache yet.
* move InodeSentinal from direct mode code to its own moduleGravatar Joey Hess2015-12-09
| | | | | Will be used outside of direct mode for v6 unlocked files, and is already used outside of direct mode when adding files to annex.
* link/copy pointer files to object content when it's addedGravatar Joey Hess2015-12-09
|
* avoid pre-commit hook messing up new-style unlocked files in v6 repoGravatar Joey Hess2015-12-09
|
* refactor and improve pointer file handling codeGravatar Joey Hess2015-12-09
|
* require "annex/objects/" before key in pointer filesGravatar Joey Hess2015-12-07
| | | | | | | | | | | | | | This removes ambiguity, because while someone might have "WORM--foo" in a file that's not intended to be a git-annex pointer file, "annex/objects/WORM--foo" is less likely. Also, ee0c34c8f2f94775b39ef10ed580cab47d2f929c had a caveat about symlink targets being parsed as pointer files, and now the same parser is used for both. I did not include any hash directories before the key in the pointer file, as they're not needed. However, if they were included, the parser would still work ok.
* support pointer filesGravatar Joey Hess2015-12-07
| | | | | | | | | | | | | | | | | | | | | Backend.lookupFile is changed to always fall back to catKey when operating on a file that's not a symlink. catKey is changed to understand pointer files, as well as annex symlinks. Before, catKey needed a file mode witness, to be sure it was looking at a symlink. That was complicated stuff. Now, it doesn't actually care if a file in git is a symlink or not; in either case asking git for the content of the file will get the pointer to the key. This does mean that git-annex will treat a link foo -> WORM--bar as a git-annex file, and also treats a regular file containing annex/objects/WORM--bar as a git-annex file. Calling catKey could make git-annex commands need to do more work than before. This would especially be the case if a repo contained many regular files, and only a few annexed files, as now git-annex will need to ask git about the contents of the regular files.
* Merge branch 'master' into smudgeGravatar Joey Hess2015-12-07
|\
| * fix temp filenameGravatar Joey Hess2015-12-06
| | | | | | | | | | | | | | Was not putting it inside the temp dir, but next to it! This was just wrong, and it led to a longer filename that desired being used, leading to some bug reports.
| * avoid too long temp dir templateGravatar Joey Hess2015-12-06
| | | | | | | | | | The filename might be at or close to the filename length limit, so using it as the template for the temp dir would then fail.
* | don't let git-annex direct be run in a v6 repoGravatar Joey Hess2015-12-04
| |
* | add v6; keep v5 working for now and manual upgradeGravatar Joey Hess2015-12-04
| | | | | | | | | | | | | | | | | | | | | | | | Since all places where a repo is used in direct mode need to have git-annex upgraded before the repo can safely be converted to v6, the upgrade needs to be manual for now. I suppose that at some point I'll want to drop all the direct mode support code. At that point, will stop supporting v5, and will need to auto-upgrade any remaining v5 repos. If possible, I'd like to carry the direct mode support for say, a year or so, to give people plenty of time to upgrade and avoid disruption.
* | auto-configure filter.annex.smudge and clean on initGravatar Joey Hess2015-12-04
| |
* | avoid unnecessary reading of git-annex branch data when matching on ↵Gravatar Joey Hess2015-12-04
| | | | | | | | | | | | | | annex.largefiles This makes git annex clean not look at the git-annex branch at all, and so speeds it up by 50% or more.
* | clean filter should update location log when adding new content to annexGravatar Joey Hess2015-12-04
| |
* | basic clean filter workingGravatar Joey Hess2015-12-04
|/
* annex object file mode for core.sharedRepositoryGravatar Joey Hess2015-11-18
| | | | | | When core.sharedRepository is set, annex object files are not made mode 444, since that prevents a user other than the file owner from locking them. Instead, a mode such as 664 is used in this case.
* avoid spawning file size polling thread when not in -J modeGravatar Joey Hess2015-11-16
|
* Display progress meter in -J mode when downloading from the web.Gravatar Joey Hess2015-11-16
| | | | | Including in addurl, and get --from web, but also in S3 and External special remotes when a web url is known for content in those remotes.
* add missing checkSaneLock wrapper for pidlocksGravatar Joey Hess2015-11-16
|
* init: Automatically enable annex.pidlock when necessary.Gravatar Joey Hess2015-11-13
|
* convert from Utility.LockPool to Annex.LockPool everywhereGravatar Joey Hess2015-11-12
|
* pid locking configuration and abstraction layer for git-annexGravatar Joey Hess2015-11-12
| | | | (not actually used anywhere yet)
* assistant: Pass ssh-options through 3 more git pull/push calls that were ↵Gravatar Joey Hess2015-11-10
| | | | | | | missed before. It was used for regular pull, but not for regular push, tagged push, or the fallback fetching.
* add: Fix error recovery rollback to not move the injested file content out ↵Gravatar Joey Hess2015-11-06
| | | | | | of the annex back to the file, because other files may point to that same content. Instead, copy the injected file content out to recover. That was not a data loss, but it came close!
* fix replaceFile makeAnnexLink raceGravatar Joey Hess2015-11-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | replaceFile created a temp file, which was guaranteed to not overlap with another temp file. However, makeAnnexLink then deleted that file, in preparation for making the symlink in its place. This caused a race, since some other replaceFile could create a temp file, using the same name! I was able to reproduce the race easily running git-annex add -J10 in a directory with 100 files (all with different contents). Some files would get ingested into the annex, but their annex links would fail to be added. There could be other situations where this same problem could occur. Perhaps when the assistant is adding a file, if the user manually also ran git-annex add. Perhaps in cases not involving adding a file. The new replaceFile makes a temprary directory, which is guaranteed to be unique, and doesn't make a temp file in there. makeAnnexLink can thus create the symlink without problem and the race is avoided. Audited all calls to replaceFile to make sure that the old behavior of providing an empty temp file was not relied on. The general problem of asking for a temp file and deleting it as part of the process of using it could reach beyond replaceFile. Did some quick audits and didn't find other cases of it. Probably only symlink creation stuff would tend to make that mistake, mostly.
* merge git command queue when joining with concurrent threadGravatar Joey Hess2015-11-05
|
* add regions to concurrent outputGravatar Joey Hess2015-11-04
| | | | still no progress displays when getting files etc, but a big improvement
* enableremote: List uuids and descriptions of remotes that can be enabled, ↵Gravatar Joey Hess2015-10-26
| | | | and accept either the uuid or the description in leu if the name.
* Avoid displaying network transport warning when a ssh remote does not yet ↵Gravatar Joey Hess2015-10-15
| | | | | | | | | | | have an annex.uuid set. Instead, only display transport error if the configlist output doesn't include an annex.uuid line, even an empty one. A recent change made git-annex init try to get all the remote uuids, and so the transport error would be displayed by it. It was also displayed when eg, copying files to a remote that had no uuid yet.
* do tmp dir cleanup in error case tooGravatar Joey Hess2015-10-15
|
* avoid making post-merge-conflict-resolution commit when no conflicts were ↵Gravatar Joey Hess2015-10-15
| | | | | | | | | | resolved sync, merge, assistant: When git merge failed for a reason other than a conflicted merge, such as a crippled filesystem not allowing particular characters in filenames, git-annex would make a merge commit that could omit such files or otherwise be bad. Fixed by aborting the whole merge process when git merge fails for any reason other than a merge conflict.
* Changed drop ordering when using git annex sync --content or the assistant, ↵Gravatar Joey Hess2015-10-14
| | | | to drop from remotes first and from the local repo last. This works better with the behavior changes to drop in many cases.
* fix windows buildGravatar Joey Hess2015-10-12
|
* Avoid unncessary write to the location log when a file is unlocked and then ↵Gravatar Joey Hess2015-10-12
| | | | | | | | | | | | | | | added back with unchanged content. Implemented with no additional overhead of compares etc. This is safe to do for presence logs because of their locality of change; a given repo's presence logs are only ever changed in that repo, or in a repo that has just been actively changing the content of that repo. So, we don't need to worry about a split-brain situation where there'd be disagreement about the location of a key in a repo. And so, it's ok to not update the timestamp when that's the only change that would be made due to logging presence info.
* use action, not sideActionGravatar Joey Hess2015-10-11
| | | | | | | | sideAction is for things not generally related to the current action being performed. And, it adds a newline after the side action. This was not the right thing to use for stuff like "checksum", where doing a checksum is part of the git annex get process, and indeed we want it to display "(checksum...) ok"
* implement lockContent for ssh remotesGravatar Joey Hess2015-10-09
|
* also generate a drop safety proof for move --from remoteGravatar Joey Hess2015-10-09
|
* fix local dropping to not require extra locking of copies, but only that the ↵Gravatar Joey Hess2015-10-09
| | | | local copy be locked for removal
* improve message when drop failed due to no locked copyGravatar Joey Hess2015-10-09
|
* rename constructorGravatar Joey Hess2015-10-09
|
* verify local copy of content with lockingGravatar Joey Hess2015-10-09
|
* content locking during drop working for local git remotesGravatar Joey Hess2015-10-09
| | | | Only ssh remotes lack locking now
* finish and use lockContent interfaceGravatar Joey Hess2015-10-09
|
* improve drop proof codeGravatar Joey Hess2015-10-09
|
* refactorGravatar Joey Hess2015-10-09
|
* TrustedCopy is good enough to allow droppingGravatar Joey Hess2015-10-08
| | | | | | | By definition, a trusted repository is trusted to always have its location tracking log accurate. Thus, it should never be in a position where content is being dropped from it concurrently, as that would result in the location tracking log not being accurate.